Mengenal lebih dalam tentang Mikrokontroler Atmega8

Pada postingan kali ini kita akan membahas lebih dalam tentang ATMega8. Disini kita fokuskan pada pembahasan tentang fungsi pin, clock, fuse bit, dan lain-lainya.

Mikrokontroler ATMega8 merupakan mikrokontroler keluarga AVR 8bit. Beberapa tipe mikrokontroler yang “sekeluarga” dengan ATMega8 ini antara lain adalah ATMega8535, ATMega16, ATMega32, ATmega328, dan sebagainya. Yang membedakan antara mikrokontroler tersebut antara lain adalah, ukuran memori, banyaknya GPIO (pin input/output), peripherial (USART, timer, counter, dll). Dari segi ukuran fisik, ATMega8 memiliki ukuran fisik agak kecil dibandingkan dengan beberapa mikrokontroler yang tersebut di atas. Namun untuk segi memori dan periperial lainnya ATMega8 tidak kalah dari yang lainnya karena ukuran memori dan periperialnya hampir sama dengan ATMega8535, ATMega32, dan lain-lainnya, hanya saja jumlah GPIO lebih sedikit dibandingkan mikrokontroler yang telah disebutkan diatas. Untuk pemahaman lebih lanjut akan kita bahas di berikut ini.

Fungsi dan Kebutuhan Pin

Pinout(kaki-kaki) IC mikrokontroler ATMega8 yang berpackage DIP dapat dilihat berikut ini.


Seperti yang kita lihat ATMega8 memiliki 3 buah PORT utama yaitu PORTB, PORTC, dan PORTD dengan total pin input/output sebanyak 23 pin. PORT tersebut dapat berfungsi sebagai input/output digital atau berfungsi sebagai periperial lainnya.

1. PORTB

PORTB merupakan jalur data 8bit yang dapat berfungsi sebagai input/output. Selain itu PORTB juga dapat memiliki fungsi alternatif seperti yang tertera pada gambar di berikut ini.


ICP1(PB0), berfungsi sebagai Timer Counter 1 input capture pin.

OC1A(PB1), OC1B(PB2) dan OC2(PB3) dapat difungsikan sebagai keluaran PWM (pulse width modulation).

MOSI(PB3), MISO(PB4), SCK(PB5), SS(PB2) merupakan jalur komunikasi SPI. Selain itu pin ini juga berfungsi sebagai jalur pemograman serial (ISP)TOSC1(PB6) dan TOSC2(PB7)dapat difungsikan sebagai sumber clock external untuk timer.

XTAL1(PB6) dan XTAL2(PB7) merupakan sumber clock utama mikrokontroler. Perlu diketahui, jika kita menggunakan clock internal (tanpa crystal) maka PB6 dan PB7 dapat difungsikan sebagai input/output digital biasa. Namun jika kita menggunakan clock dari crystal external maka PB6 dan PB7 tidak dapat kita gunakan sebagai input/output.

2. PORTC
PORTC merupakan jalur data 7bit yang dapat berfungsi sebagai input/output digital. Fungsi alternatif PORTC antara lain adalah :
ADC 6 channel (PC0,PC1,PC2,PC3,PC4,PC5) dengan resolusi sebesar 10bit. ADC dapat kita gunakan untuk mengubah input yang berupa tegangan analog menjadi data digital.

I2C (SDA dan SDL) merupakan salah satu fitur pada PORTC. I2C yang digunakan untuk komunikasi dengan sensor atau device lain yang memiliki komunikasi data tipe I2C seperti sensor kompas, accelerometer nunchuck, dan lain sebagainya.

RESET merupakan salah satu bagian pin penting pada mikrokontroler, RESET berfungsi untuk merestart program. Pada ATMega8 pin RESET digabungkan dengan salah satu pin IO (PC6). Secara default PC6 ini didisable(OFF) dan diganti menjadi pin RESET. Kita dapat mendisable(OFF) fungsi pin RESET tersebut untuk menjadikan PC6 sebagai pin input/output. Kita dapat melakukan konfigurasi di fusebit untuk melakukan setingannya, namun disarankan untuk tidak merubahnya karena jika pin RESET di disable(OFF) maka kita tidak dapat mengisikan program melalui jalur ISP.

3. PORTD
PORTD adalah jalur data 8bit yang masing-masing pin-nya bisa juga difungsikan sebagai input/output. Sama seperti PORTB dan PORTC, PORTD ini juga memiliki fungsi alternatif seperti terlihat pada gambar berikut ini.
USART (TXD dan RXD) merupakan jalur data komunikasi serial dengan level sinyal TTL. Pin TXD yang berfungsi untuk mengirimkan data serial, sedangkan RXD adalah kebalikannya yaitu sebagai pin yang berfungsi untuk menerima data serial.

Interrupt (INT0 dan INT1) adalah pin dengan fungsi khusus sebagai interupsi hardware. Interupsi biasanya digunakan sebagai selingan dari program, contohnya bila pada saat program berjalan kemudian terjadi interupsi hardware/software maka program utama akan berhenti dulu dan akan menjalankan program interupsi tersebut.

XCK bisa difungsikan sebagai sumber clock external untuk USART, tapi kita juga dapat memanfaatkan clock dari CPU, sehingga tidak perlu menggunakan external clock.

T0 dan T1 berfungsi untuk masukan(input) counter external untuk timer 1 dan timer 0.

AIN0 dan AIN1 keduanya ini merupakan masukan input untuk analog comparator.

Kebutuhan Clock
Sumber clock pada ATMega8 secara umum ada 2 buah clock, yaitu clock internal dan clock external. Untuk clock internal maksimum clock yang dapat digunakan adalah 8MHz, dan untuk clock external maksimum clock yang dapat digunakan adalah sebesar 16MHz. Lebih jelasnya mengenai macam sumber clock dapat dilihat pada tabel berikut ini.
Untuk sumber clock external kita dapat menggunakan rangkaian RC osilator atau crystal osilator. Namun biasanya yang lebih umum digunakan adalah osilator bertipe crystal.

Fuse Bit
Fuse bit adalah merupakan salah satu hal yang harus diketahui dan difahami betul bagi kita yang baru belajar mikrokontroler. Di fuse bit ini kita dapat melakukan konfigurasi clock, fungsi pin, bootloader, dan lain-lain. Namun, jika kita belum faham benar  tentang fuse bit ini disarankan untuk tidak mengutak-atik setingan/pengaturan fuse bit, karena jika salah dalam pengaturan fuse, mikrokontroler kita bisa saja tidak dapat diprogram kembali (tapi bukan berarti rusak). ATMega8 memiliki dua buah fuse bit yaitu Fuse High Byte dan Fuse Low Byte.

Kali ini kita akan jelaskan tentang pengaturan fuse bit yang pentingnya saja. Salah satunya untuk pengaturan clock source dan salah satu fuse bit yang penting yaitu RESET DISABLE. Biasanya bagi kita yang masih baru belajar AVR, masalah yang sering dihadapai adalah delay waktu yang tidak sesuai dengan yang tertulis di program (pengalaman pribadi). Salah satu penyebabnya dalam hal tersebut adalah kita belum mengatur fuse bit yang berfungsi sebagai pengaturan clock. Pengaturan clock ini berada pada bagian Fuse Bit Low yang antara lain pada bit CKSEL0, CKSEL1, CKSEL2, CKSEL3

Beberapa pilihan pengaturan clock dapat dilihat berikut ini :

CKSEL = 0000 => Ext. Clock
CKSEL = 0001 => Int. RC 1HMz
CKSEL = 0010 => Int. RC 2MHz
CKSEL = 0011 => Int. RC 4MHz
CKSEL = 0100 => Int. RC 8MHz
CKSEL = 0101 => Ext. RC 0.9MHz
CKSEL = 0110 => Ext. RC 0.9MHz – 3MHz
CKSEL = 0111 => Ext. RC 3MHz – 8MHz
CKSEL = 1000 => Ext. RC 8MHz – 12MHz
CKSEL = 1001 => Ext. Cystal Low Freq
CKSEL = 1010 => Ext. Cystal Low Freq
CKSEL = 1011 => Ext. Cystal Low Freq
CKSEL = 1100 => Ext. Cystal Medium Freq
CKSEL = 1101 => Ext. Cystal Medium Freq
CKSEL = 1110 => Ext. Cystal High Freq
CKSEL = 1111 => Ext. Cystal High Freq

Untuk pengaturan clock dengan mode crystal external dengan frekuensi  12 MHz/16MHz biasanya mengunakan pilihan CKSEL = 1111 . Untuk melakukan pengaturan fuse bit ini kita membutuhkan sebuah downloader(seperti USBasp). Biasanya tools untuk mendownload program sudah menyediakan fitur untuk melakukan pengaturan fuse bit ini. 

Ada satu hal lagi fuse bit yang paling penting di ATMega8, yaitu RSTDSBL. Bit ini digunakan untuk pemilihan PC6/RESET. Ketika kita masih baru belajar AVR dulu, kita pernah melakukan kesalahan yg lumayan fatal, kita fikir dengan mengganti RESET menjadi PC6 kita bisa mendapatkan IO yg lebih banyak (jika tidak menggunakan reset) namun ternyata alhasil, mikro kita tidak bisa diprogram lagi karena pin RESET sudah didisable(OFF) . Makannya dianjurkan untuk pemula tidak usah mengutak-atik fuse bit yang lain kecuali CKSEL (untuk pengaturan clock ), karena jika salah settingan maka mikrokontroler kita tidak dapat diprogram kembali. Mungkin untuk fuse bit yang perlu dipahami bagi pemula hanya 2 itu saja, untuk yang lainnya jarang digunakan (seperti bootloader, RESET vektor, dan lain-lainnya).
Previous
Next Post »