#!/usr/bin/python3 # testet den A/D-Wandler MCP3208 (Spannung an CH2) import spidev from time import sleep # print("\n--- Program mcp3208easy.py ---") print("Input on channel CH2 of mcp3208: U max. 3.3V\n") # # Variablendeklaration und Oeffung des SPI-Busses # # Auswahl des SPI_Busses, hier nur 0 moeglich SPI_Bus = 0 # Slave, der mit CS-Signal angesprochen wird CS = 0 # Frequenz in Hz fuer das SCLK-Signal (clock) f = 20000 # Referenzspannung in V an Pin 15 des MCP3208 Uref = 3.3 # Spannungsintervall digitaler Wert-Einheiten Uiv = Uref / 4096 # Kanalnummer (Bereich 0 - 7) des AD-Wandlers K = 2 # Kanal CH2 des AD-Wandlers # Pausendauer zwischen Messsungen in Sekunden Pausendauer = 1 # Erzeugung eines SpiDev-Objekts namens spi spi = spidev.SpiDev() # Oeffnung von SPI-Bus SPI_Bus fuer Slave CS spi.open(SPI_Bus, CS) # Vorgabe der maximalen SPI-Bus-Taktfrequenz spi.max_speed_hz = f # # Ausgabe eines Textes vor Beginn der Messung print("Measurement of voltage on CH2 of MCP3208") print("(change with potentiometer, Ctrl-C to quit)\n") # # Folgendes normalerweise, ohne Druecken von Ctrl-C try: # # Endlos-Schleife zur Messung und Ausgabe des Wertes # while True: adc = spi.xfer2([6 + (K >> 2), K << 6, 0]) # je 3 Bytes senden (MOSI) und empfangen (MISO) Wert = ((adc[1]&15) << 8) + adc[2] # Bits->Zahl U = Uiv * Wert + Uiv/2 # Digitalwert->Spannung print("K {0:1d}: U = {1:4.2f} V".format(K,U)) sleep(Pausendauer) # Pause zwischen Messungen # # Folgendes nach Druecken von Ctrl-C except KeyboardInterrupt: spi.close() # trennt SpiDev-Objekt spi vom SPI-Bus print("\n- Messung beendet -\n") # Programmende