Forum: Mikrocontroller und Digitale Elektronik Microchip MCP3208 Ansteuerung


von Steven K. (cu1990)


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

von Joe F. (easylife)


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.

: Bearbeitet durch User
von Steven K. (cu1990)


Lesenswert?

Vielen Dank für die Hilfe. Jetzt macht es Sinn!

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
Noch kein Account? Hier anmelden.