电子说
基于RT-Thread 的Sensor框架对应的软件包max6675,通过AB32VG1开发板模拟spi驱动,读取热电偶传感器的数据,并通过串口输出,到串口屏显示图形。
非常感谢这次大赛主办方睿赛德,中科蓝讯,elecfan,为我们提供了很好的软件硬件平台,学习到基于嵌入式系统开发技术,提升一下技能,为今后的工作积累经验。同时深深感受到,我们国产软件硬件系统在崛起了!
AB32VG1开发板,用GPIO模拟spi接口,接到温度传感器模块
温度传感器模块MAX6675,采用spi数据接口和开发板通讯,三根信号线so,cs,sck分别接到MISO,CS,SCLK,电源VCC,GND,+,-接到热电偶传感器
串口屏(构成:TFT显示屏,spi接口连接到ESP32开发板),通过串口连接到AB32VG1,接收并图形化显示传感器数据图表
1、软件构成:rtthread开发环境,sensor软件包,max6675软件包,Arduino编译器,littleVGL图形界面,vscode编辑器。
2、驱动:rtthread硬件设备驱动框架,rtthread硬件管理系统,spi驱动,uart模块,msh模块,downloader下载器
3、线程:rtthread线程保障实时传感器数据采集,信号量实现同步串口发送数据,互斥量保护传感器数据集正确性
4、spi接口说明:非常感谢大神提供的drvsoftspi,让AB32VG1实现可以定制gpio为spi接口,
通过SOFT_SPI1_BUS_CONFIG结构体,设置miso=10,mosi=8,sck=9,将相应编号的io点连线到传感器模块的so->10,clk->9,cs->19,板级初始化 实现spi0设备总线,
max6675_init(const char *spi_device_name)中rt_soft_spi_device_attach("spi0","spi10",RT_NULL,19)将传感器设备挂载到spi0总线,片选cs=19,成为设备spi10,
rt_spi_configure(dev->spi, &cfg); //配置传输模式,设置spi10设备读写时序逻辑,cpol=1,cpha=0,datawidth=16。
5、代码仓库:https://gitee.com/alphasu1109/max6675_temp
数据显示线程,1秒定时,周期性读取sensor数据,存入全局变量temp1,释放信号量rxsem,同步串口发送数据
if (sensor_data.data.temp >= 0)
{
rt_kprintf("temp:%3d.%dC, timestamp:%5d\n",
sensor_data.data.temp / 100,
sensor_data.data.temp % 100,
sensor_data.timestamp);
}
else
{
rt_kprintf("temp:-%2d.%dC, timestamp:%5d\n",
abs(sensor_data.data.temp / 100),
abs(sensor_data.data.temp % 100),
sensor_data.timestamp);
}
temp1=sensor_data.data.temp;
//temp1=5;
rt_sem_release(&rx_sem);
遇到的坑:1,找不到max6675_read_temp(),原因是drvsoftspi.c没有被编译,通过勾选setting组建spi,并修改同级目录中sconscript文件,增加编译条件后解决。
2.挂载以后,通过list_device,能看到spi10,但是读取数据总是0,原因是没有设置时序逻辑,spi初始值datawidth是8,cpol和cpha都是0,经过检查max6675数据手册,重新修改配置后,成功读取数据。
3.include "spi.h" 编译报错,找不到,没有包含在include文件夹内,经过检查"rt_thread/components/drivers/include"文件夹,存在"rtdevice.h"文件,里面含有spi.h加载过程,#ifdef RT_USING_SPI #include "spi.h" #endif, 因此改为#include "rtdevice.h"
1、软件构成:rtthread开发环境,sensor软件包,max6675软件包,Arduino编译器,littleVGL图形界面,vscode编辑器。
2、驱动:rtthread硬件设备驱动框架,rtthread硬件管理系统,spi驱动,uart模块,msh模块,downloader下载器
3、线程:rtthread线程保障实时传感器数据采集,信号量实现同步串口发送数据,互斥量保护传感器数据集正确性
4、spi接口说明:非常感谢大神提供的drvsoftspi,让AB32VG1实现可以定制gpio为spi接口,
通过SOFT_SPI1_BUS_CONFIG结构体,设置miso=10,mosi=8,sck=9,将相应编号的io点连线到传感器模块的so->10,clk->9,cs->19,板级初始化 实现spi0设备总线,
max6675_init(const char *spi_device_name)中rt_soft_spi_device_attach("spi0","spi10",RT_NULL,19)将传感器设备挂载到spi0总线,片选cs=19,成为设备spi10,
rt_spi_configure(dev->spi, &cfg); //配置传输模式,设置spi10设备读写时序逻辑,cpol=1,cpha=0,datawidth=16。
5、代码仓库:https://gitee.com/alphasu1109/max6675_temp
数据显示线程,1秒定时,周期性读取sensor数据,存入全局变量temp1,释放信号量rxsem,同步串口发送数据
if (sensor_data.data.temp >= 0)
{
rt_kprintf("temp:%3d.%dC, timestamp:%5d\n",
sensor_data.data.temp / 100,
sensor_data.data.temp % 100,
sensor_data.timestamp);
}
else
{
rt_kprintf("temp:-%2d.%dC, timestamp:%5d\n",
abs(sensor_data.data.temp / 100),
abs(sensor_data.data.temp % 100),
sensor_data.timestamp);
}
temp1=sensor_data.data.temp;
//temp1=5;
rt_sem_release(&rx_sem);
遇到的坑:1,找不到max6675_read_temp(),原因是drvsoftspi.c没有被编译,通过勾选setting组建spi,并修改同级目录中sconscript文件,增加编译条件后解决。
2.挂载以后,通过list_device,能看到spi10,但是读取数据总是0,原因是没有设置时序逻辑,spi初始值datawidth是8,cpol和cpha都是0,经过检查max6675数据手册,重新修改配置后,成功读取数据。
3.include "spi.h" 编译报错,找不到,没有包含在include文件夹内,经过检查"rt_thread/components/drivers/include"文件夹,存在"rtdevice.h"文件,里面含有spi.h加载过程,#ifdef RT_USING_SPI #include "spi.h" #endif, 因此改为#include "rtdevice.h"
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !