使用Intel Galileo和tlc2543m在Python上运行SPI

时间:2017-03-03 19:08:00

标签: python spi intel-galileo

我正在做一个由16个模拟传感器组成的项目,我通过连接到ADC类型tlc2543m的SPI获取数据,想法是使用英特尔Galileo的Python通过SPI获取它们,也就是我我正在从The Galileo的Linux编程,我通过ETH进行通信,好像它是一台服务器。事实是这是我的代码:但我只得到奇怪的数据。我已经阅读了ADC的数据表,无论如何我都把它留在了这里。

如何使用MRAA库从python编程SPI通信???

代码:

 #This Python file uses the following encoding: utf-8
 import os, sys
 #Configure ports of SPI protocol
 import mraa
 import time
 spi=mraa.Spi(0)
 #spi.mode(mraa.SPI_MODE3)
 spi.mode(0)
 spi.frequency(20000000)
 spi.lsbmode(False)
 ss=mraa.Gpio(9)
 ss.dir(mraa.DIR_OUT)
 ss.write(1)
 sc=mraa.Gpio(8)
 sc.dir(mraa.DIR_OUT)
 sc.write(1)
 def readadc(pinaleer,ss):  
       #primera configuracion
       direccionaleer=0x0c
       resp=0x00
       segundobyte=0x00
       valordigital=0x00
       pinaleer=int(hex(pinaleer),16)
       direccionaleer = direccionaleer | (pinaleer<<4) #guardo en los primeros 4 bits la direccion a leer
       #direccionaleer = (direccionaleer<<8)
       #print hex(dieccionaleer)
       ss.write(1) #Enciendo la transferencia de datos
       resp=spi.write(bytearray(hex(direccionaleer))) #Le digo que pin quiero leer
       otra=spi.write(bytearray(0x00))#hex(direccionaleer))) #le mando ceros, ya acabé
       ss.write(0) #Apago la transferencia de datos
       time.sleep(0.0002) #Espero 20us
       ss.write(0)#Enciedo la transferencia de datos
       primerbyte=spi.write(bytearray(0x0000)) #Leo el primer byte de respuesta
       segundobyte=spi.write(bytearray(0x00)) #Leo el segundo byte, total 2Byte= 16bits de repuesta
       ss.write(1)#Apago la transferencia de datos
       salida1= (resp[3]<<8)|(resp[2])#<<4)|(resp[1])
       salida= (salida1>>4)+1
       return salida

d=0
while d<5:
#d+=1
dato1 = readadc(1,ss)
dato2 = readadc(2,ss)
dato3 = readadc(3,ss)
dato4 = readadc(4,ss)
dato5 = readadc(5,ss)
dato6 = readadc(6,ss)
dato7 = readadc(7,ss)
dato8 = readadc(8,ss)
dato9 = readadc(9,ss)
dato10= readadc(10,ss)
dato11= readadc(11,ss)
dato12= readadc(12,ss)
dato13= readadc(13,ss)
#print "Dato recibido:"
print (dato1, dato2, dato3, dato4, dato5, dato6, dato7, dato8, dato9, dato10, dato11, dato12, dato13)

TLV2543 Datasheet

1 个答案:

答案 0 :(得分:0)

我已经成功了。而不是使用&#34;写&#34;功能,使用&#34; writeByte&#34;功能,谢谢你的一切!!

无论如何,我留下了Python的另一个SPI通信示例,在这种情况下我使用了IntelGalileo Gen1和ADC类型tlc2543m:

cat H:\oldFile.txt -raw | %{$_.replace("`f","")} >h:\newFile.txt