12Bit 8 Kanal ADC auslesen Python

OP #5072921
Hallo,

ich möchte über einen 12 Bit ADC eine analoge Spannung von meinem 
Lichtmesskopf erfassen. Die schwierigkeit die ich habe ist das dieser 
verwendete ADC 8 Kanäle hat un dich nicht direkt aus dem datenblat sehen 
kann wie ich genau auf den ersten Eingang zugreife. Im Anhang habe ich 
schon was programmiert und würdee euch bitte mir eure Meinung darüber zu 
sagen und was die Ursache sein könnte.


import RPi.GPIO as GPIO

import spidev

import time



GPIO.setmode(GPIO.BOARD)

GPIO.setup(13, GPIO.OUT)    #LED

GPIO.setup(29, GPIO.OUT)    #GPIO1

GPIO.setup(31, GPIO.OUT)    #GPIO2

GPIO.setup(33, GPIO.OUT)    #GPIO3

GPIO.output(29, False)

GPIO.output(31, False)

GPIO.output(33, False)

GPIO.output(13, False)

GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP) # pin 11 (GPIO17) als 
input - Pullup

GPIO.setwarnings(False)




#Settings SPI

spi = spidev.SpiDev()

spi.open(0, 0)

#spi.max_speed = 5000

spi.mode = 2

#spi.cshigh




#DMUX - ADC1

GPIO.output(29, False)

GPIO.output(31, False)

GPIO.output(33, False)


Vref = 3.3



#Kanal3 des ADC ansteuern

spi.writebytes([0x10 ,0x00 ])


#ADC auslesen

adc = spi.xfer2([0x00,0x00])

print('adc Wert',adc)

adc_out = ((adc[0] & 0x1F) << 7) + ((adc[1] >> 1 ))

voltage = adc_out * (Vref/4096)

#Berechnet die Ausgangsspannung

voltage = round(voltage,2)


print('Spannung ',voltage)


Vielen Dank für eure Hilfe
Moderator (Firma: Titel) Persönliche Seite
Andreas V. schrieb:
> was die Ursache sein könnte.
Die Ursache wofür?

Hast du mal gemessen, was mit deinem Programm auf dem Bus passiert?
Sieht das Timing auf dem Bus so aus wie im Datenblatt?

> ich nicht direkt aus dem datenblat sehen kann wie ich genau auf den
> ersten Eingang zugreife.
Du meinst den "nullten" Eingang Vin0?
Falls ja, dann sendest du per SPI 0x0000 und bekommst gleichzeitig das 
Wandlungsergebnis zurück.
Angehängte Dateien:
OP
Ich würde gerne IN 2 ansteuern das wäre ja dan 0x10 0x00,

ich mess kurz mal was auf meinem Bus wirklich passiert.
Aber vom Umwandeln von den 2 byte in die Spannung stimmt so für einen 12 
Bit Wandler oder?


dc = spi.xfer2([0x00,0x00])

print('adc Wert',adc)

adc_out = ((adc[0] & 0x1F) << 7) + ((adc[1] >> 1 ))

voltage = adc_out * (Vref/4096)

#Berechnet die Ausgangsspannung

voltage = round(voltage,2)
Moderator (Firma: Titel) Persönliche Seite
Andreas V. schrieb:
> Aber vom Umwandeln von den 2 byte in die Spannung stimmt so für einen 12
> Bit Wandler oder?
> adc_out = ((adc[0] & 0x1F) << 7) + ((adc[1] >> 1 ))
Das Ding ist doch schon richtig ausgerichtet, da ist doch keine 
Schieberei mehr nötig...

> Aber vom Umwandeln von den 2 byte in die Spannung stimmt so für einen 12
> Bit Wandler oder?
Keine Ahnung, was spi.xfer2() macht. Aber wenn das zwei Bytes in ein 
Array "adc" einliest, dann würde ich das so probieren und das Ganze in 
Millivolt rechnen:
adc_out = (adc[0]<<8) | adc[1];
voltage = (adc_out*Vref_mV)/4096;

> ich mess kurz mal was auf meinem Bus wirklich passiert.
Gute Idee, denn nur das, was dort passiert, interessiert den Baustein. 
Und wie das letzte Mal im 
Beitrag "Re: Python Programmierung 8 Kanal 12 Bit DAC" gilt: 
den richtigen SPI Modus verwenden.
OP
Lothar M. schrieb:
> Klassische Buskollision.

Bekomme ich diese BUskollision irgendiwe in Griff??
es ist nämlich so das auf meinem SPI Bus insgesamt 4 ADC und 4 DAC 
integreirt sind, jedoch muss man sagen das diese immer hintereinander 
und nie gleich angesprochen werden. Das realisier ich über ein DMUX der 
das CS immer schaltet.
OP
Lothar M. schrieb:
> Andreas V. schrieb:
>> es ist nämlich so das auf meinem SPI Bus insgesamt 4 ADC und 4 DAC
>> integreirt sind, jedoch muss man sagen das diese immer hintereinander
>> und nie gleich angesprochen werden.
> Sicher? Kontrollier das mal.


Habe nochmal mir die Platine angeschaut, es ist so das die Daten für Din 
und Dout zwar ständig an den Bauteilen anliegt wenn ich etwas sende aber 
erst wenn ich durch den DMUX das CS für einen Bestimmten Baustein 
freigeben schaltet dieser durch das habe ich getestet. und komischer 
weise tut mein DAC ja auch auf dem BUS //:
Moderator (Firma: Titel) Persönliche Seite
Andreas V. schrieb:
> komischer weise tut mein DAC ja auch auf dem BUS //:
Ja, dann mach mal dessen DOUT Pin frei (Leiterbahn auftrennen oder 
Beinchen von der Leiterplatte abheben) und miss am Pin, ob der Pegel 
dann besser wird. Wenn ja, dann musst du nur den zweiten "Aktivisten" am 
Bus finden. Im schlimmsten Fall ist es tatsächlich der uC, dessen 
MISO-Pin auf "Ausgang" geschaltet ist.
OP
Lothar M. schrieb:
> Andreas V. schrieb:
>> komischer weise tut mein DAC ja auch auf dem BUS //:
> Ja, dann mach mal dessen DOUT Pin frei (Leiterbahn auftrennen oder
> Beinchen von der Leiterplatte abheben) und miss am Pin, ob der Pegel
> dann besser wird. Wenn ja, dann musst du nur den zweiten "Aktivisten" am
> Bus finden. Im schlimmsten Fall ist es tatsächlich der uC, dessen
> MISO-Pin auf "Ausgang" geschaltet ist.

Oke alles klar das werd eich gleich morgen versuchen. Aber ich finde das 
sofern komisch wenn ich einen 1 Kanal 12Bit ADC betreibe an dem spi 
funktioniert das ohne Porbleme. Habe gerade die CS durchgemessen aber da 
passt auch alles. Werde morgen mal deinen Vorschlag ausprobieren.

Danke ich schreibe dann morgen was rausgekommen ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.