Forum: Mikrocontroller und Digitale Elektronik TWI Prescaler (TWPS)


von Bertolt Mildner (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Bertolt Mildner (Gast)


Lesenswert?

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