I2C mit MSP430FR5739 ACK wird nicht gesetzt

OP #2593588
Hallo alle zusammen,

Ich bin im Moment dabei einen MSP430FR5739 zu programmieren. Dieser soll 
über I2C Werte von einem Temperatursensor (DS1631) einlesen. Dazu sende 
ich ihm zunächst die Konfigurationsdaten (12 Bit Result + Single convert 
mode) anschließend den Befehl die Temperatur einzulesen.

Um zu überprüfen ob die Wandlung abgeschlossen ist lese ich das 
Statusbyte des DS1631 wieder ein und überprüfe das DONE Bit.
Ist Die Wandlung abgeschlossen will ich die Temperatur auslesen.

Jetzt ist allerdings das Problem, dass ich nach dem ersten einlesen des 
Statusbytes die anfrage mit einem NACK quittiere, was dazu führt, dass 
bei den nächsten Einlesevorgängen Nur noch die Adresse, aber nicht mehr 
der erforderliche Befehl gesendet wird.

Wie kann ich an stelle des NACK mit einem ACK quittieren?


Datasheet DS1631: http://datasheets.maxim-ic.com/en/ds/DS1631-DS1731.pdf
Datasheet MSP430FR5739: http://www.ti.com/lit/ug/slau272/slau272.pdf
im Anhang mein Code + Mitschnitt des I2C Bus
Angehängte Dateien:
OP #2594530
Vielen Dank für die Antwort,

aber dann verstehe ich nicht warum der Controller nach dem ersten mal 
Einlesen , bei der erneuten Anfrage den Befehl auf das Controll-Register 
zuzureifen nicht sendet, sondern nur die Adresse sendet. Habe ich bei 
der Parametrierung der I2C Schnittstelle etwas falsch gemacht?
#2594551
Ist doch ok so
ER soll doch lesen nicht schreiben. Dazu wird nur die Adresse gesendet 
und danach in den Lesemodus umgeschaltet. Das einstellen welches 
Register du auslesen möchtest machst du doch vorher indem du ein Byte 
(Konfigurationsbyte) rüberschreibst.
OP #2594980
Ja richtig, das zweite init_iic(); ist nicht notwendig, das was ein 
Überbleibsel von einem Test. Hat aber keine Auswirkung auf das 
Verhalten.

Einen Interrupt der bei einem ACK ausgelöst wird gibt es nicht, ich kann 
lediglich auf ein NACK einen Interrupt auslösen.
Doch in diesem Fall ist es ja kein NACK welches vom Sensor kommt, 
sondern eines, das mein Controller setzt.

Ja ich möchte lesen, jedoch muss ich ihm ja angeben, was ich lesen 
möchte, also sende ich ihm zunächst 0xAC was bedeutet, dass das 
Configurationsbyte ausgelesen werden soll.
Dies wäre theoretisch nur einmal notwendig, da er dieses Byte ja 
mehrfach auslesen soll.

Spätestens jedoch beim auslesen der Temperatur, muss ich angeben dass 
ich diese auslesen will. D.h. zunächst muss ich 0xAA (Read_Temperature) 
senden und anschließend den Wert einlesen. Doch da dies nicht gesendet 
wird bekomme ich beim einlesen der Temperatur den wert des 
Controllregisters zurück.


Ich bin mir auch nicht sicher ob es überhaupt mit zusammen hängt, ich 
dachte es nur, weil bei meinem ersten send-Befehl mein Comand ja noch 
gesendet wurde und nachdem ich eingelesen habe (also nach dem ersten 
NACK) nicht mehr.
OP #2595865
Richtig, genau das versuche ich, beim ersten mal sendet er das 
Kommando-Byte noch, nach dem ersten mal Einlesen dann nicht mehr. Daher 
habe ich gedacht, könnte es vielleicht an dem NACK liegen, das der µC 
beim vorhergegangenen Einlesen gesendet hat. Wenn das NACK aber wie Jörg 
sagt in Ordnung ist weiß ich auch nicht mehr woran es liegen könnte.
#3337409
Ist zwar schon ein Jahr her aber ich antworte trotzdem mal.

In der iic_init fehlt noch die aktivierung der RX-Interrupts
1
UCB0IE |= UCTXIE0 + UCRXIE0 + UCNACKIE;

Dann werden auch mehrere Bytes als nur eines gelesen und das NACK kommt 
auch an der richtigen stelle.

MfG Rush

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.