Python 3.x RaspBerry pi B rev2-通过Python 3中的SPI通过MCP3208 ADC对LM335(温度传感器)进行采样时出现问题
本周末,我尝试将覆盆子pi与LM335温度传感器连接起来。我使用MCP 3208微控制器(通道0)连接传感器。我的目标是使用python 3脚本(类)在SPI模式下收集样本数据。 我已经检查了线路,对我来说一切都很好,但我是一个初学者,对电子概念不太了解。 在软件方面,我安装了声称与python 3兼容的quick2wire。事实上,我想用Python3API领导微控制器(而不是通过shell调用) 组件Python 3.x RaspBerry pi B rev2-通过Python 3中的SPI通过MCP3208 ADC对LM335(温度传感器)进行采样时出现问题,python-3.x,raspberry-pi,Python 3.x,Raspberry Pi,本周末,我尝试将覆盆子pi与LM335温度传感器连接起来。我使用MCP 3208微控制器(通道0)连接传感器。我的目标是使用python 3脚本(类)在SPI模式下收集样本数据。 我已经检查了线路,对我来说一切都很好,但我是一个初学者,对电子概念不太了解。 在软件方面,我安装了声称与python 3兼容的quick2wire。事实上,我想用Python3API领导微控制器(而不是通过shell调用) 组件 Raspberry pi REV2型号B,安装Rasbian喘息/Quick2wire/
- Raspberry pi REV2型号B,安装Rasbian喘息/Quick2wire/列出了dev/spix.y设备
- MCP3208 ADC:12位ADC/SPI。我正在使用GPIO中的CS0。传感器连接到通道0(B)
- LM335:温度传感器。输出10mV/°K。最小5muA/最大5mA。它连接到MCP3208通道0(A)
- 220欧姆电阻器(C)。设置关于LM335输出和期望的温度范围覆盖率与我自己的计算:可能是一个问题
#!/usr/bin/env python3
from quick2wire.spi import *
import sys, time
try:
channel = int(sys.argv[1])
except:
channel = 0
MCP3208 = SPIDevice(channel, 0)
while True:
try:
response = MCP3208.transaction(writing_bytes(0x41, 0x13), reading(1))
print ("output = %i" % ord(response[0]))
time.sleep(1)
except KeyboardInterrupt:
break
脚本输出:
output = 0
output = 0
output = 0
output = 0
output = 0
....
结果与通道1相同(argv=1)
由于MCP3208 Din(探头输出)接收到电压(见下文),quick2wire的读数应为18°C(今天我家的室内温度很低)
- 3,3 V/2^12=805μA,我理解为“数字步进”
- 微控制器上的18°C+273°C=291=>2,91 VDin引脚
- 然后返回2910/0.805=3615
- 检查点B处的电压为2.529 V,其他MCP3208通道上的电压为0.5 V(+/-5%)
def transaction(self, *transfers):
"""
Perform an SPI I/O transaction.
Arguments:
*transfers -- SPI transfer requests created by one of the reading,
writing, writing_bytes, duplex or duplex_bytes
functions.
Returns: a list of byte sequences, one for each read or duplex
operation performed.
"""
transfer_count = len(transfers)
ioctl_arg = (spi_ioc_transfer*transfer_count)()
# populate array from transfers
for i, transfer in enumerate(transfers):
ioctl_arg[i] = transfers[i].to_spi_ioc_transfer()
ioctl(self.fd, SPI_IOC_MESSAGE(transfer_count), addressof(ioctl_arg))
return [transfer.to_read_bytes() for t in transfers if t.has_read_buf]
另一个问题:
- 如何设置SPI配置值,如模式、时钟速度、每字位数、LSB。。。等等
提前感谢您的帮助我知道您可能打算学习如何使用ADC,因此这并不是您问题的答案(我将使用您非常丰富的帖子-谢谢),但我知道温度传感器已经在GPIO串行线路中打包数据,最适合覆盆子
如果你还没有读过的话,你真的必须读。我看了你的帖子。干得好。正如你所说,我对读/写模式下的ADC控制感兴趣。我收集的所有东西都在这里。你可以随意使用任何你认为合适的东西。嘿,Emmanuel,我知道从那时起已经有一段时间了,但我现在正试图实现完全相同的目标。你能给我一些关于如何计算Rc=220Ω的信息吗?你用什么公式来计算温度?