TWI Prescaler (TWPS)

Gast #28982
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
#28983
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
Gast #28984
@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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.