Membuat Pengukur Suhu Digital Dengan Sensor Suhu DS18B20
Kamis, 21 Oktober 2010
Kit Mikrokontroler ATMega8535 |
Sensor suhu ds18b20 |
Sensor suhu DS18B20 merupakan suatu komponen elektronika yang dapat menangkap perubahan temperatur lingkungan lalu kemudian mengkonversinya menjadi besaran listrik. Sensor ini merupakan sensor digital yang menggunakan 1 wire untuk berkomunikasi dengan mikrokontroler. Keunikan dari sensor ini adalah tiap sensor memiliki kode serial yang memungkinkan untuk penggunaan DS18B20 lebih dari satu dalam satu komunikasi 1 wire.
Spesifikasi sensor suhu DS18B20:
- Unik 1-Wire ® interface hanya memerlukan satu pin port untuk komunikasi secara 1-Wire
- Setiap perangkat memiliki kode serial 64-bit yang disimpan dalam sebuah ROM onboard
- Tidak memerlukan ada komponen tambahan
- Bekerja pada kisaran tegangan 3 sampai 5,5V
- Dapat mengukur suhu pada kisaran -55 sampai 125 °C
- Akurasi ± 0,5°C akurasi dari suhu -10 sampai 85 °C
- Resolusi dapat dipilih oleh pengguna antara 9 sampai 12 bit
- Kecepatan mengkonversi suhu maksimal 750 ms
- Kompatibel dengan software Codevision AVR
Pin LCD
PORTC.0 = RS (LCD pin 4)
PORTC.1 = RW (LCD pin 5)
PORTC.2 = E (LCD pin 6)
PORTC.3 = Free
PORTC.4 = DB4 (LCD pin 11)
PORTC.5 = DB5 (LCD pin 12)
PORTC.6 = DB6 (LCD pin 13)
PORTC.7 = DB7 (LCD pin 14)
Pin DS18B20
Pin 1 = Ground
Pin 2 = PORTB.0
Pin 3 = VCC 5 V
Listing program
/*****************************************************
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 4.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <1wire.h>
#include <ds1820.h>
#include <delay.h>
#include <lcd.h>
#include <stdio.h>
#define MAX_DS1820 8
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
unsigned char ds1820_devices;
unsigned char ds1820_rom_codes[MAX_DS1820][9];
char lcd_buffer[33];
void main(void)
{
unsigned char i,j;
int temp;
w1_init();
ds1820_devices=w1_search(0xf0,ds1820_rom_codes);
lcd_init(16);
while (1)
{
for (i=0;i<ds1820_devices;)
{
temp=ds1820_temperature_10(&ds1820_rom_codes[i][0]);
j='+';
if (temp<0)
{
j='-';
temp=-temp;
};
sprintf(lcd_buffer,"t%u=%c%i.%u\xdfC",++i,j,temp/10,temp%10);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(800);
};
}
}
Oleh: Rizqi Rizaldi
0 komentar:
Posting Komentar