====== Configuration des entrées analogiques ====== Le Raspberry Pi (2) est dépourvu d'entrées analogiques. La carte SVXLink Card est équipée d'un convertisseur assurant cette fonction (IC7 MCP3204) pour 4 mesures. Les entrées analogiques doivent évoluer uniquement dans la plage de tension 0 à 3,3 V Il faut dans un premier temps mettre en route le bus SPI au démarrage. ===== Fichier /boot/config.txt ===== Editer le fichier /boot/config.txt et ajouter la ligne suivante. Ouvrir l'éditeur avec la commande suivante sudo nano /boot/config.txt puis ajouter dans le fichier en bas de page dtparam=spi=on ===== Installation du module python de gestion du bus SPI ===== Lancer les commandes d'installation sudo apt-get install python-dev python-pip sudo pip install spidev ===== Tests d'acquisition des voies d'entrées analogiques ===== Pour vérifier que cela fonctionne, le code python suivant va vous permettre de lire les valeurs (et les afficher en nombre de points et tension des 4 entrées). #!/usr/bin/python # # MCP3204/MCP3208 sample program for Raspberry Pi # # how to setup /dev/spidev?.? # $ sudo modprobe spi_bcm2708 # # how to setup spidev # $ sudo apt-get install python-dev python-pip # $ sudo pip install spidev # import spidev import time class MCP3208: def __init__(self, spi_channel=0): self.spi_channel = spi_channel self.conn = spidev.SpiDev(0, spi_channel) self.conn.max_speed_hz = 1000000 # 1MHz def __del__( self ): self.close def close(self): if self.conn != None: self.conn.close self.conn = None def bitstring(self, n): s = bin(n)[2:] return '0'*(8-len(s)) + s def read(self, adc_channel=0): # build command cmd = 128 # start bit cmd += 64 # single end / diff if adc_channel % 2 == 1: cmd += 8 if (adc_channel/2) % 2 == 1: cmd += 16 if (adc_channel/4) % 2 == 1: cmd += 32 # send & receive data reply_bytes = self.conn.xfer2([cmd, 0, 0, 0]) # reply_bitstring = ''.join(self.bitstring(n) for n in reply_bytes) # print reply_bitstring # see also... http://akizukidenshi.com/download/MCP3204.pdf (page.20) reply = reply_bitstring[5:19] return int(reply, 2) if __name__ == '__main__': spi = MCP3208(0) count = 0 a0 = 0 a1 = 0 a2 = 0 a3 = 0 #while count <= 11: while True: count += 1 a0 += spi.read(0) a1 += spi.read(1) a2 += spi.read(2) a3 += spi.read(3) if count == 10: print "A1=%04d(%.2fV) A2=%04d(%.2fV) A3=%04d(%.2fV) A4=%04d(%.2fV)" % (a0/10, a0/10*3.3/4096, a1/10, a1/10*3.3/4096, a2/10, a2/10*3.3/4096, a3/10, a3/10*3.3/4096,) time.sleep(1) count = 0 a0 = 0 a1 = 0 a2 = 0 a3 = 0 Ici vous trouvez une séquence d'essai, avec une mise au potentiel de 3.3V (pris sur la broche 1WIRE), directement amené sur les broches 1 à 4 du MCP3204 (IC7) {{ :documents:test-analog-inputs.gif?nolink |}}