一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PIC32MX470 溫濕度計(jì)+RTOS+GUI:串口打印溫濕度數(shù)據(jù)解析

電子工程師 ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-01 03:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

串口可用之后,很多debug信息就可以通過串口打印輸出了,所以我打算先把讀到的溫濕度數(shù)據(jù)通過串口打印出來,然后再調(diào)OLED顯示,之后再將數(shù)據(jù)通過OLED屏顯示,一步一步來。

首先還是在板子自帶的Information sheet上找到I2C的管腳,有I2C1和I2C2,但還是由于硬件老白的原因,只能用X32接口上的I2C2了。

1

看了下溫濕度的資料,最高耐壓5.5V,先接到3.3V上試一下,按如下方式連接X32和溫濕度計(jì)

2

接下來依然是通過MHC來使能I2C驅(qū)動

1. 打開MHC的Options選項(xiàng)卡,找到I2C對應(yīng)的driver選項(xiàng)打開并做相應(yīng)的配置,我的配置如下

2. 打開MHC的Pin Settings,將RF4和RF5設(shè)置為I2C2的SDA和SCL

3. 然后生成代碼,主要包含以下幾個源文件,我為了添加callback以及封裝DHT12的驅(qū)動,又添加了bsp_i2c.c和bsp_dht12.c兩個文件

5

4. 分析I2C驅(qū)動代碼后可知在SYS_Initialize中已經(jīng)根據(jù)用戶的配置調(diào)用了I2C相關(guān)的初始化函數(shù),所以使用時只需要在我們的封裝層里直接調(diào)用drv_i2c_mapping.c中的其他API就可以了,我添加的bsp_i2c.c和bsp_dht12.c中的代碼如下,DHT12的數(shù)據(jù)還沒有做校驗(yàn)

bsp_i2c.c

#include “system/common/sys_common.h”

#include “system_config.h”

#include “system_definitions.h”

#include “driver/i2c/drv_i2c.h”

#include

#include

#define BSP_I2C_BUF_SIZE 0x10

typedef struct bsp_i2c_dev {

DRV_HANDLE I2CHandle;

OS_SEM SemLock; /* I2C Exclusive access sempahore */

OS_SEM SemWait; /* Transfer Complete signal */

CPU_INT08U TxBuf[BSP_I2C_BUF_SIZE]; /* The transfer data area */

CPU_INT08U RxBuf[BSP_I2C_BUF_SIZE]; /* The receive data area */

} BSP_I2C_DEV;

static BSP_I2C_DEV BSP_I2C_DevTbl[BSP_I2C_NBR_MAX];

static void BSP_I2C2_Callback (DRV_I2C_BUFFER_EVENT event,

DRV_I2C_BUFFER_HANDLE bufferHandle, uintptr_t context);

CPU_BOOLEAN BSP_I2C_Init (CPU_INT08U i2c_id,

CPU_INT08U i2c_mode,

CPU_INT32U bit_rate)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

break;

default:

return (DEF_FAIL);

}

/* Setup the I2C handle */

p_i2c_dev-》I2CHandle = DRV_I2C_Open(DRV_I2C_INDEX_0, 0);

/* -------------- CREATE OS SEMAPHORES ------------- */

OSSemCreate((OS_SEM *)&(p_i2c_dev-》SemWait), “I2C Wait”, 0, &err);

OSSemCreate((OS_SEM *)&(p_i2c_dev-》SemLock), “I2C Lock”, 1, &err);

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

DRV_I2C_BufferEventHandlerSet(p_i2c_dev-》I2CHandle, BSP_I2C2_Callback, NULL);

break;

default:

return (DEF_FAIL);

}

return (DEF_OK);

}

CPU_BOOLEAN BSP_I2C_WrRd (CPU_INT08U i2c_id,

CPU_INT08U i2c_addr,

CPU_INT08U *offset_buf,

CPU_INT08U offset_len,

CPU_INT08U *p_buf,

CPU_INT16U nbr_bytes)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

if ((offset_buf == (CPU_INT08U *)0) || (p_buf == (CPU_INT08U *)0)) {

return (DEF_FAIL);

}

if ((nbr_bytes 《 1) ||

((offset_len + 1) 》 BSP_I2C_BUF_SIZE) ||

((nbr_bytes + 1) 》 BSP_I2C_BUF_SIZE)) {

return (DEF_FAIL);

}

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

break;

default:

return (DEF_FAIL);

}

/* Lock the I2C peripheral */

OSSemPend(&(p_i2c_dev-》SemLock), 0, OS_OPT_PEND_BLOCKING, 0, &err);

/* Do master write transfer */

DRV_I2C_TransmitThenReceive(p_i2c_dev-》I2CHandle, i2c_addr,

offset_buf, offset_len, p_buf, nbr_bytes, NULL);

/* Wait until the transfer completes */

OSSemPend(&(p_i2c_dev-》SemWait), 1000, OS_OPT_PEND_BLOCKING, 0, &err);

OSSemPost(&(p_i2c_dev-》SemLock), OS_OPT_POST_1, &err); /* Release the I2C Peripheral */

return DEF_OK;

}

static void BSP_I2C2_Callback (DRV_I2C_BUFFER_EVENT event,

DRV_I2C_BUFFER_HANDLE bufferHandle, uintptr_t context)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

OSSemPost(&(p_i2c_dev-》SemWait), OS_OPT_POST_1, &err); /* Post to the sempahore */

}

bsp_dht12.c

#include “system/common/sys_common.h”

#include “system_config.h”

#include “system_definitions.h”

#include

#include

CPU_BOOLEAN BSP_DHT12_Read (CPU_INT08U *hum_high,

CPU_INT08U *hum_low,

CPU_INT08U *temp_high,

CPU_INT08U *temp_low)

{

CPU_BOOLEAN ret;

CPU_INT08U byte_addr = 0;

CPU_INT08U data_buf[4];

ret = BSP_I2C_WrRd(BSP_I2C_ID_I2C2, 0xB8, &byte_addr, 1, data_buf, 4);

if (ret) {

*hum_high = data_buf[0];

*hum_low = data_buf[1];

*temp_high = data_buf[2];

*temp_low = data_buf[3];

}

return ret;

}

5. 在_SYS_Tasks任務(wù)中添加我們自己代碼的初始化

6. 最后在APP_Tasks中添加讀溫濕度數(shù)據(jù)的處理,每秒讀一次并通過串口打印出來

串口打印輸出如下

223816fz7rn1mooo1rbyu9

串口定時地將溫濕度數(shù)據(jù)打印出來,也算是一個簡陋的溫濕度計(jì)吧。下一步就是調(diào)試SPI和OLED屏,給我們的溫濕度計(jì)做一個好看一點(diǎn)的輸出界面,畢竟這是一個實(shí)(kao)力(lian)說(chi)話(fan)的時代。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PIC32MX470
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1895
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    常見的溫濕度傳感器類型?

    ),溫度精度為±0.2℃(典型)。濕度和溫度數(shù)據(jù)可以通過MCU、藍(lán)牙芯片或SoC芯片通過數(shù)字接口直接讀取。它與SMBus、I2C接口兼容。非常適合用于暖通空調(diào)、環(huán)境監(jiān)測等。 在選擇溫濕度傳感器時,應(yīng)根據(jù)具體的使用場景和需求綜合考
    發(fā)表于 06-24 09:24

    溫濕度變送器功能有哪些?一文詳細(xì)解析

    功能就是精準(zhǔn)測量環(huán)境中的溫度和濕度。它采用高精度的傳感器,能夠快速、準(zhǔn)確地感知環(huán)境溫濕度的變化,并將這些數(shù)據(jù)轉(zhuǎn)化為可識別的電信號。無論是在實(shí)驗(yàn)室、倉庫,還是在生產(chǎn)車間,都能為用戶提供可靠的溫濕
    發(fā)表于 06-03 10:56

    智能倉儲:溫濕度監(jiān)控方案應(yīng)用

    隨著倉儲環(huán)境要求提高,溫濕度監(jiān)控對保障貨物品質(zhì)至關(guān)重要。本文介紹一個工廠倉庫溫濕度監(jiān)控方案,利用溫濕度變送器、LoRa技術(shù)和智能監(jiān)測平臺,為倉庫業(yè)主提供高效、可靠的監(jiān)測解決方案。倉庫溫濕度
    的頭像 發(fā)表于 05-29 11:35 ?276次閱讀
    智能倉儲:<b class='flag-5'>溫濕度</b>監(jiān)控方案應(yīng)用

    用樹莓派RP2350 DIY 桌面動態(tài)溫濕度計(jì)

    桌面動態(tài)溫濕度計(jì)本文介紹了DFrobotBeetleRP2350開發(fā)板結(jié)合DHT11模塊、鋰電池模塊、隨機(jī)眨眼動畫,實(shí)現(xiàn)OLED顯示的桌面動態(tài)溫濕度計(jì)的項(xiàng)目設(shè)計(jì)。一、項(xiàng)目介紹本項(xiàng)目包括工作原理:ADC電壓采集與電量轉(zhuǎn)換工程調(diào)試:電量獲取
    的頭像 發(fā)表于 05-27 08:05 ?197次閱讀
    用樹莓派RP2350 DIY 桌面動態(tài)<b class='flag-5'>溫濕度計(jì)</b>

    制藥車間溫濕度數(shù)據(jù)采集監(jiān)控管理方案

    在制藥生產(chǎn)過程中,溫濕度對藥品質(zhì)量起著關(guān)鍵作用。不穩(wěn)定的溫濕度環(huán)境可能導(dǎo)致藥品原料變質(zhì)、藥品制劑的穩(wěn)定性下降,甚至影響藥品的療效和安全性。因此,構(gòu)建一套精準(zhǔn)、可靠的溫濕度數(shù)據(jù)采集監(jiān)控管理方案,對制藥
    的頭像 發(fā)表于 03-25 14:08 ?386次閱讀
    制藥車間<b class='flag-5'>溫濕度數(shù)據(jù)</b>采集監(jiān)控管理方案

    工廠溫濕度監(jiān)控系統(tǒng)

    在現(xiàn)代化工業(yè)生產(chǎn)環(huán)境中,溫濕度控制是確保產(chǎn)品質(zhì)量、生產(chǎn)效率和員工健康的關(guān)鍵因素之一。隨著科技的進(jìn)步,工廠溫濕度監(jiān)控系統(tǒng)應(yīng)運(yùn)而生,通過集成傳感器技術(shù)、數(shù)據(jù)處理與通信技術(shù),對工廠內(nèi)部環(huán)境參數(shù)的實(shí)時監(jiān)測
    的頭像 發(fā)表于 02-25 17:11 ?479次閱讀

    遠(yuǎn)程溫濕度實(shí)時監(jiān)測系統(tǒng)應(yīng)用方案

    通信、云計(jì)算、大數(shù)據(jù)分析等技術(shù)。傳感器作為系統(tǒng)的“眼睛”,負(fù)責(zé)實(shí)時采集環(huán)境中的溫濕度數(shù)據(jù)。通過Wi-Fi、藍(lán)牙、LoRa、NB-IoT等通訊方式,將傳感器采集的數(shù)據(jù)傳輸至云端服務(wù)器。云平臺負(fù)責(zé)接收、存儲和處理傳感器傳輸?shù)?/div>
    的頭像 發(fā)表于 01-02 17:03 ?636次閱讀

    博物館溫濕度監(jiān)控系統(tǒng)

    ,若任其自然變化,則可能對文物造成意想不到的損害。為此,博物館溫濕度監(jiān)控系統(tǒng)應(yīng)運(yùn)而生,其具備多種功能,以確保文物環(huán)境的穩(wěn)定與安全。 博物館溫濕度監(jiān)控系統(tǒng),采集各庫房的溫濕度數(shù)據(jù),通過管理云平臺實(shí)時顯示各庫房內(nèi)
    的頭像 發(fā)表于 12-20 16:42 ?882次閱讀

    醫(yī)藥倉庫溫濕度監(jiān)控系統(tǒng)應(yīng)用

    。 醫(yī)藥倉庫溫濕度監(jiān)控系統(tǒng),結(jié)合物聯(lián)網(wǎng)、無線通訊等技術(shù),通過傳感器全天候?qū)崟r采集倉庫內(nèi)的溫濕度數(shù)據(jù),管理云平臺對接收到的數(shù)據(jù)進(jìn)行深入分析、處理,并以圖表、曲線等形式直觀展示溫濕度變化趨
    的頭像 發(fā)表于 12-17 16:16 ?660次閱讀

    XKCON祥控倉庫存儲環(huán)境溫濕度在線監(jiān)測系統(tǒng)能夠取代人工巡檢,實(shí)現(xiàn)遠(yuǎn)程倉庫存儲環(huán)境溫濕度變化的實(shí)時

    倉庫作為儲物的場所,其環(huán)境溫濕度會隨著季節(jié)更替而發(fā)生變化,這種變化會對存儲物品的質(zhì)量與安全產(chǎn)生較大的影響。因此,倉庫的溫濕度數(shù)據(jù)就成為倉儲安全監(jiān)管的一個重要的指標(biāo)。 濟(jì)南祥控自動化設(shè)備有限公司開發(fā)
    的頭像 發(fā)表于 11-20 11:20 ?557次閱讀
    XKCON祥控倉庫存儲環(huán)境<b class='flag-5'>溫濕度</b>在線監(jiān)測系統(tǒng)能夠取代人工巡檢,實(shí)現(xiàn)遠(yuǎn)程倉庫存儲環(huán)境<b class='flag-5'>溫濕度</b>變化的實(shí)時

    LORA無線溫濕度監(jiān)測系統(tǒng)

    倉儲、農(nóng)業(yè)、機(jī)房等多種應(yīng)用場景,提供高效、可靠的解決方案。 部分組成 LORA溫濕度傳感器:作為系統(tǒng)的前端采集設(shè)備,實(shí)時捕捉環(huán)境中的溫濕度數(shù)據(jù)。LORA溫濕度傳感器的傳輸距離遠(yuǎn),視距可達(dá)3000米,甚至能穿透3-4堵混凝土墻,通
    的頭像 發(fā)表于 11-07 16:57 ?824次閱讀

    溫濕度控制器的功能和應(yīng)用

    溫濕度控制器在電阻柜中的應(yīng)用主要涉及以下幾個方面: 溫濕度控制器的功能 檢測與控制:溫濕度控制器可以同時檢測和控制環(huán)境中的溫度和濕度。它通常由傳感器、控制器和加熱器三部分組成。傳感器負(fù)
    的頭像 發(fā)表于 11-07 15:08 ?796次閱讀

    關(guān)于Air780E:使用文件系統(tǒng)存儲溫濕度數(shù)據(jù)怎么操作?

    的使用-程序源碼demo 780E開發(fā)板和DHT11 合宙的TCP/UDP測試服務(wù)器 API使用介紹 ? 1.2 程序解析 (1):首先采集溫濕度數(shù)據(jù) --采集溫濕度數(shù)據(jù),該引腳需要接開發(fā)板上一個帶上拉5k
    的頭像 發(fā)表于 10-31 07:26 ?596次閱讀
    關(guān)于Air780E:使用文件系統(tǒng)存儲<b class='flag-5'>溫濕度數(shù)據(jù)</b>怎么操作?

    溫濕度監(jiān)測解決方案

    。對于維護(hù)環(huán)境穩(wěn)定、保障生產(chǎn)安全、提升生活質(zhì)量具有重要意義。 溫濕度監(jiān)測解決方案,融入物聯(lián)網(wǎng)、無線通訊等技術(shù),通過溫濕度傳感器、智能采集器等感知設(shè)備,實(shí)時采集環(huán)境中的溫度和濕度數(shù)據(jù)。將物理量轉(zhuǎn)換為電信號,經(jīng)
    的頭像 發(fā)表于 09-04 17:16 ?779次閱讀

    溫濕度監(jiān)測系統(tǒng)應(yīng)用

    在現(xiàn)代化工業(yè)生產(chǎn)、倉儲管理、農(nóng)業(yè)種植以及智能家居等領(lǐng)域,溫濕度監(jiān)測已成為不可或缺的一環(huán)。溫濕度作為環(huán)境控制的關(guān)鍵因素,直接影響著產(chǎn)品質(zhì)量、存儲安全、作物生長效率以及居住舒適度。因此,一套高效、精準(zhǔn)
    的頭像 發(fā)表于 07-26 16:15 ?907次閱讀