Selasa, 15 Juni 2010

Hal yang Perlu Diketahui Tentang ATmega128

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.

15 komentar:

  1. Bagaimana dengan ATMEGA128L apakah sama untuk inisialisasi diatas??

    BalasHapus
  2. Sepertinya sama, perbedaan antara ATmega128 dengan ATmega128L hanya pada level tegangan dan frekuensi osilator.

    BalasHapus
  3. untuk interface 7 segmen dan keypad pada Atmega 128 itu bagaimana?

    BalasHapus
    Balasan
    1. Tidak ada bedanya dengan interface ke mikrokontroler lain.

      Untuk sebuah 7-segment bisa dihubungkan semua pin segmen (a-g & dot) ke salah satu port mikrokontroler, dan diseri dengan resistor untuk membatasi arus. Kemudian pin common dihubungkan langsung ke GND (untuk jenis common cathode) atau ke VCC (untuk jenis common anode).

      Untuk keypad matriks gunakan metode scanning. Berikan tegangan input di bagian baris keypad secara bergantian sambil dibaca di bagian output di bagian kolom keypad.

      Hapus
  4. gan gmn ganti fuse bit ATmega128 diset secara default ke kondisi 0

    BalasHapus
    Balasan
    1. Maksudnya balikkin ke kondisi default (0) atau diset satu (1)?

      Programmer software yang dipakai apa?

      Hapus
    2. Komentar ini telah dihapus oleh pengarang.

      Hapus
  5. gan, jadi giaman settingan fuse bit nya,?
    saya pake codevision AVR.

    BalasHapus
  6. Ingin tanya pak, saya pernah menyinggung Atmel Atmega128L ditulisan saya berikut: http://datacomlink.blogspot.co.id/2015/11/implementasi-server-websocket-rfc-6455.html
    saya mendapatkan rujukan tentang Atmel dari jurnal berikut http://hdl.handle.net/10.1109/ISORC.2008.59 , nah yang ingin saya tanyakan, bagaimana ya pak cara kerja Atmel Atmega128L, TI cc2420, bisa terhubung dengan sensor humidity & temperature, lalu bisa memberi data lewat protokol zigbee? kira-kira saya perlu belajar dari mana? terima kasih pak

    BalasHapus
    Balasan
    1. Sebelumnya saya tidak punya akses ke jurnal IEEE tersebut, jadi mungkin jawaban saya agak kurang sesuai. Saya berterima kasih jikalau Bapak mau membagikan jurnal tersebut ke saya :-)

      Sepengetahuan saya, Atmel ATmega128L di sini berfungsi sebagai pemroses utama untuk data logger yang didapat dari sensor humidity dan temperatur. Secara berkala data ini dikirimkan ke server memanfaatkan protokol ZigBee menggunakan IC dari Texas Instrument CC2420. ZigBee di sini berada di Data Link Layer pada OSI layer model.

      Dalam hal ini sistem yang dibangun bertindak sebagai WebSocket Client. Jadi untuk bisa menggunakan WebSocket yang Bapak maksud harus ada IP stack, jembatan antara ZigBee (data link layer) dengan WebSocket client/HTTP (application layer). IP stack ini bisa menggunakan avr-uip (https://github.com/avr-uip/avr-uip) untuk mikrokontroler ATmega128L. Nah untuk aplikasi WebSocket client dibuat custom di atas avr-ip ini.

      Hapus
    2. kalau tegangan input dari downloader saat masuk ke uc drop gimana gan ?

      Hapus
    3. wah.. terima kasih banyak pak atas rujukannya >.< , masih ngawang-awang ini pak

      Hapus
  7. Tergantung drop-nya berapa volt. Kalau tegangan untuk memrogram menggunakan SPI, standar tegangan tidak boleh lebih kecil dari yang ditunjukkan di spesifikasi datasheet karena jika lebih rendah proses pemrograman akan gagal.

    BalasHapus
  8. "Pak Komendan,numpang tanya.cara copy file di ic mega128 gimana pak...

    BalasHapus
  9. "Pak Komendan,numpang tanya.cara copy file di ic mega128 gimana pak...

    BalasHapus