Forum: Mikrocontroller und Digitale Elektronik AVR-Netzwerk mit RS-485


von A. Arndt (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei, ein Bus-System mit RS-485 aufzubauen, habe dabei 
die Chip SN75176BP im Visir, die sind klein und preiswert.

Ich stelle mir. dass ich z.B. mehrere Relais und Mosfet-Gruppen habe, 
die mittel 8pol. AVR angesprochen werden. Nur mit dem Protokoll haut 
noch nicht so hin, die Hardware kann ich ja dem Datenblatt entnehmen.

Ich müsste ja jedem Chip eine Adresse zuweisen, bei der er sich 
angesprochen fühlt, zudem muss auch noch einen UART-Interupt aktivieren.

Ich habe nur bedenken, das die Slaves sich mit Daten und Adresse in 
Gehege kommen, nutze Single-Master-Betrieb.

Oder kann ich auch Buchstabenketten über UART und RS-485 senden, z.B. 
Relaischip1 u.ä.

Hat zufällig jemand Erfahrungen auf diesem Gebiet ?

Spitze wäre natürlich BASCOM oder FASTAVR...

Gruss
A. Arndt

von Steffen (Gast)


Lesenswert?

Hallo,

wichtig ist, das keine Antwort evtl. so aussehen kann wie ein Befehl vom 
Master. Ich sende daher immer als erstes oder zweites Byte die Adresse 
des SLave. Die Antwort des Slave ist genauso aufgebaut und damit fühlt 
sich keiner der anderen Slave-Controller angesprochen.
Die Controlleradressen spe4ichere ich je nach Anwendung im EEPROM oder 
stelle diese per DIP-Schalter (wird bei 8-pol. wohl nichts) ein.

MfG
Steffen

von thomasb (Gast)


Lesenswert?

@Steffen:

Hallo Steffen,

Tolle Idee. Ich stehe nämlich vor einem ähnlichen Problem. Ich muß 3 
Controller auf einen Bus hängen - im Master-Slave Betrieb. Sehe ich das 
richtig, daß dein Master auf eine Antwort des Slaves wartet, bevor er 
den nächsten abfragt - ansonsten könnten die Slaves ja gleichzeitig 
senden ...?

Vielleicht kannst du den Kommunikationsablauf etwas genauer beschreiben 
bzw. einen Code Snip (natürlich nur zum Selbsstudium - abschreiben 
bringt ja nichts) posten?

Ich will bei meinem Projekt drei AVR's in meinem Wohnmobil vernetzen - 
die kümmern sich dann um alles (Licht, Pumpe, Temperatur, Alarmanlage, 
...)

danke,
Thomas

@A. Arnt:

Hi,

ich werde für mein Projekt den MAX485 verwenden. Da habe ich zwei 
(allerdings SMD) als Sample bekommen :-).

Gruß,
Thomas

von Steffen (Gast)


Lesenswert?

Hallo Thomas,

richtig, der Master muss auf die Antwort des Slave warten, sonst gibt es 
irgendwann ein Kollision auf dem Bus. Mein Protokoll sieht ungefähr so 
aus:

Master
Datensatzlänge, Slave Adresse, Befehlskennung,(Daten), Checksumme

Antwort vom Slave
Datensatzlänge, Adresse, Daten, Checksumme

Die Datensatzlänge werte ich aus um das Ende der Datenübertragung ohne 
Timout zu erkennen. Der MC prüft einfach ob die Anzahl der empfangene 
Byte gleich dem ersten empfangenen Byte ist. Wenn ja, dann signalisiert 
die ISR das dem Hauptprogramm über ein entsprechendes Flag und der 
Datensatz (Befehl) wird ausgewertet und dann eine Antwort gesendet.

Werden nicht genug Byte empfangen, dann wird der Empfang über einen 
Timout beendet. In diesem Fall antwortet der Slave auch nicht, da es 
wahrscheinlich eine Störung war.

Der Code wird euch nichts bringen, da ich mit der PIC-Serie arbeite.

Eine andere ellegannte Variante ist, als erstes Byte die Adresse mit 
einer 1 als 9. Bit und alle andern Bytes mit einer 0 im 9. Bit zu 
übertragen sofern der MC das unterstützt. Ein Interupt wird dann nur 
ausgelöst, wenn eine Adresse gesendet wird. Das ist vor allem dann 
sinnvoll, wenn viele Daten übertragen werden müssen. Die Kommunikation 
könnte dann folgendermaßen aussehen:

Master:
Adressiere (selektiere) Slave 0x03 für Kommunikation

Slave:
bestätige Selektion

Datenaustausch Master <--> Slave (ohne Adresse)
:
:
Datenaustausch Master <--> Slave (ohne Adresse)

Master:
Deaktiviere Slave Adresse 0x03

.... ud dann weiter zum nächsten Controller.

Die Variante mit dem Adress-Detect hatt den Vorteil, das nur der 
adressierte Controller die Daten auf dem Bus "mitschreiben" muss. Die 
anderen Controller können derweil ihre eigentliche Hauptaufgabe 
erledigen.

MfG
Steffen

von Michael (Gast)


Lesenswert?

Versuchs doch mal mit dem DMX1990 Protokoll
512CH je 8bit daten und wenn das zu wenig ist, gleich noch ne 2te
Busleitung aufbauen.
Es gibt soviele Selbstbauprojekte wie z.B. digitalentlightenment die
auch schon aktoren zeigen. Die Link seiten auf den Seiten sind manchmal
auch recht gut, da findet man dann noch weitere anwenungen.

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.