基于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"
審核編輯:湯梓紅
-
設備
+關注
關注
2文章
4611瀏覽量
71326 -
檢測
+關注
關注
5文章
4576瀏覽量
92379 -
開發板
+關注
關注
25文章
5382瀏覽量
100726
發布評論請先 登錄
相關推薦
Linux開發板CAN總線測試方法,觸覺智能RK3568開發板演示

OpenCV行人檢測應用方案--基于米爾全志T527開發板

VMware環境下,同時燒錄固件檢測不到設備如何解決?觸覺智能鴻蒙開發板演示

正點原子fpga開發板不同型號
【干貨】性價比拉滿!HK32F407VG開發板介紹

ARM開發板的功耗分析與優化
linux開發板如何編譯curl
米爾NXP i.MX 93開發板的Qt開發指南

評論