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
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
@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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.