Mikrokontrollerlar uchun dasturiy ta’minot yaratish AVR mikrokontrolleri asosida temperaturani o’lchashni loyihalashtirish - AVR mikrokontrolleri asosida temperaturani o’lchash loyihasini bajarish uchun kerakli bo’ladigan periferik qurilmalarni tanlab olamiz. Buning uchun bizga ATMEGA8 mikrokontrolleri, DS18b20 temperatura datchigi, LM016L LCD displeyi va qarshilik 4.7 KΩ kerak bo’ladi.
Kerakli qurilmalarning Proteus muhitidagi ko’rinishi DS18b20 datchigi - Datchik xarakteristikasi:
- O’lchash diapazoni -55 dan +125°С gacha;
- O’lchash aniqligi ±0,5;
- Kafolatlangan aniqligi -10 dan +85°С gacha;
- Ruhsat etilgan o’lchash imkoniyati 9, 10, 11 va 12 bit;
- Qadamlari 0,5; 0,25; 0,125; 0,0625°С.
- AVR MK bilan ma’lumot almashish uchun 1-Wire protokoli ishlatiladi, har bir sensorning o’ziga xos manzili bor. Shuning uchun bir vaqtning o’zida bir nechta sensorni qo’yish mumkin.
C tilida tuzilgan dastur kodi
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17
|
#include
#include
// 1 Wire Bus funksiyasi
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=2
#endasm
#include <1wire.h>
#include
// LCD Modul funksiyalari
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include
#include
|
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
char lcd_buf[17];
void main(void)
{
float temper;
lcd_init(16);
w1_init();
ds18b20_init(0,-20,50,DS18B20_12BIT_RES);
while(1)
{
temper=ds18b20_temperature(0); sprintf(lcd_buf,"t=%.1f\xdfC",temper);
lcd_clear();
lcd_puts(lcd_buf);
delay_ms(1500);
};
}
| Har bir qismiga to’htalib o’tamiz - Temperatura datchigini PORTB ga ulaymiz.
- Bu kod temperatura datchigi B portga ulanganini bildiradi.
1234
|
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=2
#endasm
|
12
|
#include <1wire.h>
#include
| DS18B20 datchik turi uchun 1-Wire protokoli ishlatiladi. - DS18B20 datchik turi uchun 1-Wire protokoli ishlatiladi.
123
|
float temper;
w1_init();
ds18b20_init(0,-20,50,DS18B20_12BIT_RES);
| O’zgaruvchining temperatura haroratini o’lchash uchun w1_init(); ishlatiladi. - O’zgaruvchining temperatura haroratini o’lchash uchun w1_init(); ishlatiladi.
- ds18b20_init(0,-20,50,DS18B20_12BIT_RES); datchikni sozlash:
- 0- datchik raqami;
- -20 pastki harorat o’lchami;
- 50 yuqori harorat o’lchami;
- DS18B20_12BIT_RES 12 bit rejimidan foydalaniladi (0,0625°С qadam bilan);
- Amalda boshlang’ich sozlanma 12 bit rejimda bo’ladi.
- Kerakli vaqtda o’lchash rejimini mustaqil o’zgartirish mumkin.
123456
|
temper=ds18b20_temperature(0);
sprintf(lcd_buf,"t=%.1f\xdfC",temper); lcd_clear();
lcd_puts(lcd_buf);
delay_ms(1500);
| temper=ds18b20_temperature(0); — datchikdan temperaturani o’qish sprintf(lcd_buf,»t=%.1f\xdfC»,temper); - temper=ds18b20_temperature(0); — datchikdan temperaturani o’qish sprintf(lcd_buf,»t=%.1f\xdfC»,temper);
- proekt tarkibida (s)printf features float ni ko’rsatish kerak. \xdf — gradus belgisini ekranga chiqarish.
Do'stlaringiz bilan baham: |