Subscribe via email

Enter your email address:

Delivered by FeedBurner

Mendalami Prosedur dan Fungsi

Dalam penulisan program bahasa C, kadang terdapat program yang kita gunakan berulang-ulang. Dengan metode penulisan secara sederhana kita akan menulisa code tersebut berulang-ulang, hmmm..... pasti merepotkan. Dengan Prosedur dan Fungsi, kita gak perlu repot-repot menulis setiap baris code tersebut.



1. Prosedur
Perhatikan contoh program berikut:

#include<mega8535.h>
#include<delay.h>


void main()
{
DDRA= 0xff;
PORTA=0x00;
while(1)
{
PORTA=0x01<<0;
delay_ms(50);
PORTA=0x01<<1;
delay_ms(50);
PORTA=0x01<<2;
delay_ms(50);
PORTA=0x01<<3;
delay_ms(50);
PORTA=0x01<<4;
delay_ms(50);
PORTA=0x01<<5;
delay_ms(50);

PORTA=0x03<<0;
delay_ms(50);
PORTA=0x03<<1;
delay_ms(50);
PORTA=0x03<<2;
delay_ms(50);
}
}
Simulasikan program di atas menggunakan AVR Studio4. Maksud dari code << yaitu untuk menggeser bit ke kiri :
PORTA=0x01<<n; //menggeser nilai sebesar 0x01 digeser ke kiri sebanyak n.
//Dan mengeluarkan hasilnya ke Port A
misal:
PORTA=0x01<<2; //artinya menggeser nilai 0x01 digeser ke kiri sebanyak 2 kali.
//lalu hasilnya dikeluarkan ke Port A
Pahami gambar berikut:
image
nilai yang dikeluarkan ke Port A, sama seperti gambar di samping.
Pertama, kondisi high pada Port A.0 lalu Port A.1 kemudian Port A.2 dan seterusnya.
Logika yang sama juga digunakan untuk code program berikut:
PORTA=0x03<<n
//nilai digeser ke kiri sebanyak n.
//tapi kali ini nilai yang digeser sebesar 0x03 = 0b000 0011
program di atas dapat juga ditulis seperti dibawah:
#include<mega8535.h>
#include<delay.h>

void geserkiri_A()
{
PORTA=0x01<<0;
delay_ms(50);
PORTA=0x01<<1;
delay_ms(50);
PORTA=0x01<<2;
delay_ms(50);
PORTA=0x01<<3;
delay_ms(50);
PORTA=0x01<<4;
delay_ms(50);
PORTA=0x01<<5;
delay_ms(50);
}

void geserkiri_B()
{
PORTA=0x03<<0;
delay_ms(50);
PORTA=0x03<<1;
delay_ms(50);
PORTA=0x03<<2;
delay_ms(50);
}



void main()
{
DDRA= 0xff;
PORTA=0x00;
while(1)
{
geserkiri_A();
geserkiri_B();
}
}
Pada program di atas, main program hanya berisi beberapa baris program saja. Main program memanggil prosedur geserkiri_A kemudian memanggil prosedur geserkiri_B.
Saat sebuah prosedur dipanggil, maka code program yang berada di dalam prosedur (di dalam kurung kurawal ) akan dijalankan oleh microcontroller. Cara memanggil prosedur cukup dengan menuliskan nama prosedurnya diikuti tanda kurung ( ) . Contoh:
............
............
geserkiri_A();
//berarti micro akan menjalankan code program yang ada di dalam prosedur geserkiri_A()
............
Dengan menggunakan prosedur, main program akan terlihat lebih simple dan mudah dipahami.


2. Fungsi
Fungsi merupakan prosedur yang memiliki nilai return (menghasilkan nilai).
Perhatikan code program berikut:
#include<mega8535.h>
#include<delay.h>
unsigned char baca_PINA()
{
unsigned char d;

d=PINA;
return d;
}
void main()
{
DDRA=0x00;
DDRB=0xff;
while(1)
{
PORTB=baca_PINA();
}
}
Pada contoh program di atas terdapat fungsi baca_PINA.
unsigned char baca_PINA()
{
unsigned char d; //mendeklarasikan variabel d dengan tipe data unsigned char

d=PINA; //memasukkan nilai PINA ke variabel d
return d; //mengembalikan(return) nilai d
//nilai d ini merupakan nilai yg dihasilkan saat fungsi baca_PINA dipanggil
}
Cara memanggil fungsi seperti di atas sama dengan cara memanggil prosedur. Cuman karena fungsi menghasilkan sebuah nilai, maka kita harus menyediakan tempat untuk menampung nilai tersebut. Contohnya pada program di atas terdapat code program berikut:
PORTB=baca_PINA(); //memanggil fungsi baca_PINA ,
//lalu mengeluarkan hasilnya ke PORTB
Mungkin ada temen2 yang tanya, kenapa harus memakai fungsi segala, program untuk membaca nilai PINA lalu mengeluarkannya ke PORTB kan bisa ditulis seperti ini:
...........
..........
while(1)
{
PORTB=PINA;
}
.........
Iya YA... kenapa mesri repot2.. HEhehe..
Program di atas kan hanya contoh simple aja biar gak bingung. Aplikasi sesungguhnya dari penggunaan fungsi adalah saat kita membaca data dari sensor, adc, serial dll...

NB:
Ada prosedur dan fungsi yang membutuhkan nilai masukan. Misal:
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Saat kita memanggil fungsi read_adc,kita harus memasukkan nilai variabel adc_input.
misal:
data_ADC=read_adc(0); //nilai 0 merupakan nilai untuk variabel adc_input
Yupzzz...... Sekarang kita telah mempelajari dasar fungsi dan prosedur. Silahkan kembangkan ke dalam program yang lebih komplek. CHayooo..!!!!

any questions?? post comment on this blog: http:\\avrku.blogspot.com
or send email to: zigan@ymail.com
CodeVisionAVR C Compiler is copyright by Pavel Haiduc, HP InfoTech s.r.l.
AVR is a registered trademark of Atmel Corporation.

Selengkapnya...

Belajar AVR studio 4

image AVR Studio 4 merupakan software buatan ATMEL corporation. Software ini biasa digunakan untuk mensimulasikan program yang telah dibuat di Code Vision AVR. Jadi kita bisa mengetahui jalannya program tanpa harus mendownload ke microcontroller. Kita bisa mendownload software ini di http://www.atmel.com

Untuk mulai belajar menggunakan AVR Studio 4, kita buat dulu code program di CodeVision AVR lalu kita compile code program (tekan Shit+F9). Kemudian kita buka file .COFF nya dengan AVR Studio 4.
1. Membuat Code Program
Buat project baru di Code Vision AVR, masukkan program berikut:

#include <mega8535.h>
#include <delay.h>

void main()
{
DDRA=0xff;
while(1)
{
PORTA=0xff;
delay_ms(50);
PORTA=0x00;
delay_ms(50);
}
}
Arti dari program dia atas adalah:
#include <mega8535.h>
berarti menyertakan file library untuk chip ATmega 8535
#include <delay.h>
berarti menyertakan file untuk fungsi delay.
Di dalam Code Vision AVR jika kita ingin menggunakan delay kita harus menyertakan file library delay.h dan untuk memakainya gunakan perintah:
delay_us(xxx); //delay dalam micro second
delay_ms(xxx); //delay dalam mili second
xxx adalah nilai yang diinginkan. Contoh:
delay_us(50); //berarti delay selama 50 micro second
delay_ms(1000); //delay selama 1000 mili second == 1 detik
void main ()
{
berarti program utama (program yang dijalankan microcontroller)
DDRA=0xff;
berarti seluruh pin-pin PortA dijadikan output
while(1)
{
berarti infinite looping (apa itu infinite looping?? lihat kembali artikel Basic Input Output NB:2)
PORTA=0xff;
berarti mengeluarkan output ke PORTA dengan nilai 0xff == 0b 1111 1111 (PortA High semua)
delay_ms(50)
berarti delay selama 50 mili detik
PORTA=0x00;
berarti mengeluarkan output ke PORTA dengan nilai 0x00 == 0b 0000 0000 (PortA Low semua)
delay_ms(50);
berati delay selama 50 mili second (50 mili detik)
2. Compile Program (tekan Shift + F9)
Inget kembali compile program bertujuan menghasilkan file untuk di download ke micro (file .HEX), selain itu proses compile juga menghasilkan file yang bisa digunakan untuk simulasi di AVR studio yaitu file .COFF.
karena tidak untuk didownload ke micro, kita rubah dulu setting After Make Project.
klik menu Project ---> Configure
klik tab After Make
image
Pastikan check button Program the Chip tidak dicentang
kemudian klik OK.
YupZzz.... sekarang kita tinggal menekan tombol Shift + F9 untuk meng compile program.
3. Mensimulasikan program di AVR Studio 4
Jalankan software AVR Studio 4.
image
Saat muncul tampilan seperti gambar di samping, pilih Open.
image
Lalu pada window Open Project File or Object File, masuk ke direktori folder tempat kita mengcompile code program tadi.
Pilih file .COFF hasil compile lalu klik Open
Lihat gambar di atas, file code program saya bernama Coba1, setelah di compile dihasilkan beberapa file yang juga bernama Coba1. File-file tersebut walaupun namanya sama tapi tipenya berbeda-beda. Ada Intel Hex file, Atmel object file, COFF symbolic debug filer dll. Nah... file yang kit gunakan untuk simulasi di AVR Studio 4 adalah COFF symbolic debug file.
Pada window Save AVR Studio Project File klik Save.
image
Saat muncul window Select debug platform and device. Pastikan:
Debug platform: AVR Simulator
Device: ATmega 8535
lalu klik Finish

HooRee!!! jadi dech... tekan F11 untuk menjalankan baris program satu persatu.
image
Tampilan simulasi AVR Studio 4.
Saat kita menekan F11, code program di window 1 akan dijalankan satu persatu. Pada window I/O View (window 2) klik PORTA agar kondisi register-regiser PORTA ditampilkan di window 3.
Lihat setiap perubahan yang terjadi di window I/O View.
Inilah keuntungan menggunakan simulator AVR Studio 4, kita bisa memahami setiap baris program dengan melihat langsung apa yang terjadi pada register microcontroller.
Untuk latihan, coba buat berbagai macam program dan simulasikan di AVR Studio 4.
Coba jalankan simulasi dengan ALT+F5 (mode Auto Step) dan amati apa yang terjadi pada window 3.
Semakin sering latihan maka logika kita akan semakin terasah. Saat logika anda sudah bener -bener tajam saat itulah anda menjadi AVR Master^_^



any questions?? post comment on this blog: http:\\avrku.blogspot.com
or send email to: zigan@ymail.com
CodeVisionAVR C Compiler is copyright by Pavel Haiduc, HP InfoTech s.r.l.
AVR is a registered trademark of Atmel Corporation.



Selengkapnya...

Basic Input Output (I/O)

AVR dengan package 40-pin PDIP, contoh ATmega 8535 memiliki 32 I/O lines. Masing-masing lines dapat diatur fungsinya. Sebagian dari lines-lines I/O tersebut ada yang memilki fungsi-fungsi khusus, seperti ADC, Analog Comparator, PWM, USART dan External Interrupt. Kali ini kita akan membahas basicnya dulu.
Fungsi dasar dari setiap pin microcontroller adalah:

membaca perubahan level tegangan apakah 0 atau 5 volt (jika digunakan sebagai input)

mengeluarkan tegangan sebesar 0 atau 5 volt (jika digunakan sebagai output)
Microcontroller AVR memiliki 2 register yang berhubungan dengan fungsi dasar ini, yaitu:
1. Register DDRx
DDRx ( x adalah port micro yang digunakan ).
Misal: menggunakan Port A berarti registernya DDRA.
Register ini berfungsi untuk mengatur arah Pin/Port micro. Apakah dipakai sebagai input atau output.
Nilai register ini sebesar 8 bit. Setiap bit mewakili masing-masing pin kaki micro.
Jika pin kaki micro digunakan sebagai input maka register DDRx nya harus bernilai 0 (nol).
Jika pin kaki micro digunakan sebagai output maka register DDRx nya harus bernilai 1.
Misal Port A akan digunakan sebagai input maka untuk mensetnya kita gunakan perintah:
DDRA= 0x00;
//ini berarti seluruh pin-pin pada Port A digunakan sebagai input
Contoh:
Port A.0 dijadikan input sedangkan Port A.2 ..sampai.. Port A.7 digunakan sebagai output maka perintahnya:
DDRA= 0xFE;
0xFE (heksa) == 0b 1111 1110 (biner)
Perhatikan baik-baik konversi biner diatas!! Setiap bit nilai biner mewakili Pin-Pin pada PortA.
image
Amati dan pahami betul gambar di samping.
Port A.0 sebagai Input karena nilai DDRnya 0 (nol).
Port A.1 sampai Port A.7 sebagi Output karena nilai DDRnya 1.







2. Register PORTx
PORTx ( x adalah port micro yang digunakan ).
Misal: menggunakan Port A berarti registernya PORTA.
Jika Port digunakan sebagai input register ini berfungsi sebagai penentu apakah kondisi Port di Pull Up atau Floating.
Jika Port digunakan sebagai output register ini menentukan kondisi Port High atau Low.
Untuk memahami apa arti Pull Up perhatikan gambar berikut:
image
Pin 1. dihubungkan ke VCC(tegangan 5 Volt) melalui resistor (R), inilah yang di maksud dengan Pull Up. Saat tidak ada tegangan dari luar Pin 1 akan cenderung berkondisi High (1)
Pin 2. dibiarkan begitu saja sehingga kondisi logic Pin2 rentan terhadap pengaruh sekitarnya. Pin 2. bisa berlogika high bisa juga berlogika low ini artinya logika Pin2 ngambang (Floating).
Kondisi floating biasanya diperlukan saat Pin sebuah IC atau micro dihubungkan ke sensor. Karena jika di Pull Up dikhawatirkan kondisi logic Pin IC mengganggu kondisi logic pin-pin sensor.
Perhatikan code program berikut:
DDRA=0x00;
PORTA = 0xFF;
ini berarti seluruh pin-pin pada Port A sebagai Input dan di Pull Up.
Perhatikan code program berikut:
DDRB= 0x00;
PORTB=0x0F;
0x0F == 0b 0000 1111
berarti :
Seluruh pin-pin PortB dijadikan Input
PortB.0 ..sampai.. PortB.3 di Pull Up
PortB.4 ..sampai.. PortB.7 dalam keadaan Floating

Example:
  1. mengelurakan Output ke PortC dengan nilai 0x BB
#include <mega8535.h>
void main()
{
DDRC= 0xFF; //Port C sebagai Output
PORTC= 0x BB; //mengeluarkan nilai 0x BB ke Port C
}
2. membaca input di PORT A dan mengeluarkan nilainya ke PORT D
#include <mega8535.h>
void main()
{
DDRA= 0x00; //Port A sebagai Input
PORTA= 0xFF; //Port A di Pull Up
//karena tidak terhubung ke sensor, PortA di Pull Up agar kondisi logic nya tidak kacau
DDRD=0xFF; //Port D sebagai Output
while(1) //Infinite Looping (agar program dibawah ini dijalankan terus menerus)
{
PORTD=PINA; //kondisi PORTD sama dengan PORTA
}
}

NB 1:
Amati lagi baris program:
PORTD=PINA;
Mengapa tidak ditulis
PORTD=PORTA;
Hal ini tidak bisa dilakukan, dalam AVR kondisi input masuk ke register PINx.
Untuk membaca input, gunakan PINx bukan PORTx.
NB 2:
Apa itu Infinite Looping??
Infinite : tak terbatas, tak terhingga
Looping : perulangan, pengulangan, perputaran
Infinite Looping adalah perulangan(looping) yang dijalankan terus menerus. INGAT!!! code program yang dijalankan AVR adalah code program yang berada dalam fungsi utama:
void main()
{
..............................//code program
.............................//code program
}
Program dijalankan berurutan dari atas ke bawah dan program tersebut hanya akan dijalankan sekali. Dengan memakai infinite looping Code Program yang berada di dalam infinite looping akan dijalankan terus menerus.
void main()
{
...................//code program di luar infinite looping. Hanya dijalankan sekali
...................//code program di luar infinite looping. Hanya dijalankan sekali
while(1) //infinite looping
{
..................................//code program dalam infinite looping
.................................//code program dalam infinite looping
}
}
Untuk keluar dari infinite looping gunakan perintah
break;
Mengapa terjadi Infinite Looping ??
Perhatikan code program berikut:
while(1)
{
............................ //code program
........................... //code program
}
Arti dari code program di atas adalah:
while(1) //selama 1 maka kerjakan program di dalam kurung kurawal
{
.................... //code program
.................... //code program
}
Statement diatas akan selalu benar (selalu bernilai satu) karena angka 1merupakan konstanta. Konstanta nilainya tidak akan berubah, sehingga terjadilah Looping terus menerus .
Coba bedakan dengan code program berikut:
while(index<4)
{
....................................... //code program
....................................... //code program
index=index+1;
}
Program di dalam kurung kurawal akan dijalankan selama index kurang dari 4. index merupakan variabel sehingga nilainya bisa berubah. Nah.. jika index lebih dari atau sama dengan 4, looping tidak dijalankan lagi.

any questions?? post comment on this blog: http:\\avrku.blogspot.com
or send email to: zigan@ymail.com
CodeVisionAVR C Compiler is copyright by Pavel Haiduc, HP InfoTech s.r.l.
AVR is a registered trademark of Atmel Corporation.




CodeVisionAVR C Compiler is copyright by Pavel Haiduc, HP InfoTech s.r.l.
AVR is a registered trademark of Atmel Corporation.

Selengkapnya...

Berkenalan Dengan CodeVision AVR

Code vision AVR merupakan software untuk membuat code program microcontroller AVR. Software ini bisa kita download versi demonya di www.hpinfotech.ro . Dari yang saya tahu, kebanyakan programmer memakai software ini karena fasilitas-fasilitas yang disediakan CodeVision AVR memudahkan programmer dalam membuat code.
Kesulitan - kesulitan yang biasa ditemui saat memprogram yaitu belum bisa menggunakan menu -menu di CodeVision AVR, karena belum familiar. Dalam artikel ini saya coba memberi gambaran singkat bagaimana cara menulis program di CodeVision AVR, merubah konfigurasi Compiler dan cara mendownload program ke dalam microcontroller.

1. Membuat Project

Buka aplikasi CodeVision AVR , pilih menu: File -->New
Maka akan muncul message box Create New File, pilih Project lalu klik OK
image
Setelah itu akan muncul message box Confirm, pilih NO. Message box ini menanyakan apakah kita akan menggunakan CodeWizardAVR??
image
CodeWizard AVR merupakan tools untuk menghasilkan code program secara otomatis. Hal ini memudahkan programmer karena gak perlu repot-repot menulis code program. Tapi untuk beginner sebaiknya jangan menggunakan fasilitas ini, Saya sarankan tulis program dari awal agar lebih memahami setiap code program.
Berikutnya muncul box Create New Project , pada kotak file name ketikkan nama file. Sebagai contoh beri nama: Coba1
Lalu muncul box Configure Project, pada box ini terdapat Files, C Compiler dan After Make
Tab Files digunakan untuk menyertakan file source code yang akan digunakan dalam project. Setiap project membutuhkan minimal satu file source. File source merupakan file bahasa C yang kita tulis.
image
Biarkan dulu setting awal tab Files ini. Kita akan atur kemudian
Tab C Compiler digunakan untuk meng edit konfigurasi compiler. Tampilan tab C Compiler seperti berikut
image Menu Chip untuk menentukan chip yang digunakan. Ubah chip ke ATmega8535 jika kita menggunakan ATmega 8535.
Menu Clock untuk menentukan frequency xtal yang digunakan microcontroller. Pastikan nilainya sesuai. Saya menggunakan xtal 4 Mhz.
Menu (s)printf features: untuk menentukan konfigurasi fungsi printf dan sprintf .
Menu (s)scanf features: untuk menentukan konfigurasi fungsi scanf dan sscanf .
Tab After Make digunakan untuk menentukan aplikasi yang dijalankan CodeVosion AVR setelah program di compile.
image
Pilih (centang) Program the Chip, hal ini berarti CodeVision akan memprogram chip(micro) setelah program di compile.


Lalu klik OK
Setelah kita melakukan langkah satu diatas maka tampilan pada CodeVision AVR seperti berikut:
image
Langkah pertama tadi adalah langkah untuk membuat Project. Ingat!! setiap project membutuhkan minimal satu file source. Nah... Berikutnya kita akan membuat file source.
2. Membuat Source
Buka aplikasi CodeVision AVR , pilih menu: File -->New
Maka akan muncul message box Create New File, pilih Source lalu klik OK
Simpan file source, pilih menu: File --> Save As
Beri nama file source. Misal: Coba1
Setelah anda melakukan langkah-langkah diatas, tampilan CodeVision AVR seperti berikut:
image
3. Memasukkan File Source ke dalam Project
File source yang kita buat harus kita masukkan kedala projet. Caranya:
image
Pilih menu: Project --> Configure
image
Pada tab Files, klik Add (1).
Lalu akan muncul box Add File To Project
Pilih file source yang akan disertakan, dalam hal ini file sourcenya Coba1 (2)
Klik Open (3)
Kemudian klik OK (4)
Nachh!!! sekarang project telah siap kita gunaka. Sebagai awal tuliskan code program sederhana dulu
seperti:
#include <mega8535.h>
void main()
{
DDRA=0xff
PORTA=0x0f
}
Penjesan dari program diatas adalah:
#include <mega8535.h>
//menyertakan file library untuk chip ATmega8535
DDRA=0xff
//Port A, dijadikan sebagai output
PORTA=0x0f
/*
Mengeluarkan output ke Port A dengan nilai 0x0f ( f Heksa) atau 0b00001111. Berarti logic dari Port A saat program dijalankan:
    1. Port A.0 ----> HIGH (1)
    2. Port A.1 ----> HIGH (1)
    3. Port A.2 ----> HIGH (1)
    4. Port A.3 ----> HIGH (1)
    5. Port A.5 ----> low (0)
    6. Port A.6 ----> low (0)
    7. Port A.7 ----> low (0)
    8. Port A.8 ----> low (0)
*/
Compile program dengan menekan F9,,,
Pasti ERROR.. he..he..heee..... ^_^
image
Perhatikan tampilan diatas, terdapat informasi error di dalam Message Box.
Error: D:\.....\.....\.....\Coba1.c(6): missing ';'
Maksud dari pesan error di atas adalah:
D:\.....\.....\....\ adalah alamat file
Coba1.c adalah nama file
(6) adalah nomor baris yang error
Perlu diingat walau nomor baris yang error adalah baris ke 6, error juga bisa terjadi karena kesalahan (error) pada baris sebelumnya.
: missing ';' adalah deskrpisi error
Deskripsi error diatas yaitu error terjadi karena tidak adanya(missing) karakter ; (titik koma). Setiap akhir baris dalam penulisan code harus diakhiri dengan ; (titik koma)
Compile lagi program dengan menekan F9, lihat apakah ada error?? jika tidak ada tekan Shift F9 untuk mengcompile ulang dan klik Program untuk mendownload program ke micro.
image
Gak bisa ya..... he3.... sabar buukk.... tuh karena kita blum mengatur setting programmer yang akan digunakan.
4. Mengatur Setting Programmer
Pilih menu: Setting ---> Programmer
image
Jika anda menggunakan downloader yang terhubung ke port parallel / port printer. Contoh: downloader DT-HiQ AVR ISP produksi innovative electronics, pastikan Programmer Type nya:
Kanda Systems STK200+/300
Printer Port :
LPT1: 378h
Jika anda menggunakan dowloader tipe lain misal yang terhubung ke USB, setting Programmer Type disesuaikan dengan keterangan di user manual bawaan downloader anda.
Yupz... sekarang tekan Shift F9 lalu klik Program.





any questions?? post comment on this blog: http:\\avrku.blogspot.com
or send email to: zigan@ymail.com
CodeVisionAVR C Compiler is copyright by Pavel Haiduc, HP InfoTech s.r.l.
AVR is a registered trademark of Atmel Corporation.


Selengkapnya...

Search

Entri Populer

 

Total Tayangan Halaman

Diberdayakan oleh Blogger.