PENDAHULUAN
Tujuan Umum:
1. Mahasiswa mengerti prosedur dan cara menggunakan software CodeVisionAVR
berbasis bahasa pemrograman C dengan baik dan benar
2. Mahasiswa memahami arsitektur dan prinsip kerja akses digital I/O pada
mikrokontroler AVR khususnya tipe ATMega8535
3. Mahasiswa bisa mengendalikan digital I/O pada mikrokontroler AVR khususnya tipe
ATMega8535 dan teknik interfacingnya dengan aplikasi berupa: LED, switch,
7segment, dan LCD
Teori Dasar
1. Arsitektur ATMega8535
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. Beberapa diantaranya mempunyai ADC (Analog to Digital
Converter) dan PWM (Pulse Width Modulation) internal. AVR juga mempunyai In-System
Programmable Flash on-chip yang mengizinkan memori program untuk diprogram ulang
dalam sistem menggunakan hubungan serial SPI. Chip AVR yang digunakan untuk praktikum
adalah ATmega8535.
ATmega8535 adalah mikrokontroler CMOS 8-bit daya-rendah berbasis arsitektur
RISC yang ditingkatkan. Kebanyakan instruksi dikerjakan pada satu siklus clock,
ATmega8535 mempunyai throughput mendekati 1 MIPS per MHz.
Peripheral Features
o Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
o One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
Mode
o Real Time Counter with Separate Oscillator
o Four PWM Channels
o 8-channel, 10-bit ADC
8 Single-ended Channels
2 Differential Channels with Programmable Gain at 1x, 10x, or 200x for TQFP
Package Only
Operating Voltages
o 2.7 - 5.5V for ATmega8535L
o 4.5 - 5.5V for ATmega8535
Speed Grades
o 0 - 8 MHz for ATmega8535L
o 0 - 16 MHz for ATmega8535
PORTD=0x60;
Contoh untuk membuat port-C sebagai port input dan membaca data dari port-C dalam
bahasa C menggunakan aplikasi Code Vision AVR.
DDRC=0x00;
i=PINC;
Pada saat port digunakan sebagai input, instruksi PORTx dapat digunakan untuk
mengaktifkan resistor pull-up atau tidak. Contohnya sebagai berikut.
DDRC=0x00;
PORTC=0xFF ;
i=PINC;
DDRC=0x00;
PORTC=0x00 ;
i=PINC;
3. Alur Pemrograman
Untuk membuat program di dalam mikrokontroler AVR, kita bisa menggunakan
berbagai macam bahasa pemrograman, seperti: assembly, C, dan basic. Pada praktikum ini,
kita menggunakan bahasa pemrograman C melalui software CodeVisionAVR.
bisa
menggunakan
software
CodeVisionAVR
berbasis
bahasa
Rangkaian percobaan
Prosedur Percobaan
1. Buka program CodeVisionAVR dengan menekan klik ganda icon
pada dekstop
komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan mengikuti isi sesuai gambar 1.6.
5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A ubah
In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan1. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program
percobaan 1.
9. Lakukan compile dengan cara menekan gambar
error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi
lagi.
Praktikum Mikrokontroler 1 (MKR 1)
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader
pada modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu
bar. Selanjutnya muncul gambar seperti gambar 1.8. Pilih tipe programmer AVRProg
(AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device manager.
12. Pada menu bar, Project Configure After Make pilih Program the Chip
13. Pilih Project Make atau Project Build atau bisa juga dengan menekan shift + F9
untuk men-download program. Hubungkan konektor port-A dengan konektor LED.
Amati yang terjadi dan dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!
10
Tugas !
a. Buatlah program LED menyala berselingan
b. Buatlah program LED menyala flip-flop (empat mati dan hidup bergantian)
sebanyak 5kali kemudian LED padam semua
c. Buatlah program LED menyala geser kiri-ke-kanan sebanyak 5kali kemudian
geser dari kanan-ke-kiri sebanyak 5kali, terus menerus
d. Buatlah program LED menyala mencacah(counter) 8bit naik kemudian turun
11
Tujuan:
Setelah melakukan praktikum ini diharapkan:
1. Mahasiswa
bisa
menggunakan
software
CodeVisionAVR
berbasis
bahasa
12
pada dekstop
komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan cara mengikuti isi sesuai gambar
dibawah.
5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A ubah
In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan1. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program
percobaan 2.
13
error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi
lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader
pada modul praktikum. Hidupkan power supply pada board AVR.
11. Pilih Project Make atau Project Build atau bisa juga dengan menekan shift + F9
untuk men-download program. Hubungkan konektor port-A dengan konektor LED.
Amati yang terjadi dan dianalisa!
12. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!
14
Tugas !
a. Buatlah program dengan syarat jika S1 ATAU S2= ON, DAN yang lain OFF, maka
LED menyala berjalan
b. Buatlah program dengan syarat jika S1 = ON maka LED menyala berjalan dari kiri ke
kanan. Namun, bila S1 di-OFF-kan maka LED langsung berubah arah dari kanan ke
kiri. Kondisi awal seluruh switch = OFF dan LED padam.
15
Tujuan:
Setelah melakukan praktikum ini diharapkan:
1. Mahasiswa
bisa
menggunakan
software
CodeVisionAVR
berbasis
bahasa
Komputer
Rangkaian percobaan:
16
pada
dekstop komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan cara mengikuti isi sesuai
gambar 1.6.
5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A
ubah In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.
17
ada error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu
ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur
downloader pada modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu
setting programmer yang digunakan dengan cara pilih Settings Programmer
pada menu bar. Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe
programmer AVRProg (AVR910) dengan baudrate 115200, untuk COM
sesuaikan dengan device manager.
12. Pada menu bar, Project Configure After Make pilih Program the Chip
untuk mengaktifkan mode pengisian program ke chip ketika di-build
13. Pilih Project Make atau tekan shift + F9 untuk men-download program.
Hubungkan konektor port-A dengan konektor LED. Amati yang terjadi dan
dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!
18
D3 D2 D1 D0
D C B A
0 0 0 0 = 00H
#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0x00;
}
}
D3 D2 D1 D0
D C B A
0 0 0 0 = E0H
#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0xE0;
}
}
D3 D2 D1 D0
D C B A
0 0 1 1 = E3H
#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0xE3;
}}
19
D7 D6
D5
D4
SEG3 SEG2 SEG1 SEG0
1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1
D3
D
0
0
0
0
D2
C
0
0
0
0
D1
B
0
0
1
1
D0
A
0
1
0
1
=
=
=
=
E0H
D1H
B2H
73H
A
0
0
0
0
=
=
=
=
E0H
D0H
B0H
70H
#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA= 0x73;
delay_ms(1);
PORTA= 0xB2;
delay_ms(1);
PORTA= 0xD1;
delay_ms(1);
PORTA= 0xE0;
delay_ms(1);
}
}
D
0
0
0
0
C
0
0
0
0
B
0
0
0
0
#include <mega8535.h>
#include <delay.h>
void main(void)
{
int rib,rat,pul,sat;
DDRA = 0xFF;
while(1)
{
sat = 3;
pul = 2;
rat = 1;
rib = 0;
PORTA= 0x70 |
delay_ms(1);
PORTA= 0xB2 |
delay_ms(1);
PORTA= 0xD1 |
delay_ms(1);
PORTA= 0xE0 |
delay_ms(1);
rib;
rat;
pul;
sat;
}
}
20
D7 D6
D5
D4
SEG3 SEG2 SEG1 SEG0
1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1
D3
D
0
0
0
0
D2
C
0
0
0
0
D1
B
0
0
1
1
D0
A
0
1
0
1
=
=
=
=
E0H
D1H
B2H
73H
LOKASI
LOKASI
LOKASI
LOKASI
RIBUAN
RATUSAN
PULUHAN
SATUAN
#include <mega8535.h>
#include <delay.h>
void main(void)
{
int i,data,sat,pul,rat,rib;
DDRA = 0xFF;
DDRC = 0X00;
while(1)
{
data = PINC;
sat = data % 10;
// sat = sisa dari data dibagi 10
pul = data / 10;
pul = pul % 10;
rat = data / 100;
rat = rat % 10;
rib = data / 1000;
PORTA= 0x70 |
delay_ms(1);
PORTA= 0xB0 |
delay_ms(1);
PORTA= 0xD0 |
delay_ms(1);
PORTA= 0xE0 |
delay_ms(1);
sat;
pul;
rat;
rib;
}
}
Tugas !
1. Buatlah program konter up (0 s.d 1000)
2. Buatlah program konter barang dengan asusmi S1 sebagai sensornya. Jika S1 naik
1kali (naik turun), maka 7segment terjadi increment. S2 untuk clear data
21
Mahasiswa mengerti teknik interfacing LCD 2x16 untuk mode 4 bit dan 8 bit
Mahasiswa bisa memprogram LCD 2x16 untuk mode 4 bit dan 8 bit dengan baik dan
benar
Komputer
22
Nama
1
2
3
VSS
VCC
VEE
RS
R/W
DB0
Fungsi
Ground voltage
+5V
Contrast voltage
Register Select
0 = Instruction Register
1 = Data Register
Read/ Write, to choose write or read mode
0 = write mode
1 = read mode
Enable
0 = start to lacht data to LCD character
1= disable
Data Bus 0
23
DB1
DB2
DB3
DB4
DB5
DB6
DB7
BPL
GND
Data Bus 1
Data Bus 2
Data Bus 3
Data Bus 4
Data Bus 5
Data Bus 6
Data Bus 7
Back Plane Light / Anode
Ground voltage / Katode
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character:
Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
DL
X : Dont care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
N: Pengaktifan baris
N=0, 1 baris
N=1, 2 baris
F: Penentuan ukuran font karakter
F=0, 5x7
F=1, 5x8
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
I/D
24
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Clear Display
Perintah ini untuk menghapus layar
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
25
Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display.
Fungsi ini digunakan untuk koreksi atau pencarian display
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
S/C
R/L
x = dont care
S/C
R/L
Keterangan
Posisi Kursor
Modul LCD terdiri dari sejumlah memory yang digunakan untuk display. Semua teks
yang kita tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD
secara berturutan membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.
Pada peta memori tersebut, 00 s.d. 0F dan 40 s.d. 4F adalah display yang tampak.
Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris.
Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar.
Demikianlah karakter pertama di sudut kiri atas adalah menempati alamah 00h. Posisi
karakter berikutnya adalah alamat 01h dan seterusnya. Akan tetapi, karakter pertama dari
Praktikum Mikrokontroler 1 (MKR 1)
26
// inisialisasi lcd
2. lcd_putchar(char c);
3. lcd_puts(char *str );
4. lcd_putsf( );
27
pada dekstop
komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz.
5. Lalu menu LCD pilih PORTC seperti pada gambar 4.4, maka akan muncul gambar
seperti pada gambar 4.5.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan4a. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program percobaan
mode 4 bit.
Praktikum Mikrokontroler 1 (MKR 1)
28
tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader pada
modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu bar.
Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe programmer
AVRProg (AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device
manager.
12. Pada menu bar, Project Configure After Make pilih Program the Chip
13. Pilih Project Make atau tekan shift + F9 untuk men-download program. Hubungkan
konektor port-C dengan konektor LCD 4 bit. Amati yang terjadi dan dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang diberikan
dengan menunjukkan hasilnya kepada dosen yang mengampuh!
29
");
");
30
//lcd_gotoxy(0,0);
//lcd_putchar(0x30);
}
}
31
pada dekstop
komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz.
5. Lalu menu Ports pada Port C ubah In menjadi Out dari bit 0 sampai dengan bit 7 seperti
pada gambar 4.5, begitu juga pada Port D seperti pada gambar 4.6
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan4b. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program percobaan
mode 8 bit.
9. Lakukan compile dengan cara menekan gambar
tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader pada
modul praktikum. Hidupkan power supply pada board praktikum.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu bar.
Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe programmer
AVRProg (AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device
manager.
Praktikum Mikrokontroler 1 (MKR 1)
32
port_init(void);
LCD_init(void);
LCD_WriteCommand (unsigned char CMD);
LCD_WriteData (unsigned char Data);
#define
#define
#define
#define
#include <mega8535.h>
#include <delay.h>
// Inisialisasi port AVR 8535
void port_init(void)
{
DDRA = 0x00; // PORTA INPUT
PORTA = 0x00; // SEMUA PORTA DIAKTIFKAN
DDRB = 0x00; // PORTB INPUT
PORTB = 0x00; // SEMUA PORTB DIAKTIFKAN
DDRC = 0xFF; // PORTC OUTPUT
PORTC = 0x00; // SEMUA PORTC DIAKTIFKAN
DDRD = 0xFF; // PORTD OUTPUT
PORTD = 0x00; // SEMUA PORTD DIAKTIFKAN
}
// Inisialisasi LCD
// DISPCLR
= 01H
// FUNCSET
= 38H
// ENTRMOD
= 06H
// DISPON
= 0CH
void LCD_init(void)
{
delay_ms(100);
33
(0x38);
(0x06);
(0x0f);
(0x01);
//
//
//
//
// tunggu
}
// Prosedur untuk command instruction
void LCD_WriteCommand (unsigned char Command)
{
SET_LCD_CMD;
// Set LCD in command mode
PORTC = Command;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(10);
DISABLE_LCD;
// Disable LCD
delay_ms(10);
// wait for 1ms
}
// Prosedur untuk data instruction
void LCD_WriteData (unsigned char Data)
{
SET_LCD_DATA;
// Set LCD in data mode
PORTC = Data;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(10);
DISABLE_LCD;
// Disable LCD
delay_ms(10);
// wait for 1ms
}
//******************* MAIN FUNCTION *******************
void main()
{
port_init();
LCD_init();
LCD_WriteCommand (0x80);
LCD_WriteData (0x30);
LCD_WriteCommand (0x0C0);
LCD_WriteData (0x31);
}
//
//
//
//
pesan tempat
data ASCII 0
pesan tempat
data ASCII 1
di baris 1 kolom 0
= 30H
di baris 2 kolom 0
= 31H
port_init(void);
LCD_init(void);
LCD_WriteCommand (unsigned char CMD);
LCD_WriteData (unsigned char Data);
#define
#define
#define
#define
#include <mega8535.h>
#include <delay.h>
34
selama 100 ms
8 data lines = FUNCSET
cursor setting = ENTRMOD
display ON
= DISPON
clear LCD memory = DISPCLR
10ms untuk membersihkan LCD
void main()
35
0
1
2
3
36