Analog Digitalwandler Pythenscript zum Ansteuern modifiziere

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Verrain
User
Beiträge: 4
Registriert: Samstag 24. Januar 2015, 18:30

Ich möchte gern folgenden 12 Bit ADAC-Wandler (LTC 1293) an meinem Raspberry Pi verbauen:
http://www.farnell.com/datasheets/1575649.pdf

Im Internet habe ich folgendes Programm zum Ansteuern eines 10 Bit ADAC-Wandlers gefunden:
https://www.raspiprojekt.de/anleitungen/...l=&start=3

Leider verzweifel ich schon seit einigen Wochen daran, dass ganze für meinen ADAC Wandler umzuschreiben.
Mittlerweile habe ich mein Programm so modifiziert, dass er sämtliche Befehle zwischen 0b00000000 und 0b11111111 testet (also zwischen 0 und 255). Natürlich habe ich dem Datenblatt entsprechend Ein- und Ausgabe geändert, aber das funktioniert einfach nicht bei mir.

Wer kann mir beim modifizieren des Pythonscripts helfen?
BlackJack

@Verrain: Der Link zu raspiprojekt.de ist kaputt.
Verrain
User
Beiträge: 4
Registriert: Samstag 24. Januar 2015, 18:30

Danke für den Hinweis. Hier der richtige Link:
https://www.raspiprojekt.de/anleitungen ... l=&start=3
Verrain
User
Beiträge: 4
Registriert: Samstag 24. Januar 2015, 18:30

Niemand der mir helfen kann?
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Verrain hat geschrieben:...aber das funktioniert einfach nicht bei mir.
Was genau funktioniert nicht?
Verrain hat geschrieben:Wer kann mir beim modifizieren des Pythonscripts helfen?
Dazu müsstest du das Script erst mal herzeigen.
In specifications, Murphy's Law supersedes Ohm's.
Verrain
User
Beiträge: 4
Registriert: Samstag 24. Januar 2015, 18:30

Das Problem ist, dass aus dem AD Wandler kein Output-Signal rauskommt.

Ich habe die das Programm folgendermaßen nach dem Datenblatt angepasst:

Code: Alles auswählen

 #Python Timerklasse importieren
import time
#Python Raspberry Pi GPIO Klasse importieren
import RPi.GPIO as GPIO

# Festlegung der Nutzung der vorgegebenen Nummerierung der GPIOs
GPIO.setmode(GPIO.BCM)

# Namen von True und False zum besseren Verständnis festlegen (Klarnamen)
HIGH = True  # 3,3V Pegel (high)
LOW  = False # 0V Pegel (low)

# SCI Funktion
def getAnalogData(adCh, CLKPin, DINPin, DOUTPin, CSPin, j):
    # Pegel definieren
    GPIO.output(CSPin,   HIGH)    
    GPIO.output(CSPin,   LOW)
    GPIO.output(CLKPin, LOW)
        
    cmd = adCh
    cmd |= j # Kommando zum Abruf der Analogwerte des Datenkanals adCh

    # Bitfolge senden
    for i in range(9):
        if (cmd & 0b10000000): # 8. Bit prüfen und mit 0 anfangen
            GPIO.output(DINPin, HIGH)
        else:
            GPIO.output(DINPin, LOW)
        # Clocksignal negative Flanke erzeugen   
        GPIO.output(CLKPin, HIGH)
        GPIO.output(CLKPin, LOW)
        cmd <<= 1 # Bitfolge eine Position nach links verschieben
            
    # Datenabruf
    adchvalue = 0 # Wert auf 0 zurücksetzen
    for i in range(13):
        GPIO.output(CLKPin, HIGH)
        GPIO.output(CLKPin, LOW)
        adchvalue <<= 1 # 1 Postition nach links schieben
        if(GPIO.input(DOUTPin)):
            adchvalue |= 0x01
    time.sleep(0.5)
    return adchvalue

# Konfiguration Eingangskanal und GPIOs
CH = 0  # Analog/Digital-Channel
CLK     = 18 # Clock
DIN     = 24 # Digital in
DOUT    = 23  # Digital out
CS      = 25  # Chip-Select

# Pin-Programmierung
GPIO.setup(CLK, GPIO.OUT)
GPIO.setup(DIN, GPIO.OUT)
GPIO.setup(DOUT, GPIO.IN)
GPIO.setup(CS,   GPIO.OUT)

while True:
    for j in range(256):
        print getAnalogData(CH, CLK, DIN, DOUT, CS, j)
Damit wird jeder möglicher Inputbefehl gesendet. Wir haben sogar jeden Zyklus in einer 2. Schleife 10 mal wiederholen lassen um Störungen auszuschließen.

Interessanterweise wurde in einem anderen Forum bemerkt, dass der Powersupply für unseren AD Wandler 5V beträgt, der RasPi aber nur mit 3,3V arbeitet (wie auch der AD Wandler für den das ursprüngliche Programm geschrieben wurde). Aktuell vermute ich also, dass es daran liegt.

Trotzdem vielen Dank für das Nachfragen, sollte es weiterhin Probleme geben, melde ich mich nochmal :)
BlackJack

@Verrain: Kann es sein das die beiden Schleifen jeweils 1 Bit zu viel senden und empfangen (wollen)? Ich habe nur kurz über das Datenblatt geschaut und da sieht es so aus als wenn 8 Bit gesendet werden müssen, wobei das erste Bit immer 1 sein muss, und 12 Bit gelesen werden können.
Antworten