Hallo darwin.
Ich habe zwar eigentlich keine praktische Erfahrung mit der RS-485 Spezifikation, aber ich habe schon öfter Multiporzessornetze über den UART
des Controllers aufgebaut.
Die Prinzipien müssten eigentlich gleich sein.
Der Pegelwandler alleine sollte schon reichen. RS-485 beschreibt ja ebenso wie RS-232 nur die elektrischen Eigenschaften des Bus.
Die werden dir von dem IC zur Verfügung gestellt.
Bei der Zweidrahttechnik mußt du darauf achten das wirklich nur ein Sender im Bus aktiv ist.
Darum würde ich dir raten doch nur einen Controller als Master zu betreiben. Auch wenn es prinzipiell möglich wäre ein Multimasternetz aufzaubauen.
Das sollte den nötigen Softwareaufwand erheblich reduzieren.
Wie das genau mit einem AVR zu realisieren ist kann ich dir leider nicht sagen. Hab noch nie damit gearbeitet.
Ich benutze 8051 Controller.
Bei diesen gibt es einen Multiprozessor-Modus für den UART (9-Bit Datenübertragung und ein Bit um den Empfang für Daten zu sperren). Ich denke das die AVRs sowas auch haben.
Bei der Übertragung werden Daten und Adressen durch das neunte Bit unterschieden. Ist es eins handelt es sich um eine Adresse, bei null sind es Daten.
Um eine funktionsfähige Kommunikation zustande zu bringen sperren alle Slaves den Datenempfang. Wird etwas empfangen ist das dann eine Adresse. Diese muß dann auf jedem Slave-Controller ausgewertet werden.
Stimmt sie mit der Adresse eines Slaves überein gibt er den Datenempfang frei.
Zum beenden der Übertragung gibt es mehrere Möglichkeiten:
>Man sendet ein deffiniertes Stop-Zeichen.
>Man sendet und empfängt immer nur eine festgelegte Menge an Bytes.
>Man sendet eine neue Adresse. -> Hier muß aber der Slave bei jedem Empfang prüfen ob es sich um eine Adresse oder Daten handelt. Und das Beenden der Übertragung in Richtung Master muß auf eine der oben beschriebenen Arten erfolgen.
Das lässt sich mit ein paar zeilen Code realisieren (Wenn man keine Fehlerprüfung einbaut). Der Softwareaufwan hält sich also in Grenzen.
Der Hardwareaufwand beschränkt sich auf das Treiber-IC.
Ich hoffe das ich dir damit etwas weiterhelfen konnte.
Sandro
Lesezeichen