ESP32通过SPI读取多个SPI Slave--6个MAX31865 RTD芯片
ESP32控制6个SPI设备
- 选通电路
- 软件编程
- 程序说明
有一个ESP32想要读取6个MAX31865的RTD电阻,采用一个74HC138的3-8译码器作为6个MAX31865的选通。这里选择了Arduino IDE作为编程软件,从Adafruit下载的读取MAX31865的库。要选通读取可以对3-8进行编码,但这样要改变库函数,不希望对库进行修改,将固定的CS端连接到外部中断端,用函数
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode). 比如说pin 5与中断连接,这里:
- ISR是要调用的中断程序
- mode是:
- LOW 当端子变低时触发中断
- CHANGE 当端子变化时触发中断
- RISING 当端子变高时触发中断
- FAILING 当端子变低时触发中断。
我们这里选择了CHANGE来触发中断
选通电路
从图中可以看出,用ECS1,ECS2,ECS3来控制选通哪个MAX31865。
软件编程
采用Arduino IDE 1.8.13
void setup()
{max_1.begin(MAX31865_3WIRE); // set to 2WIRE or 4WIRE as necessarypinMode(INTERRUPT_PIN, OUTPUT);attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), sCounter, CHANGE);
从这里看到sCounter是要调用的中断程序,当我们在调用spi读取RTD的数据时会改变中断的端子,使其变成低电平。
再来看一下sCounter的代码的实现,看看中断程序的内容:
void sCounter()
{if (digitalRead(INTERRUPT_PIN)){csSelect(7);}elsecsSelect(si);
}
变量si是要选择的spi的通道。
再看一下csSelect(si)的选通程序:
void csSelect(int ix)
{switch(ix){case 0: digitalWrite(ECS3, LOW); digitalWrite(ECS2, LOW); digitalWrite(ECS1, LOW); break;case 1: digitalWrite(ECS3, LOW); digitalWrite(ECS2, LOW); digitalWrite(ECS1, HIGH); break;case 2: digitalWrite(ECS3, LOW); digitalWrite(ECS2, HIGH); digitalWrite(ECS1, LOW); break;case 3: digitalWrite(ECS3, LOW); digitalWrite(ECS2, HIGH); digitalWrite(ECS1, HIGH); break;case 4: digitalWrite(ECS3, HIGH); digitalWrite(ECS2, LOW); digitalWrite(ECS1, LOW); break;case 5: digitalWrite(ECS3, HIGH); digitalWrite(ECS2, LOW); digitalWrite(ECS1, HIGH); break;case 6: digitalWrite(ECS3, HIGH); digitalWrite(ECS2, HIGH); digitalWrite(ECS1, LOW); break;case 7: digitalWrite(ECS3, HIGH); digitalWrite(ECS2, HIGH); digitalWrite(ECS1, HIGH); break;default : digitalWrite(ECS3, HIGH); digitalWrite(ECS2, HIGH); digitalWrite(ECS1, HIGH); break; }
}
程序说明
当读取SPI时,选择的CS端会被读取SPI设备的程序控制其改变。通过中断监视SPI的选通信号,当SPI选通信号为高时,我们通过选通选择信道7为低电平。当SPI选通信号时低电平时,这时是要对SPI进行读写操作了。我们选择相应的si选择的输出端为低电平,作为选通信号,就可以读写不同的SPI设备了。
ESP32通过SPI读取多个SPI Slave--6个MAX31865 RTD芯片相关推荐
- 基于ESP32的SPI读取MPU9250数据
MPU9250集成了加速度计.陀螺仪.磁力计,能够比较精准的得到位姿信息,同时400KHZ的I2C和1MHZ的SPI让其更适用于对速度要求高的领域. 由于产品对速度的要求,我们选择采用速度更快的SPI ...
- ESP32学习笔记(20)——SPI(从机)接口使用
一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...
- SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解
SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...
- AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项
1.AS5047P硬件设计 1.1 简介.性能参数 AS5047P 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行高速(高达 28krpm)角度测量.这种新型位置传感器配备了革命性的 ...
- ESP32学习笔记(19)——SPI(主机)接口使用
一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...
- SPI 读取不同长度 寄存器_正点原子Linux第二十七章SPI实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十七章SPI实验 同I2C一样,SPI是很常用的通信 ...
- STC12C5A60S2软件模式SPI读取DS1302时钟实时显示在1602
文章目录 SPI总线的概念 什么是实时时钟 DS1302介绍 DS1302寄存器 Ds1302附加31字节静态RAM 时序图和控制指令 参考例程 SPI总线的概念 SPI接口全称"seria ...
- SPI 读取不同长度 寄存器_敏矽微电子Cortex-M0学习笔记10-SPI通信详解
1.SPI简介 ME32F030支持扩展的 SPI (Serial Peripheral interface)接口,它可以支持标准的 SPI 操作,兼容 4 线的 SSI (SynchronousSe ...
- STM32软硬件SPI读取MAX31865 PT100温度支持shell功能
PT100的温度读取硬件是利用TB的MAX31865现成模块,也可以自己做相应的PCB.原理图可以查看美信官方文档作为参考.传送门:https://www.maximintegrated.com/en ...
最新文章
- 最新消息!阿里四舍五入无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (三)
- 零基础python入门书籍推荐书目_铁粉看过来!送书啦,Python推荐书单,送书10本!...
- [云炬创业基础笔记] 第四章测试17
- 第09课:项目实战——让你的神经网络模型越来越深
- 多个div并排居中显示
- 页面中color颜色值_计算机毕业设计中实现一个简易美观的登录界面
- 直接从JBoss AS 7组件使用JGroups
- landscape 1
- 联想340c笔记本cpu能升级吗_联想扬天威6 2021款酷睿版怎么样?评测值得买吗?从价格和配置看就知道了...
- 教你如何窃取网络信息
- 关于Jquery中animate可以操作css样式属性总结
- Netty : netty 3如何解决空轮询bug
- HDU1205 吃糖果【水题】
- bzoj 3238: [Ahoi2013]差异(后缀数组+单调栈)
- Microsoft Visual Studio .NET 2003 编译xvidcore-1.1.3
- 51单片机定时器流水灯控制
- 阿郎恋曲(阿郎的故事)
- Android 手写签名 (图片合成)
- 一些过时的免杀技巧 仅供参考