Pada tulisan ini diuraikan berbagai teknik untuk memasukkan firmware (program) yang sudah berupa binary (HEX) ke dalam Flash memory pada mikrokontroller keluarga AVR. Teknik tersebut secara garis besar adalah sebagai berikut:
- ISP (In System Programming) atau disebut juga ICSIP (In Circuit System Programming) [1]. Pada teknik ini, firmware dimasukkan dengan protokol serial ke dalam chip mikrokontroler. Pada waktu pemrograman mikrokontroler tidak perlu dilepas dari rangkaiannya.
- HVPP (High Voltage Parallel Programming). Pada teknik ini firmware dimasukkan dengan protokol paralel dengan menggunakan tegangan +12V yang lebih tinggi dari tegangan kerja (+5V).
- HVSP (High Voltage Serial Programming). Pada teknik ini firmware dimasukkan dengan protokol serial dan dengan tegangan +12V. Teknik ini dipakai untuk menggantikan HVPP pada perangkat yang jumlah pinnya terbatas.
- Bootloader. Pada teknik ini pada mikrokontroler diletakkan sebuah program bootloader yang dapat menerima firmware aplikasi dari luar dan kemudian memasukkan firmware itu ke flash memory. Jika menggunakan bootloader, flash memory dibagi sebagian menjadi bootloader, sebagian lagi menjadi aplikasi.
Berikut di bawah ini adalah uraian dari masing-masing teknik tersebut.
In System Programming
Pada programmer jenis ini, pemrograman dimasukkan melalui port SPI (Serial Peripheral Interface) di mikrokontroler AVR. Teknik ini dikenal juga dengan nama ISP (In System Programming), artinya mikrokontroler dapat diprogram pada sistem yang sudah tersolder, tanpa perlu mencopot mikrokontroler tersebut dari PCB.
Pin-pin yang dipakai pada metode ini adalah sebagai berikut
- MOSI
- MISO
- SCK
- Reset
Berikut ini pin ISP pada ATMega8535
Berikut ini rangkaian dasar pemrograman ISP pada ATMega8535
Atmel tidak menyatakan secara eksplisit bagaimana cara menyambungkan pin ISP antara mikrokontroler dengan programmer, namun salah satu konfigurasi yang sering dipakai orang adalah konfigurasi yang dipakai di STK200 (programmer ISP keluaran Atmel).
Programmer AVR dengan ISP melalui Port Paralel
Pada teknik ini, pin-pin ISP di AVR langsung dikendalikan oleh port paralel dari PC.
Ada 2 varian rangkaian jenis ini, yaitu programmer tanpa buffer dan programmer dengan buffer. Blok diagram rangkaian tanpa buffer adalah sebagai berikut:
Blok diagram rangkaian dengan buffer adalah sebagai berikut:
Contoh hardware rangkaian programer jenis ini adalah sebagai berikut:
- Rangkaian AVRISP dari science project [2]
- Programmer tanpa buffer buatan Roland Walter http://www.rowalt.de/mc/
- Rangkaian programmer buatan Mohammad Asim Khan yang sebenarnya untuk AT89Sxx namun dapat juga dipakai untuk AVR. Rangkaian ini kompatible dengan STK200. http://chaokhun.kmitl.ac.th/~kswichit/IspPgm30a/ISP-Pgm30a.html
- Buatan Tahan Prahara ( orang Indonesia lho) http://www.kmitl.ac.th/~kswichit/tahan/stk200/Parallel%20Programmer%20STK200.htm
- Rangkaian buatan saya sendiri: http://www.ee.itb.ac.id/~waskita/content/rangkaian-programmer-at89s51-dan-at89s52 . Rangkaiannya mengacu ke programmer buatan Mohammad Asim Khan
- TwinAVR, sudah dengan software di PC untuk melakukan proses upload/ Artile asli: [3] Terjemahan bahasa Inggris: [4]
Sebagai pasangan hardware programmer, diperlukan juga software di PC untuk melakukan programming. Contohnya adalah sebagai berikut:
- PonyProg http://www.lancos.com/prog.html
- Avrdude yang merupakan bawaan dari WinAVR. http://winavr.sourceforge.net/%20WinAVR
Programmer AVR dengan ISP melalui port serial dengan bit banging
Blok diagram sederhana adalah sebagai berikut:
Pin-pin ISP dikendalikan oleh port serial dari PC, . Pemrograman tidak menggunakan protokol komunikasi serial, melainkan menggunakan metode bit-banging [5]. Contoh rangkaian dapat dilihat di URL berikut. http://www.lancos.com/siprogsch.html .
Software di PC dapat menggunakan PonyProg [6]
Keunggulan programmer ini adalah sederhana dan cukup tangguh, jarang merusak port PC seperti yang menggunakan port parallel. Kelemahannya memerlukan port serial yang on board di desktop PC, jadi tidak dapat menggunakan port serial dari USB serial.
Programmer AVR dengan ISP melalui port serial dengan protokol serial
Pada programmer ini, PC berkomunikasi melalui protokol serial dengan sebuah mikroprosesor. Mikroprosesor ini kemudian mengendalikan pin-pin ISP pada mikrokontroler AVR yang akan diprogram. Contoh Rangkaian
- Programmer yang menggunakan protokol dari application note AVR 910 http://www.kmitl.ac.th/~kswichit/avr910/avr910.htm aslinya dari http://www.mikrocontroller-projekte.de/Mikrocontroller/AVR-Prog/AVR-Programmer.html
- http://avr.fenceline.de/AVR910/AVR910.html
- Ada patch untuk menggunakan AT90S8535 di [7]
Programmer AVR dengan ISP melalui port USB dengan bit-banging
Pada programmer jenis ini, sebuah mikroprosesor (mikroprosesor programmer) dipakai untuk menerima sinyal USB langsung dari PC tanpa menggunakan chip khusus USB. Mikroprosesor programmer ini kemudian memprogram chip AVR melalui koneksi ISP. Biasanya teknik ini memanfaatkan library USB untuk AVR seperti V-USB [8] dan USBtiny [9].
Contoh rangkaian open source:
- AVR Doper [10] “AVR-Doper is an STK500 compatible In-System Programmer (ISP) and High Voltage Serial Programmer (HVSP). It comes with a built-in USB to Serial adaptor to connect directly to USB. “
- USBprog “An open source all purpose tool (AVR ISP, ARM7/ARM9, AT89,JTAG, RS232, IO)” [11]
- USBasp [12]. “USBasp is a USB in-circuit programmer for Atmel AVR controllers. It simply consists of an ATMega88 or an ATMega8 and a couple of passive components. The programmer uses a firmware-only USB driver, no special USB controller is needed.” Contoh implementasi USBAsp [13]
- USB Tiny ISP [14]
Contoh produk jadi:
- USB Prog [15]
- USB Programmer buatan Delta Kit Surabaya http://deltakits-sby.com/shop/product_info.php?products_id=1956
Beberapa software yang dapat dipakai:
- Software Khazama dapat dipakai sebagai front-end [16]
Programmer AVR dengan ISP melalui port USB dengan chip USB
Pada programmer jenis ini, sebuah mikroprosesor (mikroprosesor programmer) memberikan sinyal ISP ke mikrokontroler AVR, sedangkan sinyal USB diterima dengan chip khusus USB, biasanya IC dari keluarga FTDI.
Contoh programmer
- Bus Pirate, programmer serba guna untuk berbagai mikrokontroler [17] . Teknik pemrograman AVR dengan programmer ini dapat dibaca di [18]
Bootloader
Programmer AVR dengan bootloader melalui port serial
Pada programmer jenis ini, pada AVR yang akan diprogram diaktifkan dulu suatu program kecil bernama bootloader. PC mengirimkan software yang akan diprogramkan ke program bootloader ini , kemudian program bootloader akan memprogram memori Flash dengan program yang diinginkan tersebut.
Mikrokontroler ATMega yang baru tidak memiliki software bootloader. Untuk menjalankan bootloader, software bootloader mesti dimasukkan dulu ke dalam flash memory dengan ISP ataupun dengan paralel programmer. Sebagian memori flash akan dipakai untuk program bootloader, sehingga memori yang tersisa untuk program aplikasi akan berkurang.
Contoh software bootloader
- Bootloader dibahas di application note 109 [19], detail teknisnya diuraikan di sini [20]
- ATMega16 Bootloader http://pramode.net/2008/01/23/avr-atmega16-bootloader-experiments/ ,
- http://www.siwawi.arubi.uni-kl.de/avr_projects
- Arduino bootloader http://www.arduino.cc/
Variasi programmer ini adalah dengan menggunakan perangkat USB to Serial, sehingga dapat dipakai pada Desktop/Laptop yang memiliki port USB namun tidak memiliki port serial.
Contoh:
High Voltage Parallel Programmer
PROGRAMMER TEGANGAN TINGGI (HV PROGRAMMER)
Programmer ini mengakses flash di AVR melalui port paralel di AVR, bukan melalui port ISP Pada waktu pemrograman diperlukan tegangan +12V pada pin tertentu, oleh karena itu teknik ini disebut programmer tegangan tinggi. Tegangan tinggi di sini tidak mencapai puluhan ataupun ratusan volt, tapi hanya +12 V. Keunggulannya utama programmer adalah dapat dipakai untuk memprogram chip AVR yang sempat dimatikan SPI atau pin Resetnya. Kelemahannya adalah rangkaian programmernya cukup kompleks dan juga chip mikrokontroler yang diprogram harus dilepas dari PCB.
Terdapat beberapa rangkaian programmer yang berbasis berbasis dari board STK500 sebagai berikut:
- http://www.der-hammer.info/hvprog/index_en.htm
- http://makecircuits.com/blog/2009-04-05-high-voltage-parallel-programmer-avr.html
- http://www.scienceprog.com/avr-serial-and-parallel-high-voltage-programmer/
- AVR Doper http://www.obdev.at/products/vusb/avrdoper.html
Programmer paralel tegangan tinggi sederhana: