Upload
jachles
View
138
Download
19
Embed Size (px)
Citation preview
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
1
BAB I
MIKROPROSESOR DAN PERKEMBANGANNYA
1.1 Pengenalan Dasar Mikroprosesor
Mikroprosesor berasal dari kata microproccessor yang berarti peralatan
pengolah atau pemroses data yang berukuran relatif kecil. Data diolah dan
diproses dalam bentuk digital dan dikeluarkan dalam besaran – besaran
digital. Di sini informasi digital yang kita masukkan melalui saluran masukan
akan diolah sesuai dengan program yang yang telah kita berikan. Program
yang diberikan pada mikroprosesor merupakan kumpulan kode operasi
(Operation Code-OPCODE) dalam bentuk sandi heksadesimal yang disusun
sedemikian rupa dengan urutan – urutan pola logika yang benar sehingga
membentuk sebuah program yang sesuai dengan keperluan yang pada
akhirnya nanti akan dikeluarkan pada saluran keluaran dalam bentuk
informasi digital. Informasi digital tersebut harus berupa informasi dua level
tegangan yang telah ditetapkan yaitu logika 1 (High Level Voltage) berupa
tegangan kira – kira antara 3,5 – 5 volt atau logika 0 (Low level Voltage)
berupa tegangan antara 0 – 0,8 volt.
1.2 Sejarah Perkembangan Mikroprosesor
Mikroprosesor pertama adalah Intel 4004, merupakan
mikroprosesor 4 bit (nibble). Pada tahun 1971, Intel mengeluarkan
mikroprosesor versi terbaru Intel 8008, yang merupakan perluasan Intel
4004. Mikroprosesir 8008 mampu mengalamati memori 16KByte.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
2
Mikroprosesor 8008 mempunyai kelemahan ukuran memori yang kecil,
kecepatan rendah, dan set instruksi terbatas, maka pada tahun 1973,
Intel mengeluarkan mikroprosesor 8080, sebagai mikroprosesor-8 bit
pertama. Perkembangan ini memicu beberapa perusahaan lain berlomba
memunculkan mikroprosesor 8 bit dengan versinya masing-masing,
sebagaimana diperlihatkan dalam Tabel 1.1.
Tabel 1.1 Mikroprosesor 8-bit awal
Pabrik Nomor seri
Fairchild F-8
Intel 8080
MOS Technology 6502
Motorola MC6800
National Semiconductor IMP-8
Rockwell International PPS-8
Zilog Z-8
Pada tahun 1975, Intel mengenalkan versi baru 8080, yaitu 8085,
yang merupakan mikroprosesor 8-bit terakhir. Kemajuan besar pada 8085
adalah internal clock generator, sistem control internal, dan frekuensi clock
yang lebih tinggi. Intel mengeluarkan mikroprosesor modern pada tahun
1978, yaitu mikroprosesor keluarga 80X86. Mikroprosesor ini mempunyai
lebar data 16 bit dan merupakan perkembangan mikroprosesor 8085, yang
mempunyai lebar data 8 bit. Mikroprosesor 8086 merupakan awal
perkembangan sistem komputer berikutnya. Evolusi perkembangan
mikroprosesor Intel ditunjukkan dalam Tabel 1.2.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
3
Tabel 1.2 Evolusi perkembangan mikroprosesor Intel
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
4
BAB II
ARSITEKTUR MIKROPROSESOR
2.1 Sistem Mikroprosesor
Agar mikroprosesor dapat berhubungan dan mengatur dengan mudah unit
– unit yang berada di luar mikroprosesor maka diperlukan suatu konsep bus
mikroprosesor yang terdiri dari bus data (data bus), bus alamat (address
bus) dan bus kontrol (control bus) seperti yang ditunjukkan dalam Gambar
1.1.
Gambar 2.1. Struktur Bus Mikroprosesor
Di samping ketiga sistem bus tersebut maka mikroprosesor juga
membutuhkan pewaktu maupun catu daya. Bus – bus tersebut akan digunakan
untuk berkomunikasi dengan peralatan di luar mikroprosesor baik dengan
memori unit maupun I/O (Input/Output) unit. Mikroprosesor Unit (MPU)
atau yang sering disebut dengan CPU (Central Processing Unit) bertugas
sebagai pengendali utama dalam sistem tersebut sekaligus sebagai unit
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
5
pengolah utama yang berarti segala sesuatu yang ada hubungannya dengan
pengendalian sistem secara keseluruhan dan pemrosesan data seluruhnya
ditangani oleh CPU. Pada CPU tersebut dilengkapi dengan bagian yang
paling penting yaitu control unit (unit pengontrol) dan Arithmetic Logic Unit
(disingkat ALU yaitu unit aritmatika dan logika).
Unit penyimpan (memory unit) digunakan sebagai catatan maupun sebagai
bahan bacaan atau referensi dari mikroprosesor, dimana dalam hal ini dibagi
menjadi dua yaitu RAM (Random Access Memory) yaitu pengingat yang
dapat diakses secara acak baik RAM dinamik maupun RAM statik dan ROM
(Read Only Memory) yaitu pengingat yang hanya dapat dibaca saja. Secara
keseluruhan suatu mikroprosesor harus terdiri dari CPU (mikroprosesor), unit
memori dan unit I/O, seperti yang ditunjukkan dalam Gambar 2.2.
Gambar 2.2. Blok Diagram Unit Mikroprosesor
2.2 Memori
Memori digunakan untuk menyimpan baik program yang dijalankan oleh
mikroprosesor maupun data yang diolah oleh mirkoprosesor.
2.3 Sistem I/O
Ruang I/O (input/output) dalam sistem komputer terentang dari port 0000H-
FFFFH. Pengalamatan port I/O mirip dengan alamat memori, yaitu hanya
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
6
mengalamati piranti I/O. Piranti I/O memungkinkan mikroprosesor untuk
berkomunikasi antarbagian di dalamnya atau dengan dengan dunia luar. Ruang
I/O membantu komputer untuk mengakses hingga 64K byte piranti I/O yang
berbeda.
2.4 Mikroprosesor
Mikroprosesor mengontrol memori dan I/O melalui sejumlah jalur
koneksi yang disebut bus. Bus memilih piranti I/O atau memori, mentransfer
data antara piranti I/O dan memori dengan mikroprosesor, dan mengontrol
sistem I/O dan memori. Memori dan I/O dikontrol melalui instruksi yang
disimpan dalam memori dan dijalankan oleh mikroprosesor.
Mikroprosesor menjalankan tiga pekerjaan utama: (1) melakukan transfer
data antara mikroprosesor sendiri dengan sistem memori atau I/O, (2) operasi
aritmatika dan logika sederhana, dan (3) mengatur aliran program melalui
pengambilan keputusan sederhana.
Kekuatan mikroprosesor terletak pada kemampuan untuk
mengeksekusi ratusan juta instruksi per detik dari program atau perangkat
lunak (kelompok instruksi) yang disimpan dalam sistem memori. Mikroprosesor
awal (8086-80286) hanya mampu memanipulasi data 8bit dan 16bit, sedangkan
mikroprosesor 80386-Pentium II mampu memanipulasi 8bit, 16bit, dan 32bit.
2.5 Bus
Bus merupakan sekumpulan kabel sejenis yang mengkoneksikan komponen
dalam sistem komputer. Bus yang mengkoneksikan bagian-bagian sistem
komputer melakukan transfer alamat, data, dan informasi kontrol antara
mikroprosesor dengan memori dan sistem I/O nya. Pada sistem komputer
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
7
berbasis mikroprosesor, terdapat tiga bus untuk mentransfer informasi: alamat,
data, dan kontrol. Gambar 1.4 memperlihatkan bagaimana bus
mengkoneksikan berbgai macam komponen sistem seperti sistem
mikroprosesor, memori read/write (RAM), read only memory (ROM), dan
beberapa piranti I/O.
Bus alamat. Bus alamat meminta lokasi memori dari memori atau lokasi I/O
dari piranti I/O. Bus ini disebut juga sebagai bus unidirectional (satu arah). Jika
suatu memori dialamati, makabus alamat berisi alamat memori yang lebarnya
bervariasi pada berbagai versi mikroprosesor, sebagai contoh:
- 8086/8088 mampu mengalamati 1M byte menggunakan alamat 20bit yang
memilih lokasi 00000H-FFFFFH
- 80286 mampu menagalamati 16Mbyte menggunakan alamat 24bit yang
memilih lokasi 000000H-FFFFFFH.
Bus data. Bus data mentransfer informasi antara mikroprosesor dengan
memori dan I/O nya. Ukuran transfer data bervariasi dari 8bit samapai 64bit
pada berbagai jenis mikroprosesor keluarga Intel, sebagai contoh:
- 8088 mempunyai bus data 8bit yang mentransfer data 8bit pada satu
waktu.
- 8086, 80286 mentransfer data 16 bit pada bus datanya.
- 80386DX, 80486SX, 80486DX mentransfer data 32bit.
- Pentium-Pentium IV mentranfer 64 bit
Bus kontrol. Bus kontrol berfungsi untuk mengirimkan sinyal yang digunakan
untuk menyinkronkan operasi masing-masing elemen komputer. Bus kontrol
berisi jalur yang memilih memori atau I/O dan menyebabkan memori atau I/O
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
8
tersebut melakukan operasi baca (read) atau tulis (write). Pada kebanyakan
sistem komputer terdapat 4 koneksi bus kontrol:
- MEMR (memory read control)
- MEMW(memory write control)
- IOR (I/O read control)
- IOW (I/O write control)
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
9
BAB III
MEMORI
3.1 Prinsip Konstruksi Memori
Gambar 3.1 menunjukkan prinsip bagaimana konstruksi memori dibangun. Setiap
kombinasi logika pada jalur alamat A0 – A15 sesuai dengan satu lokasi. Masing-
masing lokasi memori berisi 8 bit, ini sesuai dengan lebar bus data.
Gambar 3.1 Konstruksi Memori
MEMR dan MEMW
Setelah meletakkan sebuah alamat pada bus alamat, mikroprosesor akan membaca
isi dari lokasi memori, atau menulis data ke dalam memori. Untuk menulis lokasi
memori, mikroprosesor mengirim sinyal kontrol MEMORY READ ( MEMR).
Untuk menyimpan byte data pada lokasi memori, mikroprosesor mengirim sinyal
kontrol MEMORY WRITE ( MEMW ). Tanda garis pada MEMR dan MEMW
menandakan bahwa sinyal kontrol aktif low.
Tabel 3.1 menunjukkan bagian dari alamat memori yang mungkin.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
10
Tabel 3.1. Lokasi alamat dari 16 jalur alamat
Logic combination on the address line Hex
address
Memory
location 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
L L L L L L L L L L L L L L L L 0000 0
L L L L L L L L L L L L L L L H 0001 1
L L L L L L L L L L L L L L H L 0002 2
L L L L L L L L L L L L L L H H 0003 3
L L L L L L L L L L L L L H L L 0004 4
L H L H H H L L H H H H L H H H 5CF7 23799
H H H H H H H H H H H H H H H L FFFE 65534
H H H H H H H H H H H H H H H H FFFF 65535
3.2 Address Decoding
Dengan 16 jalur alamat, mikroprosesor dapat mengalamati 65536 (216
) lokasi
memori. Untuk itu, anda memerlukan address decoder. Saat alamat berada pada
jalur alamat, address decoder memilih lokasi memori yang sesuai. Sebagai contoh,
jika alamat 0000H terdapat pada bus alamat, address decoder akan memilih lokasi
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
11
0, dengan alamat 0001H maka akan memilih lokasi 1. Proses akan berjalan terus
hingga decoder memilih lokasi 65535 (lokasi memori) dengan alamat FFFFH.
Pada Gambar 2.2 dapat dilihat bagaimana lokasi ditulis (di sini lokasinya 0002H).
Saat signal kontrol MEMR dikirim, isi memori diletakkan pada bus data, yang
mana data selanjutnya dibaca oleh mikroprosesor.
Gambar 3.2 Penulisan Lokasi Memori
Address decoding 8K RAM/EPROM
Sistem memori sebuah komputer dibangun dari beberapa bagian memori dan
setiap bagian memori dibangun dari beberapa chip memori yang kapasitasnya
kecil. Lihat pada 8K RAM/EPROM. Anda akan melihat bahwa bagian memori
8K dibangun dari 4 buah chip memori 2K.
Teknik untuk membangun bagian seperti ini anda harus melakukan :
Untuk chip memori 2K, anda memerlukan 11 jalur alamat, supaya dapat
mengalamati alamat sebanyak 2048 lokasi memori (211
= 2048).
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
12
Untuk unit memori 8K anda memerlukan 13 jalur alamat. Sebelas jalur alamat A0
– A10 , akan diperlukan untuk setiap chip memori 2K, dan selebihnya digunakan
untuk memilih satu dari keempat chip memori yang ada.
Dari keempat kombinasi sinyal yang mungkin pada 2 jalur alamat yaitu A11 dan
A12 , anda dapat memperoleh 4 sinyal enable untuk 4 chip memori 2K. Untuk ini
anda memerlukan address decoder. Gambar 2.3 menunjukkan contoh address
decoder.
Gambar 3.3 Address Decoder Memori 2KB
Sesuai kombinasi signal pada input A dan B, salah satu dari outputnya akan selalu
berubah ke L (aktif low). Jenis decoder ini disebut decoder 1 dari 4 sebab 1 dari 4
signal yang mungkin akan nampak pada output.
Dalam Gambar 2.4 terlihat bahwa jalur alamat A0 – A10 dihubungkan ke
seluruh chip memori. Dengan kombinasi signal pada jalur alamat, anda dapat
memilih suatu lokasi memori di dalam chip. Chip dapat menerima atau mengirim
data jika kombinasi signal pada jalur alamat A11 dan A12 sesuai dengan alamat
yang ditetapkan pada chip tersebut. Signal enable yang dibangkitkan oleh address
decoder dihubungkan ke latch select chip pada chip memori.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
13
Gambar 3.4 Pemanfaatan Address Decoder pada Memori 4 Keping 2K RAM
3.3 Ukuran Memori
Kapasitas memori dinyatakan dalam kilobyte atau K. Waktu akses suatu komputer
adalah waktu yang diperlukan oleh memori untuk meletakkan byte data dari bus
data ke memori. Lamanya waktu sekitar beberapa ratus nanosecond.
Dalam teknologi komputer 1K adalah 1024 byte. Dalam teknik 1K adalah 1000,
tetapi di sini kita menggunakan 1024. Dengan 10 jalur alamat, anda dapat
mengalamati 1kilo atau 1024 (210
) lokasi memori. Sebuah mikrokomputer dengan
16 jalur alamat dapat mengalamati 64K lokasi memori.
64K memori pada komputer dapat dibagi dalam 8 blok memori. Jalur alamat yang
dibutuhkan untuk sebuah blok 8K memori adalah 13 jalur (A0-A12), sesuai
perhitungan :
1K = 1084 = 210
( 10 jalur alamat )
8 = 23 ( 3 jalur alamat )
Tiga jalur alamat (A13, A14, A15) digunakan untuk mengalamati 8 blok lokasi
memori yang berbeda. Pada sistem MFA setting blok alamat pada board memori
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
14
dapat dilakukan secara manual yaitu dengan mengubah-ubah kombinasi switch.
Setiap board mempunyai rangkaian komparator yang berfungsi untuk
membandingkan alamat yang berada pada jalur A13, A14, A15 dengan alamat yang
telah ditetapkan pada setiap board memori. Dalam Gambar 2.5 dapat dilihat blok
memori 8K yang dihubungkan dengan bus alamat.
Gambar 3.5 Blok Memori 8K Dihubungkan dengan Bus Alamat
Konstruksi 8K RAM secara detail dapat dilihat dalam Gambar 3.6
Gambar 3.6 Konstruksi 8K RAM secara detail
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
15
3.4 Proses Baca pada Memori
Adapun proses baca adalah sebagai berikut :
1. Mikroprosesor mengirimkan alamat memori ke jalur A0 – A15.
2. Mikroprosesor mengirimkan sinyal kontrol MEMR yang menugaskan unit
memori untuk memindahkan isi dari memori yang dialamati ke bus data.
3. Isi dari memori yang dialamati diletakkan pada bus data.
4. Pada perubahan L-H pada jalur kontrol MEMR, mikroprosesor membaca
data dari bus data ke dalam register internal.
5. Pada saat proses pembacaan sudah lengkap, memori menghentikan
pemindahan data pada bus data.
Gambar 3.7 Timing diagram proses baca pada memori
3.5 Proses Tulis pada Memori
Adapun proses tulis pada memori adalah sebagai berikut:
1. Mikroprosesor mengirimkan alamat memori ke jalur A0 – A15.
2. Meletakkan data baru untuk memori ke bus data.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
16
3. Sinyal kontrol MEMW diaktifkan untuk menulis data pada alamat
memori yang telah ditentukan
4. Proses penulisan berakhir dengan tingginya (H) sinyal kontrol MEMW .
5. Mikroprosesor menghentikan data pada bus data pada waktu yang sama.
Gambar 3.8 Timing diagram proses tulis pada memori
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
17
BAB IV
INPUT DAN OUTPUT
4.1 Rangkaian Port Output
Di dalam port output (Gambar 1.3), hanya terdapat beberapa bagian
komponen saja, yaitu pembanding alamat dan penahan data. Penahan data
dibangun dari 8 buah D flip-flop, yang dapat anda temukan dalam bentuk satu
buah IC. Seluruh input clock dan input reset pada 8 buah D flip-flop
dihubungkan menjadi satu. Flip-flop bekerja saat ada perubahan signal dari
low ke high (rising edge) pada keadaan ini flip-flop mengambil signal pada
input D dan menahannya pada output Q.
Gambar 4.1. Rangkaian Port Output
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
18
Pembanding alamat menggunakan rangkaian pembanding (comparator) yang
dibangun dari gerbang Exclusive Nor (XNOR). Gerbang XNOR akan
memberikan logika tinggi pada output, hanya jika signal di kedua input
sama.
Keluaran dari 8 buah komparator dihubungkan ke input 2 gerbang AND. Ini
didesain untuk memberikan output logika tinggi hanya jika seluruh input
adalah tinggi. Setiap signal alamat akan dibandingkan dengan alamat port
yang telah ditetapkan. Signal output tinggi pada TP2 (comparator output)
akan dihasilkan jika kondisinya sebagai berikut :
4 switch input S1 – S8 sama dengan signal alamat pada jalur alamat A0 – A7
5 signal control IOW aktif (keadaan logika rendah)
Karena D flip-flop dikontrol oleh rising edge, maka signal output harus
diinverter sebelum dihubungkan ke input clock flip-flop. Gambar 1.4
menunjukkan timing diagram transmisi data dari mikroprosesor ke port
output.
Gambar 4.2. Timing Diagram Proses Tulis dari Mikroprosesor ke Unit Output
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
19
Proses Tulis dari Mikroprosesor ke Unit Output:
Pada time 1, mikroprosesor meletakkan alamat port pada jalur alamat A0 – A7.
Pada time 2, data output diletakkan pada bus data.
Pada time 3, mengaktifkan signal control IOW.
Pada time 4, signal control IOW (aktif rendah ) kembali ke tinggi.
Pada time 5, data ditahan pada port output.
4.2 Rangkaian Port Input
Dari Gambar 1.5 dapat diketahui perbedaan antara unit input dan unit output
yang pada prinsipnya adalah arah dari jalannya data. Delapan buah flip-flop
yang dipakai adalah tristate gate. Setelah mikroprosesor memberikan signal
control IOR, tristate gate meletakkan data pada bus data.
Gambar 4.3 Rangkaian Port Input
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
20
Jika signal alamat A0 – A7 sama dengan posisi switch pada port input S1 – S8,
dan jika signal control IOR aktif maka akan terdapat signal enable pada
tristate gate. Pada Gambar 4.4 dapat dilihat timing diagram proses baca
mikroprosesor – port input.
Gambar 4.4 Timing Diagram Proses Baca Mikroprosesor dari Port Input
Proses Baca Mikroprosesor dari Port Input:
Pada time 1, mikroprosesor meletakkan alamat port pada bus alamat A0 – A7.
Pada time 2, mikroprosesor menghasilkan signal L (logika rendah) pada IOR
yang menyebabkan port input memasukkan signal input ke bus data. Ini
terjadi setelah penundaan sebentar pada time 3.
Dengan perpindahan signal Low ke High pada control IOR, mikroprosesor
membaca data dari bus data (time 4).
Proses baca diakhiri saat IOR pindah ke logika tinggi, dan tristate gate
memutus jalur port input dengan bus data.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
21
BAB V
ARSITEKTUR MIKROKONTROLER
5.1 Arsitektur Mikrokontroler
Arsitektur mikrokontroler jenis AVR pertamakali dikembangkan
pada tahun 1996 oleh dua orang mahasiswa Norwegian Institute of
Technology yaitu Alf-Egil Bogen dan Vegard Wollan. Mikrokontroler AVR
kemudian dikembangkan lebih lanjut oleh Atmel. Seri pertama AVR yang
dikeluarkan adalah mikrokontroler 8 bit AT90S8515, dengan konfigurasi pin
yang sama dengan mikrokontroler 8051, termasuk address dan data bus yang
termultipleksi.
Mikrokontroler AVR menggunakan teknologi RISC dimana set
instruksinya dikurangi dari segi ukurannya dan kompleksitas mode
pengalamatannya. Pada awal era industri komputer, bahasa pemrograman masih
menggunakan kode mesin dan bahasa assembly. Untuk mempermudah dalam
pemrograman para desainer komputer kemudian mengembangkan bahasa
pemrograman tingkat tinggi yang mudah dipahami manusia. Namun
akibatnya, instruksi yang ada menjadi semakin komplek dan membutuhkan
lebih banyak memori. Dan tentu saja siklus eksekusi instruksinya menjadi
semakin lama. Dalam AVR dengan arsitektur RISC 8 bit, semua instruksi
berukuran 16 bit dan sebagian besar dieksekusi dalam 1 siklus clock. Berbeda
dengan mikrokontroler MCS-51 yang instruksinya bervariasi antara 8 bit
sampai 32 bit dan dieksekusi selama 1 sampai 4 siklus mesin, dimana 1 siklus
mesin membutuhkan 12 periode clock.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
22
AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis
arsitektur RISC (Reduced Instruction Set Computer). Hampir semua instruksi
dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose,
timer/counter fleksibel dengan mode compare, interrupt internal dan eksternal,
serial UART, programmable Watchdog Timer, dan mode power saving, ADC
dan PWM internal.
AVR juga mempunyai In-System Programmable Flash on-chip yang
mengijinkan memori program untuk diprogram ulang dalam sistem menggunakan
hubungan serial SPI. ATMega16. ATMega16 mempunyai throughput mendekati
1 MIPS per MHz membuat disainer sistem untuk mengoptimasi konsumsi daya
versus kecepatan proses.
Beberapa keistimewaan dari AVR ATMega16 antara lain:
1. Advanced RISC Architecture
130 Powerful Instructions – Most Single Clock Cycle Execution
32 x 8 General Purpose Fully Static Operation
Up to 16 MIPS Throughput at 16 MHz
On-chip 2-cycle Multiplier
2. Nonvolatile Program and Data Memories
8K Bytes of In-System Self-Programmable Flash
Optional Boot Code Section with Independent Lock Bits
512 Bytes EEPROM
512 Bytes Internal SRAM
Programming Lock for Software Security
3. Peripheral Features
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
23
Two 8-bit Timer/Counters with Separate Prescalers and Compare
Mode
One 16-bit Timer/Counter with Separate Prescaler, Compare Mode,
and Capture Mode
Real Time Counter with Separate Oscillator
Four PWM Channels
8-channel, 10-bit ADC
Byte-oriented Two-wire Serial Interface
Programmable Serial USART
4. Special Microcontroller Features
Power-on Reset and Programmable Brown-out Detection
Internal Calibrated RC Oscillator
External and Internal Interrupt Sources
Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-
down, Standby and Extended Standby
Gambar 5.1 Konfigurasi pin ATMega16 (Andrianto, 2008: 1)
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
24
Pin-pin pada ATMega16 dengan kemasan 40-pin DIP (dual in-line package)
ditunjukkan oleh gambar 1. Guna memaksimalkan performa, AVR
menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk
program dan data).
5.2 Port sebagai input/output digital
ATMega16 mempunyai empat buah port yang bernama PortA, PortB,
PortC, dan PortD. Keempat port tersebut merupakan jalur bi-directional
dengan pilihan internal pull-up. Tiap port mempunyai tiga buah register bit,
yaitu DDxn, PORTxn, dan PINxn. Huruf „x‟mewakili nama huruf dari port
sedangkan huruf „n‟ mewakili nomor bit. Bit DDxn terdapat pada I/O address
DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn
terdapat pada I/O address PINx.
Bit DDxn dalam register DDRx (Data Direction Register) menentukan arah
pin. Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila DDxn
diset 0 maka Px berfungsi sebagai pin input.Bila PORTxn diset 1 pada saat
pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan.
Untuk mematikan resistor pull-up, PORTxn harus diset 0 atau pin
dikonfigurasi sebagai pin output. Pin port adalah tri-state setelah kondisi
reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output
maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin
terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat
mengubah kondisi port dari kondisi tri-state (DDxn=0, PORTxn=0) ke
kondisi output high (DDxn=1, PORTxn=1) maka harus ada kondisi peralihan
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
25
apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1) atau kondisi
output low (DDxn=1, PORTxn=0).
Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama
lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah
strong high driver dengan sebuah pull-up. Jika ini bukan suatu masalah,
maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua
pull-up dalam semua port. Peralihan dari kondisi input dengan pull-up ke
kondisi output low juga menimbulkan masalah yang sama. Kita harus
menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau kondisi output
high (DDxn=1, PORTxn=0) sebagai kondisi transisi.
Tabel 5.2 Konfigurasi pin port
DDxn PORTxn PUD
(In SFIOR) I/O Pull-Up Comment
0 0 X Input Tidak Tri State (Hi-Z)
0 1 0 Input Ya
Pxn akan
mengalirkan arus jika
di pull-down
0 1 1 Input Tidak Tri State (Hi-Z)
1 0 X Output Tidak Keluaran Rendah
1 1 X Output Tidak Keluaran Tinggi
Bit 2 – PUD : Pull-up Disable
Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan walaupun
register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up (DDxn=0,
PORTxn=1).
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
26
5.3 Timer
Timer/counter adalah fasilitas dari ATMega16 yang digunakan untuk
perhitungan pewaktuan. Beberapa fasilitas chanel dari timer counter antara lain:
counter channel tunggal, pengosongan data timer sesuai dengan data pembanding,
bebas -glitch, tahap yang tepat Pulse Width Modulation (PWM), pembangkit
frekuensi, event counter external..
Gambar diagram block timer/counter 8 bit ditunjukan pada gambar 2.
Untuk penempatan pin I/O telah di jelaskan pada bagian I/O di atas. CPU dapat
diakses register I/O, termasuk dalam pin-pin I/O dan bit I/O. Device khusus
register I/O dan lokasi bit terdaftar pada deskripsi timer/counter 8 bit.
Gambar 5.2 Blok diagram timer/counter
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
27
Timing Diagram Timer/Counter
Timer/counter didesain sinkron clock timer (clkT0) oleh karena itu ditunjukkan
sebagai sinyal enable clock pada gambar 3. Gambar ini termasuk informasi ketika
flag interrupt dalam kondisi set. Data timing digunakan sebagai dasar dari operasi
timer/counter.
Gambar 5.3 Timing diagram timer/counter, tanpa prescaling
Sesuai dengan Gambar 8.3 timing diagram timer/counter dengan
prescaling maksudnya adalah counter akan menambahkan data counter
(TCNTn) ketika terjadi pulsa clock telah mencapai 8 kali pulsa dan sinyal clock
pembagi aktif clock dan ketika telah mencapai nilai maksimal maka nilai TCNTn
akan kembali ke nol. Dan kondisi flag timer akan aktif ketika TCNTn maksimal.
5.4 Serial pada ATMega16
Universal synchronous dan asynchronous pemancar dan penerima
serial adalah suatu alat komunikasi serial sangat fleksibel. Jenis yang utama
adalah :
a) Operasi full duplex (register penerima dan pengirim serial dapat berdiri
sendiri)
b) Operasi Asychronous atau synchronous
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
28
c) Master atau slave mendapat clock dengan operasi synchronous
d) Pembangkit baud rate dengan resolusi tinggi
e) Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit
f) Tahap odd atau even parity dan parity check didukung oleh hardware
g) Pendeteksian data overrun
h) Pendeteksi framing error
i) Pemfilteran gangguan (noise) meliputi pendeteksian bit false start dan
pendeteksian low pass filter digital
j) Tiga interrupt terdiri dari TX complete, TX data register empty dan RX
complete.
k) Mode komunikasi multi-processor
l) Mode komunikasi double speed asynchronous
Generator Clock
Logic generator clock menghasilkan dasar clock untuk pengirim dan
penerima. USART mendukung empat mode operasi clock: Normal Asynchronous,
Double Speed Asynchronous mode Master Synchronous dan Slave Synchronous.
Bit UMSEL pada USART control dan status register C (UCSRC) memilih
antara operasi Asychronous dan Synchronous. Double speed (hanya pada mode
Asynchronou ) dikontrol oleh U2X yang mana terdapat pada register UCSRA.
Ketika mengunakan mode operasi synchronous (UMSEL = 1) dan data
direction register untuk pin XCk (DDR_XCK) mengendalikan apakah sumber
clock tersebut adalah internal (master mode) atau eksternal (slave mode) pin-pin
XCK hanya akan aktif ketika menggunakan mode Synchronous.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
29
BAB VI
SET INSTRUKSI
6.1 Bahasa Assembly
Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasa
assembly AVR atau bahasa C. Dalam buku ini semua program ditulis dalam
bahasa assembly AVR. Berikut adalah contoh sebuah program aplikasi untuk
mikrokontroler AVR :
.include “m8535def.inc”
.org 0x0000
rjmp main Inisialisasi program
main: ldi r16,low(RAMEND) out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 Program utama out PortA,r16
cbi PortA,0
cbi PortA,1
stop: rjmp stop
6.2. Bahasa C
Selain menggunakan bahasa assembly, mikrokontroler AVR dapat diprogram
dengan bahasa C. Bahasa C yang digunakan untuk memprogram AVR memiliki
kesamaan sintaks dengan bahasa C++ yang digunakan pada pemrograman
computer. Struktur bahasa C pada AVR adalah:
#include <mega16.h>
#include <delay.h> deklarasi file header
Int I; deklarasi variabel
void main(void)
{ DDRA=0xFF; inisialisasi fungsi register
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
30
PORTD=0xFF;
while (1)
{
PORTA=0x0F; program utama
delay_ms(100);
PORTA=0xf0;
delay_ms(100);
};
}
6.3 Tipe data dalam bahasa C
Tipe data merupakan bagian program yang paling penting karena tipe data
mempengaruhi setiap instruksi yang akan dilaksanakan oleh AVR. Misalnya saja
5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe datanya. Jika
5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun jika keduanya
bertipe float maka akan menghasilkan nilai 2.5000000. Pemilihan tipe data yang
tepat akan membuat proses operasi data menjadi lebih efisien dan efektif. Ada
berbagai macam tipe data dalam bahasa C
6.4 Operator dalam bahasa C
Ada berbaga jenis operator dalam bahasa C yaitu:
Operator Aritmatika
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
31
Operator Kondisi
Operator Logika
6.5 Instruksi dalam Bahasa C
Statement IF
Seperti halnya Pascal, perintah IF dalam C++ juga digunakan untuk menyatakan
pernyataan kondisional (bersyarat). Sintaks sederhana IF adalah
if (kondisi)
statement;
Statement pada sintaks di atas akan dilakukan jika kondisinya bernilai
TRUE (tidak sama dengan nol). Statement IF juga dapat ditambahkan ELSE
sebagai konsekuensi alternatif jika kondisi tidak dipenuhi (FALSE). Sintaksnya:
if (kondisi)
{
statement1; statement2;
.
.
} else {
statement1;
statement2; }
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
32
Statement SWITCH
Statement SWITCH juga berfungsi sama dengan IF. Perintah SWITCH
sama dengan perintah CASE OF dalam PASCAL. Sintaks:
switch (variabel) { case value1 : statement1; break; case value2 : statement2; break; . . default : statement; /* optional */ break; }
Perintah switch akan memeriksa nilai virabel, jika memenuhi nilai value1 maka
instruksi statement1 akan dilaksanakan. Jika memenuhi nilai value2 maka
instruksi statement2 akan dilaksanakan dan seterusnya. Jika tidak ada yang
memenuhi maka statement default yang akan dilaksanakan.
Statement FOR
Statement FOR digunakan untuk menyatakan perulangan (seperti PASCAL).
Instruksi di dalam statement FOR akan terus dilaksanakan selama syarat
perulangan dipenuhi.
Sintaksnya:
for (ungkapan1; ungkapan2; ungkapan3) { . . }
- Ungkapan1 merupakan statement awal (inisialisasi)
- Ungkapan2 merupakan kondisi/syarat perulangan dilakukan
- Ungkapan3 merupakan statement control untuk perulangan
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
33
Statement WHILE
Statement WHILE juga digunakan untuk menyatakan perulangan. Penggunaan-
nya mirip pada PASCAL. Instruksi di dalam loop while akan terus dilakukan
selama syarat kondisi dipenuhi. Sintaksnya:
while (kondisi)
{ .
.
}
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
34
BAB VII
PENGENDALIAN LED DAN MOTOR DC
7.1 Register I/O
Setiap port ATMega16 terdiri dari 3 register I/O yaitu DDRx, Portx dan PINx.
DDRx (Data Direction Register)
Register DDRx digunakan untuk memilih arah pin. Jika DDRx = 1 maka
Pxn sebagai pin output Jika DDRx = 0 maka Pxn sebagai input.
Portx (Port Data Register)
Register Portx digunakan untuk 2 keperluan yaitu untuk jalur output atau
untuk mengaktifkan resistor pullup.
1. Portx berfungsi sebagai output jika DDRx = 1 maka : Portxn = 1 maka pin
Pxn akan berlogika high. Portxn = 0 maka pin Pxn akan berlogika low.
2. Portx berfungsi untuk mengaktifkan resistor pullup jika DDRx = 0 maka :
Portxn = 1 maka pin Pxn sebagai pin input dengan resistor pull up.
Portxn = 0 maka pin Pxn sebagai output tanpa resistor pull up.
Tabel 7.1 Konfigurasi Port
DDRxn Portxn I/O Pull up Comment
0 0 Input No Tri state (Hi-Z)
0 1 Input Yes Pull up aktif
1 0 Output No Output Low
1 1 Output No Output High
Catatan :
x menunjukkan nama port (A,B,C,D)
n menunjukkan nomor bit (0,1,2,3,4,5,6,7)
Nilai awal (initial value) seluruh register I/O adalah 00h.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
35
PINx (Port Input Pin Address) Digunakan sebagai register input.
7.2 Program Pengendalian LED dalam Bahasa C
Pengendalian LED dengan AVR pada prinsipnya adalah memberikan
keluaran melalui pin output AVR. Pengendalian LED dapat dilakukan dengan
menggunakan port yang dimiliki oleh AVR yaitu PORTA, PORTB, PORTC dan
PORTD. Hal ini bisa dilakukan dengan menggunakan intruksi berikut:
PORTX=nilai_word;
digunakan untuk mengendalikan 8 buah LED sekaligus dengan cara
memberikan nilai sebesar 8 bit (type data word) ke PORTX (port yang terhubung
dengan LED)
Atau
PORTX.n=nilai_bit
digunakan untuk mengendalikan 1 buah LED sekaligus dengan cara
memberikan nilai sebesar 1 bit ke PORTX.n (pin yang terhubung dengan LED)
Contoh:
Hubungakan 8 buah LED ke PORTA seperti pada rangkaian dan buatlah program
berikut.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
36
void main(void)
{
DDRA=0xFF;
PORTD=0xFF; while (1)
{
// Place your code here PORTA=0x0F; memberikan nilai 00001111 ke port A
delay_ms(100);
PORTA=0xf0; memberikan nilai 11110000 ke port A delay_ms(100);
};
}
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
37
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
38
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
39
BAB VIII
LCD (LIQUID CRYSTAL DISPLAY)
8.1 Prinsip Kerja LCD
M1632 adalah merupakan modul LCD dengan tampilan 16 x 2 baris
dengan konsumsi daya yang rendah. Modul ini dilengkapi dengan mikrokontroler
yang didisain khusus untuk mengendalikan LCD. Mikrokontroler HD44780
buatan Hitachi yang berfungsi sebagai pengendali LCD ini mempunyai CGROM
(Character Generator Read Only Memory), CGRAM (Character Generator
Random Access Memory) danDDRAM (Display Data Random Access Memory).
LCD ini memiliki 16 kaki yaitu:
Tabel 8.1 Pin Out LCD M1632
No Nama Pin Deskripsi
__________________________________________________________________
1 GND 0V
2 VCC +5V
3 VEE Tegangan Kontras LCD
4 RS Register Select, 0 = Register Perintah, 1 = Register Data
5 R/W 1 = Read, 0 = Write
6 E Enable LCD, logika 1 setiap pengiriman/pembacaan data
7 D0 Data Bus 0
8 D1 Data Bus 1
9 D2 Data Bus 2
10 D3 Data Bus 3
11 D4 Data Bus 4
12 D5 Data Bus 5
13 D6 Data Bus 6
14 D7 Data Bus 7
15 Anoda Tegangan positif backlight
16 Katoda Tegangan negatif backlight
DDRAM
DDRAM adalah merupakan memori tempat karakter yang ditampilkan berada.
Contoh, untuk karakter „A‟ atau 41H yang ditulis pada alamat 00, maka karakter
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
40
tersebut akan tampil pada baris pertama dan kolom pertama dari LCD. Apabila
karakter tersebut ditulis di alamat 40, maka karakter tersebut akan tampil pada
baris kedua kolom pertama dari LCD.
Gambar 8.1 DDRAM M1632
CGRAM
CGRAM adalah merupakan memori untuk menggambarkan pola sebuah
karakter di mana bentuk dari karakter dapat diubah-ubah sesuai keinginan.
Namun memori ini akan hilang saat power supply tidak aktif, sehingga pola
karakter akan hilang.
CGROM
CGROM adalah merupakan memori untuk menggambarkan pola sebuah
karakter di mana pola tersebut sudah ditentukan secara permanen dari HD44780
sehingga pengguna tidak dapat mengubah lagi. Namun karena ROM bersifat
permanen, maka pola karakter tersebut tidak akan hilang walaupun power supply
tidak aktif. Pada Tabel 8.2, tampak terlihat pola-pola karakter yang tersimpan
dalam lokasi-lokasi tertentu dalam CGROM. Pada saat HD44780 akan
menampilkan data 41H yang tersimpan pada DDRAM, maka
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
41
HD44780 akan mengambil data di alamat 41H (0100 0001) yang ada pada
CGROM yaitu pola karakter A.
Tabel 8.2 Hubungan antara CGROM dan DDRAM
Register
HD44780, mempunyai dua buah Register yang aksesnya diatur dengan
menggunakan kaki RS. Pada saat RS berlogika 0, maka register yang diakses
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
42
adalah Register Perintah dan pada saat RS berlogika 1, maka register yang diakses
adalah Register Data
Register Perintah
Register ini adalah register di mana perintah-perintah dari mikrokontroler ke
HD44780 pada saat proses penulisan data atau tempat status dari HD44780 dapat
dibaca pada saat pembacaan data.
Penulisan Data ke Register Perintah
Penulisan data ke Register Perintah dilakukan dengan tujuan mengatur tampilan
LCD, inisialisasi dan mengatur Address Counter maupun Address Data. Gambar
8.2 menunjukkan proses penulisan data ke register perintah dengan menggunakan
mode 4 bit interface. Kondisi RS berlogika 0 menunjukkan akses data ke Register
Perintah. RW berlogika 0 yang menunjukkan proses penulisan data akan
dilakukan. Nibble tinggi (bit 7 sampai bit 4) terlebih dahulu dikirimkan dengan
diawali pulsa logika 1 pada E Clock. Kemudian Nibble rendah (bit 3 sampai bit 0)
dikirimkan dengan diawali pulsa logika 1 pada E Clock lagi.
Untuk mode 8 bit interface, proses penulisan dapat langsung dilakukan secara 8
bit (bit 7 … bit 0) dan diawali sebuah pulsa logika 1 pada E Clock.
Gambar 8.2 Timing diagram Penulisan Data ke Register Perintah Mode 4 bit
Interface
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
43
Tabel 8.3 Perintah-perintah M1632
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
44
Pembacaan Data dari Register Perintah
Proses pembacaan data pada register perintah biasa digunakan untuk melihat
status busy dari LCD atau membaca Address Counter. RS diatur pada logika 0
untuk akses ke Register Perintah, R/W diatur pada logika 1 yang menunjukkan
proses pembacaan data. 4 bit nibble tinggi dibaca dengan diawali pulsa logika 1
pada E Clock dan kemudian 4 bit nibble rendah dibaca dengan diawali pulsa
logika 1 pada E Clock.
Untuk Mode 8 bit interface, pembacaan 8 bit (nibble tinggi dan rendah) dilakukan
sekaligus dengan diawali sebuah pulsa logika 1 pada E Clock.
Register Data
Register ini adalah register di mana mikrokontroler dapat menuliskan atau
membaca data ke atau dari DDRAM. Penulisan data pada register ini akan
menempatkan data tersebut ke DDRAM sesuai dengan alamat yang telah diatur
sebelumnya
Penulisan Data ke Register Data
Penulisan data pada Register Data dilakukan untuk mengirimkan data yang akan
ditampilkan pada LCD. Proses diawali dengan adanya logika 1 pada RS yang
menunjukkan akses ke Register Data, kondisi R/W diatur pada logika 0 yang
menunjukkan proses penulisan data. Data 4 bit nibble tinggi (bit 7 hingga bit 4)
dikirim dengan diawali pulsa logika 1 pada sinyal E Clock dan kemudian diikuti 4
bit nibble rendah (bit 3 hingga bit 0) yang juga diawali pulsa logika 1 pada sinyal
E Clock.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
45
Gambar 8.3 Timing Diagram Penulisan Data ke Register Data Mode 4 bit Interface
Pembacaan Data dari Register Data
Pembacaan data dari Register Data dilakukan untuk membaca kembali data yang
tampil pada LCD. Proses dilakukan dengan mengatur RS pada logika 1 yang
menunjukkan adanya akses ke Register Data. Kondisi R/W diatur pada logika
tinggi yang menunjukkan adanya proses pembacaan data. Data 4 bit nibble tinggi
(bit 7 hingga bit 4) dibaca dengan diawali adanya pulsa logika 1 pada E Clock dan
dilanjutkan dengan data 4 bit nibble rendah (bit 3 hingga bit 0) yang juga diawali
dengan pulsa logika 1 pada E Clock.
8.2 Program Pengendalian LCD dalam Bahasa C
Di dalam pemrograman AVR dengan bahasa C terdapat beberapa fungsi khusus
untuk menangani LCD, yaitu:
• lcd_init(n) inisialisasi LCD dengan jumlah kolom sebanyak n buah
• lcd_gotoxy(x,y) ==> pindah kursor LCD ke kolom x baris y
• lcd_putsf("karakter") ==> cetak tulisan "karakter" ke LCD
• lcd_puts(char) ==> cetak isi dari variabel char ke LCD
• itoa(Z,Cetak) ==> mengubah bil integer Z ke ascinya dan disimpan di
variabel cetak
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
46
Contoh:
Hubungakan kaki LCD dengan pin AVR dengan ketentuan berikut:
void main(void)
{
lcd_init(16); //inisialisasi LCD 16 kolom
lcd_gotoxy(0,0); //pindah kursor ke baris 0 kolom 0
lcd_putsf("== WELCOME =="); //buat tulisan == WELCOME ==
delay_ms(1000);
}
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
47
BAB IX
PEMBACAAN PUSH BUTTON DAN KEYPAD
9.1 Pembacaan Push Button
Pembacaan push button yang terhubung ke AVR pada prinsipnya adalah
membaca kondisi logika pada masing-masing pin masukan dari AVR. Data dari
push button dapat dibaca tombol demi tombol (1 tombol terbaca sebagai 1 bit
data) atau dapat dibaca sebagai 8 tombol sekaligus (8 tombol terbaca sebagai 1
byte data). Sintaks yang dapat digunakan untuk membaca push button adalah:
Data=PORTA ==> membaca data PORTA disimpan ke variabel Data
sebagai 1 byte (Sintaks ini biasanya digunakan untuk membaca 8 tombol
sekaligus).
bData=PINA.0 ==> membaca data pin A.0 disimpan ke variabel bData
sebagai 1 bit (Sintaks ini biasanya digunakan untuk membaca 1 tombol
saja).
Untuk dapat memfungsikan pin AVR sebagai input, maka nilai bit dari register
DDR harus dibuat nol. Misal PORTD akan digunakan sebagai masukan
semuanya, maka DDRD harus bernilai 00h.
Contoh:
Berikut ini adalah contoh rangkaian dan program untuk membaca data dari
keypad dan menampilkannya ke LED.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
48
void main(void)
{
Int Data;
DDRA=0xFF; DDRD=0x00;
while (1)
{ // Place your code here
Data=PORTD; membaca nilai port D dan disimpan di variable data
delay_ms(100); PORTA=Data; mengeluarkan nilai Data ke port A
delay_ms(100);
};
}
9.2 Pembacaan Keypad
Keypad merupakan suatu papan yang tersusun dari beberapa tombol dan
dihubungkan dalam susunan kolom dan baris. Terdapat bermacam-macam keypad
antara lain keypad 3 x 4, 4 x 4 dan 4 x 5. Keypad 4 x 4 tersusun dari 16 tombol
yang terbagi dalam 4 kolom dan 4 baris. Tiap-tiap tombol yang ada di dalam
keypad menghubungkan 1 buah kolom dengan 1 buah baris.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
49
Gambar 9.1 Gambar keypad 4 x 4
Contoh: tombol 6 menghubungkan kolom 3 dengan baris 2
tombol 8 menghubungkan kolom 2 dengan baris 3
tombol * menghubungkan kolom 1 dengan baris 4
Keypad sering digunakan sebagi suatu input pada beberapa peralatan yang
berbasis mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari
sejumlah saklar, yang terhubung sebagai baris dan kolom dengan susuan seperti
yang ditunjukkan pada gambar 9.2. Pembacaan keypad menggunakan AVR dapat
dilakukan dengan 2 cara yaitu:
Menghubungkan keypad ke AVR melalui IC encoder keypad (missal IC
74LS922). Pada metode ini, semua pin keypad dihubungkan ke IC
encoder. Encoder akan membaca hasil penekanan keypad mengeluarkan
data ke AVR yang nilainya sebanding dengan keypad yang ditekan.
Gambar 9.2 Rangkaian keypad dan encoder keypad
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
50
Menghubungkan keypad langsung ke AVR kemudian dibaca dengan
metode scanning. Agar mikrokontroller dapat melakukan scan keypad,
maka port mengeluarkan salah satu bit dari 4 bit yang terhubung pada
kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada baris
untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai
konsekuensi, selama tidak ada tombol yang ditekan, maka mikrokontroller
akan melihat sebagai logika high “1” pada setiap pin yang terhubung ke
baris.
Gambar 9.3 Gambar susunan baris dan kolom pada keypad
Contoh:
Berikut ini adalah contoh rangkaian dan program untuk membaca keypad dan
mengeluarkan nilai hasil pembacaan-nya ke LED.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
51
unsigned int keypad( )
{
delay_ms(500);
int key=13; while (key==13){
PORTA = 0b11111110;
delay_ms(5); if(PINA.4==0) return (1);
if(PINA.5==0) return (2);
if(PINA.6==0) return (3); //========================
PORTA = 0b11111101;
delay_ms(5);
if(PINA.4==0) return (4); if(PINA.5==0) return (5);
if(PINA.6==0) return (6);
//======================== PORTA = 0b11111011;
delay_ms(5);
if(PINA.4==0) return (7);
if(PINA.5==0) return (8); if(PINA.6==0) return (9);
//========================
PORTA = 0b11110111; delay_ms(5);
if(PINA.4==0) return (10);
if(PINA.5==0) return (0); if(PINA.6==0) return (11);
//========================
}
}
void main(void)
{ Int Data;
DDRA=0xFF;
DDRD=0x0F;
while (1) {
Data=keypad();
PORTA=Data; };
}
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
52
BAB X
PEMBACAAN ADC
Sebuah ADC, atau Analog ke Digital Converter, memungkinkan seseorang untuk
mengkonversi tegangan analog ke nilai digital yang dapat digunakan oleh
mikrokontroler. Ada banyak sumber sinyal analog yang satu mungkin ingin untuk
mengukur. Ada sensor analog tersedia yang mengukur suhu, intensitas cahaya,
jarak, posisi, dan kekuatan, hanya untuk beberapa nama.
Pendahuluan ADC AVR
ADC AVR memungkinkan mikrokontroler AVR untuk mengkonversi tegangan
analog ke nilai digital tanpa menggunakan rangkaian eksternal. ADC yang
dimiliki ATMega16 ini mampu memiliki resolusi 10 bit. Mikrokontroler
ATMega16 memiliki 8 saluran ADC, sehingga mampu menangani sampai
dengan 8 sumber analog yang terpasang ke mikrokontroler. ADC 8 saluran
tersambung ke DAC internal melalui perangkat yang disebut multiplekser.
Multiplekser ini menghubungkan 8 saluran ADC (8 pin dari PortA pada
ATMega16) ke sebuah ADC internal. Satu saluran pada satu waktu dilewatk ke
multiplexer untuk ADC. ADC memiliki pasokan catu daya sendiri, berlabel
AVCC, pada ATMega16 tersebut. Pin ini harus dihubungkan ke sumber listrik 5
volt dalam penyediaan VCC chip itu. Dengan DAC 10 bit, ini memungkinkan
pengukuran tegangan 0-5 volt dengan resolusi 5 / 1024 volt, atau 4,88 mV.
Saluran ADC di ATMega16 dapat dikonfigurasi dalam beberapa cara berbeda.
Dalam buku ini, saluran yang digunakan dalam modus single-ended. Dalam mode
ini, tegangan analog disajikan di saluran ADC dibandingkan ke tanah. Ada
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
53
beberapa tegangan referensi dapat dipilih, yang menentukan rentang konversi
ADC. Dalam tutorial ini, AVCC digunakan sebagai referensi tegangan. ADC juga
dapat diatur untuk menjalankan terus (modus bebas berjalan) atau hanya
melakukan satu konversi.
Untuk dapat membaca ADC dari AVR menggunakan pemrograman bahasa C,
maka kita bisa membuat program pembacaan ADC secara otomatis menggunakan
software CodevisionAVR. Software ini secara langsung akan menghasilkan
subrutin pembaca ADC sebagai berikut:
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Adapun untuk membaca nilai dari ADC maka kita bisa menggunakan sintaks
berikut ini:
nilai = read_adc(0); ==> memasukkan hasil pembacaan ADC channel 0 ke
variable nilai
Contoh ADC mode Free-Running ADC
Contoh pertama dalam tutorial ini menggunakan modus free-running untuk terus
memperbarui pembacaaan ADC.Contoh ini menggunakan sumber tegangan
variabel yang paling sederhana, misalkan sebuah potensiometer. Kita bias
menghubungkan sebuah potensiometer 10k pada papan PCB seperti pada contoh
di bawah ini.
Sistem Mikroprosessor I
Ilham Ari Elbaith Zaeni, S.T.
54
void main(void)
{ lcd_init(16);
while (1)
{ // Place your code here
temp=read_adc(0);
vin=((float)temp*0.00488); //vin=(float(temp)*(5volt/1024)) lcd_gotoxy(0,0);
lcd_putsf("== Voltmeter == ");
lcd_gotoxy(2,1);
sprintf(lcd_buffer,"volt: %0.3f V ",vin); lcd_puts(lcd_buffer);
delay_ms(1000);
}; }}