Pemrograman
Mikrokontroller (ATMEGA8535)
dengan
Bahasa C
DOKTER TECH
Sesi
Pengenalan ATMEGA8535
Hardware dan Software yang dibutuhkan
Bahasa C
Dasar I/O
LCD
ADC
Stepper and DC Motor
Pendahuluan
Fitur
Konfigurasi Pin
Peta Memory
Register
Bahasa Assembly
Pendahuluan
Atmel, salah satu vendor yang bergerak dibidang
mikroelektronika telah mengembangkan AVR (Alf and Vegards
Risc processor) sekitar tahun 1997.
Berbeda dengan mikrokontroler MCS51, AVR menggunakan
arsitektur RISC (Reduce Instruction Set Computer) yang
mempunyai lebar bus data 8 bit.
Perbedaan ini bisa dilihat dari frekuensi kerjanya, MCS51 memiliki
frekuensi kerja seperduabelas kali frekuensi osilator sedangkan
frekuensi kerja AVR sama dengan frekuensi osilator. Jadi dengan
frekuensi osilator yang sama kecepatan AVR dua belas kali lebih
cepat dibanding dengan MCS51.
Secara umum AVR dibagi menjadi 4 kelas, yaitu:
ATtiny, AT90Sxx, ATMega dan AT86RFxx.
Perbadaan antar tipe AVR adalah fitur-fitur yang ditawarkan,
sedangkan dari segi arsitektur dan set instruksi yang
digunakan hampir sama.
Fitur
8bit AVR berbasis RISC dengan performa tinggi dan konsumsi daya rendah.
Kecepatan maksimal 16MHz.
Memori
8KB Flash
512 byte SRAM
512 byte EEPROM
Timer/Counter
2 buah 8 bit timer/counter
1 buah 16 bit timer/counter
4 kanal PWM
8 kanal 10/8 bit ADC
Programable Serial USART
Komparator Analog
6 pilihan sleep mode untuk penghematan daya listrik
32 jalur I/O yang bisa diprogram
Konfigurasi Pin
hingga $FFF.
Untuk keamanan software memori flash dibagi
menjadi dua bagian, yaitu
Bagian Boot Program dan
Bagian Application Program. Boot Flash Section
$FFF
AVR tersebut memiliki 12bit Program Counter
(PC) sehingga mampu mengalamati isi flash Memori Program AVR ATMega8535
memori.
Register File Data Address Space
SRAM R0
R1
$0000
$0001
... ...
$025E
$025F
EEPROM
ATMega8535 juga memiliki memori data beruka EEPROM 8bit
sebesar 512byte ($000-$1FF).
Hardware
ATMega8535 Minimum System
Downloader (kable)
Komputer (min P2 dengan port parallel)
Minimum Sistem ATMega 8535
U1 JPA
PB0 1 40 PA0 PA0 PA1
PB0 (XCT/T0) (ADC0) PA0 1 2
PB1 2 39 PA1 PA2 PA3
PB1 (T1) (ADC1) PA1 3 4
PB2 3 38 PA2 PA4 PA5
PB2 (INT2/AIN0)
(ADC2) PA2 5 6
PB3 4 37 PA3 PA6 PA7
PB3 (OC0/AIN1)
(ADC3) PA3 7 8
PB4 5 36 PA4
PB4 (SS) (ADC4) PA4 VCC 9 10
PB5 6 35 PA5
PB5 (MOSI) (ADC5) PA5
PB6 7 34 PA6 HEADER 5X2
PB6 (MISO) (ADC6) PA6
PB7 8 33 PA7
PB7 (SCK) (ADC7) PA7
JPB
9 PB0 PB1
RST RESET 1 2
32 PB2 PB3
AREF 3 4
12 PB4 PB5
X2 X2 5 6
30 PB6 PB7
AVCC 7 8
13
X1 X1 VCC 9 10
PD0 14 29 PC7 HEADER 5X2
PD0 (RXD) (TOSC2) PC7
PD1 15 28 PC6
PD1 (TXD) (TOSC1) PC6
PD2 16 27 PC5 JPC
PD2 (INT0) PC5
PD3 17 26 PC4 PC0 PC1
PD3 (INT1) PC4 1 2
PD4 18 25 PC3 PC2 PC3
PD4 (OC1B) PC3 3 4
PD5 19 24 PC2 PC4 PC5
PD5 (OC1A) PC2 5 6
PD6 20 23 PC1 PC6 PC7
PD6 (ICP1) (SDA) PC1 7 8
PD7 21 22 PC0
PD7 (OC2) (SCL) PC0 VCC 9 10
ATMEGA8535 HEADER 5X2
JPD
PD0 PD1
VCC 1 2
PD2 PD3
3 4
PD4 PD5
5 6
PD6 PD7
R1 7 8
4K7 VCC 9 10
SW-PB
HEADER 5X2
SW1A
RST
2
C2 22p
X2
C1 XT1
10nF 11.0592MHz
C3 22p
X1
1
U2
Dari Trafo CT LM7805CT VCC
D1
JTR 1 3
Vin +5V
1 IN4001
2
GND
3 D2
+ C4 + C5 + C6
CON3
2
IN4001 2200F/25V 100F/25V 1000F/25V
Kabel Downloader
LPT Ke Modul Mikro ATMega
13 JPDL
25
1
12
VCC 2
24 PB5 (MOSI)
PB5 3
11 PB6 (MISO)
PB6 4
23 PB7 (SCK)
PB7 5
10
LPT10 RST 6
22
9 CON6
LPT9
21
8
20 U1
7 2 18
LPT7 PB5 A0 B0 LPT7
19 3 17
RST A1 B1 LPT9
6 4 16
LPT6 PB7 A2 B2 LPT6
18 5 15
LPT10 A3 B3 PB6
5 LPT5 6 14
A4 B4
17 7 13
A5 B5
4 LPT4 8 12
A6 B6
16 VCC 9 11
A7 B7
3
15 19
E
2 R2 R1 1
DIR
14 470 10k
1 74ALS245
DB25
LED1
Software (tools)
OS min Win98
AVRStudio4 (or higher)
CodeVision AVR (CVAVR)
PonyProg2000 (optional)
AVRStudio
AVR Studio adalah suatu program bantu yang teri
ntegrasi untuk menulis sekaligus debug.
Aplikasi AVR bekerja dengan operating sistem Win
dows 9x/Me/NT/2000/XP.
AVRStudio4 diperlukan karena
Code Vision AVR-Eval memerlukan source
code dari AVR Studio untuk kompilasi.
AVR Studio 4 dapat diperoleh di
http://www.atmel.com/avr.
Installasi AVRStudio
File yang diperlukan:
Studio4b460.exe (versi 4). Gunakan yang te
rbaru jika sudah tersedia.
Klik dua kali file tersebut untuk memulai ins
talasi.
Ikuti petunjuk, ubah jika dianggap perlu.
Restart Windows.
Tampilam AVRStudio
CVAVR
Code Vision AVR C Compiler (CVAVR) merupakan
compiler bahasa C untuk AVR. Compiler ini cukup
memadai untuk belajar AVR, selain mudah dalam
penggunaan juga di dukung fitur-fitur yang sangat
membantu dalam pembuatan software untuk keperluan
pemrograman AVR.
CVAVR ini dapat berjalan dibawah sistem operasi
Windows 9x, Me, NT 4, 2000 dan XP. CVAVR ini dpt
mengimplementasikan hampir semua instruksi bahasa C
yang sesuai dengan arsitektur AVR, bahkan terdapat
beberapa keunggulan tambahan untuk memenuhi
keunggulan spesifik dari AVR. Hasil kompilasi objek
CVAVR bisa digunakan sebagai source debug dengan
AVR Studio debugger dari ATMEL.
CVAVR dapat diperoleh dari:
http://www.hpinfotech.ro.
Fitur CVAVR
Mendukung hampir semua library standart bahasa C
Terdapat library tambahan dari CVAVR yang mendukung dalam pemrograman AVR,
yaitu:
Alphanumeric LCD modules
Philips I2C bus
National Semiconductor LM75 Temperature Sensor
Philips PCF8563, PCF8583, Maxim/Dallas Semiconductor DS1302 and
DS1307 Real Time Clocks
Maxim/Dallas Semiconductor 1 Wire protocol
Maxim/Dallas Semiconductor DS1820, DS18S20, DS18B20 Temperature
Sensors
Maxim/Dallas Semiconductor DS1621 Thermometer/Thermostat
Maxim/Dallas Semiconductor DS2430 and DS2433 EEPROMs
SPI
Power management
Delays
Gray code conversion
Memiliki Program Generator yang memungkinkan kita
membuat program dengan cepat.
Installasi CVAVR
File yang diperlukan:
cvavre.exe (versi 1.25.1 Evaluasi).
Gunakan yang terbaru jika sudah tersedia.
Klik dua kali file tersebut untuk memulai
instalasi.
Ikuti petunjuk, ubah jika perlu.
Selesai.
Installasi PonyProg2000
Optional
(lihat lampiran)
Bahasa C
STRUKTUR PEMROGRAMAN C
Contoh
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
TIPE DATA
Type Size (Bits) Range
bit 1 0,1
char 8 -128 to 127
unsigned char 8 0 to 255
signed char 8 -128 to 127
int 16 -32768 to 32767
short int 16 -32768 to 32767
unsigned int 16 0 to 65535
signed int 16 -32768 to 32767
long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
float 32 1.175e-38 to 3.402e38
double 32 1.175e-38 to 3.402e38
/* Ini komentar */
/* Ini Komentar
Multi baris */
Sedangkan komentar satu baris bisa dengan tanda // .
Contoh:
// Ini juga komentar
RESERVED KEYWORDS*
if then
Bentuk umum dari percabangan ini adalah:
if (kondisi) {
// pernyataan
};
Artinya adalah pernyataan akan dijalankan jika kondisi terpenuhi.
Contoh:
if (a<0x50) {
PORTC=0x55;
};
Dalam contoh ini PORTC akan dikirim data 0x55 (ingat mode hex)
jika nilai a lebih kecil dari 0x50.
if then else
Bentuk umum dari percabangan ini adalah:
If (kondisi) {
// pernyataan a
}
else {
// pernyataan b
};
Artinya adalah pernyataan a akan dijalankan jika kondisi terpenuhi dan
pernyataan b akan dijalankan jika kondisi tidak terpenuhi.
Contoh:
if (a<0x50) {
PORTC=0x55;
}
else {
PORTC=0xAA;
};
PORTC akan dikirim data 0x55 jika nilai a < 0x50 dan
PORTC akan dikirim data 0xAA jika a0x50.
switch case
Pernyataan switch case digunakan jika terjadi banyak percabangan.
Struktur penulisan pernyataan ini adalah sebagai berikut:
Contoh:
... ...
switch (ekspresi) { switch (a) {
case konstanta1: case 1:
pernyataan1 PORTC=0x01;
break; break;
case konstanta2: case 2:
pernyataan2 PORTC=0x02;
break; break;
... case 3:
case konstantaN: PORTC=0x04;
pernyataanN break;
break; }
} ...
...
PORTC akan dikirim data 0x01 jika nilai a=1, PORTC akan dikirim data 0x02 jika nilai
a=2 dan PORTC akan dikirim data 0x04 jika nilai a=3;
Switch case default
Pernyataan switch case default hampir sama dengan switch case, yang membedakan
adalah dengan adanya default. Jika tidak terdapat kondisi case yang sesuai dengan ekspresi
switch maka akan menuju pernyataan yang terdapat di bagian default. Struktur penulisan
pernyataan ini adalah sebagai berikut:
Contoh:
...
switch (ekspresi) { switch (a) {
case konstanta1: case 1:
pernyataan1 PORTC=0x01;
break; break;
case konstanta2: case 2:
pernyataan2 PORTC=0x02;
break; break;
... case 3:
case konstantaN: PORTC=0x04;
pernyataanN break;
break; Default:
default: PORTC=0xFF;
pernyataan-pernyataan; }
} ...
...
PORTC akan dikirim data 0x01 jika nilai a=1,
PORTC akan dikirim data 0x02 jika nilai a=2 dan
PORTC akan dikirim data 0x04 jika nilai a=3 dan jika kondisi
case tidak sesuai dengan ekspresi maka pernyataan di default
PERULANGAN
For
Pernyataan for akan melakukan perulangan berapa kali sesuai yang diinginkan. Struktur penulisan
perulangan for adalah sebagai berikut:
...
for (mulai; kondisi; penambahan atau pengurangan) {
pernyataan-pernyataan;
};
...
Mulai adalah pemberian nilai awal, kemudian kondisi adalah pengkondisi dalam for yaitu jika kondisi
bernilai true maka pernyataan dalam for akan dijalankan, penambahan atau pengurangan adalah
penambahan atau pengurangan terhadap nilai awal.
Contoh:
...
a=1;
for (i=1; i<50; i++) {
a=a*2;
PORTC=a;;
};
...
Contoh diatas akan melakukan perulangan 50 kali, yaitu dari 1 hingga 50 dengan penambahan 1 (i++,
lihat operator aritmetik). Hasilnya PORTC akan dikirim data 1, kemudian data 2, 4, 8.
While - Do
Bentuk dari perulangan ini adalah sebagai berikut:
while (kondisi) {
Pernyataan Pernyataan;
}
Jika kondisi memenuhi (bernilai true) maka pernyataan-pernyataan
dibawahnya akan dijalankan hingga selesai, kemudian akan menguji kembali
kondisi di atas.
Contoh:
...
i=1;
a=1; Bandingkan dengan
while (i<50) {
a=a*2;
perulangan for dan while-do.
PORTC=a;;
i++ ;
};
...
Do While
Pentuk perulangan ini kebalikan dari while do, yaitu pernyataan dilakukan
terlebih dahulu kemudian diuji kondisinya.
...
do {
pernyataan-pernyataan;
}
while (kondisi);
...
Contoh:
...
i=1;
a=1;
do { Bandingkan dengan
a=a*2;
PORTC=a;; perulangan for dan while-do
i++ ; dan do-while.
}
while (i<50);
...
KONVERSI POLA (%)
Karakter %... dipakai sebagai operator konversi pola.
Konversi pola sangat berguna nantinya pada saat kita
menampilkan hasil ke LCD.
%d menampilkan bilangan bulat positif.
Contoh:
sprintf(buf,"Angka %d",14);
%o menampilkan bilangan oktal bulat.
%x menampilkan bilangan hexadesimal bulat.
%u menampilkan bilangan desimal tanpa tanda.
%f menampilkan bilangan pecahan.
%i menampilkan bilangan integer.
%c menampilkan karakter yang ditunjukkan bilangan ASCI
I.
PROSEDUR DAN FUNGSI
Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan
tertentu tanpa mengembalikan suatu nilai.
...
viod nama_prosedur (parameter1, parametar2, parameterN) {
Pernyataan-pernyataan;
}
...
Contoh:
...
void delay(unsigned char i) {
while (i--) {
/* penulisan untuk bahasa assembly akan dibahas tersendiri */
#asm
nop
nop
#endasm
};
}
...
Fungsi adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan
tertentu dengan hasil akhir pengembalian nilai dari keperluan tersebut.
...
Type data nama_fungsi (parameter1, parametar2, parameterN) {
Pernyataan-pernyataan;
return variable_hasil;
}
...
Contoh:
...
int luas(int pj, int lb) {
luas = pj*lb;
return luas;
}
...
PENTING !!!
Rangkaian downloader yang kita gunakan kompatibel terhadap STK20
0+/300.
Setting ini cukup dilakukan sekali saja.
Membuat Project Baru
1. Pastikan tidak terdapat file/project yang terbuka, jika
ada yang terbuka tutup dahulu
(Klik Menu File, Pilih Close Project).
2. Klik Menu File, kemudian pilih New, maka selanjutnya
akan tampak dialog disamping:
3. Pilih Project, kemudian Klik tombol OK.
4. Tampak Dialog untuk konfirmasi menggunakan Progr
am Generator atau manual. Klik tombol Yes maka tamp
ak wizard dialog spt disamping:
5. Ubah bagian tab Chip, pilih ATmega8535L (karena kita
menggunakan ATmega8535L). Beberapa nantinya akan
kita ubah sesuai dengan kebutuhan terutama clock.
6. Klik File, pilih Generate, Save and Exit. Simpan masin
g-masing dengan nama input.C (untuk file source C), in
put.prj (untuk file Project) dan input.cwp (untuk file Co
de Wizard Project).
7. Maka pada bagian navigasi akan tampak seperti pada
gambar berikut.
PENTING !!!
Harap 7 langkah diatas dipahami betul.
Penggunaan 7 langkah diatas memudahkan dalam setting register AVR
Langkah ke 5 merupakan salah satu keunggulan memprogram ATmega
dengan bahasa C terutama dengan CodeVision AVR karena device ATmega yang
dipakai tidak banyak berpengaruh pada program yang kita buat,
hanya perlu perubahan/penyesuaian sedikit saja kita bisa menggunakan ATmega
seri yang lain.
Abaikan langkah 8-12 jika anda berkeinginan menggunakan PonyProg2000 untuk
download ke AVR.
Compile (Kompilasi) dan D
ownload ke AVR
Klik menu Project, pilih Make atau shortcut [shift+F9] atau klik ikon
. Selanjutnya akan nampak dialog hasil kompilasi, baca jika tidak t
erjadi kesalahan dapat dilanjukkan untuk proses download (Langka
h 6).
Jika terjadi kesalahan baca keterangan di jendela Messages atau d
i Navigator.
Koreksi kesalahan dan kompilasi lagi.
Jika tidak terjadi kesalahan maka akan tampak kotak dialog beriku
t:
Jika tidak ada kesalahan bisa langsung program ke AVR (untuk wa
rning biasanya menampilkan beberapa variabel yang telah di dekla
rasikan namun tidak digunakan).
Klik tombol Program the chip untuk download ke AVR, maka akan t
ampak progress bar berikut:
Jika terdapat kesalahan cek ulang hardware anda, terutama kabel
downloadernya.
AVR telah diprogram.
Dasar I/O
Konfigurasi Pengaturan Register untuk Input Output
DDR bit = 1 DDR bit = 0
PORT bit = 1 Output ; High Input ; R pull-up
Misal:
PORTA=0xCC;
DDRA=0x0F;
Printah Dasar
Dasar I/O
Output
PORTX = data;
Yaitu untuk mengirim data byte ke PortX (X= A, B, C, D).
Perintah ini sama dengan out dalam bahasa assembly ATmega8535.
Input
data_in = PINX;
Yaitu mengambil data byte dari PINX (X= A, B, C, D) yang kemudian
disimpan ke variable data_in.
Perintah ini sama dengan in dalam bahasa assembly ATmega8535.
Rangkaian Dasar I/O
Output
Buat Program dengan langkah seperti pada bagian
membuat projek baru hingga nampak dialog berikut:
Untuk bagian PORT, pilih Port C.
1. Port C disetting sebagai Output dan Value Low (lihat
gambar).
2. Kemudian klik File >> Generate, Save and Exit
3. Ikuti petunjuk penyimpanan file (bila diperlukan ganti
folder penyimpanan).
4. Simpan dengan nama output1.c, output1.prj dan
output.cwp.
Coba perhatikan baris berikut:
// Port C initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTC=0x00;
DDRC=0xFF;
void main(void)
{
// Declare your local variables here
unsigned char data; // lokal variable
while (1)
{
// Place your code here
data = PINC; // tambahkan instruksi ini
PORTB = data; //
};
}
PORTX.bitn = data;
Contoh:
PORTB.3=1;
Artinya adalah bit 3 PORTB di beri nilai 1.
KONTROL PORT I/O PER BIT
Input
data_in = PINX.bitn;
Contoh:
da ta_n= PORTB.3;
while (1)
{
// Place your code here
//data = PINC; // mula-mula file inout1.c
//PORTB = data; //
//diganti instruksi berikut :
data = PINC.5; // ambil data bit 5 PORTC
PORTB.5 = data; //outputkan data ke PORTB bit ke 5
};
}
Compile, download dan perhatikan hasilnya (sambil tekan tombol bit 5).
Jika hasil input dari PORTC ingin langsung dikeluarkan tanpa proses
dua instruksi diatas bisa langsung diganti dengan PORTB.5 = PINC.5;
Latihan
Jika tombol 0 ditekan maka led 4 akan menyala.
Jika tombol 1 ditekan maka led 7 akan menyala.
Jika tombol 2 ditekan maka led akan menyala dengan konfigurasi
ON - OFF - ON - OFF - ON - OFF - ON OFF.
Jika tombol 3 ditekan maka led akan menyala dengan konfigurasi
OFF - ON - OFF - ON - OFF - ON OFF - ON.
Jika tombol 4 dan 5 ditekan maka led menyala semua.
Tombol lainnya, led mati.
Petunjuk:
Lihat kembali rangkaian output, ada yang aktif low ada juga yang aktif
high. Gunakan pernyataan if then (lihat kembali bahasan Bahasa
C tentang percabangan).
Tunda
Tunda atau delay akan sering kita gunakan,
contoh sederhana saat memutar motor stepper maka
pemberian bit ke motor stepper harus ditunda karena
jika tidak diberi tundaan motor tidak bisa berputar.
Ada dua cara memberikan tundaan yaitu
Tunda yang kita buat sendiri dan
Tundaan yang sudah disediakan oleh CVAVR.
Membuat Tunda Sendiri
Buka file output1.c, kemudian buat prosedur tunda berikut:
#include <mega8535.h> // blok header
// prosedur tunda
void tunda(unsigned char k) {
unsigned char j,i;
j=0;
i=5;
while (j<k) { void wait(void){
j=j+1; unsigned char i,j;
while (i--) {
#asm for(i=0;i<255;i++)
nop for(j=0;j<255;j++);
#endasm }
};
};
}
...
Kemudian ubah instruksi berikut:
void main(void)
{
while (1)
{
// Place your code here
PORTC=0x0F; // ingat rangkaian led dihubungkan
tunda(5); // ke port C
PORTC=0xF0;
tunda(5);
};
}
void main(void)
{
while (1)
{
// Place your code here
#asm("cli")
PORTC=0x5a; // ingat rangkaian led dihubungkan
delay_ms(100); // memanggil delay dari library delay
PORTC=0xa5;
delay_ms(100);
#asm("sei")
};
}
Kompile dan download, perhatikan keadaan led.
Instruksi-Instruksi di Library Delay
delay_us(unsigned int n)
Menghasilkan tundaan selama n mikro detik, n harus konstanta.
delay_ms(unsigned int n)
Menghasilkan tundaan selama mili ditik.
Jika hal ini tidak dilakukan maka delay akan bisa menjadi lebih
lama dari yang diharapkan.
Untuk mempelajari library delay bisa dilihat di
file delay.h, yang berada di subdirektori ..\INC.
LCD
Penampil ke LCD sangat membantu dlm memprogram, hal in
i dikarenakan kita tidak menggunakan program
debug sehingga perlu menampilkan hasil perhitungan,
isi variabel atau keperluan debug yang lain ke LCD.
LCD juga bisa untuk menampilkan hasil pengambilan
data dari sensor bahkan bisa untuk interaksi antara
mikrokontroller dengan manusia.
LCD yang digunakan adalah tipe M1632 yang secara fisik
adalah sebagai berikut:
Pin LCD
No. Pin Function
1 Vss 0V (GND)
2 Vcc 5V
3 VLC LCD Contras Voltage
4 RS
Register Select; H: Data Input; L:Instruction Input
5 RD H: Read; L: Write
6 EN Enable Signal
7 D0
8 D1
9 D2
10 D3
Data Bus
11 D4
12 D5
13 D6
14 D7
15 V+ BL Positif Backlight Voltage (4-4,2 V; 50-200mA)
16 V- BL Negatif Backlight Voltage (0V; GND)
PortX[0..7]
VCC
5k
VR
JLCD
Pin LCD
1
2
3
PORTX.0
4
PORTX.1
5
PORTX.2
6
7
8
9
10
PORTX.4
11 PORTX.5
12
PORTX.6
13
PORTX.7
14
15
16
Rangkaian Interface LCD
Project LCD
Kembali buat projek baru. Jangan lupa setting chip dan clock.
Kemudian setting bagian LCD seperti gambar berikut:
Kemudian
Generate file, save and exit.
Simpan dengan nama file
LCD1.c, LCD1.prj dan LCD1.cwp.
Kemudian coba anda lakukan perubahan berikut:
while (1)
Contoh:
lcd_init(16);
unsigned char lcd_read_byte(unsigned char addr);
Instruksi ini membaca karakter dari RAM LCD.
Contoh:
ch=lcd_read_byte(0x10);
void lcd_clear(void)
Instruksi ini akan menghapus tampilan LCD dan menempatkan posisi
kursor di kolom 0 baris 0.
Contoh:
lcd_clear();
void lcd_putchar(char c)
Instruksi ini berfungsi menampilkan karakter c pada posisi kursor saat itu.
Contoh:
lcd_gotoxy(5,0); // menempatkan kursor pada kolom 5 baris 0
lccd_putchar(0x41); // menampilkan karakter A
// lihat table karakter lcd
void lcd_putsf(char flash *str)
Instruksi ini berfungsi menampilkan string pada posisi kursor saat itu.
Contoh:
lcd_gotoxy(0,1); //menempatkan pada posisi kolom 0 baris 1
lcd_putsf("Saya Ary"); //menampilkan string Saya Ary
#include <mega8535.h>
#include <stdio.h> //tambahkan library stdio.h
//kita memerlukan suatu instruksi
//untuk menyimpan string ke SRAM
sprintf(buf,Angka %d \xf4",50);
R2 VR
VOUT Vcc 50k
R1 R2
Ada beberapa register yang harus diatur jika akan menggunakan ADC, nam
un sekali lagi kita sangat terbantu dengan wizzard dari Code Vision AVR
Project ADC
Buat project baru, jangan lupa setting chip dan clock. Kem
udian setting bagian ADC seperti gambar berikut:
Anda bisa menggunakan 10 bit jika diperlukan dan menggunakan VRE
F dari luar. Untuk contoh ini digunakan konversi 8 bit denganVREF=Vc
c (lihat bagian Volt Ref).
Inisialisasi :
PORTA >> ADC, 8bit,
FlowChart Vref=Vcc
PORTB >> Output, Logika 0
PORTC >> LCD
PORTB=dt_adc
Tampilkan ke LCD
Listing
#include <stdio.h> //tambahkan library stdio.h
void main(void)
// Declare your local variables here
unsigned char dtadc; // deklarasi variabel data ADC
N
II S N IV II IV
S
(b
(a)
III III )
Stator I Stator I
II N S IV II IV
N
(c) (d)
III III
Rangkaian Driver +12V
D1
IN4001
Q1
R1 9013
1K2
Q2
TIP31
+12V
R2
100 M1
D3 MOTOR STEPPER
IN4001
PORTX.0
Q3
R3 9013
1K2 +12V
Q4
PORTX.1
TIP31
PORTX[0..3]
R4
+12V 100
D5
IN4001
PORTX.2
Q5
R5 9013
PORTX.3
1K2
Q6
TIP31
+12V
R6
100
D7
IN4001
Q7
R7 9013
1K2
Q8
TIP31
R8
100
Project Stepper
Buat projek baru, hubungkan rangkaian driver motor stepper ke PORTC dan
dasar IO (input) ke PORTA. Setting PORT seperti gambar berikut:
START
FlowChart
Inisialisasi :
PORTA >> Input, R-PullUp
PORTC0-3 >> Output, Logika 0
PORTC4-7 >> Input, Float
dir=0
Baca PINA
PINA.0=0 t PINA.1=0 t
? ?
y y
dir=1 dir=2
dir=1 t dir=2 t
? ?
y y
Stepp_l Stepp_r
Software
#include <mega8535.h>
void tunda(unsigned char i); // deklarasi prosedur tunda
void step_l(void); // deklarasi prosedur putar kiri
void step_r(void); // deklarasi prosedur putar kanan
void main(void)
{
// Declare your local variables here
char dir=0;
// prosedur putar kiri // Declare your global variables here
void step_l(void) unsigned char w_tunda;
{ char dt=1;
dt=dt << 1;
if (dt>0x08) {dt=0x01;}
}
// prosedur putar kanan
void step_r(void)
{
dt=dt >> 1;
if (dt==0) {dt=0x08;}
}
while (1)
{
// Place your code here
PORTC=dt;
if (PINA.0==0) {dir=1;};
if (PINA.1==0) {dir=2;};
if (PINA.2==0) {w_tunda=w_tunda+10;
if (w_tunda>100) {w_tunda=100;}
};
if (PINA.3==0) {w_tunda=w_tunda-10;
if (w_tunda<10) {w_tunda=10;}
};
if (PINA.7==0) {dir=0;};
switch (dir) {
case 1: Ubah program menjadi seperti
step_l(); disamping.
tunda(w_tunda); Compile, download kemudian
break; perhatikan hasilnya dengan
case 2:
step_r(); menekan tombol
tunda(w_tunda);
break;
};
};
MOTOR DC
START FlowChart
Inisialisasi :
PORTA >> Input, R-PullUp
PORTC0-3 >> Output, Logika 0
PORTC4-7 >> Input, Float
Baca PINA
PINA.0=0 t PINA.1=0 t
? ?
y y
PORTC=0x01 PORTC=0x00