Saturday, October 3, 2015

Pemrograman Mikrokontroler AVR di Linux

Setelah mempersiapkan semua aplikasi yang dibutuhkan untuk pemrograman mikrokontroler AVR di Linux maka selanjutnya kita mulai masuk ke proses pemrograman mikrokontroler AVR. Proses ini dimulai dengan proses pembuatan source code atau mengetik kode program, meng-compile source code dan akhirnya jika semua benar akan diperoleh file HEX yang siap didownload ke mikrokontroler.

Dulu hobi mikrokontroler saya sempat off ketika berkomitmen untuk menggunakan Linux secara total dan benar-benar menggunakan Windows. Hal ini disebabkan karena aplikasi yang dibutuhkan untuk pemrograman mikrokontroler seperti Compiler dan Downloader tidak bisa jalan di Linux. Saat itu saya masih menggunakan mikrokontroler MCS51, belum AVR. Aplikasi seperti ACE ISP dan downloader ISP Asim khan tidak bisa dijalankan di Linux karena beda platform software.

Keinginan untuk bisa melakukan pemrograman di Linux khususnya untuk mikrokontroler jenis AVR muncul ketika tuntutan pekerjaan mengharuskan demikian. Kebetulan juga pada komputer di tempat saya bekerja juga saya instal Linux jadi tidak repot dengan lisensi Windows, Anti virus dan sebagainya. Salah satu referensi yang membimbing saya ketika memulai proses pemrograman di Linux adalah tulisan dari Scott W Harden tentang pemrograman AVR di Linux. Tulisan tersebut bisa dibaca disini, trima kasih Scott.

Tulisan tersebut sangat singkat dan ringkas namun jelas dan runtut sehingga mudah dimengerti dan tentunya benar-benar bisa dipraktekkan. Ini karena tulisan tersebut dibuat setelah Scott selesai praktek dan berhasil dalam melakukan pemrograman mikrokontroler AVR di Linux. Dibagian awal artikel ditulis jika alasan Scott melakukannya adalah karena USB programmernya tidak support Windows Vista maupun Windows 7. Pada distro, Scott menggunakan Ubuntu Linux 12.04.

Dan berdasarkan tulisan tersebut saya mulai develop sendiri sistem pemrograman mikrokontroler AVR pada komputer dengan sistem operasi Linux Mint. Bahasa pemrograman yang saya pilih adalah bahasa C sehingga membutuhkan compiler AVR-GCC. Kemudian pada downloader saya tidak menggunakan USB programmer yang Scott gunakan namun mamilih menggunakan Port paralel, alasannya meminimalkan resiko problem. Dan terakhir, aplikasi text editor yang saya pakai bukanlah Geany seperti Scott namun masih sebatas aplikasi text editor bawaan seperti Pluma (Mate) dan Kate (KDE).

Berikut ini sistem pemrograman mikrokontroler AVR di Linux Mint yang telah saya buat dengan chip mikrokontroler yang saya gunakan adalah ATMEGA328P.

Tahap Persiapan Pemrograman

Pada tahap ini harus disiapkan beberapa hal yang mendukung proses pemrograman seperti aplikasi, modul dan downloader. Aplikasi yang dibutuhkan adalah teks editor, compiler AVR-GCC dan downloader AVRDUDE. Karena teks editor sudah ada maka kita hanya perlu menginstal software AVR-GCC dan AVRDUDE.

Hal-hal yang harus disiapkan tersebut diantaranya adalah:
  1. Instalasi AVR-GCC, AVR-LIBC dan AVR-GCC dengan perintah berikut ini :
    sudo apt-get install gcc-avr avr-libc avrdude
  2. Pastikan sudah ada modul minimum sistem mikrokontroler AVR, dalam hal ini saya menggunakan ATMEGA328P.
  3. Pastikan sudah ada hardware downloader, dalam hal ini saya menggunakan sistem downloader dengan Port Paralel Komputer.
  4. Sediakan power supply +5V untuk sumber daya mikrokontroler.
  5. Hubungkan pin ISP downloader (MOSI, MISO, SCK dan RESET) pada modul minimum sistem mikrokontroler ke komputer.
  6. Hubungkan juga koneksi catu daya +5V dari power supply ke modul minimum sistem. 

Tahap Pembuatan Kode Program (Source Code)

Pada tahap ini kita mulai menulis kode-kode program mikrokontroler pada aplikasi teks editor. Bahasa pemrograman yang dipilih adalah bahasa C, alasannya karena mudah dan banyak yang pakai sehingga referensinya juga lebih banyak.

Contoh kode program berikut ini untuk menghidupkan semua Port D selama 1 detik kemudian mematikan Port D selama 1 detik dan diulang terus menerus (loop). Silahkan tulis atu salin pada aplikasi teks editor lalu simpan dengan file ekstensi .c (dot c), misalnya: main.c
 #include <avr/io.h>  
 #include <util/delay.h>  
    
 int main (void)  
 {  
  DDRD = 0xFF;      // Buat semua Port D menjadi output, 0xFF= 1111 1111  
    
  while(1)        //perulangan  
  {  
  PORTD = 0xFF;     // Port D high, 0xFF= 1111 1111  
  _delay_ms(1000);    // Tunda 1 detik  
  PORTD = 0;       // Port D low, 0000 0000  
  _delay_ms(100);    // Tunda 1 detik  
  }  
    
  return 0;  
 }  

Tahap Kompilasi Program

Setelah membuat file dot c (.c) yang berisi source code program mikrokontroler, proses selanjutnya adalah kompilasi program (compile). Proses kompilasi program ini pertama akan mengecek kode-kode program yang kita buat apakah sudah benar penulisannya atau ada yang salah. Jika semua benar baru akan dilakukan proses compile source code menjadi file HEX yang siap di download ke mikrokontroler.

Compiler adalah aplikasi yang digunakan untuk meng-compile program. Karena kita tadi menulis dengan bahasa C maka kita menggunakan compiler AVR-GCC. Ada tiga perintah yang harus dilakukan saat proses kompilasi program, yaitu proses membuat file object(.o) , proses kompile file object dan terakhir copy file object menjadi file hex. Silahkan jalankan perintah dibawah ini satu pada terminal.
avr-gcc -w -Os -DF_CPU=1000000UL -mmcu=atmega328p -c -o main.o main.c
avr-gcc -w -mmcu=atmega328p main.o -o main
avr-objcopy -O ihex -R .eeprom main main.hex
Maksud dari perintah diatas adalah mengkompile source code program dengan opsi chip atmega328p dengan nilai frekuensi clock sebesar 1000000Hz. File HEX hasil keluaran dari perintah diatas adalah main.hex.

Tahap Download file HEX ke Mikrokontroler

File HEX yang kita peroleh dari proses kompilasi program telah siap untuk didownload ke flash memori dari mikrokontroler. Untuk proses ini kita memerlukan aplikasi downloader AVRDUDE dengan dukungan hardware downloader, dalam hal ini saya menggunakan Port paralel dengan sistem koneksi DAPA (Direct AVR Parallel Access).

Proses download file HEX ke chip mikrokontroler AVR dapat dilakukan dengan mengetik perintah berikut ini pada terminal:
sudo avrdude -F -V -c dapa -p ATmega8 -P /dev/parport0 -U flash:w:main.hex
Jika benar akan tamil proses download sampai selesai seperti berikut ini:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e950F
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file “main.hex”
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (94 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 94 bytes of flash written
Jika ditemui error masalah permision, silahkan set CHMOD permision dari /dev/parport0 dengan mengetik perintah ini pada terminal:
sudo chmod 777 /dev/parport0
Dan akhirnya jika proses download berhasil maka akan tampil semua indikator led yang terhubung ke port D bisa menyala selama 1 detik dan mati selama 1 detik. Sampai disini berarti kita telah berhasil membuat sistem pemrograman mikrokontroler AVR di Linux.

Catatan:
Tulisan ini pernah saya muat di blog wordpress saya di alamat URL:
https://abisabrina.wordpress.com/2014/04/27/proses-pemrograman-avr-pada-linux/

0 komentar

Post a Comment