What is the best communication mechanism with collision detection/avoidance for my topology?

Hello All, Here is my sensor topology..

_____________ _____________ | | | | Tx |------------|--------->| Rx | | | | | | |ATMEGA128 | | | ATMEGA8 | | | | | | | Rx |------------|------|-->| Tx | |____________| | | |____________| | | | | _____________ | | | | | |---------->| Rx | | | | | | | | ATMEGA8 | | | | | |------|---------->| Tx | | | |____________| | | | | _______________ | | | | | |---------->| Rx | | | | | | | |ATMEGA8 | | | | | |------|---------->| Tx | | | |______________| | | | | | | _______________ | | | | | |---------->| Rx | | | | | |ATMEGA8 | | | | |----------------->| Tx | |______________|

Here, the atmega128 is the main controller and all other atmega8 are connected to the main controller using rs485 cable.

What is the best communication protocol for this to detect and avoid collision.?

I have 20 atmega8 connected in a row..(i.e all the tx pins of atmega8 are connected together and finally connected to the Rx of the main controller) and distance between the any atmega8 or atmega128 is 3 meters....

Reply to
obulesu.t
Loading thread data ...

Hello All, Here is my sensor topology..

_____________ _____________ | | | | Tx |------------|--------->| Rx | | | | | | |ATMEGA128 | | | ATMEGA8 | | | | | | | Rx |------------|------|-->| Tx | |____________| | | |____________| | | | | _____________ | | | | | |---------->| Rx | | | | | | | | ATMEGA8 | | | | | |------|---------->| Tx | | | |____________| | | | | _______________ | | | | | |---------->| Rx | | | | | | | |ATMEGA8 | | | | | |------|---------->| Tx | | | |______________| | | | | | | _______________ | | | | | |---------->| Rx | | | | | |ATMEGA8 | | | | |----------------->| Tx | |______________|

Here, the atmega128 is the main controller and all other atmega8 are connected to the main controller using rs485 cable.

What is the best communication protocol for this to detect and avoid collision.?

I have 20 atmega8 connected in a row..(i.e all the tx pins of atmega8 are connected together and finally connected to the Rx of the main controller) and distance between the any atmega8 or atmega128 is 3 meters....

Reply to
T Obulesu

"Best" is dependent on your requirements. Start with a simple approach that's easy to understand and implement: Have the master poll all the slaves in a loop. If that has issues you find unacceptable, perhaps load on the master, latency on the polls, power consumption due to excessive polls (especially if the actual data rate is very low), then consider other schemes, all of which will be considerably more complex.

There's no real possibility in your scheme for collision detection, since the slaves cannot talk to each other, so they couldn't even pass a token around, so a non-polled scheme would have to depend on the detection of failed transmissions. A sufficiently robust packet structure and check sum would allow the master to discard any garbled transmissions, and a lack of an ack could cause a slave to retransmit after a timeout and a random delay.

If the data rates are really low, you could consider a slotted approach, where each slave has a slot where it's free to transmit. That would require synchronized clocks (or a clock distributed in some way, that *could* be a periodic transmission from the master - and then enough clock synchronization so that all the slaves can stay in their slots), and that messages are limited to those that fit into the slot.

Reply to
Robert Wessel

Il 03/12/2017 08:06, T Obulesu ha scritto:

Do you use only a "rs485 cable" (and I don't know what it is) or do you have RS485 transceivers? Because connecting more TX lines together isn't a good thing.

It isn't the same topology, (it is related to a more common two-wires RS485 bus)... recently I encountered the uLan[1] project. It seems interesting.

I couldn't understand the collision detection/avoidance mechanism.

[1]
formatting link
Reply to
pozz

Il giorno domenica 3 dicembre 2017 08:06:56 UTC+1, T Obulesu ha scritto:

If yyou don't need something very fast or realtime, a master-slave protocol (for example modbus) is easy to implement and you don't have collision.

Bye Jack

Reply to
Jack

Am 03.12.2017 um 08:06 schrieb T Obulesu:

[...]

That topology, as shown, it broken. You've connected your master Tx to one slave Rx, but also several slave Tx'es. And vice versa. I'll assume you really meant

+------------+ +------------+ | Tx |>------------------*---->| Rx | | | | | | |ATMEGA128 | | | ATMEGA8 | | | | | | | Rx |
Reply to
Hans-Bernhard Bröker

This corrected form is essentially 4 wire RS-485 style communication, in which all Rxs are always active, the master Tx is always active, but one slave Tx only is active, all others are in three state.

Or use a "master" token, passing token from one master to the next master when the first has done its job.

Was 3 m the total network size or the distance between each node ? In the first case, even open collector TTL could be used, but the power should be delivered from the master in the same cable. There should be no ground connections at the slaves to avoid TTL ground potential problems.

To save in wiring, use a similar topology as 2 wire RS-485. Just add an NPN transistor at each Tx pin in the network, connect collectors together and a common pull-up to +5 V. Connect each Rx pin to the collector of the corresponding collector (i.e. the low end of the pull-up resistor.

Make sure you have a echo-cancel routine to avoid hearing your own transmissions. It is also a good idea to use a protocol, in which the request and response messages are different so tat the inactive slaves know, if there is a master request or a reply from an other slave on the line.

Reply to
upsidedown

Old and venerable...

formatting link
All the info you need ;-) Best Regards, Dave

Reply to
Dave Nadler

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.