Modul Pemrograman Mikrokontroller AVR
Modul Pemrograman Mikrokontroller AVR
2011
0
Modul Pemrograman Mikrokontroler AVR (ATMega16)
dengan Code Vision AVR
Daftar Isi
1. Pengenalan Mikrokontroller .........................................................................................................
2. Pengetahuan Dasar Mikrokontroler AVR .....................................................................................
2.1. Pendahuluan ..........................................................................................................................
2.2. Memilih AVR “yang benar” .................................................................................................
2.3. Ada apa dengan Mikrokontroler AVR ATMega16? ..............................................................
2.3.1. Ringkasan Fitur-fitur Mikrokontroler AVR ATMega16 ................................................
2.3.2. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16 ...............................
2.3.3. Penjelasan Singkat Pin-pin pada Mikrokontroler AVR ATMega16 ............................
3. Penulisan program .....................................................................................................................
3.1. Langkah-langkah penulisan program...................................................................................
4. Latihan Tahap-I ..........................................................................................................................
4.1. Percobaan-1: LED nyala-mati .............................................................................................
4.2. Percobaan-2: LED nyala kanan-kiri ....................................................................................
4.3. Percobaan-3: LED nyala sesuai bit ......................................................................................
5. Latihan Tahap-II ........................................................................................................................
5.1. Percobaan-4: pushbutton 1 ..................................................................................................
5.2. Percobaan-5: pushbutton 2 ..................................................................................................
5.3. Percobaan-6: pushbutton 3 ..................................................................................................
6. Latihan Tahap-III .......................................................................................................................
6.1. Percobaan-7: gerak motor DC .............................................................................................
6.2. Percobaan-8: motor DC kanan-kiri .....................................................................................
6.3. Percobaan-9: motor DC dengan pushbutton.........................................................................
7. Latihan Tahap-IV ..........................................................................................................................
7.1. Percobaan-10: seven segment ...............................................................................................
7.2. Percobaan-11: penampil dengan LCD ..................................................................................
7.3. Percobaan-12: LCD geser kanan-kiri ....................................................................................
8. Latihan Tahap-V ...........................................................................................................................
8.1. Percobaan-13: aplikasi ADC .................................................................................................
1
Pengenalan Mikrokontroller
• Sama-sama memiliki unit pengolah pusat atau yang lebih dikenal dengan CPU {Central
Processing Unit),
• CPU tersebut sama-sama menjalankan program dari suatu lokasi atau tempat, biasanya dari
ROM (Read Only Memory)1 atau RAM (Random Access Memory)2;
• Sama-sama memiliki RAM yang digunakan untuk menyimpan data-data sementara atau
yang lebih dikenal dengan variabel-variabel;
• Sama-sama memiliki beberapa luaran dan masukan (I/O) yang digunakan untuk melakukan
komunikasi timbal-balik dengan dunia luar, melalui sensor (masukan) dan aktuator (luaran),
perhatikan bagan yang ditunjukkan pada Gambar 1.
Lantas apa yang membedakan antara Mikrokontroler dengan Komputer atau Mikrokomputer?
Begitu mungkin pertanyaan yang ada di benak kita, saat kita membaca beberapa daftar kesamaan
yang sudah saya tuliskan tersebut. Sama sekali berbeda, itu jawaban yang saya berikan kepada
Anda:
Mikrokontroler adalah versi mini dan biasanya digunakan untuk aplikasi khusus dari
Mikrokomputer atau Komputer!
2
Berikut saya berikan kembali daftar kesamaan yang pernah dikemukakan sebelumnya dengan
menekankan pada perbedaan antara Mikrokontroler dan Mikrokomputer:
• CPU pada sebuah Komputer berada eksternal dalam suatu sistem, sampai saat ini kecepatan
operasionalnya sudah mencapai lebih dari 2,5 GHz, sedangkan CPU pada Mikrokontroler
berada didalam (internal) sebuah chip, kecepatan kerja atau operasionalnya masih cukup
rendah, dalam orde MHz (misalnya, 24 MHz, 40 MHz dan lain sebagainya). Kecepatan yang
relatif rendah ini sudah mencukupi untuk aplikasi-aplikasi berbasis mikrokontroler.
• Jika CPU pada mikrokomputer menjalankan program dalam ROM atau yang lebih dikenal
dengan BIOS (Basic I/O System) pada saat awal dihidupkan, kemudian mengambil atau
menjalankan program yang tersimpan dalam hard disk. Sedangkan mikrokontroler sejak
awal menjalankan program yang tersimpan dalam ROM internal-nya (bisa berupa Mask
ROM atau Flash PEROM atau Flash ROM). Sifat memori program dalam mikrokontroler
ini non-volatile, artinya tetap akan tersimpan walaupun tidak diberi catu daya.
• RAM pada mikrokomputer bisa mencapai ukuran sekian GByte dan bisa di-upgrade ke
ukuran yang lebih besar dan berlokasi di luar CPU-nya, sedangkan RAM pada
mikrokontroler ada di dalam chip dan kapasitasnya rendah, misalnya 128 byte, 256 byte dan
seterusnya dan ukuran yang relatif kecil inipun dirasa cukup untuk aplikasi-aplikasi
mikrokontroler.
• Keluaran dan masukan (I/O) pada mikrokomputer jauh lebih kompleks dibandingkan
dengan mikrokontroler, yang jauh lebih sederhana, selain itu, pada mikrokontroler akses
keluaran dan masukan bisa per bit.
• Jika diamati lebih lanjut, bisa dikatakan bahwa Mikrokomputer atau Komputer merupakan
komputer serbaguna atau general purpose computer, bisa dimanfaatkan untuk berbagai
macam aplikasi (atau perangkat lunak). Sedangkan mikrokontroler adalah special purpose
computer atau komputer untuk tujuan khusus, hanya satu macam aplikasi saja.
3
Perhatikan Gambar 2, agar Anda mendapatkan gambaran tentang mikrokontroler lebih jelas.
ALU (Arithmetic Logic Unit), terdiri dari Instruction Decoder, Accumulator dan Control Logic,
sebagaimana ditunjukkan pada Gambar 2, merupakan Otak-nya mikrokontroler yang
bersangkutan. Jantungnya berasal dari detak OSC (lihat pada Gambar 2 sebelah kiri atas).
Sedangkan di sekeliling ‘Otak’ terdapat berbagai macam periferal seperti SFR (Special Function
Register) yang bertugas menyimpan data-data sementara selama proses berlangsung). Instruction
Decoder bertugas menerjemahkan setiap instruksi yang ada di dalam Program Memory (hasil dari
pemrograman yang kita buat sebelumnya). Hasil penerjemahan tersebut merupakan suatu operasi
yang harus dikerjakan oleh ALU (Arithmetic Logic Unit), dengan bantuan memori sementara
”Accumulator” yang kemudian menghasilkan sinyal-sinyal kontrol ke seluruh periferal yang
terkait melalui Control Logic.
Memori RAM atau RAM Memory bisa digunakan sebagai tempat penyimpan sementara,
sedangkan SFR (Special Function Register) sebagian ada yang langsung berhubungan dengan I/O
dari mikrokontroler yang bersangkutan dan sebagian lain berhubungan dengan berbagai macam
operasional mikrokontroler.
ADC atau Analog to Digital Converter (tidak setiap mikrokontroler memiliki ADC internal),
4
ADC ini digunakan untuk mengubah data-data analog menjadi digital untuk diolah atau diproses
lebih lanjut. Atmega16 memiliki ADC internal sebanyak 8 pin dan berada pada port A.
Timer atau Counter digunakan sebagai pewaktu atau pencacah, sebagai pewaktu fungsinya seperti
sebuah jam digital dan bisa diatur cara kerjanya. Sedangkan pencacah lebih digunakan sebagai
penghitung atau pencacah event atau bisa juga digunakan untuk menghitung berapa jumlah pulsa
dalam satu detik dan lain sebagainya. Biasanya sebuah mikrokontroler bisa memiliki lebih dari 1
timer.
EEPROM (sama seperti RAM hanya saja tetap akan menyimpan data walaupun tidak
mendapatkan sumber listrik/daya) dan port-port I/O untuk masukan/keluaran, untuk melakukan
komunikasi dengan periferal eksternal mikrokontroler seperti sensor dan aktuator.
5
Pengetahuan Dasar Mikrokontroler AVR
2.1. Pendahuluan
Keluarga Mikrokontroler AVR merupakan mikrokontroler dengan arsitektur modern. Perhatikan
Gambar 3, Atmel membuat 5 (lima) macam atau jenis mikrokontroler AVR, yaitu:
• TinyAVR
Mikrokontroler (kecil, hanya 8 sampai 32 pin) serbaguna dengan Memori Flash untuk
menyimpan program hingga 16K Bytes, dilengkapi SRAM dan EEPROM 512 Bytes.
• MegaAVR
Mikrokontroler dengan unjuk-kerja tinggi, dilengkapi Pengali Perangkat keras (Hardware
Multiplier), mampu menyimpan program hingga 256 KBytes, dilengkapi EEPROM 4K
Bytes dan SRAM 8K Bytes.
• AVR XMEGA
Mikrokontroler AVR 8/16-bit XMEGA memiliki periferal baru dan canggih dengan
unjuk-kerja, sistem Event dan DMA yang ditingkatkan, serta merupakan pengembangan
keluarga AVR untuk pasar low power dan high performance (daya rendah dan
unjuk-kerja tinggi).
• AVR32 UC3
Unjuk-kerja tinggi, mikrokontroler flash AVR32 32-bit daya rendah. Memiliki flash
hingga 512 KByte dan SRAM 128 KByte.
• AVR32 AP7
Unjuk-kerja tinggi, prosesor aplikasi AVR32 32-bit daya rendah, memiliki SRAM hingga
32 KByte.
6
Gambar 3. Jenis-jenis Mikrokontroler Atmel
Yang paling banyak dijumpai di Indonesia adalah tinyAVR dan megaAVR, itupun masih kalah
populer dengan keluarga AT89 yang belakangan juga sudah mulai banyak yang beralih ke AVR.
Perbedaan jenis-jenis tersebut terletak dari fasilitas, atau lebih dikenal dengan fitur-fiturnya.
Jenis TinyAVR merupakan mikrokontroler dengan jumlah pin yang terbatas dan sekaligus
fitur-fiturnya juga terbatas dibandingkan yang megaAVR. Semua mikrokontroler AVR
memiliki set instruksi {assembly) dan organisasi memori yang sama, dengan demikian
berpindah-pindah (walaupun tidak disarankan) antar mikrokontroler AVR tidak masalah.
Beberapa mikrokontroler AVR memiliki SRAM, EEPROM, antarmuka SRAM eksternal, ADC,
pengali perangkat keras, UART, USART dan lain sebagainya.
7
2.3. Ada apa dengan Mikrokontroler AVR ATMega16?
Dalam modul ini memang sengaja menggunakan mikrokontroler AVR ATMega16 karena
fitur-fitur yang dibutuhkan. Tentu saja Anda bisa menggunakan tipe AVR lainnya, apakah yang
40 pin atau yang kurang dari itu, bisa ATMega88, ATMega16, ATMegal28, ATMega8535,
ATMegal68 dan lain sebagainya.
Berikut ini ringkasan berbagai macam fitur-fitur untuk Mikrokontroler AVR ATMega16 :
- 131 Instruksi yang ampuh - Hampir semuanya dieksekusi dalam satu detak (dock)
saja
- 32 x 8 General Purpose Working Registers
- Operasi statis penuh
- Throughput hingga 16 MIPS pada 16 MHz
- Pengali On-chip 2-cycle
8
- Master/Slave SPI Serial Interface
- Pewaktu Watchdog yang bisa diprogram dengan Osilator On-chip yang terpisah
- Komparator Analog On-chip
• Fitur-fitur Mikrokontroler khusus
- Reset saat Power-on dan Deteksi Brown-out yang bisa diprogram
- Internal Calibrated RC Oscillator
- Sumber interupsi Eksternal dan INternal
- Enam Mode Sleep: Idle, ADC Noise Reduction, Power-save, Power-down,
Standby and Extended Standby
• I/O and Packages
- 32 Programmable I/O Lines
- 40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF
• Tegangan kerja
- 2.7 - 5.5V untuk Atmega16L
- 4.5 - 5.5V untuk Atmega16
• Kecepatan (frekuensi dock)
- 0 - 8 MHz untuk Atmega16L
- 0 - 16 MHz untuk Atmega16
• Konsumsi daya pada 1 MHz, 3V, 25°C for AtmegalóL
- Aktif: 1.1 mA
- Idle Mode: 0.35 mA
- Mode Power-down: < 1 µA
9
2.3.2. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16
Pada Gambar 4 dan 5 ditunjukkan diagram pin, masing-masing, untuk Mikrokontroler AVR
ATMega16 tipe PDIP dan TQFP/MLF atau dikenal sebagai SMD.
10
Pada Gambar 6 dan 7 ditunjukkan diagram blok untuk Mikrokontroler AVR ATMega16,
perhatikan begitu banyaknya fitur-fitur dalam diagram blok tersebut.
Berikut kita jelaskan secara singkat fungsi dari masing-masing PIN pada Mikrokontroler AVR
ATMega16.
GND Ground
Port A (PA7..PA0) Port A berfungsi sebagai masukan analog ke ADC internal pada
mikrokontroler ATMega16, selain itu juga berfungsi sebagai port
I/O dwi-arah 8-bit, jika ADC-nya tidak digunakan. Masing-masing
pin menyediakan resistor pull-up internal yang bisa diaktifkan
untuk masing-masing bit.
11
memiliki berbagai macam fungsi alternatif, sebagaimana
ditunjukkan pada Tabel 3
/RESET Masukan Reset. Level rendah pada pin ini selama lebih dari lama
waktu minimum yang ditentukan akan menyebabkan reset,
walaupun clock tidak dijalankan.
12
Gambar 6. Diagram blok mikrokontroller AVR ATMega16 – Bagian I
13
Pada Tabel 1, 2 dan 3 ditunjukkan masing-masing alternatif fungsi dari Port B, Port C dan Port D.
Tabel 1. Alternatif fungsi PORT B
14
PENULISAN PROGRAM
Untuk mengisi program pada mikrokontroller ATMega 16 kita gunakan software CodeVision
AVR yang mendukung penulisan program dengan bahasa C. Penggunaan bahasa C disini dinilai
lebih mudah dibandingkan penggunaan bahasa assembly yang kerap digunakan oleh
mikrokontroller AT89…. (termasuk mikrokontroller keluarga MCS). bahasa C ini berisi
kode-kode perintah yang lebih mendekati kosakata bahasa manusia (khususnya bahasa inggris)
sedangkan bahasa assembly lebih condong pada kode-kode perintah tertentu (seringkali disebut
bahasa mesin).
Berikut akan disebutkan langkah-langkah penulisan pada program CodeVision AVR dan
mengisikannya pada mikrokontroller ATMega 16 :
15
2. Jalankan program CodeVision, dengan tampilan pertama seperti di bawah ini.
3. Kemudian pilih menu File dan pilih New dengan tampilan seperti di bawah ini.
16
4. Pilih Project kemudian klik OK.
6. Tunggu sampai muncul jendela seperti di bawah dan lakukan pengaturan I/O yang akan
digunakan.
17
7. Generate dan Save pengaturan yang sudah dilakukan
18
9. Simpan File Project pada lokasi yang diinginkan
19
11. Nah…. lembar penulisan program akan ditampilkan seperti berikut
12. Setelah program selesai ditulis, buka menu Project dan pilih Configure
20
13. Kemudian lakukan Configure pengisian program ke mikrokontroller
21
14. Kemudian buka menu Project dan pilih Compile
22
16. Langkah terakhir untuk download program ke mikrokontroller, buka menu Project dan
pilih Build
17. Sampai muncul jendela berikut, pilih Program the Chip dan tuggu sampai proses
download selesai.
23
LATIHAN TAHAP – I
Modul LED disini menggunakan 8 buah sehingga sesuai untuk aplikasi setiap port pada AVR
ATMega 16 yang kita gunakan.
(Percobaan 1) :
24
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0xFF;
delay_ms(500);
};
}
25
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0x00;
delay_ms(500);
};
}
26
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0xFF;
delay_ms(500);
PORTC=0x00;
delay_ms(500);
};
}
(Percobaan 2) :
27
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0x01;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x04;
delay_ms(500);
PORTC=0x08;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
PORTC=0x20;
delay_ms(500);
PORTC=0x40;
delay_ms(500);
PORTC=0x80;
delay_ms(500);
};
}
(Percobaan 3) :
28
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0x81;
delay_ms(500);
PORTC=0x42;
delay_ms(500);
};
}
Banyak variasi-variasi yang bisa dilakukan dengan menggunakan LED 8 bit, silahkan
kembangkan variasi yang sudah ada pada contoh.
29
LATIHAN TAHAP – II
Aplikasi pushbutton pada industri tidak kalah penting, pushbutton biasa digunakan untuk
pengendalian awal sebelum otomatisasi dalam system kerja berjalan secara
keseluruhan.
(Percobaan 4) :
30
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=PINA;
};
}
(Percobaan 5) :
31
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if(PINA==0x01)
{
PORTC=0x18;
}
if(PINA==0x02)
{
PORTC=0x24;
}
if(PINA==0x04)
{
PORTC=0x42;
}
if(PINA==0x08)
{
PORTC=0x81;
}
};
}
(Percobaan 6) :
// pushbutton ditekan akan menyalakan LED kanan-kiri
#include <mega16.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
32
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if(PINA==0x01)
{
PORTC=0x01;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x04;
delay_ms(500);
PORTC=0x08;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
PORTC=0x20;
delay_ms(500);
PORTC=0x40;
delay_ms(500);
PORTC=0x80;
33
delay_ms(500);
}
if(PINA==0x02)
{
PORTC=0x80;
delay_ms(500);
PORTC=0x40;
delay_ms(500);
PORTC=0x20;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
PORTC=0x08;
delay_ms(500);
PORTC=0x04;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x01;
delay_ms(500); }
};
}
34
LATIHAN TAHAP – III
Motor yang digunakan disini adalah jenis motor DC dengan supply 5 Vdc.
(Percobaan 7) :
35
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0x05;
delay_ms(500);
};
}
(Percobaan 8) :
36
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTC=0x06;
delay_ms(500);
};
}
(Percobaan 9)
// mengendalikan putaran motor menggunakan pushbutton
#include <mega16.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
37
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if(PINA==0x10)
{
PORTC=0x00;
}
if(PINA==0x01)
{
PORTC=0x01;
}
if(PINA==0x02)
{
PORTC=0x02;
}
if(PINA==0x04)
{
PORTC=0x04;
}
if(PINA==0x08)
{
PORTC=0x08;
}
};
}
38
LATIHAN TAHAP – IV
Banyak yang beranggapan bahwa LCD (Liquid Crystal Display) dan Seven Segment hanyalah
sebagai media penampil saja, namun kedua jenis penampil ini tidak kalah penting karena setiap
kondisi yang ada saat akan diinformasikan melalui media ini sehingga bisa dilakukan tindakan
antisipasi jika terjadi kondisi yang tidak sesuai sistem.
(Percobaan 10) :
39
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
data=456;
sat = data %10;
pul = (data/10)% 10;
rat = data/100;
PORTC= 0X30 | rat;delay_ms(5);
PORTC= 0X50 | pul;delay_ms(5);
PORTC= 0X60 | sat;delay_ms(5);
};
}
(Percobaan 11) :
// menampilkan karakter pada LCD 16x2
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
40
#endasm
#include <lcd.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
while (1)
{
lcd_gotoxy(0,0);
lcd_putsf("Baris1.....");
lcd_gotoxy(6,1);
lcd_putsf("Baris2…..");
};
}
41
(Percobaan 12) :
// LCD geser kanan-kiri
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
while (1)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("geser kanan");
42
lcd_gotoxy(6,1);
lcd_putsf("geser kiri");
delay_ms(700);
lcd_clear();
lcd_gotoxy(3,0);
lcd_putsf("geser kanan");
lcd_gotoxy(3,1);
lcd_putsf("geser kiri");
delay_ms(700);
};
}
43
LATIHAN TAHAP – V
ADC merupakan salah satu perantaraan nilai analog untuk dapat terkonversi dalam
bentuk digital. Dengan menggunakan transduser, kita dapat menganalisa sinyal-sinyal analog
yang di akibatkan oleh temperatur, tekanan, kecepatan angin, berat benda dan lain-lain. Tanpa
menggunakan ADC ini mikrokontroller tidak dapat membaca data yang diberikan oleh sensor,
karena keluaran dari sensor ini adalah berupa sinyal analog sehingga perlu dilakukan konversi
sinyal supaya mikrokontroler dapat membaca data tersebut. Pada simulasi penggunaan ADC
disini, kita gunakan potensiometer (untuk menggantikan sensor) karena potensiometer dianggap
yang paling mudah kita rubah besarannya sesuai kebutuhan simulasi. Pada mikrokontroller
44
(Percobaan 13)
45
ADCSRA=0x84;
while (1)
{
read_adc(0);
potensio1=read_adc(0);
hasil=potensio1*0.1474609375;
if(potensio1<200)
{
PORTC=0x01;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x04;
delay_ms(500);
PORTC=0x08;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
PORTC=0x20;
delay_ms(500);
PORTC=0x40;
delay_ms(500);
PORTC=0x80;
delay_ms(500);
}
else
{
PORTC=0x80;
delay_ms(500);
PORTC=0x40;
delay_ms(500);
PORTC=0x20;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
PORTC=0x08;
delay_ms(500);
PORTC=0x04;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x01;
delay_ms(500);
}
};
}
46
(Percobaan 14) :
// aplikasi sensor (pada ADC) mngendalikan motor putar kanan-kiri
#include <mega16.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void kiri1(void)
{
PORTC=0x01;
delay_ms(10);
}
void kanan1(void)
{
PORTC=0x02;
delay_ms(10);
}
void kiri2(void)
{
PORTC=0x04;
delay_ms(10);
}
void kanan2(void)
{
PORTC=0x08;
delay_ms(10);
}
int potensio1,potensio2,hasil1,hasil2;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
47
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
while (1)
{
read_adc(0);
potensio1=read_adc(0);
hasil1=potensio1*0.1474609375;
if (hasil1<60)
{
kiri1();
}
else
{
kanan1();
}
read_adc(1);
potensio2=read_adc(1);
hasil2=potensio2*0.1474609375;
if (hasil2<60)
{
kiri2();
}
else
{
kanan2();
}
};
}
48
REFERENSI
49