Dasar Pemograman Microkontroler
Pengembangan sebuah sistem menggunakan microcontroler AVR buatan ATMEL mengunakan software AVR studio dan CodeVision AVR, AVR Studio merupakan software khusus untuk bahasa assembly. Sedangkan CodeVisionAVR merupakan software C-cross compiler, dimna program dapat ditulis dalam bahasa C, CodeVision, memiliki IDE (Integrated Development Envirioment) yang lengkap, dimana penulisan program, compile, link, pembuatan kode mesin (assembler) dan download program ke chip AVR dapat dilakukan pada codevision, selain itu ada fasilitas terminal, yaitu untuk melakukan komunikasi serial dengan microkontroler yang sudah diprogram. Proses download ke IC microkontroler AVR dapat menggunakan sitem download secara ISP (In Sytem Programing). In Sytem Programmable Flash on-chip mengizinkan memori program untuk diprogram ulang dalam sytem menggunakan hubungan serial SPI.
#include <mega16.h>
#include <delay.h>
#define IRsensor PINA.0
#define pompa PORTB.0
//variable global
Unsigned int i, j;
Void main(void)
{
//variable local
Char¬ data_rx ;
DDRA=0x00 ;
PORTA=0xFF ;
DDRB=0xFF ;
PORTB=0x00 ;
While(1)
{
….
….
….
} ;
}
Penjelasan :
Peprocessor(#) : Digunakan untuk memasukan (include) text dari file lain, mendefinisikan macro yang dapat mengurangi beban kerja pemograman dan meningkatkan legibiliti source code (mudah dibaca).
#define : digunakan untuk mendefinisikan macro.
Contoh :
#define ALFA 0xff
#define SUM(a,b) a+b
#defineSensor PIN.2
#define pompa PortB.0
Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus.
/*
…… komentar
..*/
Penulisan komentar untuk satu baris saja
//…komentar…
Program Kontrol
Perintah if dan if…else…
Perintah if dan if…else…digunakan untuk melakukan opoerasi percabangan bersyarat. Fungsi-fungsi untuk menetapkan kondisi dapat dilihat dalam table. Sintaks penulisan if dapat ditulis sebagai berikut :
If (<expression>)
<statement>;
Sintak perintah if…else… dapat dituliskan sebagai berikut.
If (<expression>)
<statement1>;
Else
<ststement2>;
Jika hasil testing expression memberikan hasil tidak nol ststement1 akan dilaksanakan. Pada keadaan sebaliknya statement2 ynag akan dilaksanakan. Sebaliknya pemanfaatan perintah if untuk beberapa kondisi dilakukan dengan menggunakan blok-blok.
Percabangan switch
Perintah percabangan if…else…dapat digantikan perintah switch Dalam pernyataan switch, sebuah variable secara berurutan diuji oleh beberapa konstanta bulangan bulat atau konstanta karakter. Sintaks perintah switch dapat dituliskan sebagai berikut :
Switch (variable)
{
Case konstanta_1 : Statement ;
Break;
Case konstanta_2 : Statement ;
Break;
Case konstanta_n : Statement ;
Break;
Default ;
}
Hal-hal yang harus diperhatikan :
1. Switch hanya dapat memeriksa variable terhadap sebuah konstanta, sedangkan if dapat memeriksa persyaratan perbandingan (lebih besar, lebih kecil dan seterusnya).
2. Tidak ada dua konstanta yang sama di dalam sebuah switch
3. Perintah switch jika dimanfatkan dengan tepat dapat memberikan hasil yang lebih baik dari pada perintah if…else yang membentuk tanga dan atau bersarang.
Looping (perulangan)
Looping adalah perulangan satu atau bebrrapa perintah sampai mencapai keadaan tertentu. Ada tiga perintah looping yaitu for…, while…., dan do…while... Sintaks loop for dapat dituliskan sebagai berikut :
For
Untuk perulangan yang melakukan proses increment
For (nama_variable = nilai_awal; syarat_loop; nama_variable ++)
{
Statement_yang_diulang;
}
//Untuk perulangan yang melakukan proses decrement
For (nama_variable = nilai_awal; syarat_loop; nama_variable--)
{
Statement_yang_diulang;
}
Syarat_loop adalah pernyataan relasional yang menyatakan syarat berhentinya perulangan, biasanya berkaitan dengan variable control, nama_variable ++ dan nama_variable --, menyatakan proses increment dan proses decrement pada variable controol.
While
Perintah while dapat melakukan looping apabila persyaratannya bensr. Sintak perintah while dapat dituliskan sebagai berikut :
Nama_variable= nilai_awal;
While (syarat_loop)
{
Statement_yang_akan_diulang;
Nama_variable ++;
}
Do…While
Perintah while terlebih dahulu melakukan pengujian persyaratan sebelum melakukan looping. Kadang-kadang hal ini menmbulkan kerepotan-kerepotan yang tidak perlu,Misalnya inisialisasi variable control. Salah satu solusi adalah dengan menggunakan loop do…while.
Nama_variable = nilai_awal;
Do
{
Statement_yang_akan_diulang;
Nama_variable ++;
}
While (Syarat_looop)
Input Output Mikrokontroler AVR ATMega16
Mikrokontroler AVR ATMega16 terdiri dari empatbuah port yaitu portA (PA), PortB (PB), PortC(PC) dan PortD(PD) yang semuanya dapat diprogram sebagai input ataupun output. Pin I/O pada mikrokontroller AVR dapat dikonfigurasi sebagai input atau output, dengan cara mengubah isi I/O register Data Direction Register.
Misalnya, jika ingin port B dikonfigurasikan sebgai output, maka Data Direction Register portB (DDRB) harus diset sebagai 0xFFH (sama dengan 255). Jika sebagai input maka 0x00H (sama dengan 0).
Contoh;
DDRB = 255; //Port B dikofigurasikan sebagai output. yaitu PB0-PB7
DDRD = 0x00; // Port D dikonfigurasikan sebagai input.
V¬¬¬OH (output high voltage ) ialah tegngan pada pin I/O mikrokontroler ketika ia mengeluarkan logika “1” dengan besar sekitar 4.2V dan arus sebesar 20mA(I¬¬¬¬¬OH.) Setiap pin I/O mikrokontroler AVR memiliki internal pull up. Misalnya Port B dikofigurasikan sebagai input dan internal pull-up diaktifkan maka DDRB=00H dan PORTB = 00H.
DDRB = 0; // Port B dikonfigurasi sebagai input
PORTB = 0; // internal pull-up aktif
Untuk mendeteksi input pada salah satu port, dapat digunakan fungsi PINx, sedangkan mendeteksi per pin pada suatu port dapat digunakan fungsi Pinx.bit
Contoh :
PORTB = PINC;//Semua data di Port C dikirim ke Port B
PORTB.0 = PINC.0;// Data di Port C.0 dikirim ke Port B.0.
Tegangan keluaran pada pin I/O mikrokontroler ketika logika “1” besarnya sekitar 4.2V dan arusnya sebesar 20mA. Port I/O sebsgai output hanya memberikan arus (sourcing) sebesar 20 mA, keluaran dari satu port mikrokontroler hanya dapat mengemudikan perangkat output dengan arus kecil, sehingga untuk peralatan elektronik yang membutuhkan arus yang besar misalnya untuk mengerakan motor perlu diberikan penguat tambahan, oleh karena itu biasanya dipergunakan penguat lagi berupa transistor atau IC penguat (driver) agar port tersebut tidak terbebaani, atau dapat juga dengan konfigurasi port sebagai sinking current, seperti pada port untuk menyalakan Led, yang akan menyala saat port logika low dan mati saat port dibrrikan logika high.
makasih master
ReplyDelete