Forum: Mikrocontroller und Digitale Elektronik ATmega32u4 400kHz Two-Wire/I²C


von Budi (Gast)


Lesenswert?

Versuche grade den ATmega32u4 auf eine SCL Frequenz von 400kHz 
zubekommen, laut Datenblatt sei das möglich.

Die Formel zum berechnen:
1
                 CPU Clock frequency
2
SCL frequency =  -------------------
3
                  16+2(TWBR)*4^TWPS

Meine Initialisierung:
1
void TWIInit(void)
2
{
3
  //set SCL to 400kHz
4
  TWSR = 0x00;
5
  TWBR = 0x06;
6
  //enable TWI
7
  TWCR = (1<<TWEN);
8
}

TWPS bekommt man nicht auf 0, somit erhalte ich für einen TWBR-Wert von 
3 eine Frequenz von 400kHz, zumindest rechnerisch.

Leider sieht die Praxis anders aus, mit einem Logic-Analyzer messe ich 
eine Frequenz des SCL Taktes von 177-222kHz, stark schwankend.

Deswegen springt mir besonders diese Randnotiz im Datenblatt ins Auge:
"TWBR should be 10 or higher if the TWI operates in Master mode. If TWBR 
is lower than 10, the
Master may produce an incorrect output on SDA and SCL for the reminder 
of the byte. "

Was kann ich tun um die im Datenblatt beschriebenen 400kHz zu erhalten?

Mein ATmega32u4 ist auf einem Arduino Pro Micro (Nachbau?) verbaut, aber 
der Arduino Bootloader ist nicht drauf. Programme werden Über AtmelFlip 
hochgeladen. Externe Quarz hat 16MHz.

von Budi (Gast)


Lesenswert?

soll natürlich eine 0x03 statt 0x06 sein, war noch vom Testen...

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.