BASIC I/O
Sistem PORT AVR
• AVR ATmega8535 memiliki 4 buah Port 8 bit, PORTA,PORTB,PORTC,PORTD
• Untuk mengatur suatu PORT sebagai basic digital I/O pengguna harus
mengatur&mengakses Register yg terkait dengan PORT tersebut yang terletak pada daerah 64 byte I/O register
Sistem PORT AVR
• Data Register PORTxn, digunakan untuk menuliskan data ouput pada PORT
• Data Direction Register DDRxn,
digunakan untuk mengatur pin PORT sebagai Input atau Output
CodeVision AVR
• Setting I/O dengan codewizard
memungkinkan kita untuk memilih mode I/O yg kita inginkan
CodeVision AVR
CodeVision AVR
• Pengaturan yg kita lakukan akan menghasilkan
Pull Up & Pull Down?
• Pull Up resistor: resistor yg dipergunakan untuk “menarik” ke logika 1(high/Vcc)
• Pull Down resistor: resistor yg
dipergunakan untuk “menarik” ke logika 0(low/Gnd)
• Pengaruh ketiadaan pull up/pull down:
tanpa adanya pull up atau pull down maka suatu titik/pin akan “float” mengambang
Pull Up & Pull Down?
• Pull Up
Pull Up internal AVR
Catatan
• Terdapat fasilitas komunikasi serial pada PORTD, yaitu PD.0 dan PD.1, jika
difungsikan sebagai Tx dan Rx maka
jangan digunakan sebagai GPIO(General Purpose I/O)
Catatan
Catatan
• Pada Modul DT AVR LC Micro System terdapat jumper untuk setting PD.0 dan PD.1
Catatan
• Untuk setiap PORT baik pada M68HC11 atau AVR 8535, pastikan bahwa sebelum masuk pada aplikasi yg ada susun, kondisi inisial masing PORT sudah sesuai.
• Terdapat PORT yg kondisi inisialnya (sesudah reset) sudah pasti.
• Terdapat PORT yg kondisi inisialnya (sesudah reset) belum pasti
Switch, LED, Keypad&Display
Switch Interface
• Switch adalah input yg paling sederhana dan paling sering bagi mikrokontroler
• Terdapat berbagai macam switch yg harus dipilih agar sesuai dengan aplikasi yg
akan dibuat
• Pole : jumlah koneksi yg bisa diubah dengan satu tindakan pada switch
Switch Interface
Switch Interface
• Momentary contact
– Push Button switch – Micro switch
• Semi permanent (non momentary)
– Toggle
– Rotary switch
– DIP switch (slide switch)/8 pole on off – Push On Push Off
Switch Interface
Switch Interface
• Simple Interface
– Switch interface dengan pull up resitor
– Jika switch tidak ditekan maka akan diperoleh
logika “1”
Switch Interface
Switch Interface
Switch Debounce
• Bounce : ketika switch ditekan(berpindah posisi), dari on-off atau off-on, terjadi
“bounce”(pantulan), yaitu adanya posisi yg “memantul” antara on dan off, sehingga
seolah-olah terjadi penekanan switch
berulang-ulang(transisi on-off atau off-on berulang)
Switch Debounce
Switch Debounce
• Debounce
– Secara hardware, dengan memaksa sinyal logika menjadi berbentuk “kotak”
• Capacitor dan resistor
• Capacitor dan resistor serta Schmidt triger • Debouncing Latch (flip-flop)
– Secara software, dengan menyisipkan delay agar
Switch Interface
Switch Interface
Switch Interface
• Mendeteksi penekanan switch
– Polling : Program mengecek secara periodis kondisi switch apakah ditekan atau tidak.
Program selalu mengulang potongan program yg digunakan untuk polling switch
– Interupt : Program tidak mengecek kondisi switch secara periodis, namun switch
Switch Interface
LED
• LED adalah ouput yg paling sederhana, namun dapat sangat membantu,
khususnya pada tahap development
LED
LED
Keypad
• Keypad
– Pada dasarnya adalah sejumlah switch yg disusun secara matriks
– Terdiri dari baris dan kolom
– Penekanan suatu tombol
menyebabkan koneksi antara
Keypad
• Deteksi keypad
– Scanning Baris : deteksi tombol yg ditekan dilakukan mulai dari baris pertama, dicek apakah pada baris tsb ada tombol yg
ditekan, jika ya, kolom yg mana pada baris tersebut yg ditekan, jika tidak ada yg ditekan lanjut ke baris berikutnya, dan
seterusnya
– Scanning Kolom:deteksi tombol yg ditekan dilakukan mulai dari kolom pertama, dicek apakah pada kolom tsb ada tombol yg ditekan, jika ya, baris yg mana pada kolom tersebut yg ditekan, jika tidak ada yg ditekan lanjut ke kolom berikutnya, dan
seterusnya
Keypad Matrix 4x4
• Susun koneksi seperti pd gambar
• Aturlah agar PD.0-PD.3 sebagai input dengan internal pull up aktif
• Aturlah agar PD.4-PD.7 sebagai output
• Masking scanning kolom diberikan melalui PD.4-PD.7
Keypad Matrix 4x4
• Step 1
• Set kondisi Port D =
11101111(ingat PD.0 – PD.3 sebagai input dengan internal Pull up aktif, PD.4 – PD.7
sebagai ouput dengan kondisi PD.4= 0)
• Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 1 ditekan
Keypad Matrix 4x4
• Step 2
• Set kondisi Port D =
11011111(ingat PD.0 – PD.3 sebagai input dengan internal Pull up aktif, PD.4 – PD.7
sebagai ouput dengan kondisi PD.5= 0)
• Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 2 ditekan
• Jika PD.1 = 0 maka Tombol 5 ditekan
• Jika PD.2 = 0 maka Tombol 8 ditekan
Keypad Matrix 4x4
• Step 3
• Set kondisi Port D =
10111111(ingat PD.0 – PD.3 sebagai input dengan internal Pull up aktif, PD.4 – PD.7
sebagai ouput dengan kondisi PD.6= 0)
• Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 3 ditekan
Keypad Matrix 4x4
• Step 4
• Set kondisi Port D =
01111111(ingat PD.0 – PD.3 sebagai input dengan internal Pull up aktif, PD.4 – PD.7
sebagai ouput dengan kondisi PD.7= 0)
• Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol COR ditekan
• Jika PD.1 = 0 maka Tombol MEN ditekan
• Jika PD.2 = 0 maka Tombol Up ditekan
Keypad - LED
• Contoh aplikasi
– Keypad dihubungkan dengan PORT.D
– 8 buah Led dihubungkan dengan PORT.B
Keypad - LED
Keypad - LED
Keypad - LED
• Definisikan Global variable untuk menyimpan data penekanan
Seven Segment
Seven Segment
Seven Segment
Seven Segment
Liquid Crystal Display(LCD)
Liquid Crystal Display(LCD)
• Fungsi Register Kontrol LCD
Liquid Crystal Display(LCD)
• Character
Generator ROM (CGROM),
menyimpan data pola karakter,
Liquid Crystal Display(LCD)
• Interface 8 bit, semua pin LCD digunakan (RS, R/W, E, D0-D7),sehingga butuh lebih dari satu port mikrokontroler untuk
mengatur LCD,karena ada sekurangnya 11 pin yg harus dikendalikan
Liquid Crystal Display(LCD)
• Tahapan penulisan pada LCD
– Atur agar RS menjadi “high” jika kita akan
menuliskan data(karakter), “low” jika kita akan menuliskan instruksi
– Atur agar R/W’ “low”
– Kirimkan data melalui D0-D7
CodeVision AVR
• Dengan CodeVision AVR kita tidak perlu memikirkan tahapan seperti tersebut di atas untuk menggunakan LCD, karena telah terdapat Library untuk LCD
CodeVision AVR
• Contoh LCD terhubung ke PORT.A
CodeVision AVR
CodeVision AVR
• Perintah-perintah LCD pada CodeVision
– void _lcd_ready(void)
– void _lcd_write_data(unsigned char data)
– void lcd_write_byte(unsigned char addr, unsigned char data);
– unsigned char lcd_read_byte(unsigned char addr);
– unsigned char lcd_init(unsigned char lcd_columns)
– void lcd_clear(void)
– void lcd_gotoxy(unsigned char x,unsigned char y)
– void lcd_putchar(char c)
CodeVision AVR
• Perintah yg sering digunakan
– unsigned char lcd_init(unsigned char lcd_columns)
Contoh :
lcd_init(16);
Inisialisasi LCD 16x2, penghapusan tampilan LCD, kursor diposisikan di kolom 0 baris 0
CodeVision AVR
• Perintah yg sering digunakan
– void lcd_gotoxy(unsigned char x, unsigned char y)
Contoh :
lcd_gotoxy(1,1);
Memposisikan kursor pada kolom 1 baris 1
– void lcd_putchar(char c) Contoh :
lcd_putchar(0x41);
Type Conversion
• Pada CodeVision terdapat operasi yg disebut konversi pola
• Bukan bagian dari fungsi LCD namun sangat membantu dalam mengatur
tampilan pada LCD
• Digunakan bersama dengan sprintf
atau printf
Type Conversion
• %d mengubah ke bentuk bilangan bulat positif
• %x mengubah ke bentuk hexadesimal
• %u mengubah ke bentuk bilangan desimal tanpa tanda
• %f mengubah ke bentuk bilangan floating point
Type Conversion
• Contoh
– sprintf(kata1,"%3d",Data);
Menyimpan hasil konversi variabel Data ke bentuk bil. Bulat positif 3 digit ke dalam
variabel/array kata1
– sprintf(kata2,"%.3f",Data2);
Catatan
• Perhatikan bahwa hal yg berkaitan dengan type data sangat penting khususnya
dalam operasi matematika
• Kesalahan dalam pemilihan type data
Catatan
• Contoh
unsigned char a=30;
unsigned char b=128;
unsigned int c;
c=a*b; //menyebabkan hasil yg salah
Catatan
• Contoh
unsigned char a=30;
unsigned char b=128;
unsigned char c;
float d;
c=b/a; //hasilnya adalah c=4
d=b/a //hasilnya adalah d=4
Array
• Merupakan salah satu bentuk structure,
yaitu suatu variabel yg terdiri dari sejumlah variabel denga tipe data yg sama
• Bisa kita gunakan untuk membantu
pengaturan tampilan LCD seperti halnya type conversion
Array
• Array seolah-olah kita gunakan sebagai pemesanan tempat pada LCD
• Panjang array harus sesuai dengan lebar tulisan/data yg ingin kita tampilkan
• Dengan cara ini kita dapat mengatu
tampilan agar satu baris dapat digunakan untuk menampilkan lebih dari satu data • 16 karakter/ruang pada LCD kita bagi
Array
• Penggunaan secara bersamaan dengan
didahului sprintf, dan diikuti dengan
lcd_gotoxy(baris x,kolom
y)dilanjutkan dengan lcd_puts(array)
Contoh Program
Contoh Program
Contoh Program
Contoh Program
• Program selengkapnya ada di K2LCD.pdf • Program tersebut akan menampilkan
penekanan keypad pada LCD
Referensi
• Ken Stiffler, 1996, Design with Microprocessor for Mechanical Engineers, McGraw Hill
• Jan Axelson, The Microcontroller Idea Book • CodeVisionAVR User manual
• M. Ary Heryanto, Ir. Wisnu Adi P,
Pemrograman Bahasa C untuk Mikrokontroler ATmega 8535, Penerbit Andi