Senin, 04 Agustus 2008

Dasar:Mikrokontroller Atmel AVR 8 bit

Atmel Semiconductor sudah mengeluarkan mikrokontroller seri AVR 8 bit yang menurut saya memiliki banyak keunggulan dibandingkan seri 89C51. Keunggulan tersebut antara lain (perbandingan dengan ATMEGA32):
1. Variannya sangat banyak, mulai dari yang 8 pin sampai 64 pin
2. Memiliki internal EPROM, anda tidak perlu lagi memakai batere untuk mem-backup isi RAM
3. Memiliki 8 channel ADC 10 bit
4. Memiliki internal oscilator, sehingga bisa dikonfigurasikan tanpa Xtal.
5. Ram internal 2kb (bandingkan 89C51 yang hanya 128byte)
6. 32KB EEPROM untuk program (89C51 hanya 4kb)
7. Internal watch dog. Nah ini penting, sehingga bisa mencegah sistem hang
8. Brown-out detector, juga mencegah hang.
9. In-system programming, tidak perlu programmer khusus
10. Punya port SPI, I2C
11. Arsitektur RISC, 1 instruksi hanya dilaksanakan 1 clock, bandingkan 89C51 membutuhkan 6-12 clock.
12. Dan yang paling penting:Development tools, cross compiler (C) gratis! Bandingkan dengan 89C51 harus memakai Frankln Cross Compiler yang harganya selangit...

Untuk developmentnya, saya biasanya memakai bahasa C, karena kalau memakai assembly, rumit banget dan memusingkan (menurut saya...) Dengan memakai bahasa C, pemrograman menjadi sangat mudah dan cepat. Kalau mau mencoba memakai bahasa Pascal, bisa juga, silahkan cek www.mikroe.com

Jadi, tinggalkan kebiasaan lama memakai bahasa Assembler untuk pemrograman mikrokontroller, gunakan bahasa C jika anda ingin development yang cepat dan mudah... Gratis juga kan?

Tertarik? Sekarang mari kita persiapkan tools nya yang gratis itu:

Software di PC:
1. AvrStudio Versi 4.13 Build 571 (ini yang saya pakai), silahkan download di www.atmel.com
2. WinAVR Versi 20071221, download di www.sourceforge.net atau search menggunakan google, keyword WinAVR
3. PonyProg2000 download di http://ponyprog.sourceforge.net

Catatan:
WinAVR dengan nama avr-gcc tersedia juga di linux, cuma saya belum mencobanya.

Programmer:

Untuk programmernya kita harus membeli Universal Programmer seharga 10 Juta-an... Kaget? Enggak kok, cuma harus menyiapkan uang sekitar 10 ribu untuk:
1. DB25 Female
2. 4 buah resistor 100 ohm
3. Konektor 6 pin, bisa memakai Header 6 pin
4. Kabel isi banyak kurang lebih 1meter (atau kabel pita)




Konektor DB25 adalah konektor yang dicolokkan ke paralel port untuk memprogram. Nah, dalam proses programmingnya, setiap PCB (atau desain) yang anda buat memakai mikrokontroller AVR, harus menyiapkan konektor 6 pin yang terhubung ke:
1. GROUND
2. Reset (Pin 9 pada ATMEGA32)
3. Not connected
4. SCK (Pin 8 pada ATMEGA32)
5. MISO (Pin 7 pada ATMEGA32)
6. MOSI (Pin 6 pada ATMEGA32)

Sekarang kita buat rangkaian yang paling sederhana, setidaknya kita bisa meyakinkan bahwa seluruh proses mulai dari pembuatan software sampai memprogram AVR berjalan dengan lancar.



Rangkaian sederhana ATMEGA32:



Rangkaiannya mirip dengan 89C51, Xtalnya juga bisa memakai standar 89C51, cuma capasitor xtalnya 22pF. Rangkaian ini berfungsi untuk menyalakan 3 buah LED saja karena tujuan kita adalah menguji apakah ATMEGA32 ini bisa berfungsi atau tidak.

Untuk power supply, gunakan 5 Volt, bisa menggunakan LM2576, 7805 atau sumber tegangan lainnya, hanya jangan sampai lebih dari 5.5 Volt karena dapat mengakibatkan ATMEGA32 rusak.

Mari kita desain software yang bisa menyalakan ketiga led tersebut bergantian tahap demi tahap.

Pembuatan Software ATMEGA32

1. Install AvrStudio yang sudah didownload
2. Install WinAVR
3. Install PonyProg2000

Apabila semuanya sudah diinstall, silahkan buka software AVRSTUDIO nya.

1. Pilih Project – New Project
2. Pilih AvrGCC dan nama project, serta folder project itu disimpan. Lihat gambar dibawah:



Opsi Create Folder akan membuat satu folder baru untuk project yang akan kita buat. Untuk projectnya, saya beri nama:testpertama. AVRStudio akan membuat folder testpertama di My Documents
3. Klik Next



4. Pilih Debug Platform:AVR Simulator dan ATmega32 pada Device.
5. Klik Finish
6. Klik Project – Configuration Option



7. Pilih opsi seperti gambar diatas. Frequency diisi dengan 11059200 hz. Optimization pilih O0 (tanpa optimasi).
8. Klik Ok
9. Sekarang anda telah siap untuk menuliskan source codenya:



10. Isi source code dengan:



#include < avr/io.h >
#include < avr/interrupt.h >
#include < inttypes.h >
#include < avr/iom32.h >
#include < stdio.h >
#include < math.h >
#include < avr/pgmspace.h >
#include < avr/eeprom.h >
#include < avr/wdt.h >

int main(void)
{
DDRC=0xff;
PORTC=0x01;

while (1);
}

Gunakan source code diatas sebagai tempate apabila anda akan membuat software pada platform ATMEGA32. Memang saat ini tidak semua header pada include dipergunakan, tetapi tidak masalah apabila dimasukkan sebagai template.

Pada bahasa C, awal eksekusi adalah pada fungsi main(void), fungsi dari masing-masing perintah tersebut adalah:

DDRC=0xff;
Berfungsi untuk memberitahu ATMEGA32 bahwa PORTC akan dipakai untuk OUTPUT. Silahkan baca datasheet ATMEGA32 mengenai DDR (Data Direction Register)

PORTC=0x01;
Adalah perintah untuk memprogram PORTC agar berisi 01 hexa (00000001 biner).

while (1);
Adalah perintah looping tak berakhir, maksudnya, setelah 2 perintah tersebut dijalankan, sistem akan diam disini.

11. Klik Build – Rebuild all

Apabila dibagian bawah tertulis Build succeded with 0 warnings... berarti proses kompilasi berhasil. Sekarang mari kita isikan hasil kompilasi tersebut ke IC ATMEGA32

12. Siapkan kabel programmer yang sudah dibuat, colokkan ke Paralel Port
13. Sambungkan ujung yang lain kabel programmer yang dipasang header 6 pin ke pin 6 – 9 pada ATMEGA32
14. Jalankan software PonyProg
15. Pilih AVRMicro dan ATMEGA32 pada sebelah kanan atas software ponyprog
16. Pilih Setup-Interface setup dan ikuti setting dibawah:



17. Klik Probe, jika jawabannya Ok, berarti sambungan kabel benar.
18. Klik Setup-Callibration, kemudian Ok (hanya jalankan pada pertama kali merun ponyprog saja)
19. Klik File – Open Program, kemudian cari file hex pada folder My Documents\testpertama\default
20. Klik Command-Write Program, sampai muncul pesan bahwa pemrograman sukses. Jika pemrograman gagal, cek kembali hubungan kabel.
21. Klik Command-Security and Configuration Bit
.


22. Sesuaikan dengan gambar diatas, klik pada BODLEVEL, BODEN dan CKOPT
23. Klik Write
22. Klik Ok, coba reset mikrokontroller dengan memutus dan menyambungkan kembali power supply.
23. Lihat apakah led yang terhubung ke pin 23 dan 24 menyala dan led yang terhubung ke pin 22 mati. Jika ya, berarti anda sudah sukses memprogram ATMEGA32 dengan bahasa C! Kenapa hanya 2 led yang menyala padahal port C diisi angka 1? Silahkan pelajari source code dan rangkaiannya.

Sekarang, mari kita buat agar LED tersebut menyala bergantian.

Tambahkan pada program satu buah fungsi delay, sehingga program menjadi:
.
.
.
void tunggu(unsigned int dx)
{
unsigned int x;
unsigned int y;

for(x=0;x< 500;x++)
{
for(y=0;y< dx;y++) {}
}
}

int main(void)
{
DDRC=0xff;

while (1)
{
PORTC=0x06;
tunggu(500);
PORTC=0x05;
tunggu(500);
PORTC=0x03;
tunggu(500);
}
}

Coba dicompile dan dimasukkan ke mikro nya, apakah benar lednya menyala bergantian?

Pengembangan lebih lanjut:
1. Output port C dihubungkan dengan 8 buah lampu 220 Volt melalui isolasi optis yang dibahas pada posting mengenai isolasi optis.
2. Buat program yang membuat ke 8 lampu tersebut menyala bergantian.
atau
Anda dapat juga membuat alat pencegah maling seperti yang terdapat pada posting saya di bagian isolasi optis.

11 komentar:

Ugly Duclin' mengatakan...

Test kirim komentar...

Tomy Abuzairi mengatakan...

thanks ya infonya,,

speedracer mengatakan...

Mas.. saya bener2 awam soal mikrokontroller ini.. tapi saya pengen blajar nih.. mau tanya dong:

1. itu programmernya dibikin di PCB terpisah ya? kalau misalnya saya mau program pake laptop gimana caranya? (laptop saya ngga ada port DB25 nya) apakah bisa dengan kabel usb to DB25?

2. ATMEGA itu harganya di pasaran brapa? saya pengen eksperimen sama LED seperti yang mas contohin

terima kasih atas jawabannya

Ugly Duclin' mengatakan...

untuk membuat programmer AVR, tidak perlu pakai PCB, cukup pake kabel saja dan beberapa resistor sesuai skema di blog saya.
Saya belum coba pakai kabel USB ke DB25, yg pernah berhasil itu pakai PCMCIA to DB25 (Paralel Port).
Harga ATMEGA32 (di bandung) sekitar 50rb-an mas.
thanks,
riza

Unknown mengatakan...

Mas isi blognya menarik sekali, sangat bermanfaat. mau tanya donk:

1. Kabel Programmer yang saya gunakan Menggunakan Serial (DB9). rangkaiannya hampir sama dengan rangkaian Paralel (DB25). Pertanyaan saya: kabel programmer ini kok tidak bisa meng-lock microcontroller (atmega8) ya? padahal di ponyprog, configuration bitsnya sudah saya ceklist lock1, lock2 maupun bootlock12 dan bootlock11 ?

2. Adakah cara lain untuk meng-lock micro?

3. Bagaimana caranya Mengembalikan Configuration bits mikro ke internal clok (atmega8), jika kita tidak tahu status configuration bits terakhir yg kita download?

Anonim mengatakan...

info yang bermanfaat

adjie mengatakan...

nice info

Anonim mengatakan...

koq avr sudio q gak ada Avr GCC nya?
cuma ada asemblerr aj
gimana cra nambahin AVR GCC
tanks

hariagung.prabowo@yahoo.com

Ugly Duclin' mengatakan...

AVR-GCC bisa didownload di:
http://winavr.sourceforge.net/

sebelumnya install dulu AVRStudio, kemudian win-avr nya, secara otomatis di AVRStudio ada avr-gcc.
Thanks,

Kalem Brow mengatakan...

Salam mas Ugly.
akhirnya saya berhasil membuat control on/off menngunakan port paralle pemrograman java itu pun berkan pedoman yang di berikan mas.

"saya ucapkan terimakasih"

saya ingin menambah pengetahuan tentang komunikasi usb ke microkontroler mohon bantuannya mas

salam hormat
terimakasih.

Ugly Duclin' mengatakan...

mas kalem,
Saya ikut seneng kalau mas bisa mendapatkan ilmu dari blog saya...
Untuk komunikasi USB mikrokontroller ke USB, ada cara mudahnya, yaitu memakai port serial di mikrokontroller, kemudian menggunakan USB to SERIAL interface yang banyak dijual dipasaran, atau bisa juga menggunakan kabel data handphone, karena biasanya didalamnya ada konverter usb to serial.
Thanks,
riza