WWW.USBINOV.COMPiranti USB untuk PC, Laptop dan Raspberry Pi.

Satu Langkah Mengubah Raspberry Pi Menjadi Bengkel Pemrograman Mikrokontroler AVR

Single-Board Computer Raspberry Pi yang versi terbarunya didukung 4 prosesor dengan 1GB RAM membuat Raspberry Pi semakin bertenaga. Banyak hal yang dapat dilakukan oleh komputer mini berukuran 85×55 mm2 ini. Selain sebagai komponen embedded-system, Raspberry Pi sangat layak digunakan sebagai komputer kerja. Kita dapat menggunakannya untuk mengetik dokumen dengan program word processor, mengolah angka dengan program spreadsheet, mengirim email, browsing, memutar musik, menonton video dan lain-lain sebagaimana layaknya sebuah komputer desktop.

Tak hanya itu, Raspberry Pi juga layak digunakan sebagai sistem pengembangan program, baik program aplikasi berbasis linux maupun program mikrokontroler. Kita dapat mengembangkan program aplikasi menggunakan bahasa-bahasa pemrograman populer antara lain: BASIC, C/C++, Pascal, Python dan Ruby. Bahkan distro linux Raspbian versi terbaru telah menyertakan Java Development Kit yakni Oracle Java Versi 8, sehingga kita bisa mengembangkan program menggunakan bahasa Java dan bahasa-bahasa dengan target JVM seperti Clojure. Cek tulisan ini.

Raspi dan Pemrograman Mikrokontroler AVR

Sesuai dengan judul tulisan ini, maka pada catatan eksperimen ini saya akan memberikan tip bagaimana mengubah Raspberry Pi menjadi bengkel (workstation) pemrograman mikrokontroler AVR. Sebagai sedikit pengantar bagi Anda yang belum mengenal mikrokontroler AVR, AVR adalah salah satu jenis mikrokontroler keluaran ATMEL yang sangat populer. Mikrokontroler AVR adalah komponen utama board mikrokontroler sejuta umat, ARDUINO.

Pada eksperimen ini, saya menggunakan Raspberry Pi B+, board Arduino UNO dan board AVR non-arduino buatan saya sendiri yakni board ATmega8 dan ATmega16. Dan sebagai alat untuk memrogram board mikrokontroler non-arduino saya menggunakan USBASP Programmer.

Raspberry Pi Arduino AVR

AVR-GCC dan AVRDUDE

Untuk dapat membuat program mikrokontroler AVR dibutuhkan kompiler dengan target AVR. Dan untuk memasukkan program hasil kompilasi ke memori program mikrokontroler diperlukan perangkat downloader/programmer dan program aplikasinya. Kompiler C untuk AVR adalah AVR-GCC dan program aplikasi untuk memrogram mikrokontroler adalah AVRDUDE.

Untuk dapat menggunakan kompiler AVR-GCC dan program AVRDUDE, maka perlu dilakukan instalasi terlebih dahulu. Ada 3 paket utama yang harus diinstal yakni:

  • avr-libc
  • binutils-avr
  • gcc-avr

Nah, bagaimana cara instalasinya? Berikut adalah satu langkah instalasi paket-paket program tersebut.

$ sudo apt-get install avr-libc && apt-get install binutils-avr && apt-get install gcc-avr

Tunggu beberapa menit dan setelah proses instalasi selesai, Anda dapat mengujinya dengan beberapa perintah berikut ini.

$ avr-gcc -v
$ avrdude -v

Hasil pengujian instalasi pada Raspberry Pi saya adalah sebagai berikut.

Raspberry Pi AVR-GCC AVRDUDE

Nah, sekarang kita siap memrogram mikrokontroler AVR dengan Raspberry Pi. Kita mulai eksperimen kita dengan Arduino.

Board Arduino UNO menggunakan mikrokontroler ATmega328P dengan kristal 16MHz. Arduino memiliki program bootloader untuk meng-update memori program melalui port serial, oleh karenanya kita tidak memerlukan tambahan peralatan (programmer/downloader) untuk memrogram board Arduino UNO.

Program untuk pengujiannya sederhana saja, yakni menyalakan dan mematikan LED yang ada pada board Arduino. LED ini terhubung pada pin PB5 (PORTB bit ke-5). Berikut adalah listing programnya.

Listing Program blink.c

/*
   blink.c
   Program testing board Arduino UNO
   Menggunakan Raspberry Pi
   Oleh: Chandra MDE
   Blog: Raspberry Pi Notes
   URL: http://raspi.teknikelektrolinks.com
*/

#define F_CPU 16000000L

#include <avr/io.h>
#include <util/delay.h>

#define ON 1
#define OFF 0
#define LED(n) ((n)==(ON) ? ((PORTB|=_BV(PB5)) : ((PORTB&=~_BV(PB5)))

int main()
{
   DDRB = 0b00100000;
   while(1)
   {
      LED(ON);
      _delay_ms(500);
      LED(OFF);
      _delay_ms(500);
   }
   return 0;
}

Ketik program blink.c menggunakan nano atau vi. Pastikan jangan ada kesalahan pengetikan. Setelah selesai, lanjut ke proses kompilasi.

Proses Kompilasi blink.c

Proses kompilasi bertujuan untuk menghasilkan file biner dalam format HEX. Proses kompilasi ini memerlukan beberapa tahapan perintah sebagai berikut:

$ avr-gcc -g -O2 -mmcu=atmega328p -c blink.c
$ avr-gcc -g -mmcu=atmega328p -o blink.elf blink.o
$ avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex

Jika tidak ada kesalahan, maka akan tercipta file blink.hex yang siap kita masukkan ke memori program mikrokontroler ATmega328P pada board Arduino UNO. Untuk keperluan itu, kita gunakan program AVRDUDE.

Memrogram Arduino UNO Dengan AVRDUDE

Seperti telah saya sampaikan sebelumnya bahwa board Arduino dilengkapi dengan  program bootloader untuk meng-update memori program melalui port serial. Dengan demikian, tipe programmer yang digunakan adalah arduino.

Sebelum memanggil program AVRDUDE, kita cari dulu port serial yang digunakan oleh board Arduino. Port serial ini tercipta secara otomatis ketika kita menghubungkan board Arduino ke port USB Raspberry Pi. Port serial yang tercipta biasanya bernama /dev/ttyACM0. Anda bisa mengeceknya menggunakan perintah:

$ ls /dev/tty*

Lakukan sebelum dan sesudah board Arduino terhubung ke port USB Raspberry Pi. Bandingkan daftarnya dan Anda akan menemukan port serial yang digunakan oleh board Arduino.

Selanjutnya, kita bisa memasukkan program blink.hex ke mikrokontroler Arduino UNO dengan perintah:

$ sudo avrdude -carduino -pm328p -P/dev/ttyACM0 -Uflash:w:blink.hex:i

Berikut adalah screenshot proses pemrograman mikrokontroler ATmega328P pada board Arduino UNO menggunakan AVRDUDE.

Raspberry Pi AVRDUDE

Dan sesaat kemudian LED pada port PB5 akan berkedip-kedip dengan durasi-on 500ms dan durasi-off 500ms.

Memrogram AVR Dengan USBASP

Untuk eksperimen ini, saya menggunakan board ATmega8A dengan kristal 7,3728MHz. Pada board ini juga terdapat LED yang terhubung pada pin PB5. Dan karena clock yang digunakan tidak sama dengan board Arduino (16MHz), maka kode program blink.c perlu dimodifikasi pada bagian definisi F_CPU menjadi:

#define F_CPU 7372800L

Raspberry Pi USBASP

Boleh juga kita memodifikasi nilai delay untuk menghasilkan durasi on/off yang lebih cepat atau lebih lambat.

Dan setelah modifikasi selesai dilakukan, kompilasi lagi dengan urutan perintah:

$ rm blink.o blink.elf blink.hex
$ avr-gcc -g -O2 -mmcu=atmega8a -c blink.c
$ avr-gcc -g -mmcu=atmega8a -o blink.elf blink.o
$ avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex

Perhatikan bahwa sekarang kita melakukan kompilasi dengan target MCU=ATmega8.

Untuk memasukkan program blink.hex ke dalam memori program mikrokontroler ATmega8A menggunakan USBASP, gunakan perintah sebagai berikut:

$ sudo avrdude -cusbasp -pm8 -Uflash:w:blink.hex:i

Dan… voila! Program blink.hex masuk ke dalam memori program ATmega8A dengan sukses. Dan LED pun berkedip dengan cerah.

Raspberry Pi avrdude usbasp

Untuk memrogram mikrokontoler ATmega16 atau tipe lainnya, kita tinggal menyesuaikan parameter tipe mikrokontrolernya. Anda bisa mempelajari lebih lanjut mengenai AVR-GCC dan AVRDUDE dengan mengunjungi situsnya.

Kesimpulan

Dengan satu langkah instalasi, kita dapat mengubah Raspberry Pi menjadi bengkel pemrograman mikrokontroler AVR – termasuk didalamnya adalah board sejuta umat ARDUINO. Kini kita dapat menggunakan Raspberry Pi untuk mengembangkan program mikrokontroler AVR. Dan sekedar informasi, saya menggunakan Raspberry Pi B+ dan tidak mengeluhkan masalah kecepatan, apalagi jika menggunakan Raspberry Pi 2.

Mengapa tidak menggunakan IDE ARDUINO?

Tentu saya juga menggunakan IDE Arduino dan saya berencana untuk memberikan catatan eksperimen saya dengan IDE Arduino pada kesempatan mendatang.

Raspberry Pi IDE Arduino

Sekian dulu Catatan Eksperimen Raspberry Pi kali ini, semoga bermanfaat bagi Anda.

Terima kasih sudah membaca dan selamat berkarya.

Add a Comment

Your email address will not be published. Required fields are marked *