首先接线 连接树莓派的SPI0 MOSI(19)和MCP3008的Din(11),SPI0 MISO(21)和MCP3008 的Dout(12),其它根据下面电路图连接
然后将温度传感器的输出端口接到MCP3008的CH0(1),MCP3008一共有10个模拟输入口再加上树莓派最多可以接两块MCP3008,所以你最多可以读取10*2=20个模拟输入量
连接MCP3008首先实例化一个SpiDevice SpiDevice在Windows.Devices.Spi命名空间内,所以需要引用'Windows IoT Extensions for the UWP',如下图
[mw_shl_code=csharp,true] //新建实例代码SpiDevice ADC; // . . . var settings = new SpiConnectionSettings(0) { ClockFrequency = 500 * 1000, // 时钟不要超过3.6 MHz,根据芯片数据手册决定大小 Mode = SpiMode.Mode0, }; string spiAqs = SpiDevice.GetDeviceSelector('SPI0'); var devicesInfo = await DeviceInformation.FindAllAsync(spiAqs); ADC = await SpiDevice.FromIdAsync(devicesInfo[0].Id, settings); [/mw_shl_code]
读取数据 我们使用 TransferFullDuplex()函数读取数据,这个函数接收两个参数(字节数组),第一个是告诉函数执行哪个操作,另一个是接收读取的值。 由于MCP3008的精度是10位,2个字节就可以容纳,这里多加一个。[mw_shl_code=csharp,true] byte[] request = new byte[3] { 0x01, 0x80, 0 }; //读取CH1数据,具体发送什么值可以在芯片的数据手册中查到byte[] response = new byte[3]; // . . . ADC.TransferFullDuplex(request, response); [/mw_shl_code]
将byte[] 转换为 int [mw_shl_code=csharp,true] int result = 0; result = data[1] & 0x03; result <<= 8; result += data[2]; return result;[/mw_shl_code]到此你就可以使用树莓派读取模拟输入了