Also so ganz hab ich den Sinn des TWI Prescalers (TWPS) meines ATMega32 noch nicht verstanden ... Ich wüsste nicht wann ein Prescaler > 1 sinn machen würden (ausser villeicht wenn man den TWI Takt auf deutlich unter 100kHz drücken möchte?). Kann mich bitte wer erleuchten!? BTW: ich frag mich gerade ob ich nicht wieder auf eine Software I2C Master Implementierung (in ASM) zurückgehe, immerhin ist die knapp kleiner als meine ersten Versuche das Hardware TWI in C zu benutzen :-( Bertolt
Endlich mal einer, der das auch merkt: Wenn es nur ein Single-Master sein soll, ist die Software-I2C eindeutig zuverlässiger, portabler und kleiner im Code. Du must ja bei einer I2C-Hardware teilweise sehr umständlich sämtliche möglichen Zustände behandeln: Wenn z.B. durch einen Störimpuls die I2C-Hardware in den Zustand "arbitration lost, addressed as slave" kommt und Du hast dafür aber keine Behandlung vorgesehen, dann wartet Dein I2C als Slave auf Daten und hängt für ewig bzw. bis zum nächsten Reset. Beim Software-I2C dagegen, hast Du bei Busfehlern immer die Möglichkeit, spätestens nach dem 9. Takt ein Stop zu erzwingen und weiter gehts. Selbst Craig Steiner vom 8051-Forum ist von Software-I2C begeistert: http://www.8052.com/forum/read.phtml?id=29155&top= Peter
@Peter: Irgendwie ist das ganze schon a bisserl traurig, aber offenbar kein Atmel spezifisches Problem ... :-(( Ich bin übrigens nach wie vor etwas verwirrt was die berechnung der TWI Bitrate betrifft! Wie muss ich TWBR und TWPS wählen um auf 400kHz bei 16Mhz MCU Takt zu kommen?? z.B.: TWBR = 10 TWPS = 0 MCU_CLK = 16000000 16000000 / (16 + 2 10 4^1) = ~ 166667 ==> rund 167kHz nicht greader schnell!? TWBR soll man lt. Datenblatt nicht unter 10 stellen. Ein höherer Prescaler macht das ganze auch nicht schneller ... Wo ist mein Denkfehler?? Arg ... hab greader herausgefunden wo er ist :-) SCL frequency CPU Clock frequency SCL frequency = --------------------------------- 16 + 2(TWBR) * 4^TWPS Ich hab immer den Prescaler als TWPS eigesetzt und nicht den Wert der in TWPS steht, also 1, 4, 16 bzw. 64 statt 0, 1, 3 bzw. 4 ... 16000000 / (16 + 2 12 4^0) = 400000 ==> 400kHz
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.