Tuesday, June 7, 2016

Sekilas ARDUINO UNO R3 dan Pemrogramman bootloadernya

Seperti telah kita ketahui bersama, ARDUINO sudah menjadi standar belajar mikrokontroler. Pemula akan sangat senang belajar mikrokontroler jika menggunakan ARDUINO. Hal tersebut dikarenakan banyaknya library yang disediakan dan banyaknya dukungan hardware tambahan (shield) . Dari keluarga ARDUINO yang paling banyak digunakan sekarang adalah ARDUINO UNO R3. ARDUINO UNO R3 terdiri dari mikrokontroler ATmega328P sebagai inti dan ATmega16U2 sebagai USB to Serial yang berguna untuk download program ke ATmega328P dan juga berguna sebagai komunikasi ATmega328P ke PC. Untuk bekerja, ATmega328P butuh program yang harus dimasukan ke dalam Flash-nya.

ARDUINO UNO R3
Ada beberapa cara memasukan (download) program ke dalam ATmega328P, yaitu;

  1. Melalui Paralel programmer.
  2. Melalui ISP (in System Programmer), contoh programmernya; USBasp, UnivISP, AVR ISP MKII, JTAG IC, USB ISP, dan lain-lain.
  3. Melalui bootloader, ATMEL FLIP, ARDUINO dan lain-lain.
ATmega328P baru, dijual dalam keadaan Flash dan EEPROM yang kosong, belum terisi program apapun. Mikro baru ini hanya bisa diisi dengan dua cara pertama di atas yaitu; melalui paralel programmer atau ISP programmer. Ya ATmega328P baru tidak dapat digunakan langsung pada ARDUINO. Mengapa? Karena programmer melalui bootloader memerlukan suatu program di dalam mikrokontroler yang menerima aliran data kemudian di masukan ke dalam Flash dalam alamat tertentu.
Untuk ARDUINO UNO R3 aliran data diterima melalui serial port ATmega328P lalu disimpan pada alamat Flash 0000H, 0001H, …… dan seterusnya. Contoh lain ARDUINO LEONARDO. ARDUINO LEONARDO menerima aliran data langsung lewat USB lalu disimpan dalam alamat Flash.  Nah proses menerima dan memasukan inilah tugas program bootloader. Bootloader disimpan dalam Flash juga, tetapi pada alamat atas, untuk ATmega328P ARDUINO UNO R3 pada alamat 7E00H sampai akhir alamat Flash 7FFFH. Seperti anak tiri ya dikasih di ujung  Flash. Ya karena fungsinya hanya untuk memasukan program utama pada Flash, setelah itu tidak diperlukan lagi.
Dari PC program akan dialirkan ke ATmega328P melalui USB, lalu diubah ke serial port yang selanjutnya diterima oleh bootloader ATmega328P. Pada ARDUINO terdahulu, proses mengubah aliran data USB ke serial port dilakukan oleh chip FT232RL produksi pabrik FTDI. Contohnya ARDUINO DUEMILANOVE. Pada ARDUINO UNO R3 tugas mengubah aliran data dari USB ke serial port dipercayakan kepada  ATmega16U2. Jika FT232RL adalah IC yang yang berfungsi seba USB to Serial, sedangkan ATmega16U2 adalah mikrokontroler yang diprogram menjadi fungsi USB to serial. Karena mikrokontroler ATmega16U2 dapat di modifikasi menjadi fungsi apapun sesuai dengan kemauan pemrogram.
Jika kita membeli ARDUINO UNO R3 maka kita akan mendapatkan satu board minimum yang telah tertanam ATmega16U2 dengan program USB to serial dan ATmega328P dengan program bootloader. Board tersebut telah siap digunakan untuk mendukung proyek-proyek anda. Dalam mengerjakan proyek tentu ada saja komponen yang rusak atau program yang hilang. Mungkin pada suatu saat ATmega328P pada ARDUINO rusak, atau bootloader pada ATmega328P hilang. Para pemula akan binggung dan cukup panik jika hal ini terjadi, karena tidak cukup membeli ATmega328P baru lalu dimasukan ke soket pada ARDUINO. Sebelum dapat digunakan dalam board ARDUINO UNO R3, ATmega328P harus diprogram bootloader terlebihdahulu. Banyak cara yang digunakan untuk memasukan bootloader ke ATmega328P, diantaranya;
  1. Menggunakan downloader konvensional.
Dengan programmer konvensional kita dapat memrogram bootloader ke ATmega328P. Misalkan USBasp yang kita gunakan. Yang dibutuhkan adalah; USBasp, kabel jumper, ARDUINO dengan ATmega328P baru, serta PC. Rangkai seperti gambar di bawah



Buka sketch ARDUINO dan pastikan Programmer adalah USBasp.

Lalu tekan Burn Bootloader hingga terdapat pesan Done burning bootloader.





Selesai prose burning bootloader.

  1. Menggunakan bantuan ARDUINO lain.
Cara yang ke-2 meminta pertolongan ARDUINO yang lain yang digunakan sebagai downloader. Hubungkan ARDUINO yg di tolong dan penolong seperti gambar di bawah ini:

Buka sketch, pastikan programmer-nya adalah Arduino as ISP





Dan lakukan download bootloader seperti cara nomer satu di atas. Untuk cara ini lebih jelasnya kunjungi https://www.arduino.cc/en/Tutorial/ArduinoISP

  1. Menggunakan USB to serial dijadikan programmer (AVR big bang programmer)
AVR big bang programmer adalah cara memrogram AVR dengan memodifikasi USB to serial menjadi programmer. Port serial terdapat beberapa pin data dan kendali, antara lain TX, RX, RTS, CTS, DTR. Pin-pin tersebut dimanfaatkan sebagai pin-pin ISP yaitu MISO, MOSI, SCK dan RESET. Pertama-tama ARDUINO dirangkai dengan USB to serial seperti berikut ini:


Setelah itu anda harus memodifikasi file programmer.txt. Untuk lebih jelasnya silahkan kunjungi https://learn.adafruit.com/ftdi-friend/programming-the-arduino-bootloader
Satu lagi yang harus diketahui, cara ini membutuhkan waktu yang sangat lama untuk memprogram dibandingkan jika menggunakan programmer konvensional.

  1. Menggunakan ATmega16U2 sebagai programmer.
Cara ke empat ini memanfaatkan ATmega16U2 yang merupakan mikrokontroler. Karena USB to serial berupa mikrokontroler maka bisa dong ATmega16U2 diubah menjadi programmer. Satu yang ada di internet adalah ATmega16U2 diubah menjadi AVRISP MKII. Prosesnya adalah mengganti program USB to serial menjadi AVRISP MKII dengan bantuan bootloader pada ATmega16U2. Ya ATmega16U2 juga dibekali dengan bootloader. Gunanya untuk memasukan program selain menggunakan soket ICSP1.
Sebelum lebih jauh membahas proses download dengan cara ini, terlebih dahulu kita bahas ARDUINO UNO R3 yang ada di pasaran. Tidak semua ARDUINO UNO R3 yang ada di pasaran dapat menggunakan bootloader ATmega16U2. Kalo program bootloader pasti terdapat pada semua ATmega16U2 ARDUINO UNO R3. Lalu apanya? Ya fuse bit-nya. Fuse bit normalnya adalah; Lfuse:0xFF  Hfuse:0xD9  Efuse:0xF4 Lebih jelasnya seperti gambar di bawah ini:


Tapi ada fuse ATmega16U2 ARDUINO UNO R3 yang memiliki nilai; Lfuse:0xFF  Hfuse:0xD9  Efuse:0xFC. Bedanya di mana? Mari kita lihat gambar di bawah ini:


Perbedaannya ada pada HWBE. Jika menurut versi asli ARDUINO HWBE aktif, sedang versi lainya HWBE tidak aktif. Jika HWBE tidak aktif maka pada waktu booting ATmega16U2 tidak mungkin dapat masuk ke bootloader, karena fuse HWBE yang akan mengarahkan reset ke bootloader. Trus bagaimana cara mengecek ARDUINO-ku bisa masuk bootloader atau tidak? Caranya adalah sebagi berikut:
  1. Hubungkan ARDUINO UNO R3 ke PC.
  2. Hubungkan pin5 dan pin6 pada port ICSP1, lalu lepas. Tidak harus pake jumper. Cukup disentuh pakai ujung tespen atau ujung cuter kedua pin tersebut bersamaan, dan tidak perlu lama-lama.


ATmega16U2 akan reset dan karena pin PD7 pull down oleh RN2D maka akan masuk ke bootloader. Pada PC bukan lagi dikenali sebagai USB to serial tetapi ATmega16U2 di bawah driver libusb-win32 device atau PC minta install hardware baru jika belum dikenal.

Gambar di bawah ini device manager bila ATmega16U2 masuk ke bootloader mode.




Jika ARDUINO tetap dikenali sebagai USB to serial seperti gambar di bawah ini maka berarti gagal masuk bootloader.


Kerugian jika tidak dapat masuk ke bootloader adalah; tidak dapat menggunakan bootloader sebagai downloader program ke dalam mikro ATmega16U2.
Keuntungannya adalah ARDUINO UNO R3 tidak pernah masuk ke bootloader. ARDUINO UNO R3 akan tetap dikenali sebagai USB to serial. Tentu tidak akan membingungkan pemula, tidak akan mengacaukan system jika system menggunakan komunikasi USB to serial untuk mengirim/menerima data dari PC.

Sepertinya cukup pengetahuan tentang bootloader ARDUINO UNO R3. Selanjutnya bahasan tentang menggunakan ATmega16U2 sebagai downloader. Yang perlu disiapkan adalah:
a.       Download aplikasi FLIP http://www.atmel.com/tools/FLIP.aspx dan instal pada PC.
b.      Download file hex AVRISP MKII
c.       Tancapkan ARDUNIO ke USB PC, hubungkan sesaat  pin5 dan pin6 pada port ICSP1 agar masuk ke bootloader.
d.      Buka aplikasi FLIP, select device dan pilih ATmega16U2, communication pilih USB dan Open
                      

e.      Load Hex file AVRISP MKII yang kita download tadi, dan Run.                                                                                          

                                    

f.        Lepaskan ARDUINO UNO R3 dari USB dan tancapkan lagi, dan wala….. jadi deh AVRISP MKII. Ya ARDUINO UNO R3 sudah jadi AVRISP MKII.
















g.       Sebelum dapat digunakan driver yg digunakan harus diubah ke libusb-win32 devices. Sebabnya ARDUINO tidak kenal dengan jungo. Dengan bantuan zadig.exe kita rubah drivernya menjadi libusb-win32 devices. Zadig dapat di download di sini.
h.      Sebagai pin-pin programernya menggunakan pin-pin pada port  ICSP1, dan satu pin JP2 sebagai reset. Karena menggunakan JP2, sedangkan JP2 pada ARDUINO UNO R3 belum terdapat header-nya. Beri header dulu seperti gambar di bawah ini

                           


i.       Lalu hubungkan pin-pin ICSP1 sebagai pin-pin programmer AVRISP MKII ke pin-pin ISP ATmega328P seperti gambar di bawah ini.













j.  Pastikan board yang digunakan adalah ARDUINO UNO dan Programmer-nya AVRISP mkII.

                                             

k. Lalu tekan Burn Bootloader dan selesai.

Untuk mengembalikan ATmega16U2 agar dapat menjadi USB to serial kembali maka langkahnya adalah:
  1. Masuk ke bootloader kembali seperti cara di atas.
  2. Jalankan FLIP dan Load file Arduino-usbserial-atmega16u2-Uno-Rev3.hex
  3. Run. Selesai

Untuk lebih jelasnya cara ini bersumber dari:
dan


Kesimpulan
  1. Cara pertama mudah, tapi perlu bantuan downloader. pada contoh perlu USBasp.
  2. Cara ke dua perlu pertolongan ARDUINO UNO yang lain. Kalo Cuma punya satu harus pinjam teman J.
  3. ARDUINO UNO R3 sudah gak pake chip USB to serial. Dan juga harus sabar tingkat dewa karena kecepatan download pake bigbang lama bro.
  4. Cara ke empat repot abis……! Setelah selesai download harus ngembalikan ke USB to serial yang merepotkan lagi. Jika ingin mengisi bootloader kembali, ya harus mulai dari awal. Repoooot Bro.

Bagai mana agar tidak repot? Solusinya ada di tutorial selanjutnya. 

No comments: