Okay, das hat nicht geklappt, ich bekomme immer noch nur 2kHz mit meinem
Atmel328@1Mhz.
Das Problem ist wohl in der Wire library und dort die einzige Stelle die
ich gefunden habe ist in zwei Funktionen der twi.c. Ich weiß das der
Prescaler wohl auf 1 steht und TWBR so definiert ist:
1 | void twi_init(void)
|
2 | ...
|
3 | TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
|
4 | ...
|
5 |
|
6 | void twi_setFrequency(uint32_t frequency)
|
7 | ...
|
8 | TWBR = ((F_CPU / frequency) - 16) / 2;
|
Wenn F_CPU 1Mhz ist würde da theoretisch eine negative Zahl
rauskommen...
Ich habe versucht beide zuweisungen von TWBR mit
zu ersetzen, das hat aber eigenartigerweise überhaupt keinen Einfluss.
Immer noch 2kHz, und wenn ich in meinem Sketch TWBR mit
1 | Serial.println("TWBR= " + String(TWBR,BIN) + " = " + String(TWBR));
|
ausgebe bekomme ich immer
Dann habe ich weiter vorne in der Adafruit_SSD1306.cpp gesucht und
brutalo nach jeder "wire->begin..." Anweisung mein "TWBR = 1" eingefügt
und TADA ich hatte meine 55kHz und bei "TWBR = 0" sogar um die 65kHz und
mein Display refreshd jetzt wieder erträglich. Ich weiß das TWBR < 10
außerhalb der Empfehlung liegt aber es geht :)
Eigenartigerweise zeigt er mir die Ausgabe des Registers immer noch
diese ominöse 253 an. Ich habe absolut keinen Plan wo die herkommt und
warum das ändern der twi.c überhaupt keinen Einfluss hat...