ADS1115 auslesen Assembler

OP #8000675
Lesenswert?

Geschätztes Forum,

ein DS1115 (16bit ADC) möchte ich auslesen.

Komme mit dem Datenblatt nicht klar.

  1. TRANSMITTER_START (TWI Adesse 0x48)

  2. senden 0b00000000 (Conversion register)

  3. RECEIVER_START (TWI Adesse 0x48)

  4. MASTER_RECEIVER_BYTE

  5. Byte0 auslesen und anzeigen (Anzeige 0x7F)

  6. MASTER_RECEIVER_BYTE

  7. Byte1 auslesen und anzeigen (Anzeige 0xFF)

  8. MASTER_RECEIVER_BYTE

  9. Byte2 auslesen und anzeigen (Anzeige 0xFF)

  10. MASTER_RECEIVER__LAST_BYTE

  11. Byte3 auslesen und anzeigen (Anzeige 0xFF)

Der TWI-BUS scheint felerfrei zu funktionieren, doch es kommen keine ADC-Daten, was mache ich falsch ?

Danke

Bernhard

#8000697
Lesenswert?

Für ca. 10 Euro bekommt man einen Logic Analyzer. Es muss kein Oszi sein für den I²C Basis Kram. Tu dir heute schon den Gefallen für morgen und bestell einen. Unendlich nützlich auch für SPI, CAN, OneWire, adressierbare LED, UART etc.

Dann SIEHST du was passiert und musst es nicht mehr erahnen. Fällt unter Werkzeug. Einen Nagel schlägst du ja auch nicht mit der Hand ein.

https://www.amazon.de/Heevhas-Analyzer-Device-Mini-USB-Kabel-Testhaken/dp/B0D8Q886W9

#8000700
Lesenswert?

Bernhard S. schrieb:

Ist Deine Hardware korrekt aufgebaut? (I2C braucht Pullups an beiden Leitungen, manch einer vergisst die).

Der Slaves wird korrekt erkannt und antwortet auch, hab die internen Pullups verwendet, bei einer niedrigen Taktrate).

Falsch! Die internen Pull Ups liegen meist im ZWEISTELLIGEN kOhm Bereich! Mach da 2x 4k7 dran und teste nochmal!

: Bearbeitet durch User
OP #8000730
Lesenswert?

Nun sind 1k Widerstände an SCL und SDA,

das Anzeigeergebnis blieb vorerst gleich,

konnte aber mit einer wesentlich höheren Taktrate arbeiten

und plötzlich änderten sich die ausgelesenen Bytes.

Kann es sein, das mit einer relatv hohen Taktrate gearbeitet werde muss ?

Eine zu niedrige Taktrate ---> Fehler ???

(Firma: Schweigstill IT) Persönliche Seite #8000748
Lesenswert?

Bernhard S. schrieb:

Kann es sein, das mit einer relatv hohen Taktrate gearbeitet werde muss ?

Was hast DU bezüglich dieses Themas im Original-Datenblatt des Bausteins gelesen? Ich habe übrigens erst vor wenigen Tagen diesen Baustein verwendet und habe selbstverständlich auch das Datenblatt gelesen. Somit könnte ich diese Frage auch unmittelbar beantworten, aber damit würde ich ja nur belohnen, dass Leute wie Du zu faul sind, mal die Primärliteratur zu Rate zu ziehen.

Welche Kommandos hast Du ganz konkret für die Initialisierung des ADS1115 geschickt? Und woher hast Du diese konkreten Informationen?

#8000760
Lesenswert?

Bernhard S. schrieb:

Ich sende keinerlei Initialisierung, vielleicht ist das der Fehler ?

Wie gesagt:

Sebastian R. schrieb:

Hast du den Mux konfiguriert? Hast du die PGA-Stufe konfiguriert? Hast Single Shot oder Continous Mode ausgewählt?

Der ADC macht von allein einfach so keine Messungen, du musst vorher einiges einstellen. Was hat dich zur Annahme verleitet, eine Initialisierung sei nicht notwendig?!

: Bearbeitet durch User
#8000841
Lesenswert?

Paul B. schrieb:

Es muss kein Oszi sein für den I²C Basis Kram.

Naja, um zu sehen, wie die Signalflanken aussehen, ist ein Oszilloskop schon ganz gut - und das ist ein Thema, wenn die Pullups nicht passen.

Ein LA kann so etwas nicht anzeigen (jedenfalls nicht ein Simpel-LA wie die Nachbauten der ersten Saleae-Geräte). Und ein LA hat recht sicher andere Schaltschwellen, ab der er Signale definiert als Low oder High erkennt als die I2C-Eingangsstufe des ungenannten µC des Threadstarters.

(Firma: Schweigstill IT) Persönliche Seite #8000929
Lesenswert?

Paul B. schrieb:

Für ca. 10 Euro bekommt man einen Logic Analyzer. Es muss kein Oszi sein für den I²C Basis Kram.

Ganz im Gegenteil kann man sich heutzutage eher den LA sparen als ein Oszilloskop, denn ein einfacher LA lässt kaum Rückschlüsse auf die Signalintegrität (Flankensteilheit, saubere Signalpegel) zu. Insbesondere sieht man auch nicht, wann ein Bus freigegeben wird und ggf. der Signalpegel wegdriftet bzw. einen nichtbinären Ruhepegel einnimmt (z.B. EIA-485).

Halbwegs aktuellen Oszilloskope können zudem auch einfache Protokolle wie z.B. I2C, SPI, usw. (auch) auf den Analogkanälen dekodieren.

#8000959
Lesenswert?

Harald K. schrieb:

Naja, um zu sehen, wie die Signalflanken aussehen, ist ein Oszilloskop schon ganz gut - und das ist ein Thema, wenn die Pullups nicht passen.

Ja, wenn man die Signalqualität untersuchen will braucht man das Oszi. Der TE schrieb ja das er Antworten bekommt, daher sah ich das Problem eher in der Software und dabei hilft der LA (oder auch ein Oszi mit Decoder) ungemein. Aber das Oszi bestellt sich eben nicht ganz so leicht wie ein 10€ LA ;).

Andreas S. schrieb:

Ganz im Gegenteil kann man sich heutzutage eher den LA sparen als ein Oszilloskop

Wenn du mal größere Datenströme verarbeitest ist das am Oszi einfach nur nervig. Wir haben auf Arbeit ein 20K€ R&S, ein super Gerät, aber dekorieren von Bussystemen erfolgt bei uns ausschließlich über PC + LA. Keiner hat Bock 100 Umdrehungen am Encoder Rad zu drehen oder sich mit dem Touchscreen und den Zoomtasten bis zu der interessanten Stelle zu quälen.

Es hat beides seine Berechtigung für den jeweilgen Zweck. Ich hab auch jahrelang per Oszi decodiert, würde ich heute nicht mehr machen und ich ärgere mich die 10€ nicht schon vor 5 Jahren investiert zu haben. Ich war bis dahin auch von der technischen Überlegenheit des Oszis überzeugt und hab den billigen LA "belächelt". Heute kommt das Oszi fast nur noch zum Einsatz wenn das Signal völlig unbekannt ist oder eben wie hier die Signalqualität ermittelt/geprüft werden muss.

Aber es ist ja zum Glück jeden frei in der Wahl seiner Arbeitsmittel ;).

#8000964
Lesenswert?

Paul B. schrieb:

Es hat beides seine Berechtigung für den jeweilgen Zweck. Ich hab auch jahrelang per Oszi decodiert, würde ich heute nicht mehr machen und ich ärgere mich die 10€ nicht schon vor 5 Jahren investiert zu haben. Ich war bis dahin auch von der technischen Überlegenheit des Oszis überzeugt und hab den billigen LA "belächelt". Heute kommt das Oszi fast nur noch zum Einsatz wenn das Signal völlig unbekannt ist oder eben wie hier die Signalqualität ermittelt/geprüft werden muss.

Mir geht es ähnlich, aber quasi von Amazon dazu "gezwungen". :-) Vor einigen Jahren gab es hier einige Diskussionen zu den pico USB Oszis und immer wieder auch das Hantek 6022be als Alternative. Da habe ich mehrfach die Angebote/Daten bei Amazon nachgesehen und plötzlich wurde mir ein 6022bl (also mit 16-Kanal LA) für lächerliche 33,-€ offeriert. Direkt nach meinem Kauf schnellte der Preis auf 93,-€ hoch und ich nahm an, dass man sich auf Irrtum berufen würde. Aber nix da, 3 Tage später kam das Paket.

In der SW kann ich jederzeit zwischen LA- und Oszibetrieb umschalten und alle Teile passen mit in die Laptoptasche. Wenn die 20 Mhz und relativ primitive SW reichen, ein liebenswerter Begleiter.

OP #8001966
Lesenswert?

Problem:

Die beiden Config Register kann ich auslesen.

Nach dem Einschalten werden die korrekten Default-Werte des

Config Registers 8583h angezeigt.

Anschließend setze ich das MODE-Bit auf 1,

lese das Conversion Register (2Bytes) aus,

erhalte aber nur als Egebnis 0000h,

als würde der ADC nicht arbeiten.

Was mache ich falsch ?

OP #8001976
Lesenswert?

ADS1115 initialisieren : TWI-Transmitter-Start (Adresse 0x48) write 01h (Config Register) Mode-Bit =1 (Bit setzen, alle anderen Bits wie Default) Config Register write (MSB) Config Register write (LSB)

ADS115 ADC auslesen : TWI-Transmitter-Start (Adresse 0x48) write 00h (Conversion Register)

TWI-Reciver-Start (Adresse 0x48) Read Byte0 (ADC-Ergebnis) Read Byte1 (ADC-Ergebnis)

Ergebnis: 0000h

Mit diesem Verfahren versuche ich die ADC-Werte auszulesen, erfolglos , was mache ich falsch ?

: Bearbeitet durch User
#8001982
Lesenswert?

Bernhard S. schrieb:

Paul B. schrieb:

Du startest die Wandlung nicht. Starte die Wandlung, dann lies zurück.

Wie starte ich die Wandlung ?

In dem du das Mode Bit auf 1 setzt.

Sollte das, wie in deinem Fall, nicht klappen, dann nimmt man sich den oben erwähnten 10€ LA und schaut nach was man wirklich sendet statt ohne den Quellcode zu zeigen zu fragen was man falsch macht...

Deine Hardware scheint zu stehen, lad den Quellcode hoch und hoffe das es hier noch paar Assembler Freaks gibt oder frag ChatGPT was mit deinem Quellcode nicht stimmt. Woher sollen wir denn wissen was du sendest, wenn du uns nur sagst was du denkst was du sendest und es nicht zeigst?

#8001986
Lesenswert?

Was soll der ADS1115 machen, welcher Kanal, welche Auflösung? Das muss ihm mitgeteilt werden. siehe https://cicciocb.com/annexhelp/V1.423/ unter ADS1115

Die von Christoph vorgeschlagene sehr gute Anleitung https://wolles-elektronikkiste.de/ads1115 ist ja scheinbar nichts für dich

Der ADS1115 ist auch in der Forumsbibliothek nicht unbekannt

: Bearbeitet durch User
#8002001
Lesenswert?

Bernhard S. schrieb:

Wie starte ich die Wandlung ?

Durch ansprechen. In der einfachsten Form start send $9e (Schreibadresse) start send $9f (Leseadresse) read byte (evt zweites lesen, falls benötigt) stop Damit arbeitet er mit den Default Werten. Nun wird die Konversationszeit nicht gewartet so das er den letzten Wert ausgibt. Heißt das erste byte (Word) ist ungültig, da er beim ersten Ansprechen erst beginnt zu konvertieren. Wird ein einzelner Wert benötigt muss vor dem zweiten Start die Konversationszeit (37?ms) gewartet werden.

#8002135
Lesenswert?

Achim H. schrieb:

Durch ansprechen. In der einfachsten Form start send $9e (Schreibadresse) start send $9f (Leseadresse)

Der ADS1115 kann lt. Table 7-2. im Datenblatt je nach Beschaltung auf einer der I2C Target Adressen 0x48 ... 0x4B liegen. Dein $9e bzw $9f ist sicher etwas anderes, als die I2C-Adresse. Die besitzt lt. I2C-Spezifikation 7 Bit (3.1.10 The target address and R/W bit "This address is seven bits long ..."). https://www.nxp.com/docs/en/user-guide/UM10204.pdf

(Firma: 1984now) #8002210
Lesenswert?

Rainer W. schrieb:

Achim H. schrieb:

Durch ansprechen. In der einfachsten Form start send $9e (Schreibadresse) start send $9f (Leseadresse)

Der ADS1115 kann lt. Table 7-2. im Datenblatt je nach Beschaltung auf einer der I2C Target Adressen 0x48 ... 0x4B liegen.

Richtig.

Dein $9e bzw $9f ist sicher etwas anderes, als die I2C-Adresse.

Auch richtig.

Die besitzt lt. I2C-Spezifikation 7 Bit (3.1.10 The target address and R/W bit "This address is seven bits long ...").

Naja, das ist dann reine Prinzipienreiterei. Aus vielen Gründen ist es sinnvoll, im Code die eigentliche I2C-Adresse und das R/W-Bit zusammenzufassen. Bleibt dann eigentlich nur die Streitfrage, wie man diese zusammengefasste Sache nennt. Sie ebenfalls als "I2C-Adresse" aufzufassen ist recht üblich, wenn auch im Sinne der Specs formal falsch.

Der springende Punkt ist hier aber eigentlich: auch die "zusamengefassten I2C-Adressen" 0x9e/0x9f können unmöglich gültige I2C-Adressen für einen ADS1115 enthalten. Weil 0x9e/0x9f durch zwei einfach mal 0x4f ergibt, was eindeutig außerhalb des für den ADS1115 möglichen Bereichs von 0x48..0x4b liegt.

#8002288
Lesenswert?

Interessant, da frag ich mich was die mir als 'ADS1115' verkauft haben? Ein Echter geht nach Datenblatt wirklich nur bis $96/7. Dem sollte auch mitgeteilt werden ob er kontinuierlich oder Einzeln misst. Per Default ist er auf 'Single-shot' und würde mit meiner Methode wohl nichts (keine Messwerte) ausgeben?

(Firma: 1984now) #8002310
Lesenswert?

Achim H. schrieb:

Interessant, da frag ich mich was die mir als 'ADS1115' verkauft haben?

Zeig ein Bild. Hinz wird dir zumindest explizit sagen können, dass es ein Fake ist.

Möglicherweise sogar, welcher ADC da zum ADS1115 umgelabelt wurde. Ich kann das nicht, jedenfalls nicht ohne aufwendige Recherche. Zumal durchaus ein mehrdeutiger Ausgang der Recherche möglich wäre. Trotz der bekannten I2C-Adresse des Fakes...

#8002317
Lesenswert?

Ob S. schrieb:

Bleibt dann eigentlich nur die Streitfrage, wie man diese zusammengefasste Sache nennt.

Im Zweifelsfall ist es das erste übertragene Byte oder das Adressierungsbyte. Es ist jedenfalls keine Lösung, einen Begriff, der in der I2C-Spezifikation genau festgelegt ist, im gleichen Kontext noch für etwas anderes zu verwenden. Bei dir hast du doch auch nicht zwei verschiedene Hausnummer an der Tür stehen, eine fürs Reingehen und eine andere fürs Rausgehen ;-)

(Firma: 1984now) #8002322
Lesenswert?

Rainer W. schrieb:

Im Zweifelsfall ist es das erste übertragene Byte oder das Adressierungsbyte.

Aha. "I2C-Adressierungsbyte" ist ja so viel besser als "I2C-Adresse"...

Aber OK. Für Formalismus-Fetischisten ist sowas natürlich überaus wichtig, weit wichtiger als die Sache selber. Es sei dir also gegönnt, diesen Begriff zu verwenden.

Alle anderen verstehen natürlich, dass eine offensichtlich (schon durch den Kontext der Unterscheidung für Lese- und Schreibzugriffe) "I2C-Adresse" natürlich in deiner Nomenklatur "I2C-Adressierungsbyte" genannt werden will.

OP #8002334
Lesenswert?

Es funktioniert !

Wolfgang, Verfasser folgender Internetseite:

https://wolles-elektronikkiste.de/ads1115

gab mir wertvolle Hinweise.

Welcher Fehler lag vor ?

AIN0 und AIN1 muss beschaltet sein, es wird eine Differenzmessung beider Pins durchgeführt, ich hatte alle Eingänge AIN0...AIn3 auf eine Potential gelegt, somit entstand keine Differenz und der ADC meldete 0000h.

Bei Gelegenheit werde ich dieses kleine Projekt für einen ATmega8 und Assembler ASM für Euch veröffentlichen.

Danke nochmals ^^

#8002359
Lesenswert?

Bernhard S. schrieb:

AIN0 und AIN1 muss beschaltet sein, es wird eine Differenzmessung beider Pins durchgeführt, ich hatte alle Eingänge AIN0...AIn3 auf eine Potential gelegt, somit entstand keine Differenz und der ADC meldete 0000h.

Ja und, du hast sie doch beschaltet, indem du sie verbunden hast. Und wenn du eine Differenzmessung parametrierst, muss auch die Eingangsspannung unterschiedlich sein, wenn du was sehen willst. Das gleiche Ergebnis würdest du auch bei einer Singe-Input-Messung bekommen, wenn du keine Spannung anlegst. Und ob wegen sieben Zeilen in C ein Projekt nötig ist, ist auch fraglich. Ok, du programmierst ja in Assembler, da sind es ein paar Zeilen mehr. Man kann sich seine Lebenszeit auch unnütz verkleinern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren