- 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 Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    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

  2. #2
    Hi,
    ich habe nun mal folgendes ausprobiert: Start, SDA-low, Warteschleife >1s, SDA-high, Warteschleife >1s, normaler Ablauf

    Hat aber nicht geholfen (um sicher zu stellen, dass das I2C Slave Programm läuft. Ich werde jetzt mal das I2C Slave Programm mit setLED Befehlen ausstatten, wie du gesagt hast mal sehen ob das Prog auf der Base überhaupt läuft.

    Zu den Pins: Ich verwende ja eine fertige Librarie, ich meine, dass der Port Pin einfach zwischen Ausgang (=low) und Eingang (hochohmig=high) wechselt.

    Gruß Nico
    Geändert von PIC-Nico (28.08.2011 um 11:01 Uhr) Grund: Ausversehen 2x SDA-high geschrieben

  3. #3
    Nur Probleme --> Compilieren im PN2 funktioniert nicht. Ich habe die WinAVR Umgebung runter geladen (also sind die Befehle schon drin MAKE ALL und MAKE CLEAN). Dann habe ich einfach ein Beispielprojekt geöffnet aber er will einfach nicht:

    > "make.exe" all
    "make.exe": Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)

    > Process Exit Code: 255
    > Time Taken: 00:01

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Welche WinAVR Version (aktuellste)? Welches Betriebssystem?

  5. #5
    Okay, man darf bei der Installation den Installations-Ordner nicht ändern --> wtf?


    Edit: Also das I2C Slave Programm arbeitet.
    Geändert von PIC-Nico (28.08.2011 um 12:10 Uhr)

  6. #6
    Habe gerade gelesen, dass die Adresse wohl nicht 10 sondern 5 ist: http://www.arexx.com/forum/viewtopic.php?f=19&t=1466

    ^^ nochmal ran an den Speck

  7. #7

    Beitrag

    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

Ähnliche Themen

  1. Daten über RS232 in Atmel schreiben
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 31.10.2006, 07:18
  2. ATMEL über USB programmieren
    Von Ringelkrat im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 17.02.2006, 20: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, 12:44
  4. Atmel 8535 Serielle Schnittstelle auslesen und auf Display
    Von gueddel im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 25.04.2005, 07:47
  5. Suche ein gutes buch über Atmel µC
    Von Sauginius im Forum Buchempfehlungen
    Antworten: 7
    Letzter Beitrag: 02.08.2004, 15:16

Stichworte

Berechtigungen

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

Labornetzteil AliExpress