tutorial pemrograman menggunakan code vi

14
1 TUTORIAL PEM Chip yang digunakan pada tutori konfigurasi yang sama sehingga spesifikasi dari chip ini adalah se Mempunyai 32 buah pin Mempunyai 8 buah pin A Mempunyai 2 timer/cou didalamnya Mempunyai 4 channel P Dan masih banyak lagi sp Adapun konfigurasi Atmega 16/3 1. Modul LED Pemrograman LED secar keduanya ada pada kofig gambar dibawah ini. Pada rangkaian Aktif Hig akan menyalaketika inpu memPul-Up AVR, karena perintah). Setelah kita ta untuk mengcodingnya, p sebagai berikut: Menggunakan A Menggunakan P MROGRAMAN MENGGUNAKAN CODE VISION AV ial ini adalah AT mega 16/32/8535, ketiga chip te kita bisa menggunakan salah satu dari ketiga chip ebagai berikut: n I/O ADC (Port A) unter 8 bit dan 1 timer/counter 16 bit, dengan be PWM pesifikasi yang lain 32/8535 adalah sebagai berikut. ra garis besar ada 2 macam, Aktif High dan Aktif L gurasi rangkaian led itu sendiri, untuk lebih jelasn gh LED akan menyala jika inputannya High, sebali utannya Low (Tips: untuk rangkaian Aktif Low kita a defaultnya AVR akan terus mengirim logika Low ahu apa itu Aktif High dan Aktif Low, saatnya kita proyek yang akan kita buat adalah Running LED d Atmega 16 Port A AVR ersebut memiliki ip tersebut. Adapun eberapa fitur menu Low, perbedaan dari nya perhatikan iknya Aktif LOW LED ta perlu untuk w ketika tidak ada a akan belajar cara dengan ketentuan

Upload: w4w4ns3mk4n1s4

Post on 29-Jan-2016

30 views

Category:

Documents


0 download

DESCRIPTION

Tutorial Pemrograman Menggunakan CodeVision AVR

TRANSCRIPT

Page 1: Tutorial Pemrograman Menggunakan Code Vi

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

Page 2: Tutorial Pemrograman Menggunakan Code Vi

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

Page 3: Tutorial Pemrograman Menggunakan Code Vi

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

Page 4: Tutorial Pemrograman Menggunakan Code Vi

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

Page 5: Tutorial Pemrograman Menggunakan Code Vi

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

Page 6: Tutorial Pemrograman Menggunakan Code Vi

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;}

Page 7: Tutorial Pemrograman Menggunakan Code Vi

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

Page 8: Tutorial Pemrograman Menggunakan Code Vi

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;}

Page 9: Tutorial Pemrograman Menggunakan Code Vi

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

Page 10: Tutorial Pemrograman Menggunakan Code Vi

10

Setting AVR :

Page 11: Tutorial Pemrograman Menggunakan Code Vi

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);

");

Page 12: Tutorial Pemrograman Menggunakan Code Vi

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

Page 13: Tutorial Pemrograman Menggunakan Code Vi

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

Page 14: Tutorial Pemrograman Menggunakan Code Vi

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