基于IIC的温度传感器实验
基于IIC的溫度傳感器實驗
- 一、IIC簡介
- 二、硬件IIC與軟件IIC的區別
- 三、實現I2CAHT20溫濕度傳感器的溫度采集
- 1、AHT20簡介
- 2、配置函數庫,編寫函數
- 1:下載驅動函數
- 2:修改相應引腳號
- 3:將相應文件復制進去
- 4:添加庫文件
- 5: 寫主函數
- 總結:
一、IIC簡介
IC總線(Inter-Integrated Circuit)即集成電路總線,是PHILIPS公司設計出來的一種簡單、雙向、二線制、同步串行總線。IIC總線是一個多向控制總線,多個器件(從機)可以同時掛載到一個主機控制的一條總線上。每個連接在總線上的設備都是通過唯一的地址和其他器件通信,主機和從機的角色可互換,
主機和從機的概念。主機就是負責整個系統的任務協調與分配,從機一般是通過接收主機的指令從而完成某些特定的任務,主機和從機之間通過總線連接,進行數據通訊。我們平時使用的個人電腦也就是這個概念。
** IIC協議為半雙工協議。 **
全雙工指在發送數據的同時也能夠接收數據,兩者同步進行。目前的網卡一般都支持全雙工。
半雙工就是指一個時間段內只有一個動作發生,早期的對講機、以及早期集線器等設備都是基于半雙工的產品。
還有一種單工通信是指通信線路上的數據按單一方向傳送.。
數據有效傳輸在scl信號的高電平期間,sda數據線保持穩定,在scl為低電平時允許sda數據線變化。
來自知乎
二、硬件IIC與軟件IIC的區別
所謂硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的;軟件I2C一般是用GPIO管腳,用軟件控制管腳狀態以模擬I2C通信波形。
硬件I2C的效率要遠高于軟件的,而軟件I2C由于不受管腳限制,接口比較靈活。
模擬I2C 是通過GPIO,軟件模擬寄存器的工作方式,而硬件(固件)I2C是直接調用內部寄存器進行配置。如果要從具體硬件上來看,可以去看下芯片手冊。因為固件I2C的端口是固定的,所以會有所區別。
至于如何區分它們
可以看底層配置,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否則就是模擬
可以看IIC寫函數,看里面有木有調用現成的函數或者給某個寄存器賦值,如果有,則肯定是固件IIC功能,沒有的話肯定是數據一個bit一個bit模擬發生送的,肯定用到了循環,則為模擬。
根據代碼量判斷,模擬的代碼量肯定比固件的要大。
硬件IIC用法比較復雜,模擬IIC的流程更清楚一些。
硬件IIC速度比模擬快,并且可以用DMA
模擬IIC可以在任何管腳上,而硬件只能在固定管腳上。
軟件i2c是程序員使用程序控制SCL,SDA線輸出高低電平,模擬i2c協議的時序。一般較硬件i2c穩定,但是程序較為繁瑣,但不難。
硬件i2c程序員只要調用i2c的控制函數即可,不用直接的去控制SCL,SDA高低電平的輸出。但是有些單片機的硬件i2c不太穩定,調試問題較多。
出自https://blog.csdn.net/lee_goi/article/details/111101939
三、實現I2CAHT20溫濕度傳感器的溫度采集
1、AHT20簡介
2020年上市,奧松生產; 3mmx3mmx1mm 超小體積; 經過標定的數字信號,標準I2C輸出格式; 由一個電容式濕度傳感元件和一個標準的片上溫度傳感元件組成; 采用SMD封裝適于回流焊; 響應迅速、抗干擾能力強; AHT20 的供電范圍為 2.0-5.5V, 推薦電壓為3.3V。
參數如下:
2、配置函數庫,編寫函數
1:下載驅動函數
驅動函數官網有,包括.c和.h文件。 官網
2:修改相應引腳號
我使用的是正點原子的精英版,其SCL和SDL分別對應的就是PB6和PB7,我們用普通IO口來模擬I2C的功能,來實現功能。我們需要修改其引腳函數
3:將相應文件復制進去
4:添加庫文件
將.h文件include 進去。具體過程就不闡述,或者你復制.h文件進以前c/c++include的庫文件里。
5: 寫主函數
#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "usmart.h" #include "24cxx.h" #include "AHT20.h" int AHT20alive int main(void) {volatile int c,t;float cs,ts;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置中斷優先級LED_Init(); //初始化LEDdelay_init(); //延時初始化IIC_Init(); //IIC初始化uart_init(115200); //串口初始化為115200AHT20alive=AHT20_Init(); //AHT20初始化 while(1){if(AHT20alive)//是否工作正常{//讀取其原始數據AHT20.flag = AHT20_ReadHT(AHT20.HT);c = AHT20.HT[0]*100*10/1024/1024; //濕度計算公式t = AHT20.HT[1]*200*10/1024/1024-500;//溫度計算公式//結果都放大了10倍cs = c/10.0;ts = t/10.0;LED0 = !LED0;LED1 = !LED1;//用于測試Printf工作是否正常printf("濕度:\r\n%f\r\n",c2);printf("溫度:\r\n%f\r\n\r\n",t2);//正常工作雙燈翻轉LED0 = !LED0;LED1 = !LED1;}delay_ms(2000); } }溫濕度采集主要是
lcd因為沒有燒制程序,所以沒顯示
總結:
iic的應用也就這么回事,STM32通過程序實現了對IIC信號的仿真接收發送,實現了以IIC為基礎實現AHT20的溫度和濕度的傳感器應用數據傳輸。
總結
以上是生活随笔為你收集整理的基于IIC的温度传感器实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战十四:基于线性回归预测环境空气质量
- 下一篇: linux tar xzmf,有人吗??