Beberapa hari yang lalu, saya mencoba menggunakan ATmega128 untuk pertama kalinya. PCB saya rancang sendiri kemudian pembuatan PCB-nya saya serahkan kepada jasa pembuatan PCB yang menurut saya lumayan bagus. Dengan bermodal satu buah IC ATmega128 TQFP saya pasang deh IC tersebut menggunakan solder tangan.

Secara kasat mata pemasangan IC tidak ada masalah. Namun ternyata masalah muncul ketika saya mengunduh software saya ke IC (flashing). Prosesnya selalu saja gagal, padahal semua sudah dicek, dari programmer-nya, kabelnya, dan koneksinya ke pin MISO, MOSI, dan SCK. Semuanya ok, tetapi tetap saja saya belum berhasil mengisi ATmega128 ini.

Setelah beberapa lama saya cari di datasheet mengenai serial programming, ternyata ATmega128 sedikit berbeda dalam hal serial programming. Biasanya pin yang digunakan untuk serial programming sama dengan pin yang digunakan untuk komunikasi data SPI (Serial Peripheral Interface), yaitu pin MOSI, MISO, dan SCK. Namun pada ATmega128, MOSI dan MISO pada mode pemrograman harus dihubungkan ke pin PDI(PE0) dan PDO(PE1), untuk SCK tetap dihubungkan ke pin SCK. Nah, ternyata ini dia masalahnya.

Setelah masalah tersebut terpecahkan, proses pengunduhan berjalan sempurna, begitu juga dengan pengaturan fuse bit. Namun, begitu IC sudah diprogram ternyata program yang saya pasang tidak jalan sama sekali. Padahal saya hanya membuat program sederhana untuk mencoba apakah hardware yang saya buat berjalan dengan baik, hanya menyalakan LED dan mematikannya. Begitu pula dengan pengaturan fuse bit, saya sengaja membiarkan nilai default terpasang pada IC karena dengan anggapan bahwa pengaturan sumber clock default yaitu internal oscillator sebesar 1MHz lebih mudah untuk digunakan.

Beberapa hari saya tidak bisa menemukan sumber masalahnya sampai akhirnya saya teringat akan satu bit pada fuse bit yang mengatur kompatibilitas antara ATmega128 dengan ATmega103. Perlu diketahui bahwa sebelumnya ATMEL pernah mengeluarkan mikrokontroler tipe ATmega103 dengan konfigurasi pin seperti pada ATmega128. ATmega128 ini dikeluarkan untuk menggantikan ATmega103, dengan banyak tambahan fitur yang tidak ditemukan pada ATmega103. Salah satunya adalah penambahan Port G pada ATmega128. Kebetulan program yang saya buat menggunakan Port G, sehingga tidak ada tanda-tanda program berjalan. Tidak hanya Port G saja yang berbeda, bahkan seperti Timer dan UART pun berbeda. Untuk lebih jelasnya baca datasheet pada bagian ATmega103 and ATmega128 Compatibility halaman 4 & 5, atau pada Application Note “Replacing ATmega103 by ATmega128”.

Ok, akhirnya masalah tersebut terpecahkan dan program coba-coba yang saya buat dapat berjalan dengan baik. Namun ada hal penting yang perlu diperhatikan di sini, yaitu bit “ATmega103 compatibility mode” pada fuse bit ATmega128 diset secara default ke kondisi 0 (programmed).

Ini berarti ketika kita beli IC ATmega128 baru, tidak ada bedanya dengan kita membeli ATmega103 jika kita belum merubah fuse bit ini!

Jadi cukup “menyesatkan” bagi orang yang ingin membangun sistem dari ATmega128 tetapi belum mengetahui sama sekali apa itu ATmega103 (seperti saya :-) )

Semoga bisa membantu bagi yang mengalami masalah tersebut.