Laman

Sabtu, 28 Desember 2013

MICROCONTROLLER TIMER DAN COUNTER


Timer & Counter merupakan fitur yang telah tertanam di mikrokontroler AVR yang memiliki fungsi terhadap waktu. Fungsi pewaktu yang dimaksud disini adalah penentuan kapan program tersebut dijalankan, tidak hanya itu saja fungsi timer yang lainnya adalah PWM, ADC, dan Oscillator. Prinsip kerja timer dengan cara membagi frekuensi (prescaler) pada clock yang terdapat pada mikrokontroler sehingga timer dapat berjalan sesuai dengan frekuensi yang di kehendaki.
Timer merupakan fungsi waktu yang sumber clocknya berasal dari clock internal. Sedangkan counter merupakan fungsi perhitungan yang sumber clocknya berasal dari external mikrokontroler. Salah satu contoh penggunaan fungsi timer yaitu pada jam digital yang sumber clocknya bisa menggunakan crystal oscillator dan contoh penggunaan counter pada penghitung barang pada konveyor yang sumber clocknya berasal dari sensor yang mendeteksi barang tersebut.
Pada mikrokontroler ATMEGA 16 memiliki 3 buah timer yaitu timer 0 (8bit), timer1 (16bit), dan timer 2 (8bit). Untuk mengenai register lengkapnya bisa dibaca pada datasheet. Namun yang akan dibahas pada tulisan kali ini hanya timer 0(8bit) dan timer1 (16 bit) saja.
Register yang Digunakan untuk Timer & Counter
  • TCNT0 = Register Timer 1
  • TCNT 1 = Register Timer 0
  • Ttimer0 = Periode Timer 0
  • Ttimer 1 =Periode Timer 1
  • Tosc = Periode Clock
  • Fosc = Frekuensi Crystall Clock
  • N = Prescaler (1, 8, 64, 256, 1024)
Prescaler
Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang digunakan atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256 atau 1024.
Contoh penggunaan prescaler :
Suatu mikrokontroler menggunakan crystal dengan frekuensi 8 MHz dan timer yang digunakan adalah Timer 1 (16 Bit) maka maksimum waktu Timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh + 1)
= 0.125 µs x 65536
= 0.008192 s
Untuk menghasilkan waktu Timer yang lebih lama dapat menggunakan prescaler 1024, maka waktu Timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1) x N
= 0.125 µs x 655536 x 1024
= 8.388608 s
Tujuan Penggunaan Timer & Counter
  1. Melaksanaan tugas secara ber-ulang
  2. Mengendalikan kecepatan motor DC (PWM)
  3. Melakukan perhitungan (Counter)
  4. Membuat penundaan waktu (delay)
TIMER 0 (8 Bit)
Blok Diagram Timer 0
Untuk perhitungan timer 0 dapat menggunakan rumus :
Ttimer0 = Tosc*(256-TCNT0)*N     → (8 Bit = 256 ≈ 2^8)
Sebenarnya Timer 0 tidak dapat menghasilkan periode selama 1 detik karena keterbatasan jumlah bit nya (8 bit = 256). Namun dengan penggunaan rumus dapat dilakukan pemanipulasian agar timer 0 dapat menghasilkan periode waktu selama 1 detik. Dengan cara membuat timer selama 0.01 detik lalu dilakukan perulangan sebanyak 100 kali sehingga akan menghasilkan waktu 1 detik (0.01 detik x 100 kali = 1 detik).
Contoh penggunaan untuk timer 0  dengan crystal 12 MHz dan menggunakan skala clock 1024 maka akan menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
0.01 = 0.083*(256-TCNT0)*1024
TCNT = 128= 8A (Hexadesimal)
Berdasarkan perhitungan tersebut di dapatkan 8A, maka nilai tersebut harus di inputkan ke register TCNT0 agar timer 0 bernilai 1 detik. Berikut ini contoh penggunaan nya pada Codevision AVR :
TIMER 1 (16 Bit)
Blok Diagram TImer 1
Untuk perhitungan timer 1 dapat menggunakan rumus :
Ttimer 1 = Tosc*(65536-TCNT1)*N     →(16 Bit = 65536 ≈ 2^16)
Contoh penggunaan untuk timer 1 detik (Timer1 = 1 detik) dengan crystal 12 MHz dan menggunakan skala clock 1024 maka akan menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
1 = 0.083*(65536-TCNT1)*1024
TCNT = 53818 = D23A (Hexadesimal)
Berdasarkan perhitungan tersebut di dapatkan D23A, maka nilai tersebut harus di inputkan ke register TCNT1 agar timer 1 bernilai 1 detik. Berikut ini contoh penggunaan nya pada Codevision AVR :
Counter 0 & 1
Untuk penggunaan fungsi counter pada mikrokontroler lebih mudah jika dibandingkan dengan fungsi timer, karena tidak memerlukan perhitungan untuk penginputan nilai ke register TCNT. Register TCNT akan secara otomatis akan mencacah jika ada input yang masuk, input yang masuk contohnya dapat berupa push button.
Pada Counter 0, input berasal dari T0 atau PORT B 0 yang mampu mencacah input hingga 256 (8 Bit). Berikut ini konfigurasi Counter 0 pada Codevision AVR :
Pada Counter 1, input berasal dari T1 atau PORT B 1 yang mampu mencacah hingga 65536 (16 Bit).
Untuk konfigurasi counter 0 & 1 pada Codevision AVR sama seperti konfigurasi Timer 0 dan 1.

ADC MICROCONTROLLER


ADC (Analog Digital Converter) merupakan fitur pada mikrokontroler yang berfungsi untuk mengkonversi sinyal/data dari besaran analog menjadi besaran digital. Mengapa harus di konversi ? Karena sebagian besar data/sinyal yang ada di dunia ini merupakan besaran analog. Pengkonversian data dari analog ke digital merupakan suatu cara untuk mengolah data analog tersebut agar dapat di modifikasi, di manipulasi dan mengubah karakteristiknya.
Contoh besaran analog yang sering di temui dalam kehidupan sehari-hari yaitu suhu, cahaya, kecepatan,tegangan, suara, dll. Fitur ADC ini sering digunakan dalam proses industri dan komunikasi digital. ADC inilah yang menghubungkan antara sensor dengan sistem komputer yang telah terintegrasi.
ADC memiliki 2 faktor penting pada penggunaannya yaitu Kecepatan Sampling dan Resolusi. Dimana kecepatan sampling ini berpengaruh terhadap seberapa banyak sinyal analog yang di konversi ke sinyal digital dalam satuan waktu. Satuan waktu yang digunakan yaitu SPS (Sample per Second). Sedangkan resolusi ADC berpengaruh terhadap ketelitian hasil konversinya. Resolusi pada mikrokontroler AVR ada 2 yaitu resolusi 8 bit dan 10 bit.

Fitur ADC Mikrokontroler AVR ATMega 16/32
ADC 8 Bit dan 10 Bit
ATMEGA 16 memiliki 8 channel ADC yang ber-resolusi 8 bit dan 10 bit. Yang dimaksud 8 channel adalah pada PORTA, PORT0 sampai PORT 7 (8 PORT).  Jadi rentang nilai pada 8 bit sebesar 2^8 = 256 dan pada 10 bit sebesar 2^10 = 1024. Nilai analog yang digunakan untuk acuan konversi dari mikrokontroler sebesar 5V. Nilai ini juga dapat diubah tergantung dengan kebutuhan dari referensi analog yang kita gunakan. Pada mikrokontroler ATMEGA 16 tegangan referensi dapat diaktifkan melalui pin AREF dan AVCC yang sebelumnya telah diberikan tegangan.
Jadi jika nilai konversi ADC ke digital seperti berikut :
  1. Nilai 0 pada ADC akan menghasilkan tegangan 0 Volt
  2. Nilai 512 pada ADC akan menghasilkan tegangan 2.5 Volt
  3. Nilai 1024 pada ADC akan menghasilkan tegangan 5 Volt
Untuk nilai ADC yang akan di interfacingkan dengan mikrokontroler dapat di variasikan menggunakan potensio, sensor suhu, sensor ultrasonik, dll
Konfigurasi ADC pada Codevision AVR
  
Secara default Codevision akan mengkonfigurasi ADC menjadi 10 bit jika kita meng-enable-kan konfigurasinya. Jika ingin menggunakan ADC dengan resolusi 8 bit maka perlu untuk men-check list pada menu tersebut.
Untuk perintah pembacaan program ADC dapat menggunakan listing program berikut :
int ADC;
ADC=read_adc(0);