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

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

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

如何使用PIC微控制器和LM35溫度傳感器制作數(shù)字溫度計(jì)

科技觀察員 ? 來源:circuitdigest ? 作者:潘卡伊·卡特里 ? 2022-11-16 15:49 ? 次閱讀

在本教程中,我們將使用 PIC 微控制器和 LM35 溫度傳感器制作數(shù)字溫度計(jì)。在本項(xiàng)目中,我們將使用 LM35 檢測溫度并將其顯示在 16x2 LCD 上。LM35 溫度傳感器準(zhǔn)確且成本低廉,無需任何外部校準(zhǔn)。輸出電壓與攝氏溫標(biāo)成正比,每°C變化10mV。

所需材料

圖片套件 3

LM35 溫度傳感器

16 * 2液晶顯示器

PIC16F877A 集成電路

40 - 引腳 IC 支架

性能板

20 MHz 晶體 OSC

內(nèi)螺紋和外螺紋伯格斯圖銷

33pf 電容器 - 2 個(gè)電容、100uf 和 10uf 電容。

680 歐姆、220 歐姆、10K 和 560 歐姆電阻器

電位器 10k

任何顏色的發(fā)光二極管

1 焊接套件

集成電路 7805

12V 適配器

連接線

面包板

LM35 溫度傳感器:

LM35 溫度傳感器具有零失調(diào)電壓,這意味著在 0°C 時(shí)輸出將為 0V。它可以處理的最大電壓為1.5V,這意味著它可以檢測150°C(1.5V / 10mV)的最高溫度。

poYBAGN0lg-AbXHjAAAb9v3BhKE223.jpg

pYYBAGN0lhSANyFOAAApdPrUPjg782.png

引腳編號 功能 名字
1 電源電壓;5V (+35V 至 -2V) Vcc
2 輸出電壓(+6V至-1V) 輸出
3 接地 (0V)

我們已經(jīng)將LM35與許多其他微控制器一起使用來測量溫度:

正如我們已經(jīng)說過的,LM35 提供模擬輸出,因此首先我們需要使用 PIC 微控制器讀取該模擬值,然后我們將使用 ADC(模數(shù)轉(zhuǎn)換)將它們轉(zhuǎn)換為數(shù)字值。因此,在進(jìn)一步討論之前,我們將學(xué)習(xí)PIC微控制器中的ADC。

PIC 微控制器 PIC16F877A 中的 ADC:

有許多類型的ADC可用,每種都有自己的速度和分辨率。最常見的ADC類型是閃存、逐次逼近和Σ-Δ。PIC16F877A中使用的ADC類型簡稱為逐次逼近型ADC或SAR。因此,在開始使用SAR ADC之前,讓我們先了解一下它。

逐次逼近型 ADC:SAR ADC在比較器和一些邏輯對話的幫助下工作。這種類型的ADC使用基準(zhǔn)電壓(可變的),并使用比較器將輸入電壓與基準(zhǔn)電壓進(jìn)行比較,并從最高有效位(MSB)中保存差值(數(shù)字輸出)。比較的速度取決于PIC運(yùn)行的時(shí)鐘頻率(Fosc)。

現(xiàn)在我們了解了ADC的一些基礎(chǔ)知識,讓我們打開數(shù)據(jù)手冊,了解如何在PIC16F877A MCU上使用ADC。我們使用的PIC具有10位8通道ADC。這意味著我們的ADC的輸出值將為0-1024(2^10),并且我們的MCU上有8個(gè)引腳(通道)可以讀取模擬電壓。值 1024 由 2^10 獲得,因?yàn)槲覀兊?ADC 是 10 位。數(shù)據(jù)表中提到了可以讀取模擬電壓的八個(gè)引腳。讓我們看看下面的圖片。

poYBAGN0lheASIhsAABZBKBah2A663.gif

模擬通道 AN0 到 AN7 已為您突出顯示。只有這些引腳才能讀取模擬電壓。因此,在讀取輸入電壓之前,我們必須在代碼中指定必須使用哪個(gè)通道來讀取輸入電壓。在本教程中,我們將使用帶有電位計(jì)的通道4來讀取該通道的模擬電壓。

A/D 模塊有四個(gè)寄存器,必須配置為從輸入引腳讀取數(shù)據(jù)。這些寄存器是:

? A/D 結(jié)果高寄存器 (ADRESH)

? A/D 結(jié)果低寄存器 (ADRESL)

? A/D 控制寄存器 0 (ADCON0)

? 模數(shù)控制寄存器 1 (ADCON1)


pYYBAGN0lhiAfXCQAAC4a9HiMx8882.png

代碼和說明

最后給出了使用LM35和PIC微控制器的數(shù)字溫度計(jì)的完整代碼。該代碼是用注釋行自我解釋的,只涉及將LCD與PIC微控制器連接的概念,以及在PIC微控制器中使用ADC模塊的概念,我們已經(jīng)在之前的PIC微控制器學(xué)習(xí)教程中介紹過。

在這里,我們僅顯示從LM35讀取模擬輸出電壓然后將其轉(zhuǎn)換為溫度值的計(jì)算。因此,這里我們將LM35的ADC值轉(zhuǎn)換為電壓,然后將電壓值轉(zhuǎn)換為溫度。因此,在獲得值后,我們將每個(gè)字符分開以顯示在LCD上。

adc = (ADC_Read(4)); // Reading ADC values

volt = adc*4.88281; // Convert it into the voltage

temp=volt/10.0; // Getting the temperature values

temp1 = temp*100;

c1 = (temp1/1000)%10;

c2 = (temp1/100)%10;

c3 = (temp1/10)%10;

c4 = (temp1/1)%10;

現(xiàn)在在下面的代碼中,設(shè)置LCD光標(biāo),然后打印輸出值

Lcd_Clear();
Lcd_Set_Cursor(1,3);
Lcd_Print_String("Temperature");
Lcd_Set_Cursor(2,5);
Lcd_Print_Char(c1+'0');
Lcd_Print_Char(c2+'0');
Lcd_Print_String(".");
Lcd_Print_Char(c3+'0');
Lcd_Print_Char(c4+'0');
Lcd_Print_Char(0xDF);
Lcd_Print_String("C");
__delay_ms(3000);

數(shù)字溫度計(jì)的工作原理

poYBAGN0liCAaqWTAADm-CyokDQ006.jpg

將代碼上傳到PIC微控制器后,使用12v適配器為電路上電。LM35 溫度傳感器的模擬輸出被饋送到 PIC 控制器的模擬輸入通道。隨著溫度的升高,ADC值也會增加。該ADC值通過乘以4.88281進(jìn)一步轉(zhuǎn)換為電壓。然后將電壓值轉(zhuǎn)換為相應(yīng)的字符,以將其顯示到16 * 2 LCD中。

#define _XTAL_FREQ 20000000


#define RS RD2

#define EN RD3

#define D4 RD4

#define D5 RD5

#define D6 RD6

#define D7 RD7


#include


#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)

#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)

#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)

#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)


void ADC_Initialize()

{

ADCON0 = 0b01000001; //ADC ON and Fosc/16 is selected

ADCON1 = 0b11000000; // Internal reference voltage is selected

}


unsigned int ADC_Read(unsigned char channel)

{

ADCON0 &= 0x11000101; //Clearing the Channel Selection Bits

ADCON0 |= channel<<3; //Setting the required Bits?

__delay_ms(2); //Acquisition time to charge hold capacitor

GO_nDONE = 1; //Initializes A/D Conversion

while(GO_nDONE); //Wait for A/D Conversion to complete

return ((ADRESH<<8)+ADRESL); //Returns Result?

}



//LCD Functions Developed by Circuit Digest.

void Lcd_SetBit(char data_bit) //Based on the Hex value Set the Bits of the Data Lines

{

if(data_bit& 1)

D4 = 1;

else

D4 = 0;


if(data_bit& 2)

D5 = 1;

else

D5 = 0;


if(data_bit& 4)

D6 = 1;

else

D6 = 0;


if(data_bit& 8)

D7 = 1;

else

D7 = 0;

}


void Lcd_Cmd(char a)

{

RS = 0;

Lcd_SetBit(a); //Incoming Hex value

EN = 1;

__delay_ms(4);

EN = 0;

}


Lcd_Clear()

{

Lcd_Cmd(0); //Clear the LCD

Lcd_Cmd(1); //Move the curser to first position

}


void Lcd_Set_Cursor(char a, char b)

{

char temp,z,y;

if(a== 1)

{

temp = 0x80 + b - 1; //80H is used to move the curser

z = temp>>4; //Lower 8-bits

y = temp & 0x0F; //Upper 8-bits

Lcd_Cmd(z); //Set Row

Lcd_Cmd(y); //Set Column

}

else if(a== 2)

{

temp = 0xC0 + b - 1;

z = temp>>4; //Lower 8-bits

y = temp & 0x0F; //Upper 8-bits

Lcd_Cmd(z); //Set Row

Lcd_Cmd(y); //Set Column

}

}


void Lcd_Start()

{

Lcd_SetBit(0x00);

for(int i=1065244; i<=0; i--) ?NOP(); ??

Lcd_Cmd(0x03);

__delay_ms(5);

Lcd_Cmd(0x03);

__delay_ms(11);

Lcd_Cmd(0x03);

Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD

Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD

Lcd_Cmd(0x08); //Select Row 1

Lcd_Cmd(0x00); //Clear Row 1 Display

Lcd_Cmd(0x0C); //Select Row 2

Lcd_Cmd(0x00); //Clear Row 2 Display

Lcd_Cmd(0x06);

}


void Lcd_Print_Char(char data) //Send 8-bits through 4-bit mode

{

char Lower_Nibble,Upper_Nibble;

Lower_Nibble = data&0x0F;

Upper_Nibble = data&0xF0;

RS = 1; // => RS = 1

Lcd_SetBit(Upper_Nibble>>4); //Send upper half by shifting by 4

EN = 1;

for(int i=2130483; i<=0; i--) ?NOP(); ?

EN = 0;

Lcd_SetBit(Lower_Nibble); //Send Lower half

EN = 1;

for(int i=2130483; i<=0; i--) ?NOP();?

EN = 0;

}


void Lcd_Print_String(char *a)

{

int i;

for(i=0;a[i]!='';i++)

Lcd_Print_Char(a[i]); //Split the string using pointers and call the Char function

}



int main()

{

float adc;

float volt, temp;

int c1, c2, c3, c4, temp1;

ADC_Initialize();


unsigned int a;

TRISD = 0x00;

Lcd_Start();

while(1)

{

adc = (ADC_Read(4)); // Reading ADC values

volt = adc*4.88281; // Convert it into the voltage

temp=volt/10.0; // Getting the temperature values

temp1 = temp*100;



c1 = (temp1/1000)%10;

c2 = (temp1/100)%10;

c3 = (temp1/10)%10;

c4 = (temp1/1)%10;



Lcd_Clear();

Lcd_Set_Cursor(1,3);

Lcd_Print_String("Temperature");

Lcd_Set_Cursor(2,5);

Lcd_Print_Char(c1+'0');

Lcd_Print_Char(c2+'0');

Lcd_Print_String(".");

Lcd_Print_Char(c3+'0');

Lcd_Print_Char(c4+'0');

Lcd_Print_Char(0xDF);

Lcd_Print_String("C");

__delay_ms(3000);

}

return 0;

}

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

    關(guān)注

    48

    文章

    7334

    瀏覽量

    150091
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2853

    瀏覽量

    155306
  • PIC
    PIC
    +關(guān)注

    關(guān)注

    8

    文章

    506

    瀏覽量

    87220
  • LM35
    +關(guān)注

    關(guān)注

    2

    文章

    83

    瀏覽量

    17988
  • 數(shù)字溫度計(jì)

    關(guān)注

    2

    文章

    108

    瀏覽量

    21649
收藏 人收藏

    評論

    相關(guān)推薦

    LM35溫度傳感器應(yīng)用及特性

    LM35溫度傳感器應(yīng)用及特性 LM35是一種得到廣泛使用的溫度傳感器。由于它采用內(nèi)部補(bǔ)償,所以
    的頭像 發(fā)表于 01-16 11:00 ?1.2w次閱讀

    如何利用DS18B20傳感器通過PIC微控制器獲得溫度

    通常,LM35溫度傳感器微控制器一起使用以測量溫度,因?yàn)樗阋饲乙子讷@得。但是 LM35 給出
    的頭像 發(fā)表于 11-16 16:06 ?2836次閱讀
    如何利用DS18B20<b class='flag-5'>傳感器</b>通過<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>獲得<b class='flag-5'>溫度</b>

    如何使用8051微控制器構(gòu)建一個(gè)簡單的數(shù)字溫度計(jì)

    有時(shí),由于波動,人們發(fā)現(xiàn)很難從模擬溫度計(jì)讀取溫度。因此,在這里我們將使用8051微控制器構(gòu)建一個(gè)簡單的數(shù)字溫度計(jì),其中
    的頭像 發(fā)表于 11-21 16:38 ?3026次閱讀
    如何使用8051<b class='flag-5'>微控制器</b>構(gòu)建一個(gè)簡單的<b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計(jì)</b>

    基于LM35LM3914的電子溫度計(jì)

    `在原理圖所示,我們的電子體溫計(jì)溫度傳感器 LM35DZ。有一些種LM35芯片,因?yàn)樗橇畠r(jià)和容易找到我們在我們的項(xiàng)目使用
    發(fā)表于 09-16 11:51

    LM35溫度傳感器

    LM35溫度傳感器
    發(fā)表于 08-14 23:30

    使用LM35溫度傳感器和ATTiny13微控制器控制風(fēng)扇的教程

    的電路,但是,我的目的是不使用任何微控制器并使其盡可能簡單。因此,該設(shè)備是風(fēng)扇的簡單開/關(guān)開關(guān),具體取決于定義的溫度閾值。這一次,我決定設(shè)計(jì)一個(gè)完整且更專業(yè)的電路,使用 LM35 溫度
    發(fā)表于 07-21 06:19

    急求基于LM35與TC7107的數(shù)字溫度計(jì),可報(bào)警

    急求基于LM35與TC7107的數(shù)字溫度計(jì),可報(bào)警,不知道傳感器和電壓放大器怎么連嗚嗚
    發(fā)表于 09-11 21:21

    采用LM35和ICL7107構(gòu)成的數(shù)字溫度計(jì)電路圖

    采用LM35和ICL7107構(gòu)成的數(shù)字溫度計(jì)電路圖
    發(fā)表于 07-16 17:27 ?3119次閱讀
    采用<b class='flag-5'>LM35</b>和ICL7107構(gòu)成的<b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計(jì)</b>電路圖

    如何制作數(shù)字溫度計(jì)

    如何制作數(shù)字溫度計(jì) 現(xiàn)在您對Stamp和液晶顯示屏有了初步的了解,我們再加一個(gè)元件就可以制作一支數(shù)字溫度計(jì)。
    發(fā)表于 08-21 16:10 ?7029次閱讀

    溫度傳感器 LM35介紹

    溫度傳感器 LM35介紹 在自動控制、機(jī)電整合的應(yīng)用中,溫度的測量為
    發(fā)表于 12-02 10:28 ?2.9w次閱讀

    LM35與ICL7107構(gòu)成的溫度計(jì),LM35 thermometer

    。首先把LM35故人冰水中,調(diào)整PRt,使顯示顯示0.0℃。再把LM35放人100℃的開水中,調(diào)整PR2,使顯示顯示100℃。重復(fù)調(diào)整多次即可。但要注意從冰水中取出的
    的頭像 發(fā)表于 09-20 18:31 ?1848次閱讀

    物聯(lián)網(wǎng)課程系列:制作一個(gè)可愛的鯊魚溫度計(jì)

    之前的文章介紹了溫度傳感器LM35的使用方式,這次的項(xiàng)目將教大家如何加上伺服馬達(dá),制作可愛的箭頭式溫度計(jì)
    的頭像 發(fā)表于 12-26 00:04 ?744次閱讀

    基于微控制器數(shù)字溫度計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于微控制器數(shù)字溫度計(jì).zip》資料免費(fèi)下載
    發(fā)表于 07-27 11:08 ?0次下載
    基于<b class='flag-5'>微控制器</b>的<b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計(jì)</b>

    如何使用Arduino和LM35傳感器制作溫度計(jì)

    電子發(fā)燒友網(wǎng)站提供《如何使用Arduino和LM35傳感器制作溫度計(jì).zip》資料免費(fèi)下載
    發(fā)表于 11-24 14:31 ?1次下載
    如何使用Arduino和<b class='flag-5'>LM35</b><b class='flag-5'>傳感器</b><b class='flag-5'>制作</b><b class='flag-5'>溫度計(jì)</b>

    使用溫度傳感器LM35控制伺服電機(jī)速度

    在這個(gè) arduino 項(xiàng)目中,我們使用溫度傳感器 LM35控制伺服電機(jī)的速度。
    發(fā)表于 12-02 15:31 ?3次下載