【问题标题】:SPI on Python with the Intel Galileo and tlc2543m使用 Intel Galileo 和 tlc2543m 在 Python 上进行 SPI
【发布时间】:2017-07-24 00:30:21
【问题描述】:

我正在做一个由 16 个模拟传感器组成的项目,我通过连接到 ADC 类型 tlc2543m 的 SPI 获取它的数据,想法是使用 Intel 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

【问题讨论】:

    标签: python spi intel-galileo


    【解决方案1】:

    我已经成功了。不要使用“write”函数,而是使用“writeByte”函数,谢谢一切!!

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

    # This Python file uses the following encoding: utf-8
    import os, sys
    import mraa
    import time
    
    spi=mraa.Spi(0) #Bus comunication
    spi.mode(mraa.SPI_MODE0) #Comunication MODE0
    spi.frequency(2000000) #Frequency of 2MHz
    spi.lsbmode(False) #Format data MSB
    ss=mraa.Gpio(8) #wire CS
    ss.dir(mraa.DIR_OUT)
    ss.write(1)
    def readadc(pinaleer,ss):
        dieccionaleer=0x0c #Input c=1100 so Output data length 16bits,  MSB first, Unipolar
            pinaleer=int(hex(pinaleer),16) #address bits (4)
        dieccionaleer = dieccionaleer | (pinaleer<<4) #Put address bit in the 4th bits
        #Comunication        
        ss.write(0)  #CS=0 <-- Enables the device
            esc=spi.writeByte(dieccionaleer) #First byte with input info
            esc2=spi.writeByte(0x00) #Complete the 16bits --> Clock
            ss.write(1) #CS=1 <--- Disables the device
            time.sleep(0.00020) #Wait more time than 10us= time conversion AD
            ss.write(0) #CS=0 <-- Enables the device
            primerbyte=spi.writeByte(0x00) #First byte with 8bit of information
            segundobyte=spi.writeByte(0x00) #Second byte with 4bit (MSB) information , 8+4=12bits
            ss.write(1) #CS=1 <--- Disables the device
    
            salida1=0x0000
            salida1=salida1 | (primerbyte << 8)
            salida1=salida1 | (segundobyte)
            salida = (salida1>>4)+1 #Output 12bits
    
            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) #pin Test (Vref+ - Vref-) /2    =~ 2048
        dato12= readadc(12,ss) #pin Test Vref-  0000
        dato13= readadc(13,ss) #pin Test Vref+  4096
    
    
        print (dato1, dato2, dato3, dato4, dato5, dato6, dato7, dato8, dato9, dato10, dato11, dato12, dato13)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多