Microchip MCP3208 Ansteuerung

OP #4863639
Lesenswert?
• ▲
▼
Hallo allerseits,

ich habe eigentlich keine komplizierte Frage zur Ansteuerung. Ich hab 
einen 12-Bit A/D Wandler MCP3208 und habe auch einen Code für ein Python 
Skript mit dem ich Daten auslese. Ich würde nur mal gerne wissen, wie 
dieser Code technisch interpretiert werden kann. Aus dem Datenblatt 
wurde ich nicht schlau...

Der Code, den ich zum Auslesen nutze lautet:

#################
import spidev

def readChannel(channel):
  val = spi.xfer2([6+((4&channel)>>2),(3&channel)<<6,0])
  data = ((val[1]&15) << 8) + val[2]
  return data
#################

Ich habe das gefunden
xfer2(list of values[, speed_hz, delay_usec, bits_per_word])

Ich denke, da es ein 12 Bit Wandler ist brauche ich zwei Bytes in val[] 
von denen ich 4 Stellen verwerfe. Aber die Rechnungen dahin habe ich 
nicht ganz verstanden...

Für Hilfe wäre ich dankbar,

Steven
#4863718
Lesenswert?
• ▲
▼
Guck dir im Datenblatt das Figure 6-1 an.
http://ww1.microchip.com/downloads/en/devicedoc/21298c.pdf

Es werden in jeder Richtung 3 Bytes übertragen.
Die Bitshifterei für "channel" ist nötig, da das 3. Bit der Kanalnummer 
in Bit 0 des Bytes 0 (1. Byte) erwartet wird, und Bits 2 und 1 in Bit 7 
und 6 des Bytes 1 (2. Byte).
Das Addieren von 6 im ersten Byte setzt sowohl das Start-Bit als auch 
SGL/DIFF.

Der ADC Wert ist dann in den Rückgabe Bytes 1 und 2 (2. und 3. Byte) zu 
finden.
1
val[1] & 15
maskiert die untersten 4 Bits (15 = 0x0F), stellt also sicher, dass die 
oberen 4 Bits auf 0 gesetzt sind.
Diese 4 Bits werden dann um 8 nach links geshiftet, da sie ja die Bits 
8, 9, 10 und 11 des ADC Wertes sind.
1
val[2]
kann unverändert bleiben, da hier alle Bits schon an der richtigen 
Stelle sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren