Forum: Mikrocontroller und Digitale Elektronik ATmega16L mit 8Mhz nicht schnell genug für I²C fast-mode?


von Martin F. (martin_f23)


Lesenswert?

Hallo,

mich quält gerade eine Rechnung, die mit laut Datenblatt scheinbar den 
fast-mode nicht zulässt. (einen ähnlichen Fall gab es hier im Forum 
2005, der aber nie aufgelöst wurde, was die Rechnung angeht)
Nach der Formel SCL = CPU/(16+2TWBR*4^TWPS) auf Seite 176 des ATmega16 
Datenblattes:

Funktionierender Fall: Meine CPU wird mit 8MHz getaktet. Der Bustakt ist 
100kHz (standard mode)
1
100 kHz = {8,0 MHz} / { 16 + 2 * TWBR * 4^TWPS }
2
100 kHz * (16 + 2 * TWBR * 4^TWPS) = 8000 kHz
3
16 + 2 * TWBR * 4^TWPS = 80
4
2 * TWBR * 4^TWPS = 64
5
4^TWPS = 64 / (2*TWBR)
6
TWBR = 32 / 4^TWPS
Nun soll laut Datenblatt TWBR >= 10 sein, wenn meine CPU Master ist.
1
10 <= 32 / 4^TWPS
2
4^TWPS <= 16/5
3
TWPS <= log_4(16/5)
4
TWPS <= 0,84
=> TWPS = 0

Nicht-funktionierender Fall: Meine CPU wird mit 8MHz getaktet. Der 
Bustakt ist 400kHz (fast mode)
1
400 kHz = {8,0 MHz} / { 16 + 2 * TWBR * 4^TWPS }
2
400 kHz * (16 + 2 * TWBR * 4^TWPS) = 8000 kHz
3
16 + 2 * TWBR * 4^TWPS = 20
4
2 * TWBR * 4^TWPS = 4
5
4^TWPS = 4 / (2*TWBR)
6
4^TWPS = 2 / TWBR
7
TWPS = log_4(2/TWBR)
8
TWPS <= log_4(2/10)   //oder Werte >10 für TWBR, das macht's aber nur schlimmer ;-)

Logarithmus einer Zahl kleiner 1 wird negativ. Negative Werte für TWPS 
gibt es nicht. Wo ist der Fehler?
Oder kann der ATmega16L das tatsächlich nicht? (Laut Datenblatt reicht 
allerdings die 16-fache Taktfrequenz des I²C-Busses als Takt für die 
CPU. Das wären 6,4Mhz, ich habe 8Mhz.)


PS: log_4(x) is Logarithmus von x zur Basis 4

von Lattice User (Gast)


Lesenswert?

Martin F. schrieb:
> Nun soll laut Datenblatt TWBR >= 10 sein, wenn meine CPU Master ist.

Wo im Datenblatt steht das?
Zumindestens im aktuellen (07/10) finde ich es nirgends.

von Martin F. (martin_f23)


Angehängte Dateien:

Lesenswert?

Direkt unter der o.g. Formel (bei mir S.176) im Abschnitt "Two-Wire 
Serial Interface". (s. angehängter Screenshot)
Hmm, meines ist 10/03, ich habe mal das 10/07 gesucht, dort fehlt die 
"Note" (nun S.178) tatsächlich, allerdings steht dort zwei Mal "Note:" 
hinterenander, nicht dass es verschluckt wurde(?)

von holger (Gast)


Lesenswert?

>Nun soll laut Datenblatt TWBR >= 10 sein, wenn meine CPU Master ist.

Mit TWBR = 10 und TWPS = 0 kommst du auf maximal 222222Hz bei 8MHz.

Mit TWBR = 2 und TWPS = 0 kommst du auf 400000Hz bei 8MHz.

Hör auf mit deiner Rechnerei und mach dir ne Tabelle für
Werte die TWBR und TWPS auch wirklich annehmen können.

von Martin F. (martin_f23)


Lesenswert?

Das ist richtig, aber das ändert erstmal nichts daran, dass mein 
Datenblatt sagt: TWBR<10 ist tunlichst nicht zu verwenden. Nur weil ich 
nicht rechne, sondern sage "so müsste es sein", "darf" ich es (nach dem 
Stand des Datenblattes) trotzdem nicht.
Fragt sich nur, warum dieser Abschnitt rausgefallen ist. Ich weiß nicht, 
wie alt mein µC ist und ob da ggf. etwas in Hardware geändert wurde, 
damit das Problem in neueren Revisionen vielleicht nicht mehr auftritt 
o.ä.?

von Lattice User (Gast)


Lesenswert?

Laut History im 2466T-07/10 wurde es hier geändert:

Rev. 2466L-06/05 1. Updated note in “Bit Rate Generator Unit” on page 
178.

Das ist immerhin 7 Jahre und 9 Revisionen her.

von holger (Gast)


Lesenswert?

>Das ist richtig, aber das ändert erstmal nichts daran, dass mein
>Datenblatt sagt: TWBR<10 ist tunlichst nicht zu verwenden.

Mein Gott, dann probier es doch einfach aus.
Entweder es geht oder es geht nicht. Wenn es nicht geht
dann musst du mit TWBR = 10 leben.

Was du nicht kannst ist eine SCL Frequenz für TWBR = 10
vorzugeben. Das geht einfach nicht. Für TWBR = 10
gibt es nur vier Möglichkeiten für SCL:

TWPS = 0        222222Hz
TWPS = 1         83333Hz
TWPS = 2         23809Hz
TWPS = 3          6172Hz

Mehr geht nicht. Deine Logarithmen kannst du dir sonst wo hin stecken.

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.