AVR ISP shield untuk memrogram ATmega328P

Berikut ini catatan untuk meminimalkan risiko lupa mengenai penggunaan AVR ISP Shield.

Pembacaan kode original Arduino Uno

Perhatikan pengaturan penggunaan parameter di Avrdudess agar Avrdude tidak menghapus isi program di Arduino Uno. Di dalam Arduino Uno sebelumnya telah diunggah kode blink.

Pengosongan ATmega328P

IC ATmega328P 28-pin PDIP yang masih kosong dapat dibeli dengan bebas di toko-toko online. Bentuk fisiknya sama persis dengan IC ATmega328P 28-pin PDIP yang dipakai di Arduino Uno. Perbedaannya hanya karena pada IC di Arduino Uno telah dimasukkan bootloader.

Langkah pengosongan IC baru ini tidak selalu perlu. Saya hanya ingin mencoba saja.

Kondisi default ATmega328P sebagai berikut ini

https://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p&LOW=62&HIGH=D9&EXTENDED=FF&LOCKBIT=CF

HVPP/AVR Fuse Bits Doctor

Umumnya pengaturan ulang cukup dilakukan dengan dongle USBasp dan Avrdude. Tetapi jika fuse bits & lock bits tidak bisa diubah dengan USBasp atau programmer low voltage lain maka bisa mempergunakan HVPP. Ada beberapa versi, bisa membuat sendiri atau membeli yang sudah jadi.

Papan HVPP ini meggunakan catu daya 12 Vdc. Hubungkan caru daya hanya setelah IC mikrokontroler dipasang dengan benar di tempatnya. IC mikrokontroler harus ditempatkan sesuai ukuran dan jumlah pin. Perlu diperhatikan arah hadap agar posisi kaki no 1 (yang ditandai titik) menjadi benar. Versi alat yang ini memiliki tiga LED, merah untuk kondisi error, kuning untuk menandakan proses berhasil setelah start, dan hijau yang berhubungan dengan proses penghapusan program yang telah diisikan. Di penanda no 2 adalah tombol start yang sebaiknya ditekan untuk memastikan prosesnya berlangsung. Penanda 3 menunjukkan sakelar yang bisa ditekan untuk membiarkan alat dalam posisi boleh menghapus isi program selain melakukan set pada fuse bits & lock bits. Jika dinonaktifkan dalam posisi batang sakelar tertinggi maka jika ada program di dalam mikrokontroler akan dibiarkan, tidak dihapus. Jika proses penghapusan diizinkan maka LED warna hijau akan menyala walaupun redup.

Penyalinan isi Arduino Uno dengan USBasp

Sebelum melanjutkan percobaan dengan shield, saya mencoba mempergunakan ATmega328P yang baru sebagai pengganti ATmega328P yang sudah disediakan oleh pabrik di dalam Arduino Uno.

Kondisi fuse bits & lock bits disesuaikan dengan kondisi asli Arduino Uno. Isi program disalin dari Arduino Uno.

https://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p&LOW=FF&HIGH=D6&EXTENDED=FD&LOCKBIT=CF

Sebagaimana gambar di atas, pemrograman dengan menggunakan hex file yang disalin dari IC ATmega328P Arduino Uno sebelumnya telah berhasil.

Capture kode asal dari Arduino Uno

Pemeriksaan dilakukan apakah kode blink yang telah dimodifikasi sebelum diisikan ke Arduino Uno dapat berfungsi dengan baik di IC ATmega328P yang baru.

Pengisian bootloader (MiniCore) Arduino untuk ATmega328P

IC yang dipakai dalam keadaan kosong (factory reset). Pengisian bootloader coba dilakukan dengan Arduino IDE+USBasp+Development Board.

Simpulannya cara ini tidak bisa dipakai. Akan lebih praktis mempergunakan langsung papan Arduino UNO dengan Arduino IDE dan USBasp sebagai berikut. Proses diulangi dengan melakukan reset pada IC.

Setelah proses Burn Bootloader selesai, berikutnya dilajutkan dengan pengujian penggunaan Arduino UNO seperti biasa. Dongle USBasp dan koneksi ISP/ICSP dilepas. Kabel USB dipasang sebagai hubungan dari laptop ke papan Arduino UNO. Pengujian dilakukan dengan menggunakan kode contoh standar, blink, dan berhasil sebagaimana gambar di bawah ini.

ArduinoISP

IC ATmega328P no 1 yang baru ini akan dipakai untuk uji coba penggunaan Arduino UNO sebagai pengisi ATmega328P kosong yang lain (IC no 2). Kali ini yang akan dipergunakan adalah ArduinoISP yang telah tersedia di Arduino IDE, bukan file yang berasal dari Open-Smart.

Gambar di atas ini menunjukkan baha proses burning the bootloader telah berhasil. Meskipun fasilitas shield berupa buzzer dan beberapa LED tidak terpakai.

IC no 2 yang baru diprogram dipindahkan ke papan Arduino UNO dan diuji. Hasilnya, IC itu berfungsi dengan baik.

Selain menggunakan kode contoh ArduinoISP dapat juga dipergunakan kode OPENSMART_ISP.ino yang dibuat khusus untuk shield ini. Sehingga indikator tambahan LED dan buzzer bisa berfungsi.

Sebagai uploader program

Jika sebelumnya AVR ISP shield pada dasarnya dipergunakan untuk ‘membuat Arduino UNO yang baru’, maka kali ini akan dicoba mempergunakannya sebagai code uploader. Penggunaan ini serupa dengan penggunaan USBasp.

Jika sebelumnya dipergunakan pengaturan 16 Mhz, maka kali ini yang dipakai adalah 8 Mhz sesuai dengan frekuensi kristal di ATmega8/88/328P development board. Lakukan Burn Bootloader agar pengaturan konfigurasi dapan dilakukan (misalnya untuk fuse bits).

Gambar di atas adalah modifikasi dari kode contoh, blink. Bedanya LED yang akan dibuat berkedip bukan berada di kaki 19 (PB5/digital pin 13 Arduino UNO), melainkan berada di kaki 2 (PD0/digital pin 0 Arduino UNO).

Maka percobaan ini membuktikan bahwa sama seperti USBasp, ArduinoISP dapat berfungsi sebagai programmer.

Melakukan upload file hex dengan ArduinoISP

Masih sama dengan USBasp, ArduinoISP (termasuk jika mempergunakan OPENSMART_ISP) dapat dipakai untuk mengunggah (uploading) file hex ke IC target. Misalnya untuk kali ini IC target juga sama-sama ATmega328P.

Gambar di atas menginformasikan proses upload telah berhasil. IC juga telah berhasil dicoba dioperasikan di sistem target (yang bukan Arduino UNO).