Hallo, ich möchte gerne einige AVRs über eine gewisse Entfernung miteinander kommunizieren lassen und suche ein simples Bussystem um dies zu realisieren. SPI wäre für diesen Zweck eigentlich schon ganz gut geeignet, jedoch das Problem ist, dass es schon über grössere Entfernungen (bis ca. 40m) gehen soll. Da bei SPI die Signale teilweise auf den selben Leitungen in beide Richtungen gehen, scheiden irgendwelche Transceiver (z.B. MAX232 usw.) aus. Ich habe auch schon an CAN gedacht, aber das wäre wohl für meine Zwecke schon ein ziemlicher Overkill. Es wäre nett, wenn ihr mir vielleicht ein paar Ideen geben könntet, wie ich sowas am besten realisieren kann. Also es soll nicht zu aufwendig sein und einen einfachen Datentransfer zwischen einem Master und einigen Slaves in beide Richtungen über die oben genannte Entfernung ermöglichen. Und das über möglichst wenig Leitungsadern. Vielen Dank schon mal Gruss, Peter
Einfachste Möglichkeit ist RS485. Schnell, billig und große Reichweiten. Sinnvollerweise sollte man aber einen der neuen Megas einsetzten. Mit den neuen USART's geht das besser weil die einen Multiprozessor Mode kennen. Hoffe geholfen zu haben
Hallo Markus, RS485 ist aber kein Bussystem. Das hilft mir leider keinen Millimeter weiter.
Hi Peter, natürlich ist RS485 ein Bussystem. CAN ist von der Hardware fast identisch. Nur das CAN einen unheimlichen Protokolloverhead hat. Bei RS485 kannst Du Dein eigenes Protokoll implementieren. Außerdem brauchst Du für CAN spezielle Treiber IC's, für RS485 kannst Du statt eines MAX232 einfach einen MAX485 verwenden. Laut Spezifikation kann man an einen Standart RS485 Bus bis zu 32 Geräte hängen, bei manchen Treiberbausteinen auch mehr. Das ist aber nur abhängig von der Kapazität und der Belastung des Busses durch dir Treiber. Ich habe schon mal einen einfachen Bus mit 3 Controllern aufgebaut, leider noch mit den alten AVR. Musste desshalb jedes Byte mithören, aber es ging. Also wenn Du nicht gerade 100 Devices an den Bus hängen willst ist das denke ich die optimale Lösung.
Hallo Markus, ich war bislang der Annahme, RS485 ist im Prinzip das selbe wie RS232, nur mit bipolarer Übertragung auf 2 gegenphasigen Leitungen pro Richtung wegen der Leitungslänge bzw. der Störungsunempfindlichkeit. Aber dass das ein Bussystem sein soll, ist mir neu. Hast Du mal ein Beispiel in Form eines Schaltplans hier irgendwo im Internet? Danke! Gruss, Peter
also ich kenne jetzt nur schaltpläne die bei dem pascal compiler von e-lab dabei sind. ich werd mal einen auf meine HP hochladen und hier verlinken.
Hallo Markus, vielen Dank! Das hilft mir nun schon ein gutes Stück weiter. Und mal wieder etwas dazugelernt! Also nun muss ich nur noch eine geeignete Software dazu stricken. Wenn ich das richtig sehe, sind die Slaves sozusagen nur lesend am Bus und dürfen nur dann etwas mitteilen, wenn der Chef es erlaubt. Ich wühle mal etwas im Netz herum, vielleicht finden sich ja sogar Code-Beispiele in C, wie man so etwas dann am geschicktesten steuert. Also, nochmals vielen Dank an Dich, ich werde Dich dafür auch in mein Nachtgebet einschliessen ;-) Gruss, Peter
Hallo Markus, noch eine letzte Frage, benutzt Du zur Kommunikation den UART des MC oder wird das alles Softwaremässig gemacht? Danke für die Auskunft! Gruss, Peter
Hi Peter, danke für das nachtgebet :) Also zur Kommunikation solltest Du sogar den UART einsetzen. Ich würde Dir sogar dringend raten einen der neuen ATmegas zu verwenden. Nur die haben den sog. USART und nur der beherscht den Multi Prozessor Mode. Es geht zwar auch ohne, aber dann mußt du wie gesagt jedes Byte durch die Software analysieren lassen. Kurze Erklärung: Im Multi Prozessor Mode werden die Daten nucht mit 8 sondern mit 9 Bit versendet. Ist das neunte Bit gesetzt handelt es sich um eine Adresse, ansonsten um Daten. Der USART (der neue) ist jetzt so intelligent das er erst mal nur einen IRQ auslöst wenn ein Byte mit gesetztem neunten Bit reinkommt, den Rest ignoriert er. Kommt ein Adressbyte kann die Software schauen ob der Controller gemeint war. Wenn ja schaltet die Software den USART um und jedes empfangene Byte wird empfangen. So, hoffe die Infos reichen.
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.