Showing posts with label Teknik Elektro. Show all posts
Showing posts with label Teknik Elektro. Show all posts

Friday, May 16, 2014

Instruksi-instruksi Mikrokontroler ATmega16


A.    Mengenal Bahasa C

            Sebuah berkas program C terdiri dari beberapa unsur, yaitu dokumentasi program , pengarah prapengolahan, bagian deklarasi global, sebuah fungsi main ( ), dan fungsi-fungsi buatan pemrogram. Masing-masing fungsi ini terdiri dari badan fungsi yang memuat deklarasi local dank ode program yang dapat dieksekusi.

Berikut sebuah program sederhana : 

/* Nama file : Program sederhana
Conto program sederhana pada program C*/
#include
 
int main ( )
{
return 0; 
}

Dokumentasi Program
            Memberikan dokumentasi pada program sangat berguna untuk membantu memperjelas alur logika penyusunan program. Karena tujuannya hanya sebagai dokumentasi, komentar-komentar yang dituliskan pada program tidak diproses oleh compiler. Komentar dapat dimulai dengan simbol dua karakter yang terdiri dari garis miring dan asterisk (/*) dan diakhiri dengan asterisk dan garis miring.
            Karakter komentar /* dapat diletakkan dimana saja didalam program dan dapat mencakup lebih dari satu komentar, dengan syarat setiap /* harus ditutup dengan */. Pada awal program, komentar yang diberikan biasanya bertujuan untuk menjelaskan apa yang dilakukan oleh program, sedangkan pada bagian probram yang lain tujuannya adalah untuk memperjelas logika program. 
            Dalam membeikan komentar untuk dokumentasi program, ada beberapa hal yang perlu diperhatikan, diantaranya:
1.      Komentar hendaklah diberikan pada tempat-tempat yang bias menimbulkan kekaburan pengertian.
2.      Beri komentar ditempat yang perlu saja, misalnya pada awal program untuk menjelaskan secara ringkas tujuan program, pada awal blok pernyataan untuk menjelaskan kumpulan tugas yang dilakukan , pada pernyataan keputusan untuk menjelaskan kondisi yang harus dipenuhi dalam pengambilan keputusan.
3.      Komentar tidak bisa dibuat bertingkat , yaitu adanya komentar dalam komentar, misalnya;
/* Komentar awal /* Komentar lagi /* Komentar berikutnya*/

Pengarah Prapengolahan 
            Dalam mengolah kode-kode program, compiler C melaksanakan beberapa tahapan yaitu melakukan prapengolahan untuk melakukan persiapan yang diperlukan sebuah berkas program kompilasi. Di dalam program pengarah prapengolahan diawali oleh karakter # yang dituliskan pada baris-baris pertama program. 
            Prapengolahan memperlakukan berkas program sebagai sederetan baris teks: membaca, mengolah, dan menuliskan kembali hasil pengolahan kedalam berkas semula. Prapengolah membuang semua baris perintah prapengolahan dari berkas sumber dan melakukan perubahan terhada berkas sumber sesuai dengan arahan perintah yang diberikan. Secara garis besar pelayanan prapengolah dibagi dalam tiga kelompok :
1)      Penyisipan berkas (#include),
2)      Pendefenisian makro (#define), dan 
3)      Pengarah kendali compiler (#ifdef, #ifndef, dll)

            Dalam menyertakan berkas judulyang diperlukan olefh fungsi input dan outputyang digunakan dalam program : #include dan untuk mendefenisikan sebuah konstanta (pi): #define PI 3.1459, sementara itu #ifdef diguakan apabila hendak melakukan kompilasi terhadap satu bagian program hanya apabila sebuah ekspresi tertentu telah didefenisikan menggunakan #define. Standar ANSI C menambahkan beberapa pengarah prapengolahan tambahan; pengujian alternatif, pernyataan instruksi, pendeteksian kesalahan, pengubahan pengenal menjadi string dan penggabungan pengenal.

Deklarasi Global
            Pada bagian deklarasi global terdapat pendeklarasian variable dan prototipe fungsi. Semua variable y ang dideklarasikan pada bagian ini akan dikenal oleh semua bagian program yang terdapat dibawahnya. Sementara itu prototipe fungsi adalah sebuah deklarasi tentang akan digunakannya sebuah fungsi didalam program. Ada tiga unsur yang perlu disebutkan: jenis data yang dikembalikan oleh fungsi, nama fungsi dan daftar argumen yang diberikan pada fungsi yang diberi jumlah argumen (arity) dan jenis data masing-masing argumen.

Fungsi Main ( )
            Fungsi main ( ) memegang peranan yang penting pada sebuah program. Fungsi ini merupakan fungsi utama pada setiap program C dimana eksekusi keseluruhan program dimulai. Barapapun banyaknya fungsi yang terdapat pada sebuah program C, main ( ) adalh fungsi utama yang akan dilaksanakan oleh compiler. Contoh program yang memperlihatkan struktur fungsi main ( ) sederhana.
/* Nama file : Hello.c
Menampilkan teks dilayar*/
#include 
int main ( )
{
printf(“hello, world!\n”);
return 0;
}

            Pada contoh diatas fungsi main ( ) tidak memerlukan argumen, badan fungsi main ( ) tidak memiliki bagian deklarasi lokal, dan hanya memiliki sebuah pernyataan yang dapat dieksekusi, berupa fungsi output printf ( ). Kode program (pernyataan) yang dapat dieksekusi adalah kode program yang merupakan baris-baris instruksi yang harus dilaksanakan oleh kompiler. Kode program ini dapat berupa input/output, konstruksi runtunan, konstruksi keputusan dan konstruksi pengulangan. Dalam badan fungsi main ( ) terdapat pula bagian deklarasi lokal yang dimaksudkan untuk mendeklarasikan variable-variabel dan prototipe-prototipe fungsi. semua variable dan prototipe fungsi ini bersifat lokal terhadap main ( ), dalam arti hanya dikenal oleh main ( ). 

Fungsi Buatan Pemrogram
            Selain main ( ) yang mempunyai kedudukan khusus dalam sebuah program, terdapat pula fungsi-fungsi buatan pemrogram. Pada fungsi ini dapat diberikan deklarasi prototype fungsi lain secara local, sehingga hanya dikenal oleh fungsi tersebut. Kode program yang dapat dieksekusi juga dapat berupa fungsi input/output standar, konstruksi runtunan, konstruksi keputusan, dan konstruksi pengulangan.

Pembatas 
            Setelah pendefenisian fungsi terdapat kurung kurawal buka “{“ dan kurung kurawal tutup “}” yang menunjuk akhir blok fungsi, kurung kurawal ini disebut pembatas (delimeters). Dalam badan program kurung kurawal juga dapat digunakan untuk membatasi pernyataan majemuk yang dimiliki oleh sebuah blok kode program. Selain kurung kurawal juga terdapat beberapa pembatas lain, diantaranya: [ ], < >, ( ), “ “, dan ‘ ‘.

Akhir Pernyataan
            Setiap pernyataan (statement) dalam C diakhiri dengan titik koma ( ; ) yang berperan untuk memberitahu compiler akhir pernyataan. Carriage return yang diperoleh sewaktu menekan tombol bukan penunjuk akhir pernyataan, karena C mengabaikan semua karakter yang disebut karakter-karakter whitespace, yaitu spasi, tabulator dan carriage return (newline).

Tipe Data
            Adalah suatu nilai yang dapat dinyatakan dalam bentuk konstanta atau variabel dan operator. Konstanta menyatakan nilai yang tetap, sedangkan variabel menyatakan nilai yag dapat berubah-ubah selama eksekusi berlangsung.
Tipe data simple merupakan tipe data bawaan dari C++, tipe data ini terdiri dari beberapa tipe data yaitu:
·         Tipe data integral merupakan tipe data yang terdiri dari bilangan dengan range yang berbeda-beda.
·         Floating merupakan tipe data untuk bilangan desimal. Untuk semua Turbo C++, type floating-point yang menggunakan format-format IEEE floating-point digunakan oleh intel 8087. Type float menggunakan real format 32-bit IEEE. Type double menggunakan real format 64-bit IEEE. Type long double menggunakan extended real format 80-bit IEEE.

            Address merupakan tipe data yang digunakan untuk menunjuk suatu alamat memori. Sedangkan tipe data structured merupakan tipe data bentukan.

Identifiers
            Identifiers adalah untaian satu atau lebih huruf, angka, atau garis bawah ( _ ). Panjang dari identifier, tidak terbatas, walaupun untuk beberapa kompiler hanya 32 karakter pertama saja yang dibaca sebagai identifier (sisanya diabaikan). Identifier harus selalu diawali dengan huruf atau garis bawah ( _ ). Ketentuan lainnya yang harus diperhatikan dalam menentukan identifier adalah tidak boleh menggunakan keyword dari bahasa C.

Dekalarasi Variabel
            Untuk menggunakan variable pada C, kita harus mendeklarasikan tipe data yang akan digunakan. Sintaks penulisan deklarasi variable adallah dengan menuliskan tipe data yang akan digunakan diikuti dengan identifier yang benar, contoh :
int a;
float mynumber;
            Jika akan menggunakan tipe data yang sama untuk beberapa identifier maka data dituliskan dengan tanda koma, contoh :
int a, b, c;
            Tipe data integer (char, long, short, dan int) dapat berupa signed atau unsigned tergantung dari kisaran nilai yang direpresentasikan. Dilakukan dengan menyertakan keyword signed atau unsigned sebelum tipe data, contoh : 
unsigned short NumberofSons;
signed int MyAccountBalance;
            jika tidak ditulis maka akan dianggap signed.

Inisialisasi Variabel

Ketika mendeklarasikan variable local, kita dapat memberikan nilai tertentu. Sintaks penulisan sbb :
Tipe identifier = initial_value ;

            Misalkan kita akan mendklarasikan variable int dengan nama a yang bernilai 0, maka dapat dituliskan : 
int a = 0;

Atau dengan cara lain, yaitu menyertakan nilai yang akan diberikan dalam tanda ( ) :
tipe identifier (initial_value);

Konstanta : Literals
            Konstanta adalah ekspesi dengan nilai yang tetap. Terbagi dalam nilai integer, nilai floating point karakter, dan string.

Nilai Integer
            Merupakan nilai konstanta numeric yang meng-identifikasikan nilai integer decimal. Karena merupakan nilai numeric, maka tidak memerlukan tanda kutip ( “ ) maupun karakter khusus lainnya. Contoh :
1776
707
-273

            C memungkinkan kita untuk menggunakan nilai octal (base 8) dan heksadesimal (base 16). Jika menggunakn octal harus digunakan dengan karakter 0 (karakter nol), dan untuk heksadesimal diawali dengan karakter 0X (nol, X). contoh :
75 // decimal
0113 // octal
0X4b // heksadecimal

Nilai Floating Point
            Merepresentasikan nilai decimal dan / atau eksponen, termasuk titik decimal dan karakter e (yang merepresentasikan “ dikali 10 pangkat n “, dimana n merupakan nilai integer) atau keduanya. Contoh :

3.14159 // 3.14159
6.02e23 // 6.02 * 10^23
1.6e-19 // 1.6 * 10^-19
3.0 // 3.0

Konstanta Define (#define)
            Kita dapat mendefenisikan sendiri nama untuk konstanta yang akan kita pergunakan, dengan menggunakan preprocessor directive #define. Dengan format : 
#define identifier value

Contoh :
#define PI 3.14159
#define NEWLINE ‘\n’
#define WIDTH 100

Deklarasi Konstanta (const)
            Dengan prefix const kita dapat mendeklarasikan konstanta dengan tipe yang spesifik seperti yang kita inginkan. Contoh :
const int width = 100;
constchar tab = ‘t’;
const zip = 12440;

Jika tipe data tidak disebutkan, maka compiler akan mengsumsikan sebagai int. 

Operator
            Operator yang disediakan C berupa keyword atau karakter khusus. Operator-operator ini cukup penting untuk diketahui karena merupakan salah satu dasar bahasa C.

Assignation ( = )
            Operator ini digunakan untuk membeikan nilai ke suatu variable.
a = 5 ;
           
            Memberikan nilai integer 5 ke variable a. Sisi kiri dari operator disebut lvalue (left value) dan sisi kanan disebut rvalue (right value). lvalue harus selalu berupa variable dan sisi kanan berupa konstanta, variable, hasil dari suatu operasi atau kombinasi dari semuanya. Contoh :

Int a, b; // a : ? b : ?
a = 10; // a : 10 b : ?
b = 4; // a : 10 b : 4
a = b; // a : 4 b : 4
b = 7; // a : 4 b : 7

            Hasil dari contoh diatas , a bernilai 4 dan b bernilai 7.
Contoh :
a = 2 + (b = 5);

equivalent dengan :
b = 5 
a = 2 + b
Arithmetic Operators ( +, -, *, / , % )
+ addition
- substraction
* multiplication
/ division
% module

Increase (++) and decrease (--).
Contoh :
            a++;
            a+=1;
            a=a+1;

            Operator increase dan decrease dapat digunakan sebagai prefix dan suffix. Dengan kata lain dapat dituliskan sebelum identifier variable (++a) atau sesudahnya (a++). Operator increase yang digunakan sebagai prefix (++a), letak perbedaan :

Example 1 Example 2 
            B=3; B=3;
            A=++B; A=B++;
            // A is 4, B is 4 // A is 3, B is 4

Relasional Operators (= =, !=, >, <, >=, <=)
            Untuk mengvaluasi antara dua ekspresi, dapat digunakan operator relasional. Hasil dari operator ini adalah nilai bool yaitu hanya berupa true atau false, atau dapat juga dalam nilai int, 0 untuk merepresentasikan “false” dan 1 untuk merepresentasikan “true”. Operator-operator relasional pada C :
            = = Equal
            != Different
            > Greater than
            < Less than
            >= Greater or equal then
            <= Less or equal then

Logic Operators ( !, &&, || )
            Operator ! equivalent dengan operasi Boolean NOT, hanya mempunyai 1 operand, berguna untuk membalikkan nilai dari operand yang bersangkutan. Contoh :

            ! (5 = = 5) returns false because the expression at is right (5 = = 5) would be true.
            ! (6 =<= 4) returns true because (6 <=4) be false.
            ! true returns false.
            !false returns false.

            Operator logika && dan || digunakan untuk mengevaluasi 2 ekspresi dan menghasilkan 1 nilai akhir. Mempunyai arti sama dengan logika Boolean AND dan OR. 

Conditional Operator ( ? )
            Operator kondisional mengevaluasi ekspresi dan memberikan hasil tergantung dari hasil evaluasi (true atau false ). Sintaks :
            conditional ? result1 : result2

Jika kondisi true maka akan menghasilkan result1, jika tidak akan menghasilkan result2.
            7 = = 5 ? 4 : 3 returns 3 since 7 is not equal to 5.
            7 = = 5 + 2 ? 4 :3 returns 4 since 7 is equal to 5 + 2.
            5 > 3 ? a : b returns a, since 5 is greater than 3.
            a > b ? a :b returns the greater one, a or b.

Explisit Type Casting Operators
            Explisit type casting operators memungkinkan untuk mengkonversikan tipe data yang sudan diberikan ke tipe data ynag lain. Ada beberapa cara yang dilakukan dalam C, yang paling populer yaitu tipe baru dituliskan dalam tanda kurung ( ), contoh :

            int i;
            float f = 3.14;
            i = (int) f;

            Contoh diatas mengkonversikan nilai 3.14 menjadi nilai integer (3). Tipe casting operator yang digunakan (int). cara lainnya :

            i = int ( f );

            Operator ini menerima 1 parameter, dpat berupa type variable atau variable itu sendiri dan mengembalikan ukuran type atau object tersebut dalam bytes :

            a = sizeof (char);
           
            Contoh diatas akan memberikan nilai 1 ke a karena char adalah tipe data dengan panjang 1 byte. Nilai yang diberikan ole sizeof bersifat konstan.

B.     Instruksi-instruksi pada Codevision AVR.
Pengembangan sebuah system menggunakan mikrokontroler AVR buatan ATMEL menggunakan software AVR STUDIO dan Codevision AVR. AVRSTUDIO merupakan software khusus untuk bahasa assembly yang mempunyai fungsi sangat lengkap, yaitu digunakan untuk menulis program, kompilasi, simulasi, dandownload program ke IC mikrokontroler AVR. Sedangkan Codevision AVR merupakan software C-cross compiler, dimana program dapat ditulis dalam bahasa C, Codevision memiliki IDE (Integrated Development Environment) yang lengkap, di mana penulisan program, compile, link, pembuatan kode mesin (assembler) dandownload program ke chip AVR dapat dilakukan pada codevision, selain itu ada fasilitas terminal, yaitu untuk melakukan komunikasi serial dengan mikrokontroler yang sudah deprogram. Proses download program ke IC mikrokontroler AVR dapat menggunakan system download secara ISP (In-System Programming). In-Systemprogrammable Flash on-chip mengizinkan memori program untuk diprogram ulang dalam system menggunakan hubungan serial SPI (Andrianto, 2008: 17).
Berikut ini penjelasan penggunaan program dalam bahasa C di software Codevision AVR.
Preprocessor (#): Digunakan untuk memasukkan (include) text dari file lain, mendefinisikan macro yang dapat mengurangi beban kerja pemrograman dan meningkatkan legibility source code (mudah dibaca).
#define : Digunakan untuk mendefinisikan macro
Contoh :          #define                        ALFA             oxff
                        #define                        SUM(a,b)        a+b
                        #define                        sensor              PIN.2
                        #define                        pompa             PORTB.o
Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus
/*
…komentar
..*/
Penulisan komentar untuk satu baris saja
//…komentar…

1.      Program Kontrol
a.      Percabangan
Perintah if dan if…else…
Perintah if dan if…else.. digunakan untuk melakukan operasi percabangan bersyarat. Sintaks penulisan if dapat ditulis sebagai berikut :
                                    if();
Sintaks perintah if …else …dapat dituliskan sebagai berikut:
                                    if();
                                    else ;

b.      Looping (pengulangan)
Looping adalah pengulangan satu atau beberapa perintah sampai mencapai keadaan tertentu. Ada tiga perintah looping, yaitu: for …,while …, dan do…while…. Sintaks loop for dapat dituliskan sebagai berikut :
for
Untuk pengulangan yang melakukan proses increment
            for(nama_variable = nilai_awal;syarat_loop;nama_variable ++)
            {
statement_yang_diulang;
            }
            //untuk pengulangan yang melakukan proses decrement
For(nama_varible=nilai_awal;syarat_loop;nama_variable --)
{
Statement_yang_diulang;
}

Syarat_loop adalah pernyataan relasional yang menyatakan syarat berhentinya pengulangan, biasanya barkaitan dengan variable kontrol, nama_variable++ dannama_variable--, menyatakan proses increment dan proses decrement pada variable kontrol.
while
Perintah while dapat melakukan looping apabila persyaratannya benar. Sintaks perintah while dapat dituliskan sebagai berikut :
            nama_varible = nilai_awal;
while (syarat_loop)
{
Statement_yang_akan_diulang;
Nama_variable++;
}

2.      Library Function pada CodeVisionAVR
a.      Fungsi Input/Output
Fungsi-fungsi input/Output berada didalam file stdio.h, pada subdirektori …\INC. berikut ini beberapa fungsi I/O dasar yang disediakan pada CodeVision.
  1. char getchar(void) : menghasilkan nilai balikan berupa karakter yang diterima dari UART, menggunakan system polling (menerima data serial)
  2. void putchar(char c): mengirim karakter ’c’ menggunakan UART, menggunakan system polling (mengirimkan data serial)
Sebelum menggunakan fungsi ini, lakukan terlebih dahulu pengaturan konfigurasi komunikasi serial:
1)      Inisialisasi baudrate UART
2)      Mengaktifkan transmitter UART
3)      Mengaktifkan receiver UART
Fungsi I/O yang lebih tinggi lainnya menggunakan fungsi getchar danputchar, seperti:
  1. void puts(char *str) : output, menggunakan putchar, null mengakhiri karakterstring, berlokasi di SRAM.
  2. void putsf(char flash *str) : output, menggunakan putchar, null mengakhiri karakter string, berlokasi di FLASH.
  3. void printf(char flash *fmtstr[ , arg1, arg2, ...]) : output text yang terformat, menggunakan putchar, sesuai dengan format specifiers dalam fmtstr string.

b.                  Fungsi Matematika
Fungsi ini berada di dalam file math.h, pada subdirektori ...\INC. Berikut ini sebagian dari beberapa fungsi-fungsi matematika yang disediakan pada CodeVision.
  1. unsigned char cabs(signed char x): menghasilkan nilai absolute dari byte x
  2. unsigned int abs(int x): menghasilkan nilai absolute dari bilangan integer x
  3. unsigned long labs(long x): menghasilkan nilai absolute dari bilangan long integer x.
  4. float fabs(float x): menghasilkan nilai absolute dari bilangan floating point x
  5. signed char cmax(signed char a,signed char b) : menghasilkan nilai maksimum dari byte a dan b.
  6. int max(int a,int b) : menghasilkan nilai maksimum dari integer a dan b.


c.                   Fungsi LCD
Fungsi LCD ditunjukkan untuk memudahkan interfacing antara program C dan modul alphanumeric LCD yang dibuat dengan chip Hitachi HD44780 atau yang serupa chip Hitachi HD44780. fungsi ini berada di dalam file lcd.h, pada subdirektori …\INC. Header ini harus dimasukan (include) jika kita akan menggunakan fungsi-fungsi LCD. Sebelum menggunakan fungsi ini, terlebih dahulu harus diatur port mikrokontroler yang digunakan untuk komunikasi dengan modul LCD. Format LCD dalam lcd.h mendukung: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24, dan 2x40 karakter. Fungsi-fungsi untuk mengakses LCD diantaranya adalah:
  1. unsigned char lcd_init(unsigned char lcd_columns): untuk menginisialisasi modul LCD, menghapus layar dan meletakkan posisi karakter pada baris ke-0. jumlah kolom pada LCD harus disebutkan (misal, 16). Kursor tidak di tampakkan. Nilai yang dikembalikan adalah 1 bila modul LCD terdeteksi, dan bernilai 0 bila tidak terdapat modul LCD. Fungsi ini harus dipanggil pertama kali sebelum menggunakan fungsi yang lain.
  2. void lcd_clear(void): menghapus layar LCD dan meletakkan posisi karakter pada baris ke-0 kolom ke-0.
  3. void lcd_gotoxy(unsigned char x, unsigned char y): meletakkan posisi karakter pada kolom ke-x baris ke-y. Nomor baris dan kolom dimulai dari nol.
  4. void lcd_putchar(char c): menampilkan karakter c pada LCD
  5. void lcd_puts(char *str): menampilkan string yang disimpan pada SRAM pada LCD.
  6. void lcd_putsf(char flash *str): menampilkan string yang disimpan pada flashpada LCD.

d.                  Fungsi Delay
Menghasilkan delay dalam program-C. Berada pada header delay.h yang harus dimasukkan (include) sebelum digunakan. Sebelum memanggil fungsi,interupsi harus dimatikan terlebih dahulu, bila tidak maka delay akan lebih lama dari yang diharapkan. Juga sangat penting untuk menyebutkan frekuensi clockchip IC AVR yang digunakan pada menu Project – Configur – C Compiler – Code Generation.
Fungsi delay yang dihasilkan adalah:
  1. void delay_us(unsigned int n) : fungsi ini menghasilkan delay selama n μ-detik, n adalah nilai konstan.
  2. void delay_ms(unsigned int n) : fungsi ini menghasilkan delay selama n mili-detik, n adalah nilai konstan.

Kedua fungsi tersebut secara otomatis akan me-reset watchdog-timersetiap 1 mili-detik dengan mengaktifkan instruksi wdr.
Fungsi – fungsi lain seperti fungsi akses memori, I2C, maxim/dallas semiconductorDS1302 Real Time Clock, 1 Wire Protocol, SPI, Power Management dapat dilihat pada manual CodeVisionAVR, CodeVisionAVR user manual.


Sumber:
Heri Andrianto.2008.”Pemrograman Mikrokontroler AVR ATmega16”, Bandung: Informatika.

Pengertian CodeVisionAVR


CodeVisionAVR pada dasarnya merupakan perangkat lunak pemrograman microcontroller keluarga AVR berbasis bahasa C. Ada tiga komponen penting yang telah diintegrasikan dalam perangkat lunak ini: Compiler C, IDE dan Program generator. 

Berdasarkan spesifikasi yang dikeluarkan oleh perusahaan pengembangnya, Compiler C yang digunakan hampir mengimplementasikan semua komponen standar yang ada pada bahasa C standar ANSI (seperti struktur program, jenis tipe data, jenis operator, dan library fungsi standar-berikut penamaannya). Tetapi walaupun demikian, dibandingkan bahasa C untuk aplikasi komputer, compiler C untuk microcontroller ini memiliki sedikit perbedaan yang disesuaikan dengan arsitektur AVR tempat program C tersebut ditanamkan (embedded). 

Khusus untuk library fungsi, disamping library standar (seperti fungsi-fungsi matematik, manipulasi String, pengaksesan memori dan sebagainya), CodeVisionAVR juga menyediakan fungsi-fungsi tambahan yang sangat bermanfaat dalam pemrograman antarmuka AVR dengan perangkat luar yang umum digunakan dalam aplikasi kontrol. Beberapa fungsi library yang penting diantaranya adalah fungsi-fungsi untuk pengaksesan LCD, komunikasi I2C, IC RTC (Real time Clock), sensor suhu LM75, SPI (Serial Peripheral Interface) dan lain sebagainya. 

Untuk memudahkan pengembangan program aplikasi, CodeVisionAVR juga dilengkapi IDE yang sangat user friendly (lihat gambar 1.1). Selain menu-menu pilihan yang umum dijumpai pada setiap perangkat lunak berbasis Windows, CodeVisionAVR ini telah mengintegrasikan perangkat lunak downloader (in system programmer) yang dapat digunakan untuk mentransfer kode mesin hasil kompilasi kedalam sistem memori microcontroller AVR yang sedang deprogram.

CodeVisionAVR 1.2.4.9 adalah suatu kompiler berbasis bahasa C, yang terintegrasi untuk memprogram dan sekaligus compiler aplikasi AVR (Alf and Vegard’s Risc processor) terhadap mikrokontroler dengan sistem berbasis window. CodeVisionAVR ini dapat mengimplematasikan hampir semua interuksi bahasa C yang sesuai dengan arsitektur AVR, bahkan terdapat beberapa keunggulan tambahan untuk memenuhi keunggulan spesifikasi dari CodeVisionAVR yaitu hasil kompilasi studio debugger dari ATMEL. 

Integrated Development Environtment (IDE) telah diadaptasikan pada chip AVR yaitu In-System Programmer software, memungkinkan programmer untuk mentransfer program ke chip mikrokontroler secara otomatis setelah proses assembly/kompilasi berhasil. In-System Programmer software didesign untuk bekerja dan dapat berjalan dengan perangkat lunak lain seperti AVR Dragon, AVRISP, Atmel STK500, dan lain sebagainya.

Disamping library standar C, CodeVisionAVR C compiler memiliki librari lain untuk:
  • Modul LCD Alpanumerik
  • Delays
  • Protokol semikonduktor Maxim/Dallas
  • Dan lainnya
CodeVisionAVR juga memiliki CodeWizardAVR sebagaki generator program otomatis, yang memungkinkan kita untuk menulis, segala bentuk pengaturan Chip dalam waktu singkat, dan semua kode yang dibutuhkan untuk mengimplementasikan fungsi-fungsi seperti:

Pengaturan akses External Memory
Untuk chip-chip AVR yang memungkinkan koneksi memori eksternal SRAM, dapat juga mengatur ukuran memori dan wait state (tahap tunggu) dari memori ketika memori tersebut diakses.

Identifikasi chip reset source
Adalah suatu layanan dimana kita dapat membuat kode secara otomatis yang dapat mengidentifikasi kondisi yang menyebabkan chip di reset.

Inisialisasi port input/output
Pengaturan port-port yang kan dijadikan gerbang masukan dan keluaran dapat secara otomatis digenerate codenya. Yang kita lakukan hanya memilih port-port yang akan digunakan sebagai input atau output.

Inisialisasi Interupsi external
Pengaturan interupsi eksternal yang nantinya akan digunakan untuk menginterupsi program utama 

Inisialisasi timers/counters
Pengaturan timers yang berfungsi untuk mengatur frekwensi yang nantinya digunakan pada interupsi.

Inisialisasi timer watchdog
Pengaturan timers yang berfungsi untuk mengatur frekwensi yang nantinya digunakan pada interupsi, sehingga interupsi akan dilayani oleh suatu fungsi wdt_timeout_isr .

Inisialisasi UART(USART) dan komunuikasi serial 
Pengaturan komunikasi serial sebagai penerima atau pengirim data.

Inisialisasi komparasi analog
Pengaturan yang berkaitan dengan masukan data yang digunakan dalam aplikasi yang membutuhkan komparasi pada ADC nya.

Inisialisasi ADC
Pengaturan ADC(Analog-Digital Converter) yang berfungsi untuk merubah format analog menjadi format digital untuk diolah lebih lanjut.

Inisialisasi antarmuka SPI
Pengaturan chip yang berkaitan dengan Clock rate, Clock Phase, dan lainnya.

Inisialisasi antarmuka Two Wire BUS
Pengaturan Chip yang berhubungan dengan pola jalur komunikasi antara register yang terdapat pada chip AVR. 

Inisialisasi antarmuka CAN
Pengaturan chip yang lebih kompleks, yang dapat mengatur interupsi, transmisi data, timers, dan lainnya.

Inisialisasi sensor temperatur, thermometer, dan lainnya
Pengaturan yang berhubungan dengan sensor temperatur one wire bus, memiliki fungsi-fungsi yang ada pada librari CodeVisionAVR.

Inisialisasi one wire bus
Pengaturan yang berhubungan dengan sensor temperatur yang memiliki fungsi-fungsi yang ada pada librari CodeVisionAVR. Seperti Maxim/Dallas Semiconductor.

Inisialisasi modul LCD
Pengaturan port-port yang kan digunakan sebagai penghubung dengan LCD alphanumerik.

Contoh cara kerja sebelum melakukan pemograman di AVR, dimana contoh disini adalah contoh pengaturan program agar mikrokontroler dapat berkomunikasi dengan komputer:
a. Memilih project baru dan melakukan penyetingan komponen yang digunakan pada board.
b. Pengaturan IC/Chip, pada chip yang kita harus dilakukan adalah IC apa yang kita gunakan, dalam hal ini ATMEGA8535l dengan Clock 16 MHz. Clock ini harus di atur dengan ukuran 16 MHz, karena pada komponen oksilator yang digunakan sebesar 16 MHz. 
c. Pengaturan ADC, pada ADC ini ada beberapa pilihan yang harus dipilih. diantaranya ADC Enable di check list(v), Use 8 bit di check list(v), high speed di check list (v) dan Volt Ref dipilih ‘AVCC PIN’. AVCC PIN berguna sebagai referensi tegangan pada ADC untuk nilainya sebesar 5 volt.
d. Pengaturan USART, usart ini yang nantinya menghubungkan rangkaian mikrokontroler dengan PC (komputer). Langkah-langkah yang dilakukan dengan adanya pilihan Receiver di check list(v) dan Transmitter di check list(v). Pengaturan receiver berfungsi apakah serial itu sebagai penerima data, sedangkan transmitter berfungsi serial bisa digunakan sebagai pengiriman data.

Untuk lebih jelas tampilan pengaturan yang disediakan oleh AVR dapat dilihat pada gambar dibawah ini :

Gambar Form Pegaturan CodeVisionAVR

Selain bentuk konfigurasi hadware yang nantinya secara otomatis akan membentuk sebuah instruksi layaknya perintah program ke IC/Chip, adapula perintah program yang kita ketik sendiri. 

Selain itu, CodeVisionAVR juga menyediakan sebuah tool yang dinamakan dengan Code Generator atau CodeWizardAVR (lihat gambar 2.1). Secara praktis, tool ini sangat bermanfaat membentuk sebuah kerangka program (template), dan juga memberi kemudahan bagi programmer dalam peng-inisialisasian register-register yang terdapat pada microcontroller AVR yang sedang diprogram. Dinamakan Code Generator, karena perangkat lunak CodeVision ini akan membangkitkan kode-kode program secara otomatis setelah fase inisialisasi pada jendela CodeWizardAVR selesai dilakukan. Secara teknis, penggunaan tool ini pada dasarnya hampir sama dengan application wizard pada bahasa-bahasa pemrograman Visual untuk komputer (seperti Visual C, Borland Delphi, dan sebagainya).

Disamping versi yang komersil, Perusahaan Pavel Haiduc juga mengeluarkan CodeVisionAVR versi Demo yang dapat didownload dari internet secara gratis (lihat alamat URL: http://www.hpinfotech.ro) Dalam versi ini, memori flash yang dapat diprogram dibatasi maksimal 2K, selain itu tidak semua fungsi library yang tersedia dapat dipanggil secara bebas.

Seperti halnya belajar pemrograman komputer, agar mendapatkan pemahaman yang kuat dalam pemrograman microcontroller AVR, anda sebaiknya mencoba langsung membuat aplikasi program pada microcontroller tersebut. Untuk tujuan latihan, perangkat lunak CodevisionAVR versi demo pada dasarnya adalah sarana yang cocok dan telah cukup memenuhi kebutuhan minimal anda. Gambar 1.4. berikut memperlihatkan diagram blok yang mengilustrasikan alur pemrograman microcontroller AVR dengan CodevisionAVR yang dapat anda lakukan :

Gambar  Alur pemrograman microcontroller AVR dengan menggunakan CodevisionAVR


Seperti terlihat pada gambar 2.2, CodevisionAVR pada dasarnya telah mengintegrasikan komponen-komponen penting dalam pemrograman microcontroller AVR: Editor,Compiler C, assembler dan ISP (In System Programmer). Khusus dengan ISP, ada beberapa jenis perangkat keras programmer dongle (berikut papan pengembangnya) yang telah didukung oleh perangkat lunak CodevisionAVR ini, salah satu diantaranya adalah Kanda System STK 200/300 produk Perusahaan Kanda yang terhubung pada saluran antarmuka port Paralel Komputer. 

Jika anda berencana membuat dongle yang kompatible dengan produk Kanda, rangkaiannya dapat dilihat pada situs:http:\\www.grandtonics.com. Atau jika mau membeli sistem yang siap pakai (berupa dongle beserta papan pengembangnya), salah satu produk dalam negeri dengan harga yang relative murah adalah DT AVR nano/micro System dialamat URL:http//www.innovative_electronic.com., Sistem ini kompatibel dengan kanda System STK 200/300. Untuk tujuan-tujuan percobaan, produk innovative_electronic ini sudah sangat memadai, selain mudah dihubungkan dengan modul-modul perangkat input/output, seperti modul LCD, keypad, array LED, penggerak motor stepper, dan sebagainya, sistem ini juga telah dilengkapi konverter TTL ke RS232 yang bermanfaat untuk komunikasi microcontroller AVR dengan komputer. 

Berkaitan dengan perangkat lunak downloader, pada dasarnya anda dapat menggunakan perangkat lunak lain (di luar CodeVisionAVR) untuk keperluan transfer kode mesin kedalam sistem memori microcontroller AVR. Salah satunya adalah ISP_AVR yang dibuat oleh Holger Buss dan Ingo Busker dari Jerman. Perangkat lunak beserta rangkaian antarmukanya dapat di-download secara gratis pada alamat URL: http://www.mikrocontroller.com

MIKROKONTROLER AVR DAN BAHASA C
Tak dapat disangkal, dewasa ini penggunaan bahasa pemrograman aras tinggi (seperti C, Basic, Pascal dan sebagainya) semakin populer dan banyak digunakan untuk memprogram sistem microcontroller. Berdasarkan sifatnya yang sangat fleksibel dalam hal keleluasaan pemrogram untuk mengakses perangkat keras, Bahasa C merupakan bahasa pemrograman yang paling cocok dibandingkan bahasa-bahasa pemrograman aras tinggi lainnya. 

Dikembangkan pertama kali oleh Dennis Ritchie dan Ken Thomson pada tahun 1972, Bahasa C merupakan salah satu bahasa pemrograman yang paling populer untuk pengembangan program-program aplikasi yang berjalan pada sistem microprocessor (komputer). Karena kepopulerannya, vendor-vendor perangkat lunak kemudian mengembangkan compiler C sehingga menjadi beberapa varian berikut: Turbo C, Borland C, Microsoft C, Power C, Zortech C dan lain sebagainya. Untuk menjaga portabilitas, compiler-compiler C tersebut menerapkan ANSI C (ANSI: American National Standards Institute) sebagai standar bakunya. Perbedaan antara compiler-compiler tersebut umumnya hanya terletak pada pengembangan fungsi-fungsi library serta fasilitas IDE (Integrated Development Environment)–nya saja. 

Relatif dibandingkan dengan bahasa aras tinggi lain, bahasa C merupakan bahasa pemrograman yang sangat fleksibel dan tidak terlalu terikat dengan berbagai aturan yang sifatnya kaku. Satu-satunya hal yang membatasi penggunaan bahasa C dalam sebuah aplikasi adalah semata-mata kemampuan imaginasi programmer-nya saja. Sebagai ilustrasi, dalam program C kita dapat saja secara bebas menjumlahkan karakter huruf (misal ‘A’) dengan sebuah bilangan bulat (misal ‘2’), dimana hal yang sama tidak mungkin dapat dilakukan dengan menggunakan bahasa aras tinggi lainnya. Karena sifatnya ini, seringkali bahasa C dikatagorikan sebagai bahasa aras menengah (mid level language).

Dalam kaitannya dengan pemrograman microcontroller, Tak pelak lagi bahasa C saat ini mulai menggeser penggunaan bahasa aras rendah assembler. Penggunaan bahasa C akan sangat efisien terutama untuk program microcontroller yang berukuran relatif besar. Dibandingkan dengan bahasa assembler, penggunaan bahasa C dalam pemrograman memiliki beberapa kelebihan berikut: Mempercepat waktu pengembangan, bersifat modular dan terstruktur, sedangkan kelemahannya adalah kode program hasil kompilasi akan relative lebih besar (dan sebagai konsekuensinya hal ini terkadang akan mengurangi kecepatan eksekusi). 

Khusus pada microcontroller AVR, untuk mereduksi konsekuensi negative diatas, Perusahaan Atmel merancang sedemikian sehingga arsitektur AVR ini efisien dalam mendekode serta mengeksekusi instruksi-instruksi yang umum dibangkitkan oleh compiler C (Dalam kenyataannya, pengembangan arsitektur AVR ini tidak dilakukan sendiri oleh perusahaan Atmel tetapi ada kerja sama dengan salah satu vendor pemasok compiler C untuk microcontroller tersebut, yaituI ARC).

Seperti halnya compiler C untuk sistem microprocessor, di pasaran ada beberapa varian compiler C untuk memprogram sistem microcontroller AVR yang dapat dijumpai (lihat tabel 2.2). 

Dengan beberapa kelebihan yang dimilikinya, saat ini CodeVisionAVR produk Perusahaan Pavel Haiduc merupakan compiler C yang relative banyak digunakan dibandingkan compiler-compiler C lainnya. 

Bahasa C telah dikritisi secara meluas, dan banyak orang dengan cepat menemukan masalahnya. Tapi sebagai bahasa yang telah hadir, C tetap tak tersentuh. CodeVisionAVR adalah salah satu yang memanfaatkan keunggulan C dalam hal pemrograman mikrokontroler. Salah satu ungkapan menyatakan bahwa “jika kamu membuat perangkat lunak yang akan tetap layak suatu hari nanti, jangan belajar bahasa yang popular saat ini, pelajarilah C”.

C tidak membatasi pandangan orang mengenai sebuah bahasa pemrograman. C tidak object oriented, tetapi kita dapat menerapkan konsep objek oriented padanya. Bukan juga bahasa fungsional, tetapi kita dapat dapat menerapkan pemrograman fungsional menggunakannya. Kebanyakan interpreter LISP dan skema interpreters-interpreters/compiler-kompiler ditulis dengan menggunakan C. kita dapat memproses list menggunakan C, meski tak semudah menggunakan LISP. C juga memiliki fitur-fitur tambahan seperti rekursi, prosedur sebagai tipe data kelas pertama, dan banyak lagi. 

Banyak orang yang merasakan C kekurangan akan kemudahan seperti JAVA, atau C++. Padahal C adalah bahasa yang sederhana. Tapi karena kesederhanaan ini dianggap kurang memadai sehingga membuat C diadaptasi sebagai perkenalan pertama ke tahap bahasa tingkat tinggi yang kompleks yang memungkinkan kita mengontrol dengan baik apa yang kita program tanpa fitur yang disembunyikan. Compiler tidak akan melakukan apapun sampai kita memerintahkan untuk melakukan sesuatu. Bahasa yang ada adalah transparan, bahkan jika beberapa fitur dari JAVA seperti garbage collection diikutsertakan pada implementasi C yang akan digunakan. Sebagai bahasa pemrograman, C tetap ada. Ini adalah inti dari development dilingkungan system operasi UNIX. Dan juga inti dari revolusi mikrokomputer, diantara C++, Delphi, JAVA dan lainnya, C masih tetap bertahan,dengan karakteristiknya sendiri.

Pada beberapa tahun yang lalu, the Electrical and Computer Engineering Technology department di Purdue University telah mempelajai bahasa pemrograman C sebagai bahasa yang dipilih untuk mengenalkan mikrokontroler. Mengajarkan Bahasa tingkat tinggi pada perkenalan mikrokontroler dalam referensi suatu bahasa tingkat assembly adalah sesuatu yang kontras pada suatu intitusi yang memiliki program yang sama. Penggunaan Bahasa tingkat tinggi memungkinkan untuk focus pada materi dan konsep dan tidak jemu dengan melihat detail listing assembly. Salah satu perbedaannya adalah bahasa tingkat tinggi memungkinkan untuk menuliskan langsung nilai pada register, memindahkan data melalui multiple operations dengan assembly.

Just-in-time (JIT) mengajarkan metode yang digunakan untuk mengenalkan komponen baru pada Bahasa pemrograman C seperti yang dibutuhkan. Pada prakteknya pokok masalah dipresentasikan, setelah itu disusun algoritma dan dievaluasi. Setelah itu dituangkan kedalam gambar sebagai diagram alir proses. Lalu dengan mudah diterjemahkan kedalanm bahasa C. seperti itulah dasar dari mikrokontroler.

Lebih dari 10 tahun, beratus juta mikrokontroler, suatu mikrokomputer yang mengandung perangkat ini dan memori didalam suatu single integrated circuit (IC) bersama CPU, telah disertakan pada perkembangan produk-produk dari keyboard sampai system control automobile (Ayala, 2000). 

Bahasa tingkat tinggi meningkat menjadi metodologi standar untuk mikrokontroler terapan berdasar pada perkembangan dan improvisasi jaman dan pasar dan dukungan perawatan yang sederhana (Myklebust, N.D.). Untuk tetap sejajar dengan perubahan jaman, bahasa tingkat tinggi menjadi perlengkapan dalam memperkenalkan mikrokontroler sebagai bagian dari kurikulum pada the Electrical and Computer Engineering Technology curriculum di Purdue University, West Lafayette.

KEUNTUNGAN PEMROGRAMAN TINGKAT TINGGI
Telah dipercaya pada era mikrokontroler saat ini bahwa bahasa assembly adalah satu-satunya pilihan untuk membuat kode untuk suatu aplikasi.ruang yang sangat terbatas pada chip untuk data dank ode program tidak terjadi jika menggunakan bahasa tingkat tinggi (Stewart & Miao, 1999). Sejarah bahasa tingkat tinggi memproduksi ukuran kode yang lebih besar dibandingkan assembly yang mempengaruhi kecepatan eksekusi. Selama beberapa tahun terakhir, compiler telah menyatakan kepada pasar dengan mengklaim bahwa dapat memproduksi kode seefisien assembly (Stewart & Miao, 1999).pada tahun-tahun berikutnya, compiler melakukan perkembangan yang lebih luas didunia mikrokontroler dengan meningkatkan fungsionalitas dan kecepatan.

Terdapat beberapa keunggulan menggunakan Bahasa tingkat tinggi diantaranya yaitu dapat memangkas waktu pembangunan aplikasi menjadi lebih singkat, kemudahan perawatan dan ringkas, kemudahan reuse kode. Bahasa tingkat tinggi memungkinkan programmer untuk mengatasi objek yang kompleks tanpa khawatir tentang detail komponen prosesor pada saat program berjalan. (Darnell & Margolis, 1991). Menulis program bahasa tingkat tinggi membebaskan programmer dari kekhawatiran tentang detail tingkat rendah suatu program (Reisdorph, 1998).

PEMROGRAMAN C DAN MIKROKONTROLER
Pembangunan Perangkat lunak dengan mikrokontroler membutuhkabn suatu pendekatan terstruktur dengna pemrograman. Banyak system terapan harus berjalan 24 jam sehari, 7 hari dalam satu minggu, dan 365 dalam satu tahun. Mereka tidak dapat di reboot ketika terjadi sesuatu kwesalahan. Untuk alas an ini, baris kode yang baik dipelajari dan melalui ujicoba menghasilkan tingkat keutamaan yang baru pada kenyataan mikrokontroler terapan (Lewis, 2002). Fasilitas bahasa C yang terstruktur dan disiplin(utuh) menjadi pendekatan pada design program computer (Deitel & Deitel, 1992). Berdasar pada MacKenzie, keuntungan mengadopsi pendekatan terstruktur pada pemrograman meliputi diantaranya: urutan operasi suatu program begitu sederhana untuk ditelusuri melalui fasilitas debugging, urutannya yang terstruktur membuat mudah untuk dijadikan sub rutin atau fungsi-fungsi, struktur yang ada menjadi dokumentasi sendiri dan memudahkan untuk menjelaskan menggunakan diagram alir, dan pemrograman yang terstruktur menghasilkan peningkatan produktifitas programer (1991).

Mungkin alasan yang paling memaksa untuk menggunakan bahasa tingkat tinggi adalah menyimpan waktu programmer. Compiler C didukung oleh pustaka(library) program C yang mengusung banyak fitur seperti matematika dan penanganan karakter. Menggunakan fungsi standar ini program-program Cmemudahkan programmer untuk menulis, menguji coba dan mereka ulang versi yang sama (Ayala, 2000). Meskipun pustaka fungsi standar adalah teknikal bukan bagian dari bahasa C, mereka didukaung tanpa terkecuali oleh system ANSI milik C (Deitel & Deitel, 1992).

Followers

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified


  © Blogger template 'A Click Apart' by Ourblogtemplates.com 2008

Back to TOP