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:

  1. 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
  2. Vom Master zum Slave sende ich ein String: I2C_REG_ADC_UBAT_L
  3. Vom Slave lese ich nun den Low-Wert ein
  4. 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