- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: twi: wo ist das datenbyte?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2006
    Beiträge
    559

    twi: wo ist das datenbyte?

    Ich hab ein Problem mit dem Hardware-TWI bei einem Mega32.
    ich will von einem I2C Slave Daten empfangen, das versuche ich wie
    folgt:


    - START senden //TWCR: (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
    - warten bis START gesendet wurde (warten bis TWINT gesetzt ist)
    - überprüfen ob erfolgreich (TWSR auslesen)

    - Slave-Adresse mit Read Bit senden: 0b00111011 (Die Slave Adresse ist
    0011101) //TWCR: (1<<TWINT) | (1<<TWEA) | (1<<TWEN)
    - warten bis die Slave-Adresse gesendet wurde (warten bis TWINT gesetzt
    ist)
    - überprüfen ob erfolgreich (TWSR auslesen)

    aber wie gehts hier nun weiter?
    am Ende kommt natürlich noch das STOP-Signal, aber wo ist das Datenbyte
    das ich empfangen will?
    In TWDR ist immernoch die gesendete Slave-Adresse.
    Muss ich noch irgendwas senden um letzendlich das Datenbyte zu bekommen?

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Guckst du da, sollte dir eigentlich helfen:
    https://www.roboternetz.de/wissen/index.php/TWI_Praxis
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2006
    Beiträge
    559
    die Seite hab ich schon gesehen, ich mach das im Prinzip genauso wies da steht, aber es funktioniert trotzdem nicht.

    Hier ein Diagramm aus dem Datenblatt des Slave-Bausteins (LIS3LV02DQ) den ich ansprechen will:
    Bild hier  

    ST - Start
    SR - Repeated Start
    SAK - Slave Acknowledge
    NMAK - Not Master Acknowledge
    SAD+W - Slave-Adresse mit Write-Bit
    SAD+R - Slave-Adresse mit Write-Bit
    SUB - Die Adresse des Registers dass man von dem Baustein auslesen möchte
    bis zu der mit dem roten Pfeil markierten Stelle komme ich ohne Probleme, ich bekom auch immer ein NACK vom Slave zurück.

    Ich hab dann also die Slave Adresse mit Read-Bit gesendet und hab ein NACK darauf zurückbekommen, an dem Punkt ist der rote Pfeil.
    Anschließen versteh ich aber nicht was genau ich machen muss um die Daten zu lesen, die ja noch kommen sollen.
    Direkt wieder warten bis TWINT gesetzt wird bringt ja nichts, das ist sofort der Fall, da es noch wegen dem Slave-Adressen-Versand gesetzt ist.
    Ich hab versucht einfach 0x00 o.ä. auf den Bus zu schreiben und dann zu warten bis TWINT gesetzt ist, aber das passiert nie.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    wie hier schon mal gesagt:
    http://www.mikrocontroller.net/topic/87025
    Du musst nach dem sich der Slave gemeldet hat nochmal das TWINT auf 1 setzen ohne sonst was zu tun (ausser warten bis es wieder auf 1 ist), damit das erste Byte kommt !

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2006
    Beiträge
    559
    das hab ich versucht. Das Problem ist, dass das TWINT wenn ich das mach danach nicht mehr gesetzt wird und somit das Programm hängen bleibt.
    In dem mikrocontroller.net Thread steht, dass ich ACKs statt NACKs zurückbekommen müsste.
    Stimmt das? und wenn ja, was sind mögliche Ursachen für NACKs?

    EDIT:
    hier mal der Schaltplan, falls da der Fehler versteckt ist:
    Bild hier  
    An den beiden ICs ist natürlich noch mehr dran, VCC hab ich nur mit
    eingezeichnet, damit man erkennt, dass das eine ein 5V und das andere
    ein 3,3V Gerät ist.

    Wenn sich da kein Fehler finden lässt, post ich mal meinen Code (den
    muss ich erst so umschreiben, dass man den einigermaßen lesen kann)

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2006
    Beiträge
    559
    Jetzt tuts, in dem mikrocontroller.net haben die den Fehler gefunden.
    Vielen Dank für die Hilfe!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    47
    Beiträge
    685
    Was war es denn jetzt? Will nicht dumm sterben
    MfG Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

Berechtigungen

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

LiTime Speicher und Akkus