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