Hallo zusammen,
ich versuche gerade einen MLX90393 Magnetsensor an einem XMega zu
betreiben und bin dabei auf ein Problem gestoßen.
Anscheinend kommt es öfters mal vor, dass der Sensor nach dem Schreiben
des zweiten Datenbytes bei einem Lesebefehl ein NACK sendet. Auf dem
Bild "Korrekt.png" ist die fehlerfreie Kommunikation zu sehen. Ich sende
erst die Adresse mit W-Bit, dann den Befehl "Read Register" und dann das
Register (in diesem Fall Register 0).
Hin und wieder kommt aber das Verhalten, das in dem Bild "Fehler.png"
gezeigt ist zum Vorschein, wodurch der nachfolgende Lesezugriff zum
Auslesen des Status-Bytes nicht mehr durchgeführt wird (entgegen dem
Bild wurde zu dem Zeitpunkt KEINE Stop-Kondition gesendet - das Bild ist
nach einer Anpassung des I2C entstanden).
Ich habe meine I2C-Funktionen nun bereits so abgeändert, dass ein Fehler
ausgegeben wird und eine Stop-Kondition gesendet wird um die
Kommunikation abzubrechen (siehe Bild "Fehler.png", wenn ich beim
Schreiben ein NACK bekomme. Falls dies der Fall ist, soll die gesendete
Nachricht, also der "Read Register"-Befehl erneut gesendet werden.
Hallo Daniel,
es ist schon lange her, als Du diesen Thread hier im Forum eröffnet
hast. Ich habe auch keine wirkliche Antwort auf Dein Problem. Bin aber
gerade auch dabei den Sensor MLX90393 mit BASCOM zu programmieren und da
kenne ich das Thema nicht. Ich hatte am Anfang auch Probleme mit NACK,
als ich aber nach der Kommando-Sequenz, vor dem Auslesen des Statusbyte
eine "Repeat Start Condition" eingebaut habe, waren die NACKS vorbei.
Interessanter Weise habe ich die NACKs auch im Logic Analyzer mit dem
originalen Adafruit Example auf dem Adafruit mit einem Adafruit Feather
M0 Expressboard gesehen.
Bei mir in BASCOM tauchen sie nicht mehr auf.
Ich habe aber eine andere Frage an Dich und vielleicht gibt es darauf ja
eine Antwort....
Gemäß neuestem Datenblatt von Melexis Januar 2020 benötigt der Sensor
IMMER am Ende einer Kommunikation ein vom Master ausgelöstes NACK. Das
wunder mich sehr. In der letzten Datasheet Version Rev3 von 2017 welche
ich hatte, da war das noch nicht. Kennst Du das Thema und kannst Du mir
etwas dazu sagen, warum der Sensor ein NACK benötigt.
Ich habe nämlich gerade ein Thema mit dem Reset Kommando, bei welchem
ich stabil immer 100% I2C Kommunikationsfehler bekomme .... Hier stimmt
etwas in meiner Implementierung mit der Start - ACK - Stop Bedingung
nicht.....
Grüße,
Markus