- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 15

Thema: Über I2C den Akkuwert aus dem Atmel auslesen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Über I2C den Akkuwert aus dem Atmel auslesen

    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

  2. #2
    Mittlerweile sieht meine Routine so aus (funktioniert allerdings immer noch nicht):

    Code:
            //I2C
            IdleI2C();
            StartI2C();                         //Start I2C
            WriteI2C(0x0A|0x00);                //Adresse senden (nächster Befehl schreibend)
            while(WriteI2C(0x15)!=0);           //Schreiben
            IdleI2C();                          //
            RestartI2C();                       //
    	IdleI2C();                          //
            WriteI2C(0x0A|0x01);                //Adresse senden (nächster Befehl lesend)
            getsI2C(Akku,2);                    //Lesen und Ergebnis in Akku
            Akku[2]='\0';                       //Abschluss '0'
            NotAckI2C();                        //Not acknowledge
            while( SSPCON2bits.ACKEN!=0);       //
            CloseI2C();                         //I2C beenden

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo PIC-Nico:

    Das I2C-Slave Programm erwartet an die Slave-Adresse 10 einfach die Registeradresse (I2C_REG_ADC_UBAT_L), also den Wert 21.
    Danach müßtest du 2 Bytes lesen.

    Gruß Dirk
    Gruß
    Dirk

  4. #4
    Hi Dirk,
    genau so habe ich es ja auch versucht (siehe mein 2. Post)- Kurzfassung:

    WriteI2C(0x0A|0x00); //Adresse senden (nächster Befehl schreibend daher: | 0x00)
    while(WriteI2C(0x15)!=0); //Schreiben (0x15 = dez.: 21)
    WriteI2C(0x0A|0x01); //Adresse senden (nächster Befehl lesend daher: | 0x01)
    getsI2C(Akku,2); //Lesen und Ergebnis in Akku (2x lesen)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ok,
    ich kenne den I2C-Slang, den du da nutzt, nicht wirklich,- man hätte aber darauf kommen können ...

    Was ich noch probieren würde:

    1. Das Idle und Restart zwischen Schreiben und Lesen evtl. mal probeweise rausnehmen.

    2. Wie liest du die Zahl weiter ein? Wenn ich das hier: Akku[2]='\0';
    ... lese, denke ich, dass du später einen String ausliest,- kann das sein?
    Du müßtest aber mit den 2 Bytes rechnen:
    ADC-Wert = Erster gelesener Wert + Zweiter gelesener Wert * 256
    Gruß
    Dirk

  6. #6
    Danke schon mal bis hier her.. Ich versuche es morgen weiter..

Ähnliche Themen

  1. Daten über RS232 in Atmel schreiben
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 31.10.2006, 08:18
  2. ATMEL über USB programmieren
    Von Ringelkrat im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 17.02.2006, 21:17
  3. RC Car Geschwindigkeit und Lenkwinkel auslesen mit Atmel
    Von guellehans im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 05.08.2005, 13:44
  4. Atmel 8535 Serielle Schnittstelle auslesen und auf Display
    Von gueddel im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 25.04.2005, 08:47
  5. Suche ein gutes buch über Atmel µC
    Von Sauginius im Forum Buchempfehlungen
    Antworten: 7
    Letzter Beitrag: 02.08.2004, 16:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress