Hallo! Habe gestern mal zusammen mit einem Freund die Datenübertragung per SPI zwischen zwei ATmega16 ausprobiert. Dazu haben wir zwei STK500 zusammengeschalten mit kurzen Leitungen dazwischen (10cm, ungeschirmt, verdrillt). Beide Controller waren auf 3,69MHz eingestellt. Die Übertragenen Zeichen haben wir auf ein Display ausgegeben. Bei Einstellung der Master-Clock-Rate auf fosc/16 klappte die Übertragung nicht einwandfrei. Es wurden immer wieder Zeichen verschluckt. Erst bei einem Teiler von fosc/64 klappte die Übertragung einwandfrei. Ich hab jetzt schon länger im www gesucht, aber keine Werte gefunden, wie hoch die maximale Bitrate ungefähr sein darf. Kann mir dazu jemand Erfahrungswerte geben?? In unserem Fall wäre sie ja nur 3,69MHz/64, macht ungefähr 57 Kbit/s. Oder hab ich nen Denkfehler?? Gruß fizlaus
Was ist denn das für ein Display ? Warscheinlich ist es zu lahm und Du benutzt keinen Empfangspuffer für das SPI. Du must einen Empfangspuffer für die maximale Bytezahl anlegen, der dann im SPI-Interrupt vollgepumpt wird. Und SPI-Slave-Transmitter geht ganz ganz schlecht, da kein Sendepuffer, d.h. Datenverluste sind quasi vorprogrammiert, wenn nicht elendlange Wartezeiten zwischen den Bytes eingelegt werden oder ein Handshake gemacht wird. I2C ist da wesentlich sicherer, da der Slave den Master einfach warten lassen kann, bis er fertig ist (SCL-Stretching). Peter
Hallo Peter, danke für Deinen Beitrag. An den Puffer haben wir nicht gedacht. Genau das war das Problem.
Hi Normalerweise kann der SPI-Takt f/2 beim Master und f/4 beim Slave betragen. Ich denke deine Datenverluste liegen nicht bei der Übertragung sondern in der Weiterverarbeitung der empfangenen Daten. ansonsten ,siehe oben.
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.