Forum: Mikrocontroller und Digitale Elektronik Analog Digital wandler (ADS1015) Daten auslesen und konvertieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian R. (saedelaere)


Lesenswert?

Hallo zusammen,

bin neu hier :)

Ich sitze jetzt seit ein paar Tagen vor meinem neuen Analog Digital 
Wandler und bekomme keine ordentlichen Daten ausgelesen. Es handelt sich 
um den ADS1015 http://www.ti.com/lit/ds/symlink/ads1015.pdf

Gekauft habe ich ihn in der Version von Adafruit 
https://www.adafruit.com/products/1083

Verwende ich das Python Library von Adafruit mit meinem Raspberry Pi 
kommt auch genau das Ergebnis was ich erwarte. Derzeit habe ich einfach 
über einen Spannungsteiler ~1.1 Volt an A0 hängen.

Da der ADC über i2c ansprechbar ist habe ich als erstes mit den 
entsprechenden Linux Kommandozeilen Tools gearbeitet. Führe ich also ein 
Single Shot conversion an A0 durch gibt i2cget -y 1 0x48 0x00 als 
Ergebnis 0x2022 zurück. Verstanden habe ich mittlerweile, dass ich 
dieses Ergebnis anders herum interpretieren muss (LSB first) --> 0x2220 
= 8736 Dezimal

Die Frage ist jetzt wie komme ich von diesem Dezimal Wert auf die 
gewünschten ~1.1 Volt? Ich habe etwas recherchiert und mir den Python 
Code angesehen. Die multiplizieren das Ergebnis der Umwandlung mit dem 
Faktor des programmierbaren Verstärkers (4.096) und teilen durch 2048. 
Wenn ich das mache kommt etwas mit 17.4... heraus --> Nicht gut :)

In meinem C++ Programm möchte ich die convenience Methoden aus dem 
<i2c-dev> Header verwenden 
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/i2c/dev-interface

Bisher verwende ich da nur die Funktionen mit denen man 1 Byte Daten 
sendet oder empfängt. Wenn ich bei i2c_smbus_read_word_data ein __s32 
zurück bekomme, ist das dann auch LSB first? Wenn nicht, kann ich das 
noch umwandeln?

Hier ist eine Version in C (allerdings für den ADS1115) hier wird aber 
nicht mit diesen convenience Methoden gearbeitet sondern da passieren 
wilde Bitshifts
http://openlabtools.eng.cam.ac.uk/Resources/Datalog/RPi_ADS1115/code/ADS1115_sample.c

Bin für jede Hilfe oder Hinweis dankbar!

VG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.