Hallo Wissende,
Ich versuche seit einigen Stunden, den ADS1118 ans Laufen zu bekommen
und so richtig will es nicht.
Ich habe im Anhang ein Screenshot vom Logic Analyzer, der verrät, dass
der ADS den Befehl nicht zu akzeptieren scheint (bei der
32Bit-Übertragung werden am Ende nicht die gesendeten Config-Bytes
übertragen.
Ich wäre sehr dankbar darüber, wenn sich jemand meinem Problem widmen
würde.
Der ADS soll ebenfalls mit einem Typ-K Sensor verwendet werden und der
ansteuernde µC ist ein ATMEGA8A, der mit nem Quarz auf 8MHz läuft.
Vielen Dank für eure Hilfe,
Daniel
Anwendungsbeispiel:
aus main.c:
Falsches "Not" in:
SPI_SS_PORT &= !(1<<SPI_SS_PIN);
Das muss ein "~" statt dem "!" sein. Klappt hier beim CS mehr oder
weniger zufällig, könnte Dir aber weitere Bits kaputt machen.
Du verwendest hier:
1
int16_tperform16BitMeasurement(int16_tvalueMsg)
recht viele vorzeichenbehaftete Integer. Bei denen ist das Shiften vom
Vorzeichenbit undefiniertes Verhalten in C. Besser uint16_t benutzen.
Hallo Jim,
Vielen Dank, dass du dich mit meinem Problem beschäftigst.
Jim M. schrieb:> Das muss ein "~" statt dem "!" sein.
ist ausgetauscht.
Jim M. schrieb:> int16_t perform16BitMeasurement(int16_t valueMsg)
und diese Funktion einfach als uint16_t implementiert.
Ich habe die Verbesserungen vorgenommen, leider kommen noch immer keine
vernünftigen Daten rüber. Einerseits wird das Konfigurationsregister
nicht korrekt wiedergegeben und andererseits ergeben die Spannungswerte
keinen Sinn..
Ich habe nun mehrere Male gecheckt, dass sowohl polarity als auch phase
stimmen, dass ich wie im Datenblatt beschrieben MSB first anwende und
jetzt habe ich noch eingebaut, dass zunächst auf das Zeichen des ADS1118
gewartet wird, dass eine neue Messung verfügbar ist. Es läuft dennoch
nicht. Auch habe ich bereits den Logic Analyzer sowohl über einen
Adapter angeschlossen, als auch direkt am ADS und es kommen auch überall
die gleichen Werte heraus. Daran lese ich ab, dass ich hinsichtlich des
Messens keinen Fehler durch den Adapter mache.. Ich bin ein bisschen
ratlos. Hast du sonstige Ideen bezüglich diagnostischer Möglichkeiten?
Grüße,
Daniel
Daniel schrieb:> Ich habe die Verbesserungen vorgenommen, leider kommen noch immer keine> vernünftigen Daten rüber.
Dann spring über deine Schatten und erfinde das Rad nicht neu
https://github.com/HydroSense/ADS1118
Wolfgang schrieb:> Dann spring über deine Schatten und erfinde das Rad nicht neu> https://github.com/HydroSense/ADS1118
Vielen Dank, Wolfgang. Die Sache ist, dass da mit Arduino Libraries
gearbeitet wird und ich die nicht mitschleppen möchte. Zudem ist es eine
Klassenstruktur. Ich arbeite mit C, nicht C++, daher ist das mit dem
Klassen umwurschteln so eine Sache.. Werde dennoch mal versuchen, was
für mich abzuleiten, guter Tipp!
Paul schrieb:> da fehlt was.> Kompiliert das so ohne Warnungen?
Danke Paul. Beim Kopieren in das Forum ist mir ein Fehler unterlaufen:
Der von mir verwendete Code an dieser Stelle ist:
aus main.c:
Daniel schrieb:> (bei der> 32Bit-Übertragung werden am Ende nicht die gesendeten Config-Bytes> übertragen.
Weden sie doch - bis auf das oberste Bit, welches immer als "0" gelesen
wird (Datenblatt Seite 25).
Fasse zusammen: Funktioniert genauswo wie dokumentiert.