MCP3025208 Analoge Werte am Raspberry Pi messen

MCP3025208 Analoge Werte am Raspberry Pi messen Titelbild

MCP3008 Analoge Werte am Raspberry Pi Messen

Mit dem Raspberry Pi haben wir ein mächtigen Computer und können mit den GPIO-Pins einfach auf die Umwelt zugreifen und dort Daten lesen. Wir haben aber ein Problem, nämlich dass wir nur digitale Daten lesen können. Digitale Daten sind dabei nur eine 0 oder 1. Heißt, wenn wir mit Sensoren arbeiten, einen hohen oder einen niedrigen Strom haben. Ein Beispiel ist dabei ein Taster. Wenn Strom fließt, messen wir eine 1 und wenn kein Strom fließt, messen wir eine 0. Andere Sensoren übermitteln aber analoge Werte. Diese befinden sich zwischen 0 und 1. Um diese auszulesen, wird ein ADC gebraucht. Ein Analog zu Digital Konverter. Mit dem MCP3008 haben wir genau so ein Gerät. Über SPI können wir es an den Raspberry Pi anschließen und haben dann die Möglichkeit bis zu acht analoge Anschlüsse auszulesen.




Schaltplan eines MCP3008 ADC

Die untere Seite erkennst du an der halbrunden Anordnung. CH0 - CH7 sind die analogen Eingänge, die wir benutzen werden.

  • VDD: Spannung, die der MCP3008 für den Betrieb braucht
  • V_REF: Ist die höchste Spannung, welche die analogen Anschlüsse bekommen. Diese werden gebraucht, um richtige Werte zu messen
  • AGND: Masse für die analogen Anschlüsse
  • CLK: Abkürzung für Clock (Uhr). Koordiniert die Geschwindigkeitszeit
  • D_OUT: Ausgang zur SPI Schnittstelle am Raspberry Pi
  • D_IN: Eingang zur SPI Schnittstelle am Raspberry Pi
  • CS/SHDN: Abkürzung für Cable Select. Mit dem SPI lassen sich verschiedene Geräte gleichzeitig ansteuern
  • DGND: Masse für den MCP3008

Wie gesagt brauchen wir SPI, wenn du das noch nicht aktiviert hast, gibt es hier eine Anleitung dafür:

SPI Aktivieren: http://cw42.de/spi

Nachdem wir die Software Grundlagen hinter uns haben, geht es darum, die Hardware richtig anzuschließen.

MCP3008 an den Raspberry Pi angeschlossen

Die halbrunde Nase zeigt in diesem Fall nach unten. Stecke den MCP3008 am besten über den mittleren Kanal des Breadboards, also zwischen e und f.

Anschlüsse Raspberry Pi Anschlüsse MCP3008
GND DGND
GPIO 8N CS/SHD
GPIO 10 D_IN
GPIO 9 D_OUT
GPIO 11 CLK
GND AGND
V_REF 3,3V
VDD 3,3V


nano mcp.py
#!/usr/bin/python
import spidev
import time
import os
import RPi.GPIO as gpio

# SPI Verbindung herstellen
spi = spidev.SpiDev()
spi.open(0,0)

# Liest Daten vom MCP3008
def analogEingang(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

while True:
  print("0: "+str(analogEingang(0)))
  print("1: "+str(analogEingang(1)))
  print("2: "+str(analogEingang(2)))
  print("3: "+str(analogEingang(3)))
  print("4: "+str(analogEingang(4)))
  print("5: "+str(analogEingang(5)))
  print("6: "+str(analogEingang(6)))
  time.sleep(0.2)

Jetzt musst du nur noch das Programm ausführen

sudo python mcp.py

Wichtig ist, dass du das Programm mit Rootrechten ausführst und daran denkst, dass es sich dabei um ein Python2 Programm handelt. Wenn jetzt keine Werte ausgegeben werden, sollte dich das nicht wundern, denn du hast ja auch noch nichts angeschlossen, was sinnvolle Werte ausgeben könnte ;)

Also schnell weiter zum ersten Sensor!

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!