www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI Prescaler (TWPS)


Autor: Bertolt Mildner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bertolt Mildner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.