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. <note important>Les entrées analogiques doivent évoluer uniquement dans la plage de tension 0 à 3,3 V</note>
Il faut dans un premier temps mettre en route le bus SPI au démarrage.
Edit the file /boot/config.txt and add this line: Run editor with this command
sudo nano /boot/config.txt
then add this line in the file at the end of the page
dtparam=spi=on
For software modules installation, execute these commands
sudo apt-get install python-dev python-pip sudo pip install spidev
To verify it works, the following python code will allow you to read the values (and display in points and voltage of the 4 inputs).
#!/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
Here is a test sequence, with the voltage setting of 3.3V (taken on the 1WIRE pin), directly sent to pins 1 to 4 of the MCP3204 (IC7)