PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Bus Geschwindigkeit verringern



jok3r
31.03.2014, 16:19
Ich würde gerne den I2C Bus ein bisschen runter schrauben.

Kann mir wer erklären wie ich das mache ?
Ich habs mal versucht.... aber anscheinend ist das nicht alles .

Wire.begin();
Wire.begin();
TWBR =((16000/1000L)-16)/2;


oder mit
#ifndef TWI_FREQ
#define TWI_FREQ 1000L
#endif


Irgendwie wird er dadurch nicht langsamer .
Gruß

Valen
01.04.2014, 01:23
Dein TWBR Formel stimmt auch nicht denke ich. Dein Arduino CPU Takt ist doch nicht 1600 Hz oder?

Wie langsam möchtest du ihn haben denn?


Das folgende habe ich in dem datei Arduino\libraries\Wire\utility\twi.c gefunden unter den Funktion void twi_init(void)

(Zeile 79) Das ist jedenfalls die Standard-einstellung.



...
// initialize twi prescaler and bit rate
cbi(TWSR, TWPS0);
cbi(TWSR, TWPS1);
TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;

/* twi bit rate formula from atmega128 manual pg 204
SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
note: TWBR should be 10 or higher for master mode
It is 72 for a 16mhz Wiring board with 100kHz TWI */

...


[EDIT] Naturlich nicht vergessen das Datenblatt fur dein Arduino CPU ein zu lesen in Sache der I2C/TWI.

[EDIT 2] Hier ist ein Arduino link mit tiefere Information wie es den TWI/I2C stelle betreibt.

http://playground.arduino.cc/Main/WireLibraryDetailedReference#.UzoDOD62GvR

jok3r
01.04.2014, 16:43
Das sollte natürlich 16.000 bedeuten und nicht 1.600:cool: Anscheinend passt dann doch alles. Hab leider kein Oszi zur hand . Gruß

Valen
01.04.2014, 17:02
Das sollte natürlich 16.000 bedeuten und nicht 1.600:cool: Anscheinend passt dann doch alles. Hab leider kein Oszi zur hand . GrußStimmt, ich hatte 16000 scheiben mussen. Es war spät.