16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby ag » Mon Nov 10, 2014 7:58 pm

Ich habe die passende Stellen im Libraries durch uint16_t umdefiniert, aber das sprünghafte Verhalten hat sich dadurch nur verschoben von der 0 Grenze auf die neue Mittelwertsgrenze von 32768. Das war es also nicht.

Jetzt überlege ich, ob es vielleicht am big endian (Gnublin) im Unterschied zu little endian (Arduino) liegt. Das würde zumindest erklären, warum das Verhalten nicht am Arduino auftritt. Keine Ahnung wie ich das testen kann.
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby RoKo66 » Tue Nov 11, 2014 11:41 am

Hallo Ag,

also ich glaube nicht, dass es an den Datentypen liegt, wenn das Programm beim Arduino funktioniert. Ich habe den Start der I2C-Kommunikation einmal aufgenommen und denke, dass es von dieser Seite aus Probleme gibt. Wenn ich das Datenblatt des ADC1115 richtig verstehe, dann läuft der Beginn der Kommunikation folgendermaßen ab (für den ADC-Konverter im Receive-Mode):

1. Senden der Slave-Adresse (hier 49h) an den ADC
2. Kein ACK vom Slave, aber Slave fühlt sich von nun an angesprochen
3. Senden der Registeradresse an den Slave
4. Slave sendet ACK
5. Senden des 1.Datenbytes (MSB) des Registers an den Slave
6. Slave sendet ACK
7. Senden des 2.Datenbytes (LSB) des Registers an den Slave
8. Slave sendet ACK

Wenn ich die aufgenommene Kommunikation richtig deute, dann wird die Slave-Adresse zwar noch richtig gesendet, aber danach hakt es irgendwie mit der Rückmeldung des ADCs...
Wie sieht das denn beim Arduino aus? Hast Du die Möglichkeit, Dir die Signale anzuschauen?

Viele Grüße
RoKo66
Attachments
ADC1115_I2C_Start.pdf
(125 KiB) Downloaded 69 times
RoKo66
 
Posts: 8
Joined: Sun Oct 26, 2014 6:51 pm

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby ag » Tue Nov 11, 2014 3:29 pm

Hallo RoKo66,

leider habe ich keine Logic Analyzer, kann also die Signale nur am Oszilloskop bewundern. Aber bei mir scheint schon eine richtige I2C Dialog abzulaufen, denn ich bekommen doch kontinuierlich veränderte Werte zurückgemeldet wenn ich die Spannung z.B. am AIN2 langsam verändere. Aber unterwegs scheint noch etwas mit den Daten zu passieren, anders als beim Arduino. Deshalb mein Verdacht auf die unterschiedliche Endianigkeit.

In deine Aufzeichnung steht Adresse 49h, aber mit JP4 auf 00 (Pin ADDR auf GND) und Aufruf
ADS1x1x_init(&my_adc, ADS1115, ADS1x1x_I2C_ADDRESS_ADDR_TO_GND, MUX_SINGLE_0, PGA_2048)
muss es, laut Datenblatt, doch 48h sein. Ich verstehe nicht, wie das zustande kommt, aber vielleicht ist das der Grund weshalb die Kommunikation bei dir vorzeitig aufhört.

Viele Grüße,
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby RoKo66 » Tue Nov 11, 2014 5:50 pm

Die Adresse ist mit 49h schon richtig: Ich habe die Adresskonstante ADDR_TO_VCC im Aufruf der Init-Funktion angepasst und auch JP4 auf die entsprechende Position gestellt.
RoKo66
 
Posts: 8
Joined: Sun Oct 26, 2014 6:51 pm

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby RoKo66 » Wed Nov 12, 2014 7:28 pm

Hallo Ag,

nachdem mir das gesamte Timing der I2C-Emulation doch etwas suspekt war, habe ich nun die I2C Bit-Banging-Library einfach aus dem Projekt entfernt und steuere nun den I2C-Port des Boards direkt an. In Gnublin.cpp findet man ja schon die passende Klasse dazu und die Umsetzung war dadurch recht simpel. Die ganze Kommunikation läuft nun auch wesentlich schneller ab. :D

Ich überprüfe jetzt nochmal, ob die gelieferten Werte auch stimmig sind..

Viele Grüße
RoKo66
RoKo66
 
Posts: 8
Joined: Sun Oct 26, 2014 6:51 pm

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby RoKo66 » Thu Nov 13, 2014 10:53 am

...scheint jetzt soweit alles zu funktionieren. Nun kann man das Board und die Konverter-Platine auch mit einem einfachen Flachbandkabel verbinden.
Attachments
ADS1115_I2C.zip
(4.69 KiB) Downloaded 46 times
RoKo66
 
Posts: 8
Joined: Sun Oct 26, 2014 6:51 pm

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby ag » Thu Nov 13, 2014 5:25 pm

Hallo RoKo66,

dein Code ist schon eine Verbesserung. Damit bekomme ich nun zumindest kontinuierlich veränderte Werte, ohne Sprung ins Nirvanna (8FFFh). ;) Aber so ganz richtig ist es noch nicht: bei 0 Volt bekomme ich Minuswerte, welche bei steigende Spannung allmählich verringern und erst bei ca. 0,75 Volt (laut DVM) die Null Linie passieren und dann Pluswerte bis 0,86 bei eine Angelegte Spannung von 1,5 Volt. Eigentlich sollte im "single ended" Modus keine Minuswerte kommen. :( Oder hat vielleicht mein Board ein Schaden erlitten (aber am Arduino funktioniert es ) :? Wie sieht es bei dir aus mit den Spannungsverlauf :?:

Es bleibt spannend!

Viele Grüße,
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby RoKo66 » Fri Nov 14, 2014 5:45 pm

Hallo Ag,

ich habe eben mal folgende Messungen durchgeführt:

AIN0 : 1,48V Batteriespannung
AIN1 : 0V (mit GND verbunden)
AIN2 : Leerlauf
AIN3 : Leerlauf

Gruß
RoKo66
Attachments
measurement.txt
(364 Bytes) Downloaded 43 times
RoKo66
 
Posts: 8
Joined: Sun Oct 26, 2014 6:51 pm

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby ag » Fri Nov 14, 2014 6:50 pm

Hallo RoKo66,

vielen Dank. Leider scheint das zu bestätigen, dass mein ADC ein Schaden hat. AIN1 war von Anfang an tot, und ich messe jetzt 0,51 Volt zwischen GND und AIN0 wenn nichts angeschlossen ist :( Ich werde versuchen beim zusammenlöten des 2. Boards noch vorsichtiger zu sein. Hoffentlich gelinkt es mir damit besser.

Vielen Dank für die gute Zusammenarbeit :D
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

Re: 16-Bit-ADC an Elektor-Linux-Board(Gnublin)

Postby ag » Sat Nov 15, 2014 2:05 pm

Oh Mann :evil:

Eben habe ich den Dezember 2014 Heft erhalten, und lese den Beitrag "Breakout-Board mit ADS1115". Da steht auf Seite 40
Handlöten schwer gemacht
Das Problem mit diesen neuen ICs ist, dass man sie nicht gerade leicht mit dem Handlötkolben auf eine Platine befestigen kann. Von der guten Resonanz auf die beiden obengennaten Artikel angeregt, haben wir uns entschlossen, den ADS1115DGST mit wenigen erforderlichen peripheren Bauteilen auf eine kleine Breakout-Platine zu setzen und diese im Elektor-Store anzubieten.

Na super! Nachdem ich schon im August Herr Nickel angeregt hatte, ein Bausatz anzubieten und eine Absage bekam ( http://forum.elektor.com/viewtopic.php?f=167775&t=2708421 ), ich SMD Teile im 0603 Format im Überflüß für ca. 100 € anschaffen müsste und mit zitternde Hände unter eine Loope alle Teile die Platine aufgequält habe, wird nun doch ein Modul angeboten. Leider ist das Ding bis jetzt nicht, wie auch im Dezember Heft behauptet, im Elektor-Store erhälich. Aüßerdem finde ich es befremdend, dass mann nun wieder eine (zugegeben einfache) Zwischenschaltung benötigt, um das Ding an die Gnublin/EES Schnittstelle anzuschließen, obwohl ein so "guten Resonanz" offenbar wohl doch inzwischen da ist :shock:

Mich wundert es schon, dass es günstiger sein sollte, eine neue Platine zu entwerfen und bestücken, anstatt die bereits vorhandene und mit mehr Features ausgestattete Platine bestücken zu lassen, zumal der Unterschied im Materialeinsatz kaum ausschlaggebend sein dürfte. :?

Na ja, in letzer Zeit ist Elektor immer mehr zu eine Leidensweg geworden. Auf die Platine aus dem Septermber Heft müßte ich mich auch erst durch die Bürokratie der neue Elektor-Shop Zahlungsmachine "ADJYEN CLIENT MANAGEMENT" kämpfen, bis entlich meine Vorkassezahlung anerkannt bzw. durch vorlegen der Bankauszug nachgewiesen wurde. Erst gut 6 Wochen nach der Bestellung wurde das Teil geliefert :x

Da das ADC wohl durch meine Lötarbeiten einen Schaden erlitten hat, werde ich wohl nun das Breakout-Board, sobald erhältlich, bestellen. Hoffentlich geht es diesmal ohne Probleme.
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

PreviousNext

Return to Elektor-Mikrocontroller-Forum

Who is online

Users browsing this forum: No registered users and 1 guest