Gambar 4.1 Informasi Signature Mikrokontroller Atmega menggunakan kristal dengan frekuensi 4 MHz, apabila ChipSignature sudah dikenali
dengan baik dan dalam waktu singkat, bisa dikatakan rangkaian mikrokontroler bekerja dengan baik dengan mode ISP-nya.
4.4 Pengujian sensor SHT-11
Kaki Serial Clock Input SCK digunakan untuk mensinkronkan komunikasi diantaramikrokontroler dan SHT-11. Kaki Serial Data DATA yang merupakan tristate
digunakan untuk mentransfer data masuk dan keluar dari alat. Proses pengukuran dilakukan dengan memberikan logika “00000101’ untuk RH dan ‘00000011’ untuk temperatur, lalu
controller harus menunggu agar proses pengukuran selesai. Waktu yang dibutuhkan sekitar 500 ms untuk resolusi 14 bit
Gambar 4.2 Gambar SHT-11 ke mikrokontroller Pengujian sensor menggunakan komunikasi 2 wire, komuniasi 2 wire ini berbeda dengan
komunikasi serial I2C yang sering dijumpai pada modul sensor modern. SCK serial clock befungsi untuk clock kerja dari komunikasi, jadi clock komunikasi mikrokontroler harus sama
Universitas Sumatera Utara
dengan SHT-11. Jalur DATA merupakan jalur yang digunakan untuk mengirim data. Data dapat dirubah ketika pulsa clock pada tepi pulsa turun dan data akan tetap valid latch pada
tepi pulsa naik.
4.5 Pengujian LCD
Rangakaian LCD diuji dengan menampilkan karakter dengan perintah sebagai berikut : Cls
LCD “SUHU” Lowerline
LCD “RH” Perintah di atas menampilkan teks “SUHU” pada baris pertama dan “RH” pada baris kedua.
Gambar 4.3 berikut adalah tampilan karakter hasil perintah dari LCD.
Gambar 4.3 Tampilan hasil dari LCD Liquid Crystal Display
4.6 Pengujian Bahasa Pemrograman
include mega8.h crystal 8MHz include alcd.h
include stdio.h include delay.h
include stdlib.h include math.h
define ADC_VREF_TYPE 0x00 unsigned int SUHU,Lembab,nilaisuhu,nilailembab,Cal;
unsigned char error,checksum; char inp;
typedef union { unsigned int i;
float f; } value;
enum {TEMP,HUMI}; define DATA_OUT PORTB.0
define DATA_IN PINB.0 define SCK PORTB.1
define noACK 0 define ACK 1
adr command rw define STATUS_REG_W 0x06 000 0011 0
define STATUS_REG_R 0x07 000 0011 1
Universitas Sumatera Utara
define UKUR_SUHU 0x03 000 0001 1 define UKUR_HUMI 0x05 000 0010 1
define RESET 0x1e 000 1111 0 unsigned int read_adcunsigned char adc_input
{ ADMUX=adc_input | ADC_VREF_TYPE 0xff;
Delay needed for the stabilization of the ADC input voltage delay_us10;
Start the AD conversion ADCSRA|=0x40;
Wait for the AD conversion to complete while ADCSRA 0x10==0;
ADCSRA|=0x10; return ADCW;
} Untuk menulis data ke SHT11
char tulis_SHTunsigned char bytte {
unsigned char i,error=0; DDRB = 0b00000011;
for i=0x80;i0;i=2 shift bit {
if i bytte DATA_OUT=1;
else DATA_OUT=0; SCK=1; clk
delay_us5; delay 5 us SCK=0;
} DATA_OUT=1;
DDRB = 0b00000010; DATA Output SCK=1; clk 9 ack
delay_us2; error=DATA_IN; cek ack DATA akan di pull down oleh SHT11
delay_us2; SCK=0;
return error; cek jika ada error }
Untuk membaca data dari SHT11 char baca_SHTunsigned char ack
{ unsigned char i,val=0;
DDRB = 0b00000010; DATA Input for i=0x80;i0;i=2 shift bit
{ SCK=1; clk delay_us2;
if DATA_IN val=val | i; baca bit delay_us2;
SCK=0; }
DDRB = 0b00000011; DATA Output DATA_OUT=ack; ack==1 pull down DATA-Line
SCK=1; clk 9 ack delay_us5; delay 5 us
SCK=0; DATA_OUT=1; DATA-line
return val; }
void start_SHTvoid {
DDRB = 0b00000011; DATA Output
Universitas Sumatera Utara
DATA_OUT=1; SCK=0; Inisial state delay_us2;
SCK=1; delay_us2;
DATA_OUT=0; delay_us2;
SCK=0; delay_us5;
SCK=1; delay_us2;
DATA_OUT=1; delay_us2;
SCK=0; DDRB = 0b00000010; DATA Input
} void reset_SHTvoid
{ unsigned char i;
DDRB = 0b00000011; DATA output DATA_OUT=1; SCK=0; Inisial state
fori=0;i9;i++ 9 SCK cycle { SCK=1;
delay_us1; SCK=0;
delay_us1; }
start_SHT; start transmisi data DDRB = 0b00000010; DATA Input
} Mengecek status register sensor
char StatusReg_SHTunsigned char p_value, unsigned char p_checksum {
unsigned char error=0; start_SHT; start transmisi data
error=tulis_SHTSTATUS_REG_R; mengirim command ke sensor p_value=baca_SHTACK; baca status register 8-bit
p_checksum=baca_SHTnoACK; baca checksum 8-bit return error; error=1 jika tidak ada respon dari sensor
} Membaca data hasil pengukuran
char ukur_SHTunsigned char p_value, unsigned char p_checksum, unsigned char mode
{ unsigned error=0;
unsigned int temp=0; start_SHT; start transmisi data
switchmode{ mengirim command ke sensor case TEMP : error+=tulis_SHTUKUR_SUHU; break;
case HUMI : error+=tulis_SHTUKUR_HUMI; break; default : break;
} DDRB = 0b00000010; DATA input
while 1 {
ifDATA_IN==0 break; tunggu hingga sensor selesai melakukan pengukuran
} ifDATA_IN error+=1;
jika sudah timeout 2 detik switchmode{ mengirim command ke sensor
case TEMP : temp=0; temp=baca_SHTACK;
temp=8;
Universitas Sumatera Utara
nilaisuhu=temp; temp=0;
temp=baca_SHTACK; nilaisuhu|=temp;
break; case HUMI : temp=0;
temp=baca_SHTACK; temp=8;
nilailembab=temp; temp=0;
temp=baca_SHTACK; nilailembab|=temp;
break; default : break;
} p_checksum =baca_SHTnoACK; baca checksum
return error; }
void mainvoid {
value humi_val,temp_val; PORTB=0x00;
DDRB=0x03; PORTC=0x00;
DDRC=0xC0; PORTD=0x00;
DDRD=0x00; ADC initialization
ADMUX=ADC_VREF_TYPE 0xff; ADCSRA=0x82;
lcd_init16; lcd_clear;
lcd_gotoxy0,0; lcd_putsfPengukuran Suhu;
lcd_gotoxy0,1; lcd_putsf dan Kelembaban;
delay_ms1000; lcd_init16;
lcd_clear; lcd_gotoxy0,0;
lcd_putsfJESSY R.TARIGAN; lcd_gotoxy0,1;
lcd_putsf===============; delay_ms1000;
lcd_init16; lcd_clear;
lcd_gotoxy0,0; lcd_putsf METROLOGY USU;
lcd_gotoxy0,1; lcd_putsf================;
delay_ms1000; reset_SHT;
while 1 {
delay_ms500; error=0;
error+=ukur_SHTunsigned char humi_val.i,checksum,HUMI; mengukur kelembaban
error+=ukur_SHTunsigned char temp_val.i,checksum,TEMP; mengukur suhu
Universitas Sumatera Utara
error += StatusReg_SHTinp, checksum; iferror=0
{ reset_SHT; jika ada error, reset koneksi
putsfError; }
else {
SUHU = nilaisuhu100215; lcd_gotoxy0,0;
lcd_putsf Suhu : \xdfC; lcd_gotoxy8,0;
lcd_putcharSUHU100 10 + 0x30; lcd_putcharSUHU10 10 + 0x30;
lcd_putchar.; lcd_putcharSUHU 10 + 0x30;
Cal = read_adc510; Lembab = nilailembab10Cal;
lcd_gotoxy0,1; lcd_putsf RH : ;
lcd_gotoxy8,1; lcd_putcharLembab100 10 + 0x30;
lcd_putcharLembab10 10 + 0x30; lcd_putchar.;
lcd_putcharLembab 10 + 0x30; delay_ms1000;
delay_ms1000; }
} }
4.7 Pengujian secara keseluruhan