Anda di halaman 1dari 13

PRAKTIKUM VII

1
of | 10

Keypad Matriks 4x4 dan Input ADC

 Tujuan
1.

Memahami prinsip dan cara kerja keypad matriks 4x4

2.

Mengetahui cara memprogram dan mengakses keypad matriks 4x4

3.

Memahami menggunakan keypad matriks 4x4 pada suatu aplikasi


mikrokontroller.

4.

Mengetahui cara menggunakan ADC pada mikrokontroller AVR


ATmega8535.

 Alat dan Perlengkapan


1.

Modul praktikum MCU EduBoard v1.02.1109

2.

Komputer dan software CodeVision AVR v2.03.9 (atau terbaru).

 Tugas Pendahuluan
1.

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

Dasar Teori

of | 10

 Keypad Matriks
Pemberian nilai tertentu seperti referensi / setpoint, angka, huruf,
perintah / command, dan lain sebagainya membutuhkan masukan / input dari
pengguna. Input bisa menggunakan push button, keypad, maupun keyboard.
Menggunakan push button sangat sederhana dan mudah digunakan tetapi semakin
banyak inputan semakin banyak pula push button yang digunakan, oleh sebab itu
push button baik digunakan untuk sistem embedded dengan sedikit inputan atau
input secara sequensial (berurutan).
Keyboard seperti pada keyboard komputer, memiliki banyak inputan
berupa huruf, angka, simbol, fungsi, dll. Menggunakan protokol dan komunikasi
serial sinkron sehingga menggunakan 2 jalur komunikasi yaitu SDA (serial data)
dan SCK (serial clock). Baik digunakan untuk sistem dengan inputan banyak dan
kompleks dan sangat berguna untuk beberapa aplikasi mikrokontroller. Sedangkan
keypad matriks adalah solusi untuk inputan cukup banyak dengan menggunakan
sedikit pin mikrokontroller.
Keypad matriks umumnya terdiri dari push button NO (Normally Open)
yang dirangkai dengan susunan baris dan kolom sehingga membentuk matriks.
Susunan matriks inilah yang menyebabkan banyak tombol dengan mengunakan
sedikit pin mikrokontroller. Jika susunan matriks 4 baris dan 4 kolom atau matriks
4x4 maka banyak tombol yang dicapai adalah 16 buah tombol (maksimum 28
tombol) sedangkan matriks 4x3 sebanyak 12 tombol (maksimum 21 tombol).

Gambar 1. Keypad matriks 4x3 dan 4x4


www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014
Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

3
of | 10

Gambar 2. Keypad matriks 4x4 basic

Gambar 3. Keypad matriks 4x4 advance

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

Modul MCU EduBoard v1.02.1109 menggunakan keypad matriks 4x4


dengan rangkaian dasar (basic) dan tombol sebanyak 16 buah, sehingga untuk
mengakses keypad yang terhubung secara matriks seperti pada gambar 2 yaitu
menggunakan cara sistem scanning.
Setiap pin baris dan pin kolom tidak terhubung satu sama lain. Saklarsaklar atau tombol tersebut jika ditekan akan menyebabkan pin baris dan pin
kolom terhubung. Ketika S1 di tekan maka S1 akan menghubungkan baris 1
dengan kolom 1, ketika S3 ditekan maka S3 menghubungkan baris 1 dengan
kolom 3, ketika S12 ditekan maka S12 menghubungkan baris 3 dengan kolom 4,
dan sebagainya. Oleh sebab itu mikrokontroller harus mendeteksi terhubungnya
pin baris dan pin kolom tersebut satu-persatu agar tidak terjadi kesalahan
pembacaan data yang selanjutnya didefiniskan sebagai suatu karakter. Untuk
mencegah terjadinya kesalahan maka salah satu harus dijadikan output dan
lainnnya dijadikan input yaitu kolom menjadi output dan baris menjadi input
(disesuaikan dengan perancangan hardwarenya).
Metode scanning keypad adalah mendeteksi hubungan pin baris dan
kolom karena tombol ditekan, secara berurutan, bergantian dan satu-persatu.
Lebih jelasnya sebagai berikut :


Pin-pin kolom menjadi output dan pin-pin baris menjadi input.

Pin kolom dan pin baris kondisi awalnya (default) berlogika 1 semua.

Output pin kolom 1 berlogika 0 lalu deteksi :


o Jika input baris 1 berubah logika menjadi 0 maka karakter 1
o Jika input baris 2 berubah logika menjadi 0 maka karakter 4
o Jika input baris 3 berubah logika menjadi 0 maka karakter 7
o Jika input baris 4 berubah logika menjadi 0 maka karakter *

Pin kolom dan pin baris kembali berlogika 1 semua.

Output pin kolom 2 berlogika 0 lalu deteksi :


o Jika input baris 1 berubah logika menjadi 0 maka karakter 2
o Jika input baris 2 berubah logika menjadi 0 maka karakter 5
o Jika input baris 3 berubah logika menjadi 0 maka karakter 8
o Jika input baris 4 berubah logika menjadi 0 maka karakter 0

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

4
of | 10

Pin kolom dan pin baris kembali berlogika 1 semua.

Output pin kolom 3 berlogika 0 lalu deteksi :


o Jika input baris 1 berubah logika menjadi 0 maka karakter 3
o Jika input baris 2 berubah logika menjadi 0 maka karakter 6
o Jika input baris 3 berubah logika menjadi 0 maka karakter 9
o Jika input baris 4 berubah logika menjadi 0 maka karakter #

Pin kolom dan pin baris kembali berlogika 1 semua.

Output pin kolom 4 berlogika 0 lalu deteksi :


o Jika input baris 1 berubah logika menjadi 0 maka karakter A
o Jika input baris 2 berubah logika menjadi 0 maka karakter B
o Jika input baris 3 berubah logika menjadi 0 maka karakter C
o Jika input baris 4 berubah logika menjadi 0 maka karakter D

 ADC AVR ATmega8535


Besaran fisik seperti suhu / temperatur, tekanan, tegangan, arus,
intensitas cahaya, kuat medan magnet, dan sebagainya dapat dideteksi dan diolah
oleh rangkaian digital maupun mikrokontroller. Akan tetapi tidak dapat diolah
secara langsung karena membutuhkan komponen pengkonversi besaran fisik ke
besaran listrik yang disebut sebagai sensor kemudian pengkonversi besaran listrik
ke data-data digital yang disebut Analog to Digital Converter (ADC).
Komponen ADC tersedia dengan berbagai macam pilihan resolusi bit,
kecepatan konversi, ketelitian, range input, interface parallel maupun serial, dll.
Pemilihan penggunaan ADC dapat disesuaikan kebutuhan sistem yang dirancang.
Salah satu solusi lain yaitu menggunakan mikrokontroller yang telah tersedia
ADC internal sehingga tidak perlu menambahkan rangkaian dan komponen ADC
tambahan.
Mikrokontroller ATmega8535 memiliki ADC internal dengan fitur-fitur
sebagai berikut :


Resolusi 8 bit dan 10 bit.

Non-Linear integral 0,5 LSB.

Akurasi 2 LSB.

Waktu konversi 65 260 S.


www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014
Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

5
of | 10

Mencapai 15 kSPS pada resolusi maksimum.

8 Multiplexed Single Ended Input Channel.

Tegangan Input ADC antara 0 VCC.

Tegangan referensi 2,56 V ADC yang dapat dipilih.

Mode Free Running atau Single Conversion.

Konversi ADC saat ada sumber interupsi atau Auto Triggering.

Interupsi ketika konversi ADC selesai.

Pencegah gangguan (Noise) untuk mode Sleep.


Ada 3 mode untuk mengakses ADC pada mikrokontroller ATmega8535,

yaitu :


Single Conversion yaitu ADC melakukan konversi tegangan analog menjadi


data digital hanya 1 kali saja yaitu ketika perintah mulai konversi diberikan.
Perintah ini dengan memberikan logika 1 pada bit ADEN dan ADSC pada
register ADCSRA (datasheet 207).

Auto Triggered Conversion yaitu ADC melakukan konversi tegangan analog


menjadi data digital dengan pemicuan dari berbagai macam sumber seperti :
Analog komparator, Interupsi Eksternal, Interupsi Timer 0 dan Interupsi
Timer 1. Untuk mengaktifkan mode ini yaitu dengan memberikan logika 1
pada bit ADEN dan ADATE pada register ADCSRA dan mengatur bit
ADTS0, ADTS1, dan ADTS2 pada register SFIOR (datasheet 222-223).

Free Running Conversion yaitu ADC melakukan konversi tegangan analog


menjadi data digital secara terus menerus (continue). Untuk mengaktifkan
mode ini yaitu dengan memberikan logika 1 pada bit ADEN dan ADATE
pada register ADCSRA dan mengatur bit ADTS0, ADTS1, dan ADTS2 pada
register SFIOR (datasheet 222-223).

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

6
of | 10

 Percobaan 1 : Scanning Keypad Matriks 4x4

Buat folder baru D:\Praktikum Mikrokontroler\P7 Keypad n ADC\

Buat project baru dan jalankan CodeWizzardAVR seperti pada gambar

Generate, Save, and Exit, simpan dengan nama file Keypad4x4

Silahkan lihat buku manual MCU EduBoard v1.02.1109 pada halaman


3 atau halaman 7. Pasang PORTC MCU AVR ke P_Keypad.

Program sebagai berikut dan lihat hasilnya :

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

// tambahkan library delay

void main(void)
{
PORTC = 0bff;
// Paling atas
DDRC = 0x0f;
................
// Pada Inisialisasi MCU
// hapus DDRx dan PORTx yang telah ditulis diatas
printf(Scanning Keypad Matriks 4x4\r);
while(1)
{
PORTC = 0b11111110;
if (PINC.4 == 0)
putschar(1);
else if (PINC.5 == 0)
putschar(4);
else if (PINC.6 == 0)
putschar(7);
else if (PINC.7 == 0)
putschar(*);

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

7
of | 10

PORTC = 0b11111101;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
PORTC = 0b11111011;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
PORTC = 0b11110111;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
delay_ms(200);
}
// end for while(1)
}
// end for void main()

putschar(2);
putschar(5);
putschar(8);
putschar(0);
putschar(3);
putschar(6);
putschar(9);
putschar(#);
putschar(A);
putschar(B);
putschar(C);
putschar(D);

 Percobaan 2 : Scanning Keypad 4x4 sederhana

Program sebagai berikut dan lihat hasilnya :

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

// tambahkan library delay

#include DDR_keypad
#include PORT_keypad
#include PIN_keypad

DDRC
PORTC
PINC

#include HI_keypad(x)
#include LO_keypad(x)
#include IS_HI(x)

PORT_keypad|= (1<<x)
PORT_keypad&=~(1<<x)
PIN_keypad&(1<<x)

unsigned char key_press;

// global key_press

unsigned char SCANNING_keypad()


{
unsigned char tombol[16]={D,#,0,*,C,9,8,7,
B,6,5,4,A,3,2, 1};
unsigned char kolom,baris,ke=0,ditekan=$;
DDR_keypad = 0xf0;
for (kolom=4; kolom<=7; kolom++)
{
PORT_keypad = 0xff;
LO_keypad(kolom);
for (baris=0; baris<=3; baris++)
{
if (~IS_HI(baris))
ditekan =tombol[ke];
ke++;
}
}
delay_ms(50);
return ditekan;
// jika tidak ditekan, karakter return = $
}
www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014
Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

8
of | 10

void main(void)
{
................
// Pada Inisialisasi MCU
printf(Scanning Keypad Sederhana\r);
while(1)
{
key_press = SCANNING_keypad();
putchar(key_press);
delay_ms(200);
}
// end for while(1)
}
// end for void main()

 Percobaan 3 : ADC Single Conversion

Buat folder baru D:\Praktikum Mikrokontroler\P7 Keypad n ADC\

Buat project baru dan jalankan CodeWizzardAVR seperti pada gambar

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

9
of | 10

10

Generate, Save, and Exit, simpan dengan nama file ADCAVR

Silahkan lihat buku manual MCU EduBoard v1.02.1109 pada halaman

3 atau halaman 5 dan halaman 7. Pasang PORTC MCU AVR ke P_LCD


dan PORTA MCU AVR ke P_RTC_Pot.

Program sebagai berikut dan lihat hasilnya :

#include
#include
#include
#include

<mega8535.h>
<lcd.h>
<stdio.h>
<delay.h>

// tambahkan library delay

// Alphanumeric LCD Module Function


#asm
#.equ __lcd_port=0x18 ; PORTB
#endasm
#define

ADC_VREF_TYPE 0x40

// Read the AD conversion result


unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
// Declare your global variables here
unsigned int data_adc[4];
unsigned char x,buf_adc[4];
void main(void)
{
................
// Pada Inisialisasi MCU
// ADC initialization
// ADC Clock frequency: 691,200 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
printf(ADC Single Conversion\r);
lcd_clear();
lcd_putsf(Percobaan 3 ADC);
lcd_gotoxy(0,1);
lcd_putsf( Single Convers );
delay_ms(1500);
lcd_clear();
lcd_putsf(S0:xxxx S1:xxxx);
lcd_gotoxy(0,1);
lcd_putsf(S2:xxxx S3:xxxx);
www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014
Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

of | 10

11

while(1)
{
for (x=0; x<4; x++)
data_adc[x] = read_adc(x);
sprintf(buf_adc,%i, data_adc[0]);
lcd_gotoxy(3,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[1]);
lcd_gotoxy(12,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[2]);
lcd_gotoxy(3,1);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[3]);
lcd_gotoxy(12,1);
lcd_puts(buf_adc);
delay_ms(200);
}
// end for while(1)
}
// end for void main()

 Percobaan 4 : Auto Triggered Conversion.


Jalankan CodeWizzardAVR seperti pada gambar :

Silahkan lihat buku manual MCU EduBoard v1.02.1109 pada halaman


3 atau halaman 5 dan halaman 7. Pasang PORTD MCU AVR ke
P_Toggle dan PORTA MCU AVR ke P_RTC_Pot.

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

of | 10

Program sebagai berikut dan lihat hasilnya :

#include
#include
#include
#include

<mega8535.h>
<lcd.h>
<stdio.h>
<delay.h>

12
of | 10

// tambahkan library delay

// Alphanumeric LCD Module Function


#asm
#.equ __lcd_port=0x18 ; PORTB
#endasm
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
unsigned int data_adc[4];
unsigned char x,buf_adc[4];
for (x=0; x<4; x++)
data_adc[x] = read_adc(x);
sprintf(buf_adc,%i, data_adc[0]);
lcd_gotoxy(3,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[1]);
lcd_gotoxy(12,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[2]);
lcd_gotoxy(3,1);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[3]);
lcd_gotoxy(12,1);
lcd_puts(buf_adc);
}
#define

ADC_VREF_TYPE 0x40

// Read the AD conversion result


unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
................
// Pada Inisialisasi MCU
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
// ADC initialization
// ADC Clock frequency: 691,200 kHz
www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014
Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

// ADC Voltage Reference: AVCC pin


// ADC High Speed Mode: Off
// ADC Auto Trigger Source: External IRQ0
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x0F;
SFIOR|=0x40;
// LCD module initialization
lcd_init(16);
printf(ADC Triggered Conversion\r);
lcd_clear();
lcd_putsf(Percobaan 4 ADC);
lcd_gotoxy(0,1);
lcd_putsf(TriggeredConvers);
delay_ms(1500);
lcd_clear();
lcd_gotoxy(0,1);

lcd_putsf(T0:xxxx
lcd_putsf(T2:xxxx

13

T1:xxxx);
T3:xxxx);

// Global enable interrupts


#asm (sei)
while(1)
{
// end for while(1)
}
}
// end for void main()

Putar dan ukur tegangan pada potensio lalu ubah saklar Toggle bit ke 3
(posisi INT0 / interupsi 0 / PD.2) ke logika 1 kemudian logika 0 dan
amati perubahan nilai terbaca ADC pada LCD.

Ulangi langkah tersebut dengan berbagai variasi putaran potensiometer.

www.PayZTronics.Blogspot.com | MCU Eduboard Copyright 2009-2014


Tulisan ini dibuat berdasarkan pengetahuan dan pengalaman PayZTronics.
Perhatian : Jangan menyalin atau memperbanyak tanpa seizin PayZTronics.

of | 10

Anda mungkin juga menyukai