Auslesen 12Bit 8 Kanal ADC

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Keki9387
User
Beiträge: 1
Registriert: Freitag 11. August 2017, 08:24

Hallo,

ich bin neu in der Python programmierung und muss für ein Projekt einen 12Bit 8 Kanal ADC (ADC 128S022)auslesen.
Also genauer gesagt ich möchte den ersten Eingang des ADC benutzen.
Nach dem ich das Programm soweit geschrieben habe und mit dem Oszilloskop die ganzen Flanken überprüft habe, habe ich nun
das Problem das mein Programm mir echt komische Werte ausgibt. laut Multimeter gebe ich dem Eingang 214 mV, jedoch schwankt mein Programm und zeigt mir zwischen 0,2 V bis hin zu 2,6 V etliche unterschiedliche Werte.
An was kann das liegen ?

Danke.

P.S. anbei mein Code:

Code: Alles auswählen

import RPi.GPIO as GPIO
import time
import spidev

GPIO.setwarnings(False)

Vref = 3.3
Leistungsfaktor = 0.049
spi = spidev.SpiDev()
spi.open(0, 1)
spi.mode = 3

def adc_128S022():
    
    spi.writebytes ([0x00,0x00])
    adc = spi.xfer2([0x00,0x00])
    adc_out = ((adc[0] & 0x0F) << 8) +(adc[1])
    voltage = adc_out * (Vref/4096)                     
    voltage = round(voltage,2)
    print ("voltage : " , voltage , 'V')                
    p = round((voltage / Leistungsfaktor), 2)
    print ('Erechnete Ausgangsleistung in mW : ', p)                  
    time.sleep(1)

while True:
    adc_128S022()

BlackJack

@Keki9387: Ist nur wild geraten, aber ist das denn richtig das Du vor jeder Messung zwei Nullbytes sendest? Also insgesamt dann vier für jede Messung?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

So wie ich das im Datenblatt verstehe kommen die 12 Bit schon im ersten Doppelwort. Du solltest als mal die ersten Zwei Bytes nicht schicken, und auch mal probieren Kanal IN1 (also den 2ten) auf einen definierten Pegel zu setzen und schauen, ob dein jetziges Programm dann was vorhersehbares liefert.
Antworten