- 3D-Druck Einstieg und Tipps         
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
    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

  2. #2
    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)

  3. #3
    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

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

  5. #5
    Aktueller Stand:

    Ich hatte in der Init des PICs einen Fehler: Beim Power on wurde fälschlicherweise ein Steuerbefehl (unbeabsichtigt) auf dem Bus ausgelöst und zwar indem ich zum Start die Port-Pins SDA und SDC als Ausgang definiert habe. Hier wurde kurzzeitig SCL und SDA zur selben Zeit auf Masse gezogen - das habe ich behoben. Mit dem Oszi konnte ich jetzt zumindest schon mal feststellen, dass die Adresse (0x0A bzw. dez.: 10) anscheinend richtig übertragen wird, siehe Anhang:

    Klicke auf die Grafik für eine größere Ansicht

Name:	I2C_Addr.png
Hits:	12
Größe:	7,2 KB
ID:	19810

    Ich werde weiter machen, melde mich mit Neuigkeiten.
    Gruß Nico
    Geändert von PIC-Nico (28.08.2011 um 09:30 Uhr)

  6. #6
    Der Slave schickt irgendwie kein ACK:

    Es wird korrekt die Adresse (0x0A) übertragen, mit dem 8.Bit die "0", sprich nachfolgender Befehl ist schreibend. Danach müsste der Slave doch die SDA Leitung auch LOW ziehen um das ACK zu signalisieren. Warum tut er das nicht?

    Klicke auf die Grafik für eine größere Ansicht

Name:	I2C_miss_ACK.png
Hits:	8
Größe:	8,7 KB
ID:	19811

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo,

    läuft das Slave Programm im AVR auch? Also hast Du es mit dem Start/Stop Taster gestartet? Geht auch indem man auf dem I2C Bus einmal die SDA Leitung für ein paar Millisekunden auf low schaltet (einmal start+stop generieren), dann etwas WARTEN weil da im Slave Programm am Anfang 500ms Pause drin sind. Das muss alles separat VOR der ersten Datenübertragung passieren.
    Mach sonst auch mal ein paar setLED Befehle in die einzelnen Funktionen im Slave Programm rein damit man sieht obs überhaupt läuft.


    auf dem Bus ausgelöst und zwar indem ich zum Start die Port-Pins SDA und SDC als Ausgang definiert habe.
    Du verwendest die Pins aber auch allgemein richtig, das müssen OPEN DRAIN Ausgänge sein, d.h. aktiv Low ist OK, aber aktiv High ist verboten für High müssen die Pins als Eingang konfiguriert werden - den Rest erledigen die externen Pullup Widerstände.
    (sonst ist Ausgang an Ausgang geschaltet und wenn einer High und einer Low ist wäre das schlecht... )


    MfG,
    SlyD

Ä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
  •  

12V Akku bauen