1
TUTORIAL PEMROGRAMAN MENGGUNAKAN CODE VISION AVR
Chip yang digunakan pada tutorial ini adalah AT mega 16/32/8535, ketiga chip tersebut memiliki
konfigurasi yang sama sehingga kita bisa
spesifikasi dari chip ini adalah sebagai berikut:
Mempunyai 32 buah pin I/O
Mempunyai 8 buah pin ADC (Port A)
Mempunyai 2 timer/counter 8 bit dan 1 timer/counter 16 bit
didalamnya
Mempunyai 4 channel PWM
Dan masih banyak lagi spesifikasi yang lain
Adapun konfigurasi Atmega 16/32/8535 adalah sebagai berikut.
1. Modul LED
Pemrograman LED secara garis besar ada 2 macam, Aktif High dan Aktif Low, perbedaan dari
keduanya ada pada kofigurasi rangkaian led itu sendiri, untuk lebih jelasnya perhatikan
gambar dibawah ini.
Pada rangkaian Aktif High LED akan menyala jika inputannya High, sebaliknya Aktif LOW LED
akan menyalaketika inputannya Low (Tips: untuk rangkaian Aktif Low kita
memPul-Up AVR, karena
perintah). Setelah kita tahu apa itu Aktif High dan Aktif Low, saatnya kita akan belajar cara
untuk mengcodingnya, proyek yang akan kita buat adalah Running LE
sebagai berikut:
Menggunakan Atmega 16
Menggunakan Port A
TUTORIAL PEMROGRAMAN MENGGUNAKAN CODE VISION AVR
Chip yang digunakan pada tutorial ini adalah AT mega 16/32/8535, ketiga chip tersebut memiliki
konfigurasi yang sama sehingga kita bisa menggunakan salah satu dari ketiga chip tersebut. Adapun
spesifikasi dari chip ini adalah sebagai berikut:
Mempunyai 32 buah pin I/O
Mempunyai 8 buah pin ADC (Port A)
Mempunyai 2 timer/counter 8 bit dan 1 timer/counter 16 bit, dengan beberapa fitur menu
Mempunyai 4 channel PWM
Dan masih banyak lagi spesifikasi yang lain
Adapun konfigurasi Atmega 16/32/8535 adalah sebagai berikut.
Pemrograman LED secara garis besar ada 2 macam, Aktif High dan Aktif Low, perbedaan dari
kofigurasi rangkaian led itu sendiri, untuk lebih jelasnya perhatikan
Pada rangkaian Aktif High LED akan menyala jika inputannya High, sebaliknya Aktif LOW LED
akan menyalaketika inputannya Low (Tips: untuk rangkaian Aktif Low kita
AVR, karena defaultnya AVR akan terus mengirim logika Low ketika tidak ada
perintah). Setelah kita tahu apa itu Aktif High dan Aktif Low, saatnya kita akan belajar cara
untuk mengcodingnya, proyek yang akan kita buat adalah Running LED dengan ketentuan
Menggunakan Atmega 16
Menggunakan Port A
TUTORIAL PEMROGRAMAN MENGGUNAKAN CODE VISION AVR
Chip yang digunakan pada tutorial ini adalah AT mega 16/32/8535, ketiga chip tersebut memiliki
h satu dari ketiga chip tersebut. Adapun
, dengan beberapa fitur menu
Pemrograman LED secara garis besar ada 2 macam, Aktif High dan Aktif Low, perbedaan dari
kofigurasi rangkaian led itu sendiri, untuk lebih jelasnya perhatikan
Pada rangkaian Aktif High LED akan menyala jika inputannya High, sebaliknya Aktif LOW LED
akan menyalaketika inputannya Low (Tips: untuk rangkaian Aktif Low kita perlu untuk
nya AVR akan terus mengirim logika Low ketika tidak ada
perintah). Setelah kita tahu apa itu Aktif High dan Aktif Low, saatnya kita akan belajar cara
D dengan ketentuan
2
Menggunakan 8
Clok : 11,059200
Setting AVR :
Coding AVR :
#include <mega16.h>#include <delay.h>void main(void) {
PORTA=0x00; DDRA=0xFF; while (1) {
PORTA=0b00000001;delay_ms(100);PORTA=0b00000010;delay_ms(100);PORTA=0b00000100;delay_ms(100);PORTA=0b00001000;delay_ms(100);PORTA=0b00010000;delay_ms(100);PORTA=0b00100000;delay_ms(100);PORTA=0b01000000;delay_ms(100);PORTA=0b10000000;delay_ms(100);
}; }
Menggunakan 8 LED Aktif High
11,059200 MHz
#include <mega16.h> #include <delay.h> //header untuk delay_ms
//pull up non aktif //set output pada semua pin A
//codingndibawah while terus mengulang
PORTA=0b00000001; //led paling kiri hidup delay_ms(100); //jeda waktu 100 ms PORTA=0b00000010; delay_ms(100); PORTA=0b00000100; delay_ms(100); PORTA=0b00001000; delay_ms(100); PORTA=0b00010000; delay_ms(100); PORTA=0b00100000; delay_ms(100); PORTA=0b01000000; delay_ms(100); PORTA=0b10000000; //led paling kanan hidupdelay_ms(100);
//codingndibawah while terus mengulang
//led paling kanan hidup
3
2. Modul LCD
LCD yang akan kita gunakan adalah LCD 16x2
berikut:
Penulisan karakter pada LCD menggunakan metode sumbu (X,Y). Adapun karakteristik LCD
adalah sebgai berikut:
Terdapat 16 x 2 karakter huruf yang bisa ditampilkan.
Setiap huruf terdiri dari 5x7 dot
Terdapat 192 macam karakter.
Terdapat 80 x 8 bit display RAM (maksimal 80 karakter).
Memiliki kemampuan penulisan dengan 8 bit maupun dengan 4 bit.
Dibangun dengan osilator lokal.
Satu sumber tegangan 5 volt.
Otomatis reset saat tegangan dihidupka
Bekerja pada suhu 00C sampai 550C.
Adapun pemrograman dasar LCD adalah sebagai berikut:
lcd_clear(); lcd_gotoxy(x,y);
lcd_putsf(“Karakter”);lcd_putchar(‘C’); tips: untuk mengakses karakter yang tidak disediakan pada kkita bisa gunakan perintah lcd_putchar(nilai_karakter);dari nilai 0-255.
LCD yang akan kita gunakan adalah LCD 16x2, adapun konfigurasi pinnya adalah sebagai
Penulisan karakter pada LCD menggunakan metode sumbu (X,Y). Adapun karakteristik LCD
Terdapat 16 x 2 karakter huruf yang bisa ditampilkan.
Setiap huruf terdiri dari 5x7 dot-matrix cursor.
Terdapat 192 macam karakter.
Terdapat 80 x 8 bit display RAM (maksimal 80 karakter).
Memiliki kemampuan penulisan dengan 8 bit maupun dengan 4 bit.
Dibangun dengan osilator lokal.
Satu sumber tegangan 5 volt.
Otomatis reset saat tegangan dihidupkan.
Bekerja pada suhu 00C sampai 550C.
Adapun pemrograman dasar LCD adalah sebagai berikut:
//berfungsi untuk menghapus layar lcd //berfungsi untuk memberi alamat pada karakter,
apabila tidak menggunakan lcd_gotoxy(x,y); makaalamat karakter otomatis berada pada koordinat (0,0) / setelah karakter sebelumnya.
lcd_putsf(“Karakter”); //berfungsi untuk menulis string //berfungsi untuk menulis karakter
tips: untuk mengakses karakter yang tidak disediakan pada kkita bisa gunakan perintah lcd_putchar(nilai_karakter);
konfigurasi pinnya adalah sebagai
Penulisan karakter pada LCD menggunakan metode sumbu (X,Y). Adapun karakteristik LCD
Memiliki kemampuan penulisan dengan 8 bit maupun dengan 4 bit.
//berfungsi untuk menghapus layar lcd //berfungsi untuk memberi alamat pada karakter, apabila tidak menggunakan lcd_gotoxy(x,y); maka
berada pada koordinat (0,0) / setelah karakter sebelumnya.
//berfungsi untuk menulis string //berfungsi untuk menulis karakter
tips: untuk mengakses karakter yang tidak disediakan pada keyboard kita bisa gunakan perintah lcd_putchar(nilai_karakter); bisa diisi
4
Project yang akan kita buat adalah menampilkan karakter “Laoading”
spesifikasi sebagai berikut:
Menggunakan Atmega 16
Menggunakan PORT C
Clok : 11,059200
Setting AVR :
Coding AVR :
#include <mega16.h>#include <delay.h>int i; //deklarasi variabel i dengan tipe data integer
//setting lcd dari AVR#asm .equ __lcd_port=0x15 ;PORTC#endasm #include <lcd.h> void main(void) { PORTC=0x00; DDRC=0xFF; //semua port c menjadi outputlcd_init(16); //setting lcd dari AVR while (1) { lcd_clear(); for(i=0;i<16;i++) {
Project yang akan kita buat adalah menampilkan karakter “Laoading” pada LCD, dengan
spesifikasi sebagai berikut:
Menggunakan Atmega 16
Menggunakan PORT C
11,059200 MHz
#include <mega16.h> #include <delay.h>
//deklarasi variabel i dengan tipe data integer//setting lcd dari AVR
.equ __lcd_port=0x15 ;PORTC
//semua port c menjadi output //setting lcd dari AVR
lcd_clear(); //menghapus karakter for(i=0;i<16;i++) //looping sebanyak 16 kali
pada LCD, dengan
//deklarasi variabel i dengan tipe data integer
//looping sebanyak 16 kali
5
lcd_gotoxy(4,0); lcd_putsf("Loading."); lcd_gotoxy(i,1); lcd_putchar(255); delay_ms(800); } lcd_clear(); lcd_gotoxy(5,0); lcd_putsf("Sukses"); lcd_gotoxy(0,1); lcd_putsf("Karakter LCD16x2"); delay_ms(2000); }; }
3. Modul Saklar
Saklar sendiri terdiri dari berbagai macam tipe, diantaranya switch (saklar yang terus aktif
ketika dan setelah ditekan), push button (saklar yang aktif ketika ditekan) dan lain
sebagainnya. Konfigurasi saklar disini dibagi menjadi dua, yaitu Aklif High dan Aktif Low,
sebagaimana LED perbedaan saklar hanya pada kondisinya, LED sebagai Output sedangkan
saklar sebagai Input. Pada kesempatan kali ini kita akan membuat program untuk
buah push button. Adapun spesifikasi project adalah sebagai berikut :
Menggunakan Atmega 16
LCD PORTC
Push Button menggunakan
Clok : 11,059200
Setting AVR :
lcd_gotoxy(4,0); //alamat karakter “loading”lcd_putsf("Loading."); lcd_gotoxy(i,1); //alamat karakter block lcd_putchar(255); //kode karakter block delay_ms(800); //jeda looping for
lcd_clear(); lcd_gotoxy(5,0);
_putsf("Sukses"); lcd_gotoxy(0,1); lcd_putsf("Karakter LCD16x2"); delay_ms(2000); //jeda tampil karakter
Saklar sendiri terdiri dari berbagai macam tipe, diantaranya switch (saklar yang terus aktif
an setelah ditekan), push button (saklar yang aktif ketika ditekan) dan lain
sebagainnya. Konfigurasi saklar disini dibagi menjadi dua, yaitu Aklif High dan Aktif Low,
sebagaimana LED perbedaan saklar hanya pada kondisinya, LED sebagai Output sedangkan
lar sebagai Input. Pada kesempatan kali ini kita akan membuat program untuk
. Adapun spesifikasi project adalah sebagai berikut :
Menggunakan Atmega 16
Push Button menggunakan PINB 0-PINB 3 Aktif Low
11,059200 MHz
“loading”
Saklar sendiri terdiri dari berbagai macam tipe, diantaranya switch (saklar yang terus aktif
an setelah ditekan), push button (saklar yang aktif ketika ditekan) dan lain
sebagainnya. Konfigurasi saklar disini dibagi menjadi dua, yaitu Aklif High dan Aktif Low,
sebagaimana LED perbedaan saklar hanya pada kondisinya, LED sebagai Output sedangkan
lar sebagai Input. Pada kesempatan kali ini kita akan membuat program untuk kalibrasi 4
6
Coding AVR :
#include <mega16.h>#include <delay.h>#include <stdio.h> int i; char data[100]; // Alphanumeric LCD Module functions#asm .equ __lcd_port=0x15 ;PORTC#endasm #include <lcd.h> void cek_tombol() { lcd_gotoxy(0,0); lcd_putsf("KALIBRASI TOMBOL\nMULAI..........!"); delay_ms(1500); satu: lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.0"); delay_ms(200); if (PINB.0==0) {lcd_clealcd_putsf("PINB.0\ goto satu; dua: lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.1"); delay_ms(200); if (PINB.1==0lcd_putsf("PINB.1\ goto dua; tiga: lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.2"); delay_ms(200); if (PINB.2==0) {lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.2\ goto tiga; empat: lcd_clear(); lcd_gotoxy(0,0); lcd_p if (PINB.3==0) {lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.0\ goto empat; selesai: lcd_gotoxy(0,0); lcd_putsf("KALIBRASI TOMBOL\nSELESAI.....} void main(void) { PORTB=0x0F; DDRB=0x00; PORTC=0x00; DDRC=0xFF; lcd_init(16);
#include <mega16.h> #include <delay.h> #include <stdio.h>
// Alphanumeric LCD Module functions
.equ __lcd_port=0x15 ;PORTC
lcd_gotoxy(0,0); lcd_putsf("KALIBRASI nMULAI..........!"); delay_ms(1500);
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.0"); delay_ms(200);if (PINB.0==0) {lcd_clear(); lcd_gotoxy(0,0);
\n[BERHASIL]"); delay_ms(500); goto dua;}goto satu;
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.1"); delay_ms(200);if (PINB.1==0) {lcd_clear(); lcd_gotoxy(0,0);
\n[BERHASIL]"); delay_ms(500); goto tiga;}
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.2"); delay_ms(200);f (PINB.2==0) {lcd_clear(); lcd_gotoxy(0,0);
\n[BERHASIL]"); delay_ms(500); goto empat;}goto tiga;
empat: lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.3"); delay_ms(200);if (PINB.3==0) {lcd_clear(); lcd_gotoxy(0,0);
\n[BERHASIL]"); delay_ms(500); goto selesai;}goto empat;
lcd_gotoxy(0,0); lcd_putsf("KALIBRASI nSELESAI........!"); delay_ms(1500);
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.0"); delay_ms(200);
r(); lcd_gotoxy(0,0); n[BERHASIL]"); delay_ms(500); goto dua;}
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.1"); delay_ms(200);
) {lcd_clear(); lcd_gotoxy(0,0); n[BERHASIL]"); delay_ms(500); goto tiga;}
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("PINB.2"); delay_ms(200); f (PINB.2==0) {lcd_clear(); lcd_gotoxy(0,0);
n[BERHASIL]"); delay_ms(500); goto empat;}
lcd_clear(); utsf("PINB.3"); delay_ms(200);
if (PINB.3==0) {lcd_clear(); lcd_gotoxy(0,0); n[BERHASIL]"); delay_ms(500); goto selesai;}
7
while (1) { cek_tombol(); };}
4. Modul Sensor Photodiode
Sensor photodione merupakan salah satu dari keluarga Diode
yaitu dapat mengatur tegangan yang yng dikeluarkan berdasarkan seberapa banyak
intensitas cahaya yang mengenainya, sehingga banyak digunakan oleh para pembuat robot
Line Follower sebagai acuan untuk membedakan antara garis dan bag
dapat bekerja sendiri melainkan butuh sebuah triger cahaya dari LED dan pembatas arus
menggunakan resistor. Data yang dikelurkan dari photodiode merupakan data analog,
sehingga perlu diubah menjadi dat digital untuk dapat diproses o
Ada 2 cara untuk mengubah data analog menjadi data digital, yaitu dengan menambahkan
rangkaian Op Amp pada rangkaian atau dengan menggunakan menu ADC pada AVR itu
sendiri, terdapat 8 buah
10 bit, sehingga lebih memudahkan para programmer untuk mensetting menu ADC
menggunakan program.
Project kali ini kita akan menggunakan ADC dan menampilkan data binner 1 atau 0 pada
LCD, untuk membedakan garis hitam dan putih.
Setting AVR :
cek_tombol();
Modul Sensor Photodiode
Sensor photodione merupakan salah satu dari keluarga Diode dengan kemampuan khusus
yaitu dapat mengatur tegangan yang yng dikeluarkan berdasarkan seberapa banyak
intensitas cahaya yang mengenainya, sehingga banyak digunakan oleh para pembuat robot
Line Follower sebagai acuan untuk membedakan antara garis dan baground. Sensor ini tidak
dapat bekerja sendiri melainkan butuh sebuah triger cahaya dari LED dan pembatas arus
menggunakan resistor. Data yang dikelurkan dari photodiode merupakan data analog,
sehingga perlu diubah menjadi dat digital untuk dapat diproses oleh AVR.
Ada 2 cara untuk mengubah data analog menjadi data digital, yaitu dengan menambahkan
rangkaian Op Amp pada rangkaian atau dengan menggunakan menu ADC pada AVR itu
terdapat 8 buah pin ADC (pin A) pada Atmega 16/32/8535 dengan pilihan 8 bit dan
sehingga lebih memudahkan para programmer untuk mensetting menu ADC
Project kali ini kita akan menggunakan ADC dan menampilkan data binner 1 atau 0 pada
LCD, untuk membedakan garis hitam dan putih.
dengan kemampuan khusus
yaitu dapat mengatur tegangan yang yng dikeluarkan berdasarkan seberapa banyak
intensitas cahaya yang mengenainya, sehingga banyak digunakan oleh para pembuat robot
round. Sensor ini tidak
dapat bekerja sendiri melainkan butuh sebuah triger cahaya dari LED dan pembatas arus
menggunakan resistor. Data yang dikelurkan dari photodiode merupakan data analog,
leh AVR.
Ada 2 cara untuk mengubah data analog menjadi data digital, yaitu dengan menambahkan
rangkaian Op Amp pada rangkaian atau dengan menggunakan menu ADC pada AVR itu
dengan pilihan 8 bit dan
sehingga lebih memudahkan para programmer untuk mensetting menu ADC
Project kali ini kita akan menggunakan ADC dan menampilkan data binner 1 atau 0 pada
8
Coding AVR:
#include <mega16.h>#include <delay.h>#include <stdlib.h>#include <stdio.h>int n=100; //nilai pembanding data digital sensorint adc0, adc1, adc2bit acc0, acc1, acc2,char data[100]; //media penyimpanan dari dasil convert int #asm .equ __lcd_port=0x15 ;PORTC#endasm #include <lcd.h> #define ADC_VREF_TYPE 0x00 // Read the AD conversion resultunsigned int read_adc(unsigned char { ADMUX=adc_input|ADC_VREF_TYPE;// Start the AD conversionADCSRA|=0x40; // Wait for the AD conversion to completewhile ((ADCSRA & 0x10)==0);ADCSRA|=0x10; return ADCW; } unsigned char sensor;void adc() //untuk mengambil data digital dan membandingkannya{ adc0=read_adc(0); if (adc0>n) {acc0=1;} else {acc0=0;} adc1=read_adc(1); if (adc1>n) {acc1=1;} else {acc1=0;} adc2=read_adc(2); if (adc2>n) {acc2=1;} else {a
#include <mega16.h> #include <delay.h> #include <stdlib.h> #include <stdio.h>
//nilai pembanding data digital sensor int adc0, adc1, adc2, adc3, adc4, adc5, adc6, adc7; bit acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7;
//media penyimpanan dari dasil convert int
.equ __lcd_port=0x15 ;PORTC
#define ADC_VREF_TYPE 0x00
// Read the AD conversion result unsigned int read_adc(unsigned char adc_input)
ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion
// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);
unsigned char sensor; //untuk mengambil data digital dan membandingkannya
adc0=read_adc(0); if (adc0>n) {acc0=1;} else {acc0=0;} adc1=read_adc(1); if (adc1>n) {acc1=1;} else {acc1=0;} adc2=read_adc(2); if (adc2>n) {acc2=1;} else {a
//media penyimpanan dari dasil convert int-char
//untuk mengambil data digital dan membandingkannya
adc0=read_adc(0); if (adc0>n) {acc0=1;} else {acc0=0;} adc1=read_adc(1); if (adc1>n) {acc1=1;} else {acc1=0;} adc2=read_adc(2); if (adc2>n) {acc2=1;} else {acc2=0;}
9
adc3=read_adc(3); if (adc3>n) {acc3=1;} else {acc3=0;} adc4=read_adc(4); if (adc4>n) {acc4=1;} else {acc4=0;} adc5=read_adc(5); if (adc5>n) {acc5=1;} else {acc5=0;} adc6=read_adc(6); if (a adc7=read_adc(7); if (adc7>n) {acc7=1;} else {acc7=0;} } void tamp_acc() //untuk menampilkan hasil pembandingan pada LCD{ adc(); lcd_clear(); lcd_gotoxy(0,0sprintf(data,"%d-%d,acc7,acc6,acc5,acc4,acc3,acc2,acc1,acc0);lcd_puts(data); delay_ms(1);} void main(void) { PORTA=0xFF; DDRA=0x00; PORTC=0x00; DDRC=0xFF; //setting ADC dan LCD dari AVRADMUX=ADC_VREF_TYPE;ADCSRA=0x86; lcd_init(16); while(1)
{ tmp_acc(); //menampilkan data
}};
5. Modul Motor DC
Motor sendiri mempunyai banyak macamnya, diantaranya motor DC, motor stepper, motor
servo dan lain sebagainya, kali ini kita akan membahas tentang kontrol motor DC. Disamping
itu driver (kontroller) untuk motor DC secara umum ada dua, yaitu menggunakan chip dan
non chip, driver non chip salah satunya menggunakan Mosfet, sedangkan untuk driver chip
ada banyak pilihan chip yang bisa digunakan, salah satunya menggunakan IC L293D.
Project kita kali ini adalah kontrol manuver motor DC dengan menggunakan IC L293D, disini
kita akan kontrol dengan menggunakan timer yang dibangkitkan dari timer/counter 0
dengan outputan enable PORTD.4 dan PORTD.5 dari AVR. Kontrol driver disini mengguna
2 buah PORT untuk direction dan sebua
untuk kontrol arah motor (cw/ccw), sedangkan pin enable berfungsi untuk mengontrol pin
direction (seumpama enable tidak diaktifkan maka pin direction tidak akan ber
mengatur kecepatan motor.
Spesifikasi project:
Driver motor menggunakan L293D
Dir motor kiri PORTD.0 dan PORTD.1 dengsn enable PORTD.4
Dir motor kanan PORTD.2 dan PORTD.3 dengsn enable PORTD.5
Menggunakan timer/counter 0 dengan frekuensi palin
adc3=read_adc(3); if (adc3>n) {acc3=1;} else {acc3=0;} adc4=read_adc(4); if (adc4>n) {acc4=1;} else {acc4=0;} adc5=read_adc(5); if (adc5>n) {acc5=1;} else {acc5=0;} adc6=read_adc(6); if (adc6>n) {acc6=1;} else {acc6=0;} adc7=read_adc(7); if (adc7>n) {acc7=1;} else {acc7=0;}
//untuk menampilkan hasil pembandingan pada LCD
lcd_clear(); lcd_gotoxy(0,0); %d-%d-%d-%d-%d-%d-%d"
,acc7,acc6,acc5,acc4,acc3,acc2,acc1,acc0); //convert intlcd_puts(data); delay_ms(1); //menampilkan data pada lcd
//setting ADC dan LCD dari AVR ADMUX=ADC_VREF_TYPE;
//menampilkan data acc
Motor sendiri mempunyai banyak macamnya, diantaranya motor DC, motor stepper, motor
servo dan lain sebagainya, kali ini kita akan membahas tentang kontrol motor DC. Disamping
itu driver (kontroller) untuk motor DC secara umum ada dua, yaitu menggunakan chip dan
non chip, driver non chip salah satunya menggunakan Mosfet, sedangkan untuk driver chip
ada banyak pilihan chip yang bisa digunakan, salah satunya menggunakan IC L293D.
Project kita kali ini adalah kontrol manuver motor DC dengan menggunakan IC L293D, disini
kita akan kontrol dengan menggunakan timer yang dibangkitkan dari timer/counter 0
dengan outputan enable PORTD.4 dan PORTD.5 dari AVR. Kontrol driver disini mengguna
2 buah PORT untuk direction dan sebuah PORT timer untuk enable. Pin direction berfungsi
untuk kontrol arah motor (cw/ccw), sedangkan pin enable berfungsi untuk mengontrol pin
(seumpama enable tidak diaktifkan maka pin direction tidak akan ber
mengatur kecepatan motor.
Driver motor menggunakan L293D
Dir motor kiri PORTD.0 dan PORTD.1 dengsn enable PORTD.4
Dir motor kanan PORTD.2 dan PORTD.3 dengsn enable PORTD.5
Menggunakan timer/counter 0 dengan frekuensi paling rendah
adc3=read_adc(3); if (adc3>n) {acc3=1;} else {acc3=0;} adc4=read_adc(4); if (adc4>n) {acc4=1;} else {acc4=0;} adc5=read_adc(5); if (adc5>n) {acc5=1;} else {acc5=0;}
dc6>n) {acc6=1;} else {acc6=0;} adc7=read_adc(7); if (adc7>n) {acc7=1;} else {acc7=0;}
//untuk menampilkan hasil pembandingan pada LCD
//convert int-char //menampilkan data pada lcd
Motor sendiri mempunyai banyak macamnya, diantaranya motor DC, motor stepper, motor
servo dan lain sebagainya, kali ini kita akan membahas tentang kontrol motor DC. Disamping
itu driver (kontroller) untuk motor DC secara umum ada dua, yaitu menggunakan chip dan
non chip, driver non chip salah satunya menggunakan Mosfet, sedangkan untuk driver chip
ada banyak pilihan chip yang bisa digunakan, salah satunya menggunakan IC L293D.
Project kita kali ini adalah kontrol manuver motor DC dengan menggunakan IC L293D, disini
kita akan kontrol dengan menggunakan timer yang dibangkitkan dari timer/counter 0
dengan outputan enable PORTD.4 dan PORTD.5 dari AVR. Kontrol driver disini menggunakan
h PORT timer untuk enable. Pin direction berfungsi
untuk kontrol arah motor (cw/ccw), sedangkan pin enable berfungsi untuk mengontrol pin
(seumpama enable tidak diaktifkan maka pin direction tidak akan berfungsi) dan
10
Setting AVR :
11
Coding AVR:
#include <mega16.h>#include <delay.h>#include <stdlib.h>#include <stdio.h>#define EnKi PORTD.4 // Enable L298 untuk motor kiri #define dirA_Ki PORTD.0 // Direction A untuk motor kiri#define dirB_Ki PORTD.1 // Direction B untuk motor kiri#define EnKa PORTD.5 // Enable L298 untuk motor kanan#define dirC_Ka PORTD.2 // Direction C untuk motor kanan#define dirD_Ka PORTD.3 // Direction D untuk motor kanan//Coding Interrupt Timer 0unsigned char xcount,lpwm,rpwm;interrupt [TIM0_OVF] void timer0_ovf_isr(void){ xcount++; // xcount=xcount+1 if(xcount<=lpwm)EnKi=1; // EnKi=1 jika xcount <= lpwm else EnKi=0; // EnKi=0 jika xcount > lpwm if(xcount<=rpwm)EnKa=1; // EnKa=1 jika xcount <= rpwm else EnKa=0; // EnKa=0 jika xcount > rpwm TCNT0=0xFF; // Timer0 Value Menentukan periode pulsa PWM } //Coding Manufer void maju(unsigned char l,{ lcd_clear(); lcd_gotoxy(0,0 lpwm=l; rpwm=r; dirA_Ki=1;dirB_Ki=0; dirC_Ka=1;dirD_Ka=0; } void mundur(unsigned char l, unsigned char r) { lcd_clear(); lcd_gotoxy(0,0delay_ms(1); lpwm=l; rpwm=r; dirA_Ki=0;dirB_Ki=1; dirC_Ka=0;dirD_Ka=1; } void stop() { lcd_clear(); lcd_gotoxy(0,0 lpwm=0; rpwm=0; dirA_Ki=1;dirB_Ki=1; dirC_Ka=1;dirD_Ka=1; } void parkir () { while(1){ lcd_clear(); lcd_gotoxy(0,0delay_ms(1); stop();}} void kiri(unsigned char l, unsigned char r) { lcd_clear(); lcd_gotoxy(0,0 lpwm=l; rpwm=r; dirA_Ki=0;dirB_Ki=1; dirC_Ka=1;dirD_Ka=0; } void kanan(unsigned char l, unsigned char r) { lcd_clear(); lcd_gotoxy(0,0delay_ms(1); lpwm=l; rpwm=r; dirA_Ki=1;dirB_Ki=0; dirC_Ka=0;dirD_Ka=1;
#include <mega16.h> #include <delay.h> #include <stdlib.h> #include <stdio.h> #define EnKi PORTD.4 // Enable L298 untuk motor kiri #define dirA_Ki PORTD.0 // Direction A untuk motor kiri
dirB_Ki PORTD.1 // Direction B untuk motor kiri#define EnKa PORTD.5 // Enable L298 untuk motor kanan#define dirC_Ka PORTD.2 // Direction C untuk motor kanan#define dirD_Ka PORTD.3 // Direction D untuk motor kanan//Coding Interrupt Timer 0
ed char xcount,lpwm,rpwm; interrupt [TIM0_OVF] void timer0_ovf_isr(void)
xcount++; // xcount=xcount+1 if(xcount<=lpwm)EnKi=1; // EnKi=1 jika xcount <= lpwmelse EnKi=0; // EnKi=0 jika xcount > lpwm(xcount<=rpwm)EnKa=1; // EnKa=1 jika xcount <= rpwm
else EnKa=0; // EnKa=0 jika xcount > rpwm TCNT0=0xFF; // Timer0 Value Menentukan periode
void maju(unsigned char l, unsigned char r)
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR MAJU"); delay_ms(1);
dirA_Ki=1;dirB_Ki=0; dirC_Ka=1;dirD_Ka=0;
void mundur(unsigned char l, unsigned char r)
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR MUNDUR");
dirA_Ki=0;dirB_Ki=1; dirC_Ka=0;dirD_Ka=1;
void stop()
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR STOP"); delay_ms(1);
dirA_Ki=1;dirB_Ki=1; _Ka=1;dirD_Ka=1;
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR PARKIRstop();}
void kiri(unsigned char l, unsigned char r)
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR KIRI"); delay_ms(1);
dirA_Ki=0;dirB_Ki=1; dirC_Ka=1;dirD_Ka=0;
void kanan(unsigned char l, unsigned char r)
lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MOTOR KANAN");
dirA_Ki=1;dirB_Ki=0; dirC_Ka=0;dirD_Ka=1;
#define EnKi PORTD.4 // Enable L298 untuk motor kiri #define dirA_Ki PORTD.0 // Direction A untuk motor kiri
dirB_Ki PORTD.1 // Direction B untuk motor kiri #define EnKa PORTD.5 // Enable L298 untuk motor kanan #define dirC_Ka PORTD.2 // Direction C untuk motor kanan #define dirD_Ka PORTD.3 // Direction D untuk motor kanan
if(xcount<=lpwm)EnKi=1; // EnKi=1 jika xcount <= lpwm else EnKi=0; // EnKi=0 jika xcount > lpwm (xcount<=rpwm)EnKa=1; // EnKa=1 jika xcount <= rpwm
else EnKa=0; // EnKa=0 jika xcount > rpwm TCNT0=0xFF; // Timer0 Value Menentukan periode
"); delay_ms(1);
void mundur(unsigned char l, unsigned char r)
MOTOR MUNDUR");
STOP"); delay_ms(1);
MOTOR PARKIR");
"); delay_ms(1);
");
12
} void main(void) { PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFF; /* Timer/Counter 0 initialization. Clock source: System Clock. Clock value: 10,800 kHz Mode: Normal top=FFh. OC0 output: DisconnectedTCCR0=0x05; TCNT0=0x00; OCR0=0x00; // External Interrupt(s) initialization// INT0: Off. INT1: Off. INT2: OffMCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x01; // Analog Comparator initialization. Analog Comparator: Off// Analog Comparator Input Capture by ACSR=0x80; SFIOR=0x00; // ADC initialization. ADC Clock frequency: 172,800 kHz// ADC Voltage Reference: AREF pin. ADC Auto Trigger Source: NoneADMUX=ADC_VREF_TYPE;ADCSRA=0x86; // LCD module initializationlcd_init(16); // Global enable interrupts#asm("sei") //Coding Dengan Perulangan while (1) {
maju(100,100)kiri,kecepatan kanan); dan lain sebagai nya. }};
6. Modul Sensor Ultrasonic
Sensor ultrasonic merupakan salah satu dari sensor
programmer dan penghobi robotika pasalnya sensor ini harganya lebih murah dan terdapat
banyak dipasaran serta mudah dalam mengcodingnya. Sersor ultrasonic yang kita gunakan
kali ini adalah sensor ultrasonic S
Inputan 5 V
Jarak minimum 3 cm sedangkan jarak maxsimum 3 m (jangkauan diluar jarak
tersebut akan menghasilkan nilai pembacaan yang tidak sesuai)
Dimensi : 43mm x 20mm x 17mm
Sensor ultrasonic ini terdiri dari 5 buah pin, yaitu Vcc, Echo, Trigger, Output, dan Ground.
Prinsip keja dari sensor ini adalah pin Trigger mengirimkan sinyal yang kemudian terpantul
pada objek didepannya dan diterima oleh pin Echo, sampainya sinyal dari Trigger pada
Echo membutuhkan sebuah delay, delay inilah yang digunakan sebagai
mendapat nilai jarak dari sensor pada objek didepannya, semakin lama delay, maka jarak
sensor dari objek akan semakin jauh.
Timer/Counter 0 initialization. Clock source: System Clock. Clock
Mode: Normal top=FFh. OC0 output: Disconnected */
terrupt(s) initialization // INT0: Off. INT1: Off. INT2: Off
// Timer(s)/Counter(s) Interrupt(s) initialization
// Analog Comparator initialization. Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: Off
// ADC initialization. ADC Clock frequency: 172,800 kHz// ADC Voltage Reference: AREF pin. ADC Auto Trigger Source: NoneADMUX=ADC_VREF_TYPE;
// LCD module initialization
ble interrupts
//Coding Dengan Perulangan
maju(100,100); // bisa diganti dengan kiri(kecepatan kiri,kecepatan kanan); dan lain sebagai nya.
Modul Sensor Ultrasonic
Sensor ultrasonic merupakan salah satu dari sensor jarak yang paling diminati oleh para
programmer dan penghobi robotika pasalnya sensor ini harganya lebih murah dan terdapat
banyak dipasaran serta mudah dalam mengcodingnya. Sersor ultrasonic yang kita gunakan
kali ini adalah sensor ultrasonic SRF04, adapun spesifikasinya adalah sebagai berikut:
Jarak minimum 3 cm sedangkan jarak maxsimum 3 m (jangkauan diluar jarak
tersebut akan menghasilkan nilai pembacaan yang tidak sesuai)
43mm x 20mm x 17mm
sonic ini terdiri dari 5 buah pin, yaitu Vcc, Echo, Trigger, Output, dan Ground.
Prinsip keja dari sensor ini adalah pin Trigger mengirimkan sinyal yang kemudian terpantul
pada objek didepannya dan diterima oleh pin Echo, sampainya sinyal dari Trigger pada
Echo membutuhkan sebuah delay, delay inilah yang digunakan sebagai acuan untuk
mendapat nilai jarak dari sensor pada objek didepannya, semakin lama delay, maka jarak
sensor dari objek akan semakin jauh.
Timer/Counter 0 initialization. Clock source: System Clock. Clock
// Analog Comparator initialization. Analog Comparator: Off Timer/Counter 1: Off
// ADC initialization. ADC Clock frequency: 172,800 kHz // ADC Voltage Reference: AREF pin. ADC Auto Trigger Source: None
; // bisa diganti dengan kiri(kecepatan
jarak yang paling diminati oleh para
programmer dan penghobi robotika pasalnya sensor ini harganya lebih murah dan terdapat
banyak dipasaran serta mudah dalam mengcodingnya. Sersor ultrasonic yang kita gunakan
un spesifikasinya adalah sebagai berikut:
Jarak minimum 3 cm sedangkan jarak maxsimum 3 m (jangkauan diluar jarak
sonic ini terdiri dari 5 buah pin, yaitu Vcc, Echo, Trigger, Output, dan Ground.
Prinsip keja dari sensor ini adalah pin Trigger mengirimkan sinyal yang kemudian terpantul
pada objek didepannya dan diterima oleh pin Echo, sampainya sinyal dari Trigger pada pin
acuan untuk
mendapat nilai jarak dari sensor pada objek didepannya, semakin lama delay, maka jarak
13
Pada pemrograman sensor ultasonic kita membutuh
mendapatkan besaran jarak, tapi pada tutorial kali ini penulis tidak akan membahas tentang
cara membuat rumus tersebut (pembahasan tentang rumus sensor ultrasonic insyaallah
akan diulas pada tutorial selanjutnya), tapi yang p
external) akan berpengaruh pada rumus tersebut.
Selanjutnya kita akan membuat sebuah project sensor ultrasonic dengan gabungan animasi
LCD, dengan spesifikasi sebagai berikut :
Menggunakan Atmega 16
LCD menggunak
Trigger PORTA.1 & Echo PINA.0 (istilah PORT digunakan untuk Output sedangkan PIN
digunakan untuk Input)
Clok : 11,059200
Setting AVR :
Coding AVR :
#include <mega16.h>#include <delay.h>#include <stdio.h> #define trigger PORTA.1#define echo PINA.0int i; char data[100]; #asm .equ __lcd_port=0x15 ;PORTC
Pada pemrograman sensor ultasonic kita membutuhkan suatu rumus tertentu untuk
mendapatkan besaran jarak, tapi pada tutorial kali ini penulis tidak akan membahas tentang
cara membuat rumus tersebut (pembahasan tentang rumus sensor ultrasonic insyaallah
akan diulas pada tutorial selanjutnya), tapi yang pasti sinyal clock pada AVR (nilai Crystal
external) akan berpengaruh pada rumus tersebut.
Selanjutnya kita akan membuat sebuah project sensor ultrasonic dengan gabungan animasi
LCD, dengan spesifikasi sebagai berikut :
Menggunakan Atmega 16
LCD menggunakan PORTC
Trigger PORTA.1 & Echo PINA.0 (istilah PORT digunakan untuk Output sedangkan PIN
digunakan untuk Input)
11,059200 MHz
#include <mega16.h> #include <delay.h> #include <stdio.h> #define trigger PORTA.1 #define echo PINA.0
.equ __lcd_port=0x15 ;PORTC
kan suatu rumus tertentu untuk
mendapatkan besaran jarak, tapi pada tutorial kali ini penulis tidak akan membahas tentang
cara membuat rumus tersebut (pembahasan tentang rumus sensor ultrasonic insyaallah
asti sinyal clock pada AVR (nilai Crystal
Selanjutnya kita akan membuat sebuah project sensor ultrasonic dengan gabungan animasi
Trigger PORTA.1 & Echo PINA.0 (istilah PORT digunakan untuk Output sedangkan PIN
14
#endasm #include <lcd.h> int jarak; void ukur_jarak() { int i; jarak=0; delay_us(100); trigger=1; delay_us(15); trigger=0; delay_us(100); while(!echo); for (i=0;i<=500;i++){ if (echo) {jarak++;}delay_us(58); } sprintf (data,"%d cm",jarak); lcd_clear(); lcd_gotoxy(6,0); lcd_puts(data); delay_ms(100);} void main(void) { PORTA=0x00; DDRA=0x0E; PORTC=0x00; DDRC=0xFF; lcd_init(16); while (1) { lcd_clear(); for(i=0;i<16;i++) { lcd_gotoxy(4,0); lcd_putsf("Loading."); lcd_gotoxy(i,1); lcd_putchar(255); delay_ms(400); } lcd_clear(); lcd_gotoxy(5,0); lcd_putsf("Sukses"); lcd_gotoxy(0,1); lcd_putsf("Karakter LCD16x2"); delay_ms(1000); while(1){ ukur_jarak(); }};}
for (i=0;i<=500;i++)
f (echo) {jarak++;}
sprintf (data,"%d cm",jarak); lcd_clear(); lcd_gotoxy(6,0); lcd_puts(data); delay_ms(100);
lcd_clear(); for(i=0;i<16;i++)
lcd_gotoxy(4,0); lcd_putsf("Loading."); lcd_gotoxy(i,1); lcd_putchar(255); delay_ms(400);
lcd_clear(); lcd_gotoxy(5,0); lcd_putsf("Sukses"); lcd_gotoxy(0,1); lcd_putsf("Karakter LCD16x2"); delay_ms(1000);
ukur_jarak();
Bangkalan, 24 Februari 2015
Bangkalan, 24 Februari 2015
Top Related