• Tidak ada hasil yang ditemukan

BAB IV PENGUJIAN ALAT DAN PROGRAM

4.6 Pengujian Rangkaian Keypad

Pengujian rangkaian tombol ini dapat dilakukan dengan menghubungkan rangkaian ini dengan mikrokontroler Atmega8535, kemudian memberikan program sederhana untuk mengetahui baik/tidaknya rangkaian ini. Rangkaian dihubungkan ke port 2. Untuk Mengecek penekanan pada 4 tombol yang paling atas, maka data awal yang dimasukkan ke port 2 adalah FEH. Dengan demikian maka pin P2.0 akan mendapat logika low (0), dan yang lainnya mendapat logika high (1), seperti berikut,

Tbl 1 Tbl 2 Tbl 3 Tbl A Ke PB Mi kro ko n tro le r AT Me g a 8 5 3 5

Gambar 4.5 rangkaian pengujian keypad

Jika terjadi penekanan pada Tbl 1, maka P2.0 akan terhubung ke P2.4 yang menyebabkan P2.4 juga akan mendapatkan logika low (0). Seperti berikut,

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 1 1 1 0 1 1 1 0

Tabel 4.2 Penekanan Tombol 1

Data pada port 2 akan berubah menjadi EEH. Data inilah sebagai indikasi adanya penekanan pada tombol 1.

Jika terjadi penekanan pada Tbl 2, maka P2.0 akan terhubung ke P2.5 yang menyebabkan P2.5 juga akan mendapatkan logika low (0). Seperti berikut,

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 1 1 0 1 1 1 1 0

Tabel 4.3 Penekanan Tombol 2

Data pada port 2 akan berubah menjadi DEH. Data inilah sebagai indikasi adanya penekanan pada tombol 2. Demikian seterusnya untuk tombol-tombil yang lain.

Program yang diisikan pada mikrokontroler untuk menguji rangkaian keypad adalah sebagai berikut:

Tombol1: Mov P0,#0FEH Mov a,P0 Cjne a,#0EEH,Tombol2 Setb P3.7 Sjmp Tombol1

Tombol2:

Cjne a,#0DEH,Tombol1 Clr P3.7

Sjmp Tombol1

Program diatas akan menunggu penekanan pada tombol 1 dan tombol 2, jika tombol 1 ditekan, maka program akan menyalakan LED yang ada pada P3.7. Jika tombol 2 ditekan, maka program akan mematikan LED yang ada pada P3.7.

Jika rangkaian telah berjalan sesuai program yang diberikan, maka rangkaian telah berfungsi dengan baik.

4.7 Flow Chart START Baca keypad Keypad D ditekan ISI = 0 Pompa nyala Baca nilai flow sensor

Isi = isi + nilai flow sensor

Nilai keypad >= isi ? Pompa Mati END Tidak Ya Ya Tidak

Penjelasan Flowchart :

- Pertama-tama di awali dengan start dan mikrokontroler menginisialisasi port-port yang akandigunakan untuk keperluan pembacaan sensor dan port untuk menampilkanke LCD.

- Setelah selesai inisilisasi maka mikrokontroler membaca keypad. - Jika di baca kita tekan D sebagai enter.

- Jika tidak di tekan maka mikro akan kembali membaca keypad, jika Ya maka isi dan pompa nyala.

- Jika pompa nyala maka mikrokontroler membaca nilai out put sensor. - Apa bila dalam proses isi maka nilai isi keypad di tambahkan dengan nilai

out put sensor, jika tidak membaca maka mikrokontroller akan kembali membaca nilai output sensor, jika Ya (membaca) maka proses mengisi akan selesai sesuai input keypad juga akan menampilkan di LCD dan pompa akan mati.

4.8 Program secara Keseluruhan

/***************************************************** This program was produced by the

CodeWizardAVR V1.25.8 Standard Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 18/07/2012 Author : F4CG Company : F4CG Comments:

Chip type : ATmega8535 Program type : Application Clock frequency : 11,059200 MHz Memory model : Small

External SRAM size : 0 Data Stack size : 128

*****************************************************/

#include <mega8535.h> int frekuensi=0;

float pulsa; char data[16];

// Alphanumeric LCD Module functions #asm

.equ __lcd_port=0x15 ;PORTC #endasm

#include <lcd.h> #include <stdio.h> #include <delay.h>

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void) {

// Place your code here frekuensi++;

}

{

// Reinitialize Timer 1 value TCNT1H=0xD5D0 >> 8;

TCNT1L=0xD5D0 & 0xff; pulsa=frekuensi;

frekuensi=0; }

// Declare your global variables here

int indktor, temp, a, b, c, d, indka, dtot, isi; void baca() { indktor=1; while (indktor==1) { PORTB.0=0; PORTB.1=1; PORTB.2=1; PORTB.3=1; delay_ms(2);

if (PINB.4==0) {temp=1; indktor=0;} if (PINB.5==0) {temp=2; indktor=0;}

if (PINB.6==0) {temp=3; indktor=0;} PORTB.0=1;

PORTB.1=0; PORTB.2=1; PORTB.3=1; delay_ms(2);

if (PINB.4==0) {temp=4; indktor=0;} if (PINB.5==0) {temp=5; indktor=0;} if (PINB.6==0) {temp=6; indktor=0;} PORTB.0=1;

PORTB.1=1; PORTB.2=0; PORTB.3=1; delay_ms(2);

if (PINB.4==0) {temp=7; indktor=0;} if (PINB.5==0) {temp=8; indktor=0;} if (PINB.6==0) {temp=9; indktor=0;} PORTB.0=1;

PORTB.1=1; PORTB.2=1; PORTB.3=0; delay_ms(2);

if (PINB.5==0) {temp=0; indktor=0;} PORTB.3=1;

}

void main(void) {

// Declare your local variables here // Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00; DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out

// State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1

PORTB=0xFF; DDRB=0x0F;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00; DDRC=0x00;

// Port D initialization

// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00; DDRD=0x80;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh

// OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Clock source: System Clock // Clock value: 10,800 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x05; TCNT1H=0xD5; TCNT1L=0xD0; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh

// OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: On

// INT0 Mode: Falling Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04;

// Analog Comparator initialization // Analog Comparator: Off

ACSR=0x80; SFIOR=0x00;

// LCD module initialization lcd_init(16);

// Global enable interrupts #asm("sei") lcd_gotoxy(0,0); lcd_putsf("My Project"); lcd_gotoxy(0,1); lcd_putsf("Flow Meter"); delay_ms(3000); lcd_clear(); while (1) {

// Place your code here lcd_gotoxy(0,0); lcd_putsf("Output= mL"); baca(); a=temp; sprintf(data,"%d ",a); lcd_gotoxy(8,0); lcd_puts(data); delay_ms(1000); baca(); b=temp; sprintf(data,"%d ",b); lcd_gotoxy(9,0); lcd_puts(data); delay_ms(1000); baca(); c=temp; sprintf(data,"%d ",c); lcd_gotoxy(10,0); lcd_puts(data); delay_ms(1000); baca(); d=temp; sprintf(data,"%d ",d); lcd_gotoxy(11,0); lcd_puts(data); delay_ms(1000); dtot=a*1000+b*100+c*10+d; indka=1; while (indka==1) { PORTB.3=0; delay_ms(2);

if (PINB.7==0) {indka=2; PORTB.3=1; PORTD.7=1; isi=0; while (indka==2) { lcd_clear(); sprintf(data,"Output = %d mL",isi); lcd_gotoxy(0,0); lcd_puts(data); sprintf(data,"Flow = %0.03f",pulsa); lcd_gotoxy(0,1); lcd_puts(data); delay_ms(450); isi=isi+pulsa; if(isi>=dtot){indka=0;} } PORTD.7=0; lcd_clear(); sprintf(data,"Output = %d mL",dtot); lcd_gotoxy(0,0); lcd_puts(data); delay_ms(3000); } } lcd_clear(); }; }

BAB V

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari evaluasi hasil kerja alat dapat diambil beberapa kesimpulan dalam tugas akhir ini.

1. Water flow sensor yang digunakan berfungsi sebagai indicator dalam pengukuran volume air.

2. Penggunaan Mikrokontroller ATMega8535 dapat mengontrol volume air yang diukur oleh water flow sensor.

3. Mikrokontroller ATMega8535 digunakan sebagai alat untuk memproses data dari sistem yang berfungsi untuk mengirimkan perintah Water Flow sensor G1/2 ke Display LCD.

Dokumen terkait