Guten Morgen zusammen,
ich habe jetzt die Beispielprogramm der Version 20080510 herunter geladen, da in der Version 20080915 scheinbar ein Fehler in der Slave Adressierung steckt (Die Slave Adresse ist wohl durch einen "Fehler" nicht dez. 10 sondern dez. 5, was aber verboten ist, da die Adresse nur in den oberen 7 Bit stehen darf). Naja wie auch immer. Mit der älteren Version kann ich den AVR jetzt jedenfalls ohne Probleme ansprechen. Allerdings tut sich das nächste Problem auf. Hier mal kurzgefasst wie die Kommunikation i.M. aussieht:
Code:
-> Adressierung 0x0A
<- ACK
-> Senden 16h
-> Adressierung 0x0B
<- ACK
<- Empfange FFh
-> ACK
Problem: Ich empfange immer FFh. Egal ob ich das 21. Register oder das 22. auslese Hat evtl. schon einmal jemand das Problem gehabt oder kann eine Aussage treffen warum ich nur "Mist" empfange?
Mein aktueller Code (Ausschnitt):
Code:
IdleI2C();
StartI2C(); //Start I2C
Data = SSPBUF; //
do
{
Status = WriteI2C(ADR|0x00); //Adresse senden bis die..
if(Status == -1) //Bus Kollision?
{
Data = SSPBUF; //
SSPCON1bits.WCOL=0; //Bus Kollisions Bit löschen
}
}
while(Status!=0); //..Übertragung erfolgreich war
WriteI2C(22); //Dezimal: 22 Schreiben
WriteI2C(ADR|0x01); //Adresse senden (+1)
AKKUH=ReadI2C(); //Lesen und Ergebnis in AKKUH
IdleI2C(); //Ist der Bus verfügbar?
AckI2C(); //Sende Acknowledge
IdleI2C(); //Ist der Bus verfügbar?
CloseI2C(); //I2C beenden
Viele Grüße
Nico
Lesezeichen