Membuat Pengukur Suhu Digital Dengan Sensor Suhu DS18B20

Kamis, 21 Oktober 2010

Bahan yang dibutuhkan meliputi:
Kit Mikrokontroler ATMega8535



Sensor suhu  ds18b20
LCD 2x16

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

powered by Blogger | WordPress by Newwpthemes