Ich hätt an euch mal eine Frage. Und zwar habe ich es geschafft mit meinem Raspberry Pi zero w den A/D Wandler ADS 1115 anzuschließen und auszulesen. Ich habe die entsprechende Bibliothek heruntergeladen und mit "import Adafruit_ADS1x15" eingebunden. Anschließend mit adc = Adafruit_ADS1x15ADS1115() abgespeichert. Alles soweit kein Problem. Jetzt habe ich jedoch folgenden A/D Wandler: https://www.mouser.de/ProductDetail/Analog-Devices/LTC2485CDDPBF?qs=hVkxg5c3xu8JeTDO2icw%2Fw%3D%3D da gibt es jetzt ja keine passende Bibliothek bzw. wenn ja wo finde ich diese. Wenn nicht könnte mir jemand anhand von diesem Beispiel jemand erklären (am besten mit Code) wie es jetzt mit diesem funktioniert, habe glaub das Prinzip noch nicht ganz verstanden ? :) Vielen Dank schonmal :D
Über I²C und die Adresse richtig angeben. Ich mache es mir oft leicht und mache vorher einen I²C Scanner dann weiß ich ganz genau welche Adresse ich ansprechen muss. Im Datenblatt steht ab S.12 beschrieben wie das gemacht wird.
:
Bearbeitet durch User
Im Prinzip muss du erstmal den I²C initalisieren. Dann soll er die Eingänge lesen und dir die Ergebnisse liefern. Ist einfach gesagt, aber nicht so leicht umgesetzt. Jörg schrieb: > (am besten mit Code) Welche Sprache? Java? C#? Pascal? Jörg schrieb: > da gibt es jetzt ja keine passende Bibliothek bzw. wenn ja wo finde ich > diese. braucht doch nur I²C Bibliothek mehr nicht.
:
Bearbeitet durch User
Rainer S. schrieb: > und mache vorher einen I²C Scanner IIRC heisst das Paket für RaspOS "i2ctools" und das Binary i2cdetect".
Jörg schrieb: > Jetzt habe ich jedoch folgenden A/D Wandler: Hallo Jörg, das sind zwei unterschiedlich schnelle Wandler: ADS1115: 16bit / 868 Sp/s LTC2485: Delta-Signa 32bit Output pro 15Sp/s Für Raspi kenne ich jetzt nichts, für Arduino habe ich auf die Schnelle etwas auf GitHub gefunden: https://github.com/jlewallen/ltc2485/blob/master/ltc2485. (Keine Ahnung ob dass passt).
:
Bearbeitet durch User
Linux hat einen nativen Treiber für den Chip, drivers/iio/adc/ltc2485.c aktiverbar mit
1 | modprobe ltc2485 |
2 | echo ltc2485 0x?? > /sys/bus/i2c/devices/i2c-0/new_device |
(Statt ?? natürlich die richtige I²C-Adresse angeben, falls es nicht der erste Bus ist, statt i2c-0 den richtigen Bus angeben)
im Link fehlen die "pp" am Ende https://github.com/jlewallen/ltc2485/blob/master/ltc2485.cpp Aber er hat immer noch nicht die Programmiersprache verraten. Auch die funktionierende Bibliothek von Adafruit "Adafruit_ADS1x15" gibt es für mehrere.
:
Bearbeitet durch User
Rainer S. schrieb: > Welche Sprache? Java? C#? Pascal? Christoph db1uq K. schrieb: > Aber er hat immer noch nicht die Programmiersprache verraten. Ohh entschuldige die Sprach ist Python :D oke dann werde ich es mal versuchen danke für eure Hilfe.
Habe jetzt ziemlich lange probiert aber ist als Anfänger glaube ich einfach nicht zu schaffen :DDD Mein Code: import time import smbus import math i2c = smbus.SMBus(0) def readI2c(i2cDeviceAddr, channel) wert = i2c.read_byte_data(i2cDeviceAddr, channel) time.sleep(0.01) wert = i2c.read_byte_data(i2cDeviceAddr, channel) return wert while True: value = readI2c(0x26, 1) print value time.sleep(1) Der A/D Wandler hat die Adresse 26 das weiß ich aber es funktioniert nicht, danke für eure Hilfe schonmal
Was bedeutet "aber es funktioniert nicht" genau? Warum liest Du zweimal 1(?) Byte? Schonmal ins Datenblatt geschaut? Da ist sogar Beispielcode drin...
Also habs jetzt nochmal ganz leicht gemacht: import time import smbus bus = smbus.SMBus(1) while True: data = bus.read_byte_data(0x26, 0) print data time.sleep(1) mh schrieb: > Was bedeutet "aber es funktioniert nicht" genau? 1. Es kommen nur 2 Werte, dann kommt die Fehlermeldung Remote I/O error 2. Ich habe 24 Bit Auflösung mit diesem Teil, warum spielen sich die Werte, nur zwischen 67 und 160 ab und dann bin ich bei 0-3V an der Aussteuerung. Ich kapier das Prinzip iwie noch nicht ganz.
Der ADC hat sein Resultat in einem 32-Bit-Register. Wenn du davon nur 8 Bit liest, stehen da keine 24 Bit drinnen. Schau doch einfach in das Datenblatt vom LTC2485. Da ist das alles beschrieben. Auch mit Status-Diagram. "Stop or read 32 Bits". Du machst "read 8 bits", was nirgendwo vorgesehen ist. Tipp: Statt "read_byte_data" hat die smbus-Bib auch Funktionen um mehr als 8 Bit zu lesen.
Εrnst B. schrieb: > Statt "read_byte_data" hat die smbus-Bib auch Funktionen um mehr > als 8 Bit zu lesen. Ahhh oke ich hab jetzt erst mal "read word data" verwendet, waren dann schon 16, anschließend mit "read block data" jedoch gibt es mir hier wieder eine Fehlermeldung aus. Code: import time import smbus bus = smbus.SMBus(1) while True: data = [] data = bus.read_block_data(0x26, 0) print data time.sleep(1) Fehlermeldung: " I/O Error: Errno71 Protocol error" Also passt ja was mit der "Art" von data nicht :/ aber es muss doch eine Liste sein oder ? weil ohne die [] geht es auch nicht Danke für eure Hilfe
Und was ich auch noch nicht verstehe, ich habe bei diesem Wandler ja nur einen Kanal, aber der zweite Index in der Klammer bezieht sich auf die Kanalnummer. Muss der dann schon auf Null gesetzt werden ?
Habe es jetzt so gemacht: Code: import time import smbus bus = smbus.SMBus(1) while True: data = bus.read_i2c_block_data(0x26, 0) print data time.sleep(1) Jetzt kommt in der Ausgabe : [187,12,153,119,255,255,255,255,255,255,255,255,255,255,255,....] der erste Wert ändert sich wenn ich dass Analogsignal ändere die nächsten drei ändern sich willkürlich :D . Der Rest bleibt bei 255 kann mir das jemand erklären ? Danke :)
Kaum zu glauben, aber nur die Wenigsten kennen diesen Geheimtipp: 32 Bit sind 4 Bytes.
Aber warum ändern sich die einen Werte ständig und der vorderste nur zwischen 128 und 192 sorry für die Fragen aber verstehe es einfach noch nicht
Jörg schrieb: > Aber warum ändern sich die einen Werte ständig und der vorderste nur > zwischen 128 und 192 Εrnst B. schrieb: > Schau doch einfach in das Datenblatt vom LTC2485. Da ist das alles > beschrieben. >> The LTC2485 output data stream is 32 bits long, [...] >> The first bit is the conversion result sign bit (SIG), [...] >> The second bit is the most significant bit (MSB) of the result. [...] >> The next 24 bits contain >> the conversion results in binary two’s complement format. >> The remaining six bits are Sub LSBs below the 24-bit level. P.S: Sorry dass ich dir das so Scheibchenweise vorwerfe, aber der Lerneffekt ist einfach besser wenn du dir solche Sachen selber erarbeitest.
:
Bearbeitet durch User
Kein Problem hast ja Recht aber jetzt hab ichs kapiert :DDDDD bin nur bisschen verwirrt dass die hinteren Bits so schwanken aber dann ist meine Spannungsquelle halt nicht so gut und schwankt ein wenig :DD# Vielen Dank für deine Hilfe !!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.