• Tidak ada hasil yang ditemukan

BAB IV HASIL DAN PEMBAHASAN

4.3. Analisa Software

}

Gambar 4.12. Hasil Pengujian LCD

Berdasarkan gambar 4.12, LCD dapat menampilkan status program yang ditulis pada mikrokontroler. Dari hasil pengujian tersebut dapat disimpulkan bahwa LCD dan rangkaian modul LCD telah berhasil dan berfungsi sesuai dengan yang dirancangkan.

4.3. Analisa Software

Analisa software adalah analisa program pada mikrokontroler sebagai penggerak perekaman dan pengecekan tegangan baterai. Program yang telah dibuat sudah dapat bekerja dan sesuai dengan perancangan. Berdasarkan perancangan diagram alir gambar 3.11 sampai dengan gambar 3.17, maka uraian program dapat dijelaskan sebagai berikut:

4.3.1. Inisialisasi

Blok ini berisi tentang pendefinisian fungsi, variabel, dan nilai awal yang diperlukan dalam proses. Uraian program inisialisasi adalah sebagai berikut:

#include <mega8535.h> //mikrokontroler yang digunakan ATmega8535

#include <stdio.h> //memasukan library komunikasi serial mikrokontroler #include<delay.h> //memasukan library fungsi delay

#asm

.equ __lcd_port=0x18 ;PORTB inisialisasi LCD #endasm

#include <lcd.h>

#define ADC_VREF_TYPE 0x60 //inisialisasi ADC V ref internal const long int osilator=12000000; //set frekuensi osilator unsigned long int UBRR; //inisialisasi tipe data UBRR

void inialisasiUART(unsigned long int baud_rate); //deklarasi UART unsigned char read_adc(unsigned char adc_input) //deklarasi ADC {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40; inisialisasi ADC

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCH; }

float tegangan; //inisialisasi tipe data variabel tegangan char baris[16]; //inisialisasi LCD 16 karaktek LCD

unsigned char kirim; //inisialisasi variabel kirim unsigned char terima; //inisialisasi variabel terima void inialisasiUART(unsigned long int baud_rate) {

UBRR=(osilator/(16*baud_rate))-1; UBRRL=UBRR;

UCSRA=0x00; inisialisasi UART komunikasi serial

UCSRB=0x18;

UCSRC=0x86; UBRRH=UBRR>>8; }

inialisasiUART(9600); //set boudrate 9600

PORTC=0xff; //insialisasi nilai awal Port C logika 1 DDRC=0x00; //inisialisasi port C sebagai input

PORTD=0x00; //insialisasi nilai awal Port D logika 0 DDRD=0xFF; //insialisasi port D sebagai output

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x87; inisialisasi ADC

SFIOR&=0xEF; SFIOR|=0x10;

lcd_init(16); //memanggil fungsi internal LCD 16 kolom lcd_gotoxy(0,0); //menampilkan pada baris pertama lcd_putsf(" == KOTAK == "); //tulis LCD

lcd_gotoxy(0,1); //menampilkan pada baris kedua lcd_putsf(" ==PEREKAM== "); tulis LCD

delay_ms(2000); //tunda 2 detik lcd_clear(); //hapus LCD

lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == ");

lcd_gotoxy(0,1); lcd_putsf(" STAND BY ");

Program inisialisasi ADC, komunikasil serial (UART), dan LCD menggunakan fitur Codewizard AVR pada software Codevision yang dapat menginisialisasi secara otomatis fitur-fitur yang ada dalam mikrokontroler ATMega8535. Pengguna hanya mengatur fitur mikrokontroler yang dibutuhkan.

4.3.2. Program Utama Sistem (Main Program)

Blok ini berisi program utama sistem. Mikrokontroler sebagai penggerak perekaman mengulang program utama untuk menunggu data interupsi dari komputer. Data yang diterima merupakan data yang digunakan untuk memanggil fungsi sub sistem. Ketika data menyebabkan kondisi pada if dan else if benar, program akan memanggil fungsi sub sistem yang sesuai. Data yang digunakan sesuai data perancangan pada tabel 3.1. Uraian program utama sistem adalah sebagai berikut:

PINC=0xff; //inisialisasi pin C kondisi awal logika 1

terima=getchar(); //simpan data yang diterima komunikasi serial ke variabel terima

if(terima==0b00110000) //jika terima data 8 bit 00110000 {

kirim_ADC(); //panggil fungsi kirim ADC }

else if(terima==0b00000011) //jika terima data 8 bit 00000011 {

tekan_tombol(); //panggil fungsi tekan tombol }

else if(terima==0b00001100) //jika terima data 8 bit 00001100 {

pengujian_selesai(); //panggil fungsi pengjuan selesai }

else if(terima==0b11111111) //jika terima data 8 bit 11111111 {

stop_pengujian(); //panggil fungsi stop pengujian }

else if(terima==0b00111100) //jika terima data 8 bit 00111100 {

kirim_interlock(); //panggil fungsi kirim data interlock }

else if(terima==0b11000011) //jika terima data 8 bit 11000011 {

kunci_tutup_perekam(); //panggil fungsi kunci tutup perekam }

else //jika terima data 8 bit selain data yang digunakan {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == "); lcd_gotoxy(0,1);

lcd_putsf(" Input Salah "); delay_ms(1000);

} } ;

}

4.3.3. Program Sub Sistem

Blok ini merupakan fungsi-fungsi program yang akan dilaksanakan sesuai data yang diterima program utama. Fungsi-fungsi program tersebut berfungsi secara langsung untuk mengatur data masukan dan keluaran port mikrokontroler sebagai penggerak proses perekaman dan pengecekan tegangan baterai sesuai perancangan antarmuka mikrokontroler pada gambar 3.10.

1. Fungsi kirim ADC. Uraian program adalah sebagai berikut:

void kirim_ADC() {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == "); ⇒ tulis LCD

putchar(kirim); //kirim data variabel kirim (data ADC) melalui komunikasi serial

tegangan=((float)kirim*0.01953125); //mengkonversi nilai ADC ke tegangan

//tegangan=data ADC x (5/256) lcd_gotoxy(0,1);

lcd_putsf("KirimADC"); ⇒ tulis LCD lcd_gotoxy(9,1);

sprintf(baris,"V=%1.2fv",tegangan); //tulis LCD data tegangan , 2 angka dibelakang koma

lcd_puts(baris); //variabel baris untuk LCD 16 karakter (inisialisasi program)

delay_ms(1000); }

Fungsi kirim ADC adalah fungsi untuk menampilkan data tegangan baterai pada LCD dan pengriman data tegangan baterai ke komputer. Data tegangan baterai yang masuk ke mikrokontroler diubah menjadi data digital. Untuk menampilkan tegangan pada LCD, data ADC baterai dikonversi menggunakan perhitungan ADC untuk diubah kembali menjadi data tegangan. Data tegangan baterai yang dikirim komputer juga akan dikonversi kembali oleh komputer untuk dijadikan data tegangan baterai. Status mikrokontroler pada LCD adalah “Kirim ADC” dan tegangan dalam satuan Volt.

2. Fungsi tekan tombol. Uraian program adalah sebagai berikut:

void tekan_tombol() {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == ");

PORTD.7=1; //aktifkan solenoid 2 (solenoid penekanan tombol) lcd_gotoxy(0,1);

lcd_putsf("Penekanan Tombol"); delay_ms(200); //delay 0.2 detik.

PORTD.7=0; //nonaktifkan solenoid 2 (solenoid penekanan tombol) delay_ms(1000); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(" == STATUS == "); lcd_gotoxy(0,1); lcd_putsf(" STAND BY "); }

Fungsi tekan tombol adalah fungsi untuk menjalankan solenoid 2 sebagai penekan tombol on mainan. Solenoid 2 dijalankan hanya sesaat untuk penekanan tombol on mainan, setelah tombol mainan on mainan tertekan maka solenoid 2 menjadi tidak aktif. Untuk menjalankan solenoid 2 sesaat, maka pemberian logika 1 pada port 7 hanya sesaat, kemudian diubah ke logika 0 dengan diberi tunda waktu. Status mikrokontroler pada LCD

3. Fungsi stop_pengujian. Uraian program adalah sebagai berikut: void stop_pengujian() { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(" == STATUS == "); PORTD.5=0; //nonaktifkan buzzer

PORTD.6=0;//nonaktifkan solenoid 1 (buka kunci tutup kotak bagian perekam)

lcd_gotoxy(0,1);

lcd_putsf(" Stop Pengujian "); delay_ms(1000);

}

Fungsi stop pengujian adalah fungsi untuk menghentikan proses pengujian dengan menekan tombol massage box stop pengujian pada tampilan komputer. Fungsi ini akan mematikan buzzer dan menonaktifkan solenoid 1 untuk membuka kunci tutup kotak bagian perekaman. Status mikrokontroler pada LCD adalah “Stop Pengujian”.

4. Fungsi stop pengujian. Uraian program adalah sebagai berikut:

void pengujian_selesai() {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == "); PORTD.5=1; //akftifkan buzzer lcd_gotoxy(0,1);

lcd_putsf("PengujianSelesai"); delay_ms(1000);

}

Fungsi pengujian selesai adalah fungsi untuk menghidupkan buzzer. Saat pengujian selesai, komputer memberi interupsi untuk mengaktifkan buzzer. Status mikrokontroler pada LCD adalah “Pengujian Selesai”.

5. Fungsi kirim data interlock. Uraian program adalah sebagai berikut :

void kirim_interlock() {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == ");

if(PINC.1==0&&PINC.2==0) //interlock 1 dan 2 aktif {

putchar(0b00000001); //kirim data 8 bit 00000001 melalui komunikasi serial

lcd_gotoxy(0,1);

lcd_putsf(" Kotak Siap "); delay_ms(1000);

}

else //interlock 1 tidak aktif, atau interlock 2 tidak aktif, atau kedua-duanya.

putchar(0b00000000); //kirim data 8 bit 00000000 melalui komunikasi serial

lcd_gotoxy(0,1);

lcd_putsf("Kotak Tidak Siap"); delay_ms(1000);

} }

Fungsi kirim data interlock adalah fungsi untuk mengirimkan status kotak perekam ke komputer. Status kotak perekam ditentukan oleh limit switch interlock yang ada pada tutup kotak perekam dan dudukan mainan bersuara. Saat kondisi kedua limit switch interlock aktif (kotak tertutup dan ada mainan yang diuji), maka mikrokontroler akan mengirimkan data 8 bit ‘00000001’, status mikrokontroler pada LCD “Kotak Siap”. Untuk kondisi salah satu limit switch interlock tidak aktif atau kedua-duanya tidak aktif, mikrokontroler akan mengirimkan data 8 bit ‘00000000’, status mikrokontroler pada LCD “Kotak Tidak Siap”.

6. Fungsi kunci tutup perekam. Uraian program adalah sebagai berikut :

void kunci_tutup_perekam() {

lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf(" == STATUS == ");

PORTD.6=1; //akftifkan solenoid 1 (solenoid pengunci tutup kotak bagian perekaman)

lcd_gotoxy(0,1);

lcd_putsf(" Kotak Terkunci "); delay_ms(1000);

}

Fungsi kunci tutup perekam adalah fungsi untuk menjalankan solenoid 1 yang berfungsi sebagai pengunci tutup kotak bagian perekaman. Solenoid 1 akan aktif selama proses pengujian, karena saat proses pengujian kondisi tutup kotak tidak boleh terbuka.

Dokumen terkait