Forum: Mikrocontroller und Digitale Elektronik Rs 232 Adressierug, beispiel?


von Tobias (Gast)


Lesenswert?

Hallo

ich habe vor bis zu 5 Atmegas über einen bus-wandler (RS485) miteinander 
zu verbinden. die 5 atmegas sind reine empfänger und werden vom PC aus 
angesteuert.
Nun stehe ich da und frag mich wie man die verschiedenen Atmegas 
ansprechen kann. Das Protokoll würde so aussehen

Adresse, Länge, Daten, Checksumme

Nun frag ih mich wie man es mit der Adressierung am besten macht? 
Erstmal die ganzen Frame in einen puffer laden und dann die Adresse 
abfragen oder schon vorher beim empfang der bytes die adresse abfragen 
in der art
1
isr(UART_Rxc_vec){
2
3
if(received_Byte1 == Adresse_Atmega1)
4
{
5
  PortB = Byte2
6
  ....
7
} else ;
8
}

Über hilfreiche tipps wär ich sehr dankbar

grüsse

macht man das so oder gibt es bessere vorschläge

von Peter D. (peda)


Lesenswert?

Tobias schrieb:
> Adresse, Länge, Daten, Checksumme

Das ist nicht so der Brüller.
Ein Protokoll sollte sich nach Störungen wieder synchronisieren können.
Besser daher:

Startbyte, Länge, Adresse, Daten

Zur Synchronisation werden dann Dummybytes gesendet, die nicht das 
Startbyte enthalten, für die maximale Länge (max 8 Datenbytes reicht 
oftmals).

Man sollte einen Puffer anlegen, der mindestens 1,5 .. 2 Pakete fassen 
kann.
Ist ein Paket komplett, wird es ausgewertet oder verworfen, wenn falsche 
Adresse.


Peter

von Z8 (Gast)


Lesenswert?

... oder einfach

Startbyte, Adresse, Daten

Wert des Startbytes solle weder in Adresse oder Daten vorkommen!
zb. ASCII Übertragung, ohne eine Null in den Daten (kommt so wie
so nicht vor) und ohne Adresse = 0.

Z8

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.