Lembar informasi
Mikrokontroller adalah rangkaian terintregrasi (Integrated Circuit-IC) yang telah
mengandung
secara
lengkap
berbagai
komponen
pembentuk
sebuah
penggunaan
mikrokontroler ini adalah karena harga yang relatif murah, mudah diperoleh,
kemudahan dalam pemrograman, dan fitur-fitur menarik yang dimilikinya.
Beberapa karakteristik dan fitur yang dimiliki mikrokontroler ATMega8535 antara
lain:
1) Resolusi data 8 bit.
2) RISC arsitektur.
3) 8 K byte In System Programmable Flash.
4) 512 Bytes EEPROM.
5) 512 Bytes SRAM internal.
6) 8 channel, 10 bit resolusi ADC.
7) 4 channel PWM.
8) 2 timer/counter 8 bit.
9) 1 timer/counter 16 bit.
1.4.1
Memori Program
$000
$FFF
Gambar 1.1
1.4.2
Memori Data
32 Registe rs
$0 00 - $ 001 F
64 I/O Re gisters
$ 0 20 - $ 0 05 F
$ 0 06 0
$ 0 25 F
AVR ATmega 8535 memiliki memori data yang terbagi menjadi 3 bagian, yaitu 3
register umum, 64 buah register I/O, dan 512 SRAM internal.re
1.4.3
RAM
RAM dalam hal ini berperan untuk menyimpan data yang sifatnya sementara,
yang biasanya diperlukan pada saat proses manimpulasi data ( penjumlahan,
pengurangan, perkalian, pembagian, dan transfer data ).
1.4.4
SRAM
Register I/O
1.4.6
Memori EEPROM
EEP RO M
$ 0 20 0
1.4.7
Microcontroller AVR
JenisPaket
TinyAVR
AVR (classi
MegaAVR
832
C (AVR)2044
3264
Memori (byte)
IC
Flash EE
( Kb )
(K
EPROM
( (Kb
b )
SRAM
(Byte )
pin
1 2K
64
0128
128
pin
1 8K
128
0512
1K
4512
K
4K
PIN
KETERANGAN
Port B, merupakan Port I/O 8-bit dua arah (bi-directional)
dengan resistor pull-up internal, selain sebagai Port I/O 8-bit
Port B juga dapat difungsikan secara individu sebagai berikut
:
1-8
10
11
12
13
14-21
22-29
30
AVCC,
merupakan
catu
daya
yang
digunakan
untuk
31
32
33 40
KEGIATAN BELAJAR 2
m erupakan
perkembangan
dari
bahasa
BCPL
yang
mem berikan
ide
kepada
Ken
Thompson
yang
kem udian
sekitar
tahun 1970-an
di
Bell Telephone
Laboratories
di computer
menggunakan
Digital
Equipm ent
system operasi
UNIX.
Corporation
Hingga
pertama
PDP-11
saat ini
Inc.
kali
yang
penggunaan
di
dunia menjadikan
bahasa
itu, banyak
bahasa
sebagai
salah
satu
mata
PHP dan Java menggunakan sintaks dasar yang mirip bahasa C. Oleh
karena itu, kita juga sangat perlu mem pelajarinya.
Kekurangan Bahasa C
1) Banyaknya O perator serta fleksibilitas penulisan program kadang-kadang
m embingungkan pem akai.
2) Bagi pemula pada umumnya akan kesulitan menggunakan pointer.
2.3 Pengena l
Pengenal (identifier) m erupakan nam a yang didefinisikan oleh program untuk
m enunjukan identitas dari sebuah ko nstanta,variabel,fungsi dan label atau tipe
data khusus.pem berian nam a sebuah pengenal dapat ditentukan bebas sesuai
yang diinginkan program tetapi harus m em enuhi aturan berikut :
Bersifat case sensitif yaitu huruf kecil dan huruf besar dianggap berbeda.
10
b. Variable
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu
nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya
selalu tetap, nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan. Nama
dari suatu variable dapat ditentukan sendiri
akan
dibebaskan
sehingga
penggunaan
variable
11
local
lebih
hal
ini
adalah
untuk
mendefinisikan
jenis
mikrokontroler
yang
digunakan.dengan pengarahan prosesor ini maka pendeklarasian registerregister dan penamaannya dilakukan pada file lain yang disisipkan dalam
program utama dengan sintaks sebagai berikut.
# include <nama_prosesor>
Contoh :
# include <mega 8535>
2.8 Pernyataan
Pernyataan adalah satu buah intruksi lengkap yang berdiri sendiri. Berikut adalah
contoh sebuah pernyataan :
PORTC = 0x0F:
Pernyataan diatas merupakan sebuah interuksi untuk mengeluarkan data 0x0F
ke Port C.
12
keterangan
Operator untuk operasi penjumlahan
Operator untuk operasi pembagian
Operator untuk operasi penambahan
Operator untuk operasi pengurangan
Operator untuk operasi sisa pembagian
Operator
&&
||
!
keterangan
Operator untuk logika AND
Operator untuk logika OR
Operator untuk logika NOT
Contoh.
If (( a == b ) && (c ! = d )) PORTC = 0XFF;
13
Pernyataan diatas terdiri dari dua kondisi yaitu a==b dan c!=d yang keduanya
dihubungkan dengan logika &&(AND). Jika logika yang dihasilkan benar maka
perintah PORTC = 0xFF akan dikerjakan dan jika salah maka tidak dikerjakan.
keterangan
Pergeseran bit kekanan
Bitwise AND
Bitwise XOR (exclusive OR)
Bitwise OR
Bitwise NOT
Operator Penugasan
keterangan
Untuk perkalian
Untuk Pembagian
Untuk sisa pembagian (modulus)
Untuk pertambahan
Untuk pengurangan
14
Catatan Penting ! :
Operator peningkatan ++ dan penurunan -- jika diletakkan sebelum atau sesudah
operand terdapat perbedaan
15
PORTC=0xFF;
16
pernyataan-1
else
pernyataan-2
Contoh Program :
If (kondisi)
{
// blok pernyataan yang akan dikerjakan
// jika kondisi if terpenuhi
}
Else
}
// blok pernyataan lain yang akan dikerjakan
// jika kondisi if terpenuhi
}
Contoh :
If (PINA>0x80)
{
Dataku = PINA;
PORTC = 0xFF;
}
else
{
Dataku = ~PINA;
PORTC=0x00;}
Pernyataan if ..else akan mengecek apakah data yang terbaca pada Port A
(PINA) nilainya lebih dari 0x80 atau tidak, jika ya maka variabel dataku diisi
dengan nilai PINA dan data 0xFF dikeluarkan ke port C tetapi jika tidak variabel
dataku diisi dengan nilai komplemen dari PINA (~PINA) dan data 0x00
dikeluarkan ke port C.
17
}
Else
{
If (kondisi_3)
{
// blok pernyataan_2 yang akan dikerjakan
// jika kondisi_1 dan kondisi_3 terpenuhi
}}
2.20 Pernyataan Switch
Pernyatan switch digunakan untuk melakukan pengambilan keputusan terhadap
banyak kemungkinan. Bentuk pernyataan switch adalah sebagai berikut :
switch (ekspresi)
{
case nilai_1
: pernyataan_1;break;
case nilai_2
: pernyataan_2;break;
case nilai_3
: pernyataan_3;break;
.................
default
: pernyataan_default;break;
}
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai
dengan pernyataan_default)dapat berupa satu atau beberapa perintah dan tidak
perlu berupa blok pernyataan.pernyataan_1 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_1. pernyataan_2 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_2. pernyataan_3 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_3 dan seterusnya. Default bersifat opsional artinya
boleh ada boleh tidak.
Contoh :
switch (ekspresi)
{
case 0xFE
: PORTD=0x00;break;
case 0xFD
: PORTC=0xFF;break;
}
Pernyataan diatas berarti membaca port A,kemudian datanya (PINA) akan
dicocokan dengan nilai case. Jika PINA bernilai 0xFE Maka data 0x00 akan
dikeluarkan ke PORTC kemudian program keluar dari blok pernyataan switch
tetapi jika PINA bernilai 0xFD Maka data 0xFF Akan dikeluarkan ke port C
kemudian program keluar dari pernyataan switch.
18
pertama kali
sebelum
pengulangan.
Kondisi merupakan pernyataan pengetesan untuk mengontrol pengulangan, jika
pernyataan kondisi terpenuhi (benar) maka blok pernyataan akan diulang terus
sampai pernyataan kondisi tidak terpenuhi (salah).
19
Contoh :
//prototype fungsi inisialisasi port
void inisialisasi_port (char A, char B, char C, char D);
//definisi fungsi inisialisasi port
void inisialisasi_port (char A, char B, char C, char D);
{
DDRA=A;
20
DDRB=B
DDRC=C
DDRD=D
}
//fungsi utama
Void main (void)
{
inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00);
}
21
KEGIATAN BELAJAR 3
TOOL PENDUKUNG
Lembar informasi
Bab ini akan membahas tentang tool_tool yang diperlukan /digunakan dalam
proses merancang sistem mikrokontroler,khususnya yang berupa software yaitu
software kompiler dan software downloader/programer. Sebenarnya penggunaan
software kompiler dan downloader ini terdapat banyak macam dan variasinya
sehingga tidak mutlak harus sama dengan yang ada dalam modul ini,namun
untuk memudahkan anda dalam
pembahasan dalam buku ini maka penulis mnyarankan agar anda menggunakan
tool yang sama seperti yang penulis gunakan.
Code
Vision
AVR
adalah
tersedianya
fasilitas
untuk
kom piler
juga
ini
dapat
selain
dapat
berfungsi
berfungsi
sebagai
program er/downloader.
Adapun menu-menu dalam Code Vision AVR adalah sebagai berikut:
22
sebagai
software
j.
23
24
G eneration,
fitur
yang
digunakan
dim iliki
untuk
m enentukan
spesifikasi
oleh m ikrokontroler
8. M essag es, digunakan untuk m engatur tam pil tidaknya beberapa pesan
peringatan
9. G lob ally #define , digunakan untuk m endeklarasikan pengenal global
10. P aths, digunakan untuk m enentukan direktori-direktori file program
(*.c), file header (*.h) dan file pustaka (*.lib) yang dibutukan dalam
project
11. A fter M ake , digunakan untuk m engatur proses yang akan dilakukan
setelah m ake
terlebih
dahulu
program
jika
kita
beserta
letak
yang
dikom pile
ke
debbuger
sudah
debbu ger
5. C onfig ure,
program
digunakan
aplikasi
lain
untuk
m enam bahkan
kedalam
25
m enu tools.
atau
m enghapus
Contoh
Anda
warna-warna
dengan
digunakan
untuk
m enentukan
jenis
hardware
serail
UART
26
27
KEGIATAN BELAJAR 4
KONVERSI BILANGAN
Lembar informasi
Dalam kehidupan sehari-hari kita telah terbiasa menggunakan sistem bilangan
desimal,suatu bilangan berbasis 10 (terdiri dari 10 simbol),yaitu 0,1,2,3,4........9.
akan tetapi dalam suatu aplikasi tidak selamanya kita menggunakan sistem
desimal ini. Jadi kita dituntut untuk mengerti jenis bilangan yang lain.seperti
biner,heksa, dan oktal. Ada baiknya anda mempelajari 3 jenis bilangan, yaitu
desimal, biner dan heksa. Bilangan oktal mungkin tidak perlu kita pelajari dahulu
karena bilangan ini jarang sekali digunakan dalam pemrograman ini.
28
Kolom biner
B
101 = 10
(puluhan)
A
100 = 1
(satuan)
C
22 = 4
(empatan)
B
21 = 2
(duaan)
A
20 = 1
(satuan)
Setiap digit biner disebut bit; bit paling kanan disebut least significant bit (LSB),
dan bit paling kiri disebut most significant bit (MSB).
Biner
1110
1011
11001
10111
110010
32
1
16
1
1
1
Kolom biner
8
4
1
1
1
0
1
0
0
1
0
0
Desimal
2
1
1
0
1
1
1
0
1
1
1
0
8 + 4 + 2 = 14
8 + 2 + 1 = 11
16 + 8 + 1 = 25
16 + 4 + 2 + 1 = 23
32 + 16 + 2 = 50
6 sisa 1
6/2
3 sisa 0
3/2
1 sisa 1
0 sisa 1, MSB
29
Sehingga bilangan desimal 5210 akan diubah menjadi bilangan biner 110100.
Cara di atas juga bisa digunakan untuk mengubah sistem bilangan yang lain,
yaitu oktal atau heksadesimal.
contoh,
untuk
mengubah
bilangan
340810
menjadi
bilangan
30
Sehingga, bilangan heksadesimal 2A5C akan diubah menjaid bilngan biner 0010
1010 0101 1100.
Sebaliknya, bilangan biner dapat diubah menjadi bilangan heksadesimal
dengan cara mengelompokkan setiap empat digit dari bilangan biner tersebut
dimulai dari sigit paling kanan. Sebagai contoh, 01001111010111002 dapat
dikelompokkan menjadi 0100 1111 0101 1110. Sehingga:
01002 = 416, MSB
11112 = F16
01012 = 516
11102 = E16, LSB
Dengan demikian, bilangan 01001111010111002 = 4F5E16.
sistem
bilangan
desimal,
bilangan
pecahan
disajikan
dengan
menggunakan titik desimal. Digit-digit yang berada di sebelah kiri titik desimal
mempunyai nilai eksponen yang semakin besar, dan digit-digit yang berada di
sebelah kanan titik desimal mempunyai nilai eksponen yang semakin kecil.
Sehingga
0.110
= 10-1
= 1/10
0.1010 = 10-2-
= 1/100
0.2
= 2 x 0.1
Cara yang sama juga bisa digunakan untuk menyajikan bilangan biner pecahan.
Sehingga,
0.12
= 2-1
-2-
0.012 = 2
= , dan
= 2 =
Sebagai contoh,
0.1112
= + + 1/8
= 0.5 + 0.25 + 0.125
= 0.87510
101.1012 = 4 + 0 + 1+ + 0 + 1/8
= 5 + 0.625
= 5.62510
Pengubahan bilangan pecahan dari desimal ke biner dapat dilakukan dengan
cara mengalihkan bagian pecahan dari bilangan desimal tersebut dengan 2,
31
bagian bulat dari hasil perkalian merupakan pecahan dalam bit biner. Proses
perkalian diteruskan pada sisa sebelumnya sampai hasil perkalian sama dengan
1 atau sampai ketelitian yang diinginkan. Bit biner pertama yang diperoleh
merupakan MSB dari bilangan biner pecahan. Sebagai contoh, untuk mengubah
0.62510 menjadi bilangan biner dapat dilaksanakan dengan
0.625 x 2
0.25 x 2
= 0.5,
0.5 x 2
= 1.0,
Sehingga,
0.62510
= 0.1012
32
KEGIATAN BELAJAR 5
PROJEK PERTAMA
Lembar informasi
Pembahasan pada bab ini bertujuan untuk memberikan gambaran tentang
bagaimana proses mendownload dengan menggunakan mikrokontroler ATmega
8535 mulai dari menuliskan program aplikasi ,proses mendownload program
aplikasi hingga sampai mengamati hasilnya.
DDR bit = 1
DDR = 0
PORT bit = 1
Output ; High
Input ; R pull-up
PORT bit = 0
Output ; low
Input ; Floating
Port I/O untuk output hanya memberikan arus sebesar 20mA. Jadi jika diperlukan
untuk menggerakan piranti yang lebih besar (konsumsi arus/tegangan) harus
ditambahkan
rangkaian
driver
untuk
piranti
33
tersebut.
Untuk
lebih
OUTPUT
Misalkan rangkaian LED kita hubungkan ke PORTB (rangkaian input nanti dulu,
OK)
Buatlah program dengan langkah seperti pada gambar dibawah ini dengan
menggunakan Code Vision AVR.
34
2.
3.
4.
35
PROSES MENDOWNLOAD
Untuk proses mendownload bisa langsung kita lakukan dengan memilih menu
project
configure
OK.
INPUT OUTPUT
Saat mempelajari input sudah seharusnya dilanjutkan dengan output sehingga
bisa langsung mengetahui hasilnya. Hubungkan rangkaian output ke PORTB
dan rangkaian input ke PORTA.
Kembali kita buat proyek baru. Setting chip dan clock kemudian setting PORT
seperti gambar dibawah ini :
PORTA
PORTB
Gambar 5.5 setting port untuk PORTB Output dan PORTA input
36
............
Void main (void)
{
//declare your local variabel here
Unsigned char data; // lokal variabel
..........
Tambahkan interuksi sehingga nampak seperti berikut :
............
while (1)
{
// Place your code here
37
..........
while (1)
{
// Place your code here
PORTB=0b011111111;delay_ms(200);
PORTB=0b101111111;delay_ms(200);
PORTB=0b110111111;delay_ms(200);
PORTB=0b111011111;delay_ms(200);
PORTB=0b111101111;delay_ms(200);
PORTB=0b111110111;delay_ms(200);
PORTB=0b111111011;delay_ms(200);
PORTB=0b111111101;delay_ms(200);
PORTB=0b111111110;delay_ms(200);
};
}
Kompilasi,download dan perhatikan hasilnya, apakah LED bergeser ke kanan.?
38
Input
data_in=PINX.bitn;
Yaitu mengambil data bit dari PINX(X=A,B,C,D) bit ke n yang kemudian disimpan
ke variable data_in. Perintah ini setara dengan cbi dalam bahasa assembly.
Contoh
............
data_n=PORTB.3;
............
Artinya adalah ATmega 8535 mengambil data bit ke 3. Nilai dari perintah ini
hanya 0 atau 1.
39
5.3 Tunda
Tunda atau delay akan sering kita gunakan. contoh saat memutar motor
stepper,pemberian bit ke motor stepper harus di tunda karena bila tidak diberi
waktu tunda maka motor tidak akan dapat berputar. Ada dua cara memberikan
penundaan, yaitu tunda yang kita buat sendiri dan penundaan yang disediakan
oleh code vision AVR. namun untuk memudahkan dalam pembelajaran hanya
pustaka tunda yang dipelajari dalam modul ini.
..................
Tambahkan interuksi berikut :
void main(void)
{
..........
// Place your code here
#asm {cli)
PORTB=0xFF;
delay_ms(500); // memanggil delay dari librari delay.
PORTB=0XF0;
delay_ms(500);
#asm(sei)
};
}
Bagaimana blink-blink kan....................!!
40
menggunakan
codewizard
AVR
kita
dapat
dengan
mudah
41
Untuk setting IC(Chip yang digunakan) pilih Chip, isi informasi sebagai berikut :
42
Menggunakan PORTC(0x15) untuk LCD (lihat tentang register I/O di datasheet
ATmega 8535). Untuk inisialisasi cukup dengan instruksi berikut:
43
44
{
// Place your code here
if (saklar1==0){
//jika saklar 1 ditekan
PORTB=0x00;delay_ms(100); //maka led brucak-brinong
PORTB=0xFF;delay_ms(100);
}
if (saklar2==0){
//jika saklar 2 ditekan
PORTB=0x0F;delay_ms(100); //maka led plip-plop
PORTB=0xF0;delay_ms(100);
}
if (saklar7==0){
//jika saklar 7 ditekan
PORTB=0xAA;delay_ms(100); //maka LED blink-blink
PORTB=0x55;delay_ms(100);
}
if (saklar4==0){
PORTB=0b11001100;delay_ms(200); //maka LED 2blink
PORTB=0b00110011;delay_ms(100);
}
PORTB=0xFF;
//jika tidak maka led mati
};
}
Kompilasi,download dan perhatikan hasilnya, tekan tombol 1,2,4 dan 7......?
Bagaimana tambah serukan.!!
Resolusi 10 Bit,
8 ch input,
Untuk mempelajari ADC pada ATmega 8535, kita cukup membuat rangkaian
sederhana dari potensio meter.
45
R2
x Vcc
R1+R2
Dari gambar rangkaian diatas, keluarannya dihubungkan ke input ADC, yaitu
misal ke PORTA.0 (ADC ch.0). untuk melihat hasil ADC, kita dapat memasang
rangkaian LED atau LCD, dalam contoh ini langsung kita tampilkan pada LCD.
DASAR ADC
Register-register yang kita bahas diatas dalam pengelementsialnya akan diset
pada saat kita membuat proyek baru dengan wizard code vision. Untuk lebih
jelasnya, perhatikan contoh berikut ini.
Buat proyek baru. Jangan lupa setting chip dan clock.setelah itu setting bagian
ADC seperti gambar berikut ini :
46
Hubungkan rangkaian pembagi tegangan kesalah satu pin pada PORTA, yang
untuk contoh ini dihubungkan ke PINA.0 untuk setting LCD, samakan dengan
keypad, yaitu LCD ke PORTC. Generate file, save and exit. Simpan dengan
nama file adc.c,adc.prj,adc.cwp.
Tambahkan interuksi sehingga menjadi listing program berikut ini :
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
unsigned int adc;
unsigned char nilai[16];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTC
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
47
void main(void)
{
..
// LCD module initialization
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("pelatihan mikro");
delay_ms(50);
while (1)
{
// Place your code here
adc=read_adc(0);
lcd_clear();
sprintf(nilai,"nilai adc=%d",adc);
lcd_gotoxy(0,0);lcd_puts(nilai);
delay_ms(100);
};
}
Kompilasi download dan perhatikan hasilnya dengan memutar potensiometer.
48
Blok-blok diatas adalah inisialisasi dan prosedur baca ADC yang dibentuk oleh
codevision. Untuk membaca ADC channel yang lain cukup dengan mengubah
instruksi menjadi seperti berikut :
data_adc=read_adc(3) ;
5.7 INTERUPSI
Interupsi adalah suatu kondisi dimana mikrokontroler akan berhenti sementara
dari program utama untuk melayani interuksi-intruksi pada interupsi kemudian
kembali mengerjakan instruksi program utama setelah instruksi-instruksi pada
interupsi selesai dikerjakan. Terdapat 21 interupsi pada ATmega 8535 (lihat data
sheet).
PIN
INT0
PORTD.2
INT1
PORTD.3
INT2
PORTB.2
49
Pada rangkaian diatas,logika yang kita dapat adalah jika tombol ditekan maka
keluaran akan menjadi sisi negative (falling edge) yang selanjutnya menjadi low.
Misal program yang kita inginkan adalah sebagai berkut :
Saat program dijalakan maka led akan menyala sehingga berjalan dan kemudian
saat terjadi interupsi maka led akan berkedip 10 kali.setelah interuksi pada
interupsi selesai dijalankan maka program akan kembali mengerjakan program
utama ,yaitu led berjalan. Siapkan proyek baru jangan lupa setting chip dan clock
dan kemudian setting PORTB sebagai output dan PORTD untuk tombol interrupt.
Hubungkan rangkaian pada gambar ke PORTD.2, yaitu INT.0 :
#include <mega8535.h>
void tunda(unsigned char i);
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
unsigned char rr=0;
while (rr<5){
PORTB=0x0F; tunda (5); //program interuksi supaya LED kelap-kelip
PORTB=0xF0; tunda (5);
++rr;
}
50
}
// Declare your global variables here
unsigned char dt=0x01;
void main(void)
{
.
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
PORTB=dt; tunda(1);
dt=dt<<1;
if(dt==0){dt=0x01;}
};
}
//prosedur tunda
void tunda(unsigned char i){
unsigned char j;
j=0;
while (j<255){
j=j+1;
while (i--){
#asm
nop
nop
#endasm
};
};
}
Kompilasi,download dan perhatikan hasilnya dengan menekan tombolnya bagaimana berubahkan..?
5.8 EEPROM
EEPROM (electrically erasable programmable read only memory) adalah memori
yang masih dapat menyimpan data walaupun catu daya dimatikan.operasi
baca/tulis data ke EEPROM dapat dilakukan saat program berjalan. Untuk
mengakses EEPROM dilakukan dengan cara menentukan EEPROM addres
register, EEPROM data register , dan EEPROM control register.
Akses baca/tulis EEPROM.
51
Untuk menulis ke EEPROM tentu saja kita harus menyeting register yang
bersangkutan, yaitu register EECR (baca data sheet ATmega 8535) namun
demikian sekali lagi, dengan code vision AVR kita bisa langsung mengakss
EEPROM dengan mudah.
Buat proyek baru berikut ini :
Setting chip dan clock ATmega 8535 ,11059200 Generate file,save and
exit.simpan dengan nama file eeprom.c, eeprom.prj, eeeprom.cwp.
Gunakan LCD di PORTC untuk melihat hasil penulisan dan pembacaan
EEPROM.
Tambahkan kode program sehingga listingnya seperti berikut :
52
Tampak dikiri bawah LCD sudah menunjukan angka 55h, yaitu hasil
penulisan yang dilakukan oleh program saat berjalan.
53
Timer counter 0
Timer counter 1
Timer counter 2
Setting register tidak kita lakukan saat penulisan program.kita dapat langsung
menyesetnya saat melakukannya dengan wizard new project. Jadi untuk
register-register yang berkenaan dengan timer/counter tidak kita bahas.agar
lebih jelas tentang register pada timer/counter,anda dapat melihat data sheet
ATmega 8535.
Timer/counter 0
Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :
a. 8 bit Timer/Counter 1 kanal.
b. Auto reload, yaitu timer akan dinolkan saat match compare.
c. Dapat menghasilkan pulsa PWM dengan glich free
d. Frequence generator.
e. Prescaler 10 bit untuk timer
f.
Timer/counter 1
Timer/counter 1 adalah 16 bit timer/counter dengan fitur sebagai berikut :
a. 16 bit Timer atau counter
b. Memiliki 2 compare unit
c. Memiliki 2 register pembanding
d. Memiliki 1 input capture unit
e. Auto reload,timer akan dinolkan saat match compare
54
f.
Dapat menghasilkan pulsa PWM dengan glich free dan periode yang
bisa dirubah-ubah
g. Frequence generator
h. Memiliki 4 buah sumber interupsi, yaitu TOV1,OCF1A,OCF1B dan ICF1.
Timer/counter 2
Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :
8 bit Timer/Counter 1 kanal.
Auto reload, yaitu timer akan dinolkan saat match compare.
Dapat menghasilkan pulsa PWM dengan glich free
Frequence generator.
Prescaler 10 bit untuk timer
Membangkitkan interupsi saat timer overflow dan atau match compare.
Cara menggunakan ketiga timer diatas adalah dengan menyetting register dari
masing-masing
timer/counter
yang
bersangkutan.namun
karena
kita
TIMER
Berikut ini adalah contoh penggunaan timer. Gunakan kembali rangkaian LED
untuk mempermudah pemahaman akan timer.disini kita akan membuat LED
blink dengan pewaktuan menggunakan timer.Gunakan kembali rangkaian I/O led
dan hubungkan ke PORTB Selanjutnya kita buat proyek baru dengan setting
mikro sebagai berikut :
Setting clock pada 11.059200,chip ATmega 8535 dan PORTB sebagai output :
55
56
if (PINB==0){PORTB=0xFF
}else{ PORTB=0x00;}}
Kita hanya memanfaatkan interupsi timer 1 overflow. Program ini akan
menambahkan nilai TCNT timer 1 yang semula kita set dengan nilai D5D0H
sehingga mencapai FFFFh kemudian overflow dan menghasilkan interupsi. Pada
saat interupsi dijalankan maka nilai TCNT diset kembali menjadi D5DOh. Diblok
interupsi ini juga terlihat kondisi dari PORTB, yaitu jika sebelumnya PORTB
berlogika 0 maka PORTB akan diset ke logika 1. begitu juga sebaliknya atau
dengan kata lain PORTB dalam kondisi toogle.
Ubah interuksi berikut :
.
TCCR1A=0x00;
TCCR1B=0x03; // ubah menjadi 0x01 hingga 0x05
Kompilasi,download dan perhatikan LEDnya.bagaimana hasilnya ?
COUNTER
Untuk memahami
counter,
gunakan
kembali
rangkaian
pada
gambar
57
apabila
nilai
TCNT
4-7
0-3
TIME
Gambar 5.14 gelombang kotak yang memiliki y max,ymin dan D
58
Jika f(t) adalah gelombang kotak, maka nilai ymax adalah dari 0 < t < D.T dan nilai
ymin dari D.T < t < T.dari pernyataan diatas didapat :
59
Semakin besar nilai data pada register OCR ,maka semakin tinggi juga nilai ratarata tegangan DC, contoh semakin besar dutycircle semakin terang nyala LED.
Contoh program pengaturan tegangan LED menggunakan PWM :
PORTB sebagai output,PORTA sebagai input,gunakan Timer 0 sebagai
pembangkit pulsa PWM.
Gambar 5.16
Lengkapi listing program sehingga seperti berikut :
#include <mega8535.h>
#include <delay.h>
#define led1
PORTA.0
#define led2
PORTA.1
#define led3
PORTA.2
#define led4
PORTA.3
#define led5
PORTA.4
#define led6
PORTA.5
#define led7
PORTA.6
#define led8
PORTA.7
unsigned char
x=0,pwm1=0,pwm2=0,pwm3=0,pwm4=0,pwm5=0,pwm6=0,pwm7=0,pwm8=0;
60
61
dan
62
Kegunaan RS232 adalah sebagai driver, yang akan mengkonversi tegangan dari
hardware agar sesuai tegangan dengan computer sehingga data dapat dibaca.
RS 232
o
TTL
o
Pins
Common Name
Decription
CD
63
RXD
Received data
out
TXD
Transmitted data
In
DTR
In
GND
Signal ground
DSR
out
RTS
Request to send
In
CTS
Clear to send
out
Ring indicator
out
ATmega
memiliki
beberapa
keuntungan
dibandingkan
system
UART,yaitu :
a. operasi full duplex(mempunyai register receive dan transmit yang
terpisah)
b. mengandung komunikasi multiprosesor
c. mode kecepatan transmisi berorde mbps
kecepatan transmisi data yang akan digunakan. UBRR dibagi menjadi dua
bagian yaitu UBRRH dan UBBRL.UBRR [11..0] merupakan NIT penyimpan
konstanta kecepatan komunikasi serial.UBRRH menyimpan 4 bit tertinggi,
dan UBRRL menyimpan 8 bit sisanya.data yang dimasukan ke UBRRH dan
UBRRL dihitung menggunakan rumus pada table dibawah ini :
64
fosc
-1
fosc
-1
8x Baud rate
sinkron
UBRR=
fosc
-1
2x Baud rate
Catatan :
U2X adalah bit pada register UCSRA, yang berfungsi untuk mengandakan
transfer rate menjadi dua kalinya. Hanya belaku untuk mode asinkron,untuk
mode sinkron bit ini diset 0.
UCSRA
65
000
001
010
011
100-110
Tidak dipergunakan
111
a. URSEL
b. UMSEL
f.
UCPOL
sinkronisasi. Hanya
66
67
while (1)
{
// Place your code here
int a,b=0;
for(a=0;a<16;a++)
{buff[a] = getchar(); //data kiriman dimasukan ke buff dengan array
berdasarkan nilai a
putchar(buff[a]);
sprintf(tampil,"%c",buff[a]);//buff a ditampilkan ke LCD
lcd_gotoxy(a,0);//penampilan kordinat x berdasarkan nilai a
lcd_puts(tampil);
if (buff[a]==8){a=a-2;lcd_clear();};//jika ditekan space maka a dikurangi 2
printf ("\r\ndata in des = %d\r\n",buff[a]);
}
//==============================
for(a=0;a<16;a++)
{buff[a] = getchar();
putchar(buff[a]);if (buff[a]==13){PORTA=0xFF;a=-2;}
sprintf(tampil,"%c",buff[a]);
68
lcd_gotoxy(a,1);
lcd_puts(tampil);
if (buff[a]==8){a=-2;lcd_clear();}
printf ("\r\ndata in des = %d\r\n",buff[a]);
};
}
kemudian
ketik
sesuatu
sesuka
anda.
if (buff[a]==49){b++;if (b==1){PORTA=0x00;}
if (b==2){PORTA=0xFF;b=0;}}
if (buff[a]==50){b++;if (b==1){PORTA=0x55;}
if (b==2){PORTA=0xAA;b=0;} }}
Program diatas bisa anda kembangkan lebih lanjut misalnya untuk mengontrol
actuator melalui keyboard pada computer maupun aplikasi lainnya.
Bagaimana serukan praktek mikronya..?
69
DAFTAR PUSTAKA
,pemrograman
70
dan
implementasinya