Sedikit berbagi pengalaman tentang AVR saja, setelah lama tidak bermain dengan AVR, kali ini tadi saya mencobanya kembali dengan membersihkan debu - debu yang banyak menempel pada downloader dan juga microprosesor saya (ATMEGA8535). Kebetulan karena saya sedang ada projek membuat tulisan berjalan, mungkin akan saya upload projeknya pada tulisan berikutnya (Coming Soon :P).
ATMEGA8535 yang saya gunakan terakhir kali menggunakan settingan dari pabrik yaitu dengan settingan internal clock 1 MHz (CKSEL=0001, SUT=10), untuk itu saya akan merubahnya supaya xtal external saya bisa aktif (xtal external 16 MHz). Jujur saja saya lupa, setelah buka - buka datasheet malah menjadi semakin ragu. Setelah nekat mencoba data dari datasheet, saya memilih CKSEL=0111 dan SUT=01 ternyata konfigurasi tersebut malah menjadikan chip saya 'brick' atau terkunci. PROGISP saya akan selalu memunculkan pesan kesalahan "Chip enable program error".
Menurut pengamatan saya, chip ini tidak mau diakses dari downloader karena beberapa faktor
- Koneksi MISO MOSI SCK RESET atau power dari downloader tidak terhubung dengan benar.
- Tidak adanya osilasi dari crystal yang cocok
Faktor 1
Sambungan antara downloader dan chip saya buat lagi pada breadboard untuk memastikan bahwa tidak ada sesuatunya yang kurang terhubung. Semuanya terhubung dengan baik, saya melakukan testing pembacaan isi chip saya yang lain (ATMEGA32A) dapat berjalan dengan lancar, namun tidak pada ATMEGA8535 saya. Tentunya ada yang tidak beres disini.
Faktor 2
Saya mencoba menghubungkan xtal external sebesar 16MHz kepada 8535 saya, saya berharap banyak akan berhasil, namun hasilnya nihil :(
Setelah saya pikir - pikir mungkin ini terjadi karena osilasi sebesar 16MHz tidak memberi efek pada clock chip, untuk itu saya mencoba mencari sumber clock generator lain dan mencoba googling dan menemukan artikel ini (link). Pada link tersebut dijelaskan bahwa dia menggunakan bantuan Arduino untuk mengenerate clock sebesar 1MHz yang diinputkan pada chipnya. Tidak ada salahnya mencoba, saya pun ikut mencoba, dan hasilnya SUKSES !!
Pada konfigurasi tersebut, chip membutuhkan clock sebesar 1MHz (kasus saya) untuk berjalan, maka dari itu bisa dipancing dengan sebuah clock generator yang bersumber dari Arduino saya. Source code untuk program di Arduinonya
Setelah compile dan upload ke board Arduino, tinggal tancapkan pin 3 ke pin tempat xtal 1 berada di chip, dan ground arduino disambung dengan ground microcontroller yg error.void setup() {
pinMode(3, OUTPUT);}void loop() {
while(1) {
PIND |= _BV(3);}}
Tidak Punya Arduino ??
Solusi untuk ini adalah mungkin mencari xtal sebesar 1Mhz (kasus saya) untuk dipasangkan pada chip yang error, atau menggunakan chip AVR lain untuk menggenerate clock untuk disambungkan pada chip. Anda juga bisa memanfaatkan jika anda punya clock generator yang bisa digunakan untuk menggantikan crystal.
Solusi Lain ?
Forum yang saya temui ada yang menyarankan untuk menggunakan JTAG, STK500, atau HVPP (High Voltage Pararel Programming). Alat yang khusus digunakan untuk memperbaiki fusebit yang salah konfigurasi adalah fusebit doctor, saya menemukan orang lokal yang jual alat tersebut, silahkan ke sini. Mungkin jika anda punya alat - alat yang saya sebutkan diatas, bisa langsung digunakan.
Sekian dulu, saya kurang bisa menjelaskan panjang lebar, karena elektro memang bukan basic saya, daripada saya salah - salah menjelaskan, silahkan tanya ke mbah google saja :)
Good Luck !
Referensi
- http://ilmubawang.blogspot.com/2012/03/avr-fusebit-doctor.html
- http://blog.strobotics.com.au/2009/05/23/recovering-from-incorrect-fuse-settings-on-the-stobit/
- http://ilmubawang.blogspot.com/2012/03/avr-fusebit-doctor.html
- http://agfi.staff.ugm.ac.id/blog/index.php/2009/12/mengenal-system-clock-pada-mikrokontroler-avr/
Sob. Kan Pin 3 arduino di hubungkan ke kaki xtal atmega, nah terus kaki x tal satunya dihubungkan ke mana????
ReplyDeleteTernyata itu caranya gampang banget boss, cuma tinggal colokin pin 3 arduino ke xtal 1 sama gnd arduino ke ic gnd,tapi yang pin xtal 2 dikosongin dulu boss jangan dicolok kemana mana ,sama yg xtal 1 juga jangan dicolok kemana mana dulu cuma colok ke pin 3 dari arduino
DeleteTernayata carannya gampang banget boss,Tinggal colok pin 3 arduino ke xtal 1 ic, tapi yg xtal 1 sama xtal 2 dikosongin dulu boss jangan dicolok kemana mana xtal 1 dicolok ke pin 3 arduino aja yg xtal 2 jangan dicolok kemana mana boss trs gnd arduino colok ke gnd ic
DeleteTinggal colok pin 3 arduino ke xtal 1 ic, tapi yg xtal 1 sama xtal 2 dikosongin dulu boss jangan dicolok kemana mana xtal 1 dicolok ke pin 3 arduino aja yg xtal 2 jangan dicolok kemana mana boss trs gnd arduino colok ke gnd ic
Delete