PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwindigkeit I²C und RS485



Tido
22.11.2009, 20:56
Hallo,

welches Bussystem ist bei Übertragung zwischen zwei ATmega schneller, ein 100KHz-I²C-Bus oder ein RS485-Bus mit MAX485?
Ich frage deshalb, weil ein "Print Byte" ja relativ lange braucht bzw. das Programm recht "lange" an der Stelle "hängt".
Ich muss ca. 10 Byte in beide Richtungen übertragen, momentan läuft das mit I²C recht schlecht, da sich beim PWM-Betrieb von zwei Motoren (Leitungen kreuzen sich, leider nicht zu vermeiden) das Programm beim warten auf TWINT häufig aufhängt und neu gestartet werden muss.
Deshalb ziehe ich den EInsatz von RS485 in Erwägung.

Ich hoffe, mir kann jemand helfen?!

Vitis
23.11.2009, 14:38
hmmm ja ... also ... 485 und I2C sind im prinzi Hardwarebeschreibungen
von Bussen, also wie die HArdware aussehen soll.
Bei I2C halt zweidrätig seriell synchron, bei 485 2 / 4-drätig differentiell asynchron.
Der wesentlilche Unterschied ist das bei I2C nur eine Datenleitung zur Verfügung steht plus die Taktleitung, bei 485 eben beides Datenleitungen sind im Gegentakt, dafür aber kein Takt.
Bei I2C kann man sich, da synchron, so Geschichten wie Startbit, Stopbit, Parität schenken, dafür ist die halt störanfälliger auf Einstreuungen.
Bei I2C ist auch kein Duplexbetrieb vorgesehen, bei 485 auf 4 Drähten schon.
Wenn Du die ideal standard Funktionen von Bascom verwendest wirst Du
bei beidem annähernd gleich schnell sein in der Übertragung und im
Programmablauf an der Stelle stehen bleiben, leider. Das lässt sich aber
umgehen, indem Du interruptbasierend programmierst und eben bei
Interrupt Zeichen versendet (txc) ein neues Zeichen nachschiebst.
Das geht in Bascom recht elegant über die Buffered - Funktion (config serial out wenn ich mich recht erinnere). Dann passiert folgendes:
Es wir ein Zeichen in die UART (UDR-Register) geschrieben, und das Programm läuft weiter. Ist das Zeichen oder Byte draußen wird ein Interrupt ausgelöst, in dem das nächste Zeichen in den Ausgangspuffer geschrieben wird und weiter im PRogrammablauf. Das wiederholt sich eben bis das letzte Byte raus ist.

Tendenziell ist für längere und "verseuchte" Strecken 485 besser geeignet als I2C, das eigentlich nur für Datenverkehr auf der Platine gedacht war.