Hallo zusammen
Ich versuche mich gerade das erste mal an I2C, bin allerdings sehr
verwirrt, da auch die Example Codes nicht zu funktionieren scheinen.
Ich nutze derzeit das easyPIC7 Dev. Board und die dazugehörige IDE
mikroC PRO V6.4.0.
Es sind auch Beispielprogramme enthalten, nun folgendes Problem.
Hier der Ausschnitt des Codes, den es betrifft (1 zu 1 aus Example
übernommen):
1 | I2C1_Init(100000); // initialize I2C communication
|
2 | I2C1_Start(); // issue I2C start signal
|
3 | I2C1_Wr(0xA2); // send byte via I2C (device address + W)
|
4 | I2C1_Wr(0x2); // send byte (address of EEPROM location)
|
5 | I2C1_Wr(0xAA); // send data (data to be written)
|
6 | I2C1_Stop(); // issue I2C stop signal
|
Soweit ist ja alles auch in Ordnung. Bis ich mir die Datenübertragung
auf einem Oszilloskop ansehe. Da wird nämlich das erste Byte korrekt
versendet, die zwei weiteren lassen dann aber irgendwie auf sich warten.
Es ist gut zu erkennen, wie das erste Byte korrekt übertragen wird, die
zwei weiteren allerdings auf sich warten lassen. Lediglich ein
zweifacher Wechsel von Low -> High -> Low -> High ist zu erkennen. Die
Dauer der Zustände entspricht jeweils einem Bit.
Entferne ich nun aber das versenden der zwei letzten Bytes, sprich
wechsle den Code zu:
1 | I2C1_Init(100000); // initialize I2C communication
|
2 | I2C1_Start(); // issue I2C start signal
|
3 | I2C1_Wr(0xA2); // send byte via I2C (device address + W)
|
4 | I2C1_Stop(); // issue I2C stop signal
|
Dann wird nach wie vor das erste Byte korrekt übertragen. Der
Pegelwechsel welchen ich Zuvor noch hatte ist nun aber weg.
Leider kenne ich mich mit I2C nicht gut aus und finde auch nirgends im
Internet eine wirklich gute Beschreibung dafür.
- Kann mir jemand bei dem Problem weiterhelfen?
- Kennt jemand vielleicht eine andere/bessere I2C Lib?
- Wäre es sinnvoll, einfach ein Soft I2C zu programmieren?
Vielen dank für eure Hilfe!
(Sorry dass keine Bilder im Anhang mit dran sind, mein KO erkennt den
USB Stick heute irgendwie nicht. Vielleicht die funktion defekt, keine
Ahnung..