Hallo zusammen,
ich versuche mich derzeit zum ersten mal am I2C Bus. Mein Vorhaben ist, dass ich den digitalen 10 Bit Akkuwert aus dem RP6 bzw. aus dem Atmel auf der Hauptplatine auslesen möchte. Ich habe auf einer Erweiterungsplatine einen PIC18F2550 mit 8Mhz Keramik Resonator, welcher mit SDL(RB0) und SDC(RB1) am I2C Bus des RP6 hängt (Die Pins sind als Eingang geschaltet). In den RP6 habe ich das Beispielprogramm RP6Base_I2CSlave.hex geladen.
Durch das Handbuch des RP6 und meinen sonstigen Kenntnissen über den I2C Bus habe ich mir das Vorhaben folgendermaßen (vereinfacht dargestellt) vorgestellt:
- Vom Master (PIC) zum Slave (AVR) sende ich die Adresse des Slave (dez.: 10)
Hier die Zeile zur Slave Adresse aus der RP6Base_I2CSlave.c Datei:
Code:
// The Slave Address on the I2C Bus can be specified here:
#define RP6BASE_I2C_SLAVE_ADR 10
- Vom Master zum Slave sende ich ein String: I2C_REG_ADC_UBAT_L
- Vom Slave lese ich nun den Low-Wert ein
- Das selbe nochmal mit dem High-Wert
Hinweis: Ich programmiere meinen PIC in C mit dem C18 Compiler und verwende die Librarie i2c.h
Das Problem: Meine beiden Variablen (AKKUL und AKKUH) bleiben leer.
Hier ist mein Codeausschnitt:
Code:
//I2C
IdleI2C(); //Warten bis der IIC Bus frei ist
StartI2C(); //I2C Bus starten
WriteI2C(10); //Adresse des ATMEL senden
IdleI2C(); //Warten bis der IIC Bus frei ist
StartI2C(); //I2C Bus starten
putsI2C("I2C_REG_ADC_UBAT_L"); //Befehl zum Auslesen der Akku Variablen senden
AKKUL=ReadI2C();
StopI2C(); //I2C Bus stoppen
IdleI2C(); //Warten bis der IIC Bus frei ist
StartI2C(); //I2C Bus starten
WriteI2C(10); //Adresse des ATMEL senden
IdleI2C(); //Warten bis der IIC Bus frei ist
StartI2C(); //I2C Bus starten
putsI2C("I2C_REG_ADC_UBAT_H"); //Befehl zum Auslesen der Akku Variablen senden
AKKUH=ReadI2C();
StopI2C(); //I2C Bus stoppen
Ich würde mich sehr über Eure Hilfe freuen..
Mit freundlichen Grüßen
Nico
Lesezeichen