====== 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 |}}