5:18 PM
2
Palu, 20/04/2014 (Aris Affandy Sunuh)
Berikut saya akan menjelaskan tentang Timer1 dan Timer0 :
TIMER1
Timer (pembagi)
Dari gambar tersebut X-tal 1 Mhz yang merupakan frekuensi dari luar software karena berasal dari hardware diseleksi dengan Prescaler 1024 sehingga Clock time yang didapat, yaitu:
Clock time           = Xtal/Prescaler
Clock time           =1000000/1024
Clock time           =976,5625 Hz
Clock time           =0,976 kHz
Clock time (f)     = 1/ T
Periode (T)         = 1/ f
Periode (T)         =1/ 976,5625 detik
Pada mode normal TCNT akan mencacah hingga 0xFFFF (65535) setelah itu akan terjadi overflow, keajadian ini akan terus berlangsung selama program berjalan.
TCNT dibagi menjadi 2 nible (atas dan bawah) jika TCNT akan mencacah hingga 0xAECF
TCNTH      = 0xAE
TCNTL       = 0xCF
1 overflow (OV)                = 65535 x frekuensi
1 overflow (OV)                =65535 x (1/976,5625)
1 overflow (OV)                =67,10784 detik
Dalam 1 detik berapa kali terjadi overflow?
S          = 1/ 67,10784
S          =0,01490138857099259937438010223545 kali
Belum terjadi overflow!
Jadi TCNT akan mencacah hingga cacahan
N        = 65535 x 0,01490138857099259937438010223545
N        =976,5625
Jadi agar terjadi overflow maka TCNT diset pada nilai awal
TCNT   = Jumlah cacahan – N
TCNT   = 65535 – 976,5625
TCNT   = 64558,4375 (desimal)
TCNT   = 0xFC2E (heksadesimal)
“Jadi 1 detik diselesaikan dalam 1 kali overflow dengan nilai TCNT = FC2E”
Rumus menentukan overflow
M      = (1 + 0xFFFF) adalah maksimal jumlah cacahan agar terjadi overflow (65535)
f         = X-Tal / Prescaler
T       = 1 / f
OV   = Max / T
OV   =Max / f
OV   =(Max * Prescaler) / X-Tal
S       = 1 / OV
S       =X-Tal / (Max * Prescaler)
N       = Max * (X-Tal / (Max * Prescaler))
N       =X-Tal / Prescaler
TCNT  =  Max – (t * N)
Hitung ulang contoh :
TCNT     = Max – (t * N)
TCNT     =Max – (t * (X-Tal / Prescaler))
TCNT     =(1 + 65535) – (1 * (1.000.000/1024))
TCNT     =(1 + 65535) – 976,5625
TCNT     =64559,4375 (desimal)
TCNT     =0xFC2F (heksadesimal)
TCNTH      = 0xFC
TCNTL       = 0x2F
CONTOH CARA MENGESET TIMER0
1. Set TCCR0 dengan memilih presclaer dan mode operasi
CS02, CS01, CS00 bertugas mendefinisikan pulsa yang masuk ke dalam timer/counter
Clock/ 1024
Force output comparer = off
Waveform generation mode= normal
Comparer match output mode = disconnect
Contoh : jika menggunakan X-Tal 1Mz dan set TCCR0=0×05, artinya prescaler yg dipilih adalah 1024 sehingga pulsa yg masuk akan diseleksi dan berubah menjadi 1Mz/1024= 976Hz bukan 1Mz lagi.
2. Set TCNT0
TCNT0  = 0×00; dimulai dari hitungan 0
TCNT0  = 0x0F; dimulai dari hitungan 128
3. Set OCR0
OCR0  = 0×00; karena tidak menggunakan pembanding, mode CTC dan PWM
4. Set TIMSK secara otomatis akan diset saat terjadi overflow atau comparer
OCIE0 = 1;    flag comparer
TPIE0 = 0;     flag timer/counter
Jadi TIMSK = 0×01
5. Set TIFR secara otomatis akan diset saat terjadi overflow atau comparer
OCF0 = 0;     flag comparer
TOV0 = 1;     flag timer/counter atu overflow
TIFR = 0×02
Mode operasi :
Normal, TCNT0 menghitung hingga 0xFF dan kemudian terjadi overflow.
CTC, TCNT0  menghitung hingga TCNT0 == OCR0 dan OCFO otomatis diset menjadi 1.

2 komentar:

  1. gan ane buat kontrol lampu di 2 ruangan pke 2 sensor PIR. klo kedetek ada gerakan di tunda skitar 10 detik untuk masing masing sensor... masalahnya pas salah satu sensor aktif harus nunggu 10 detik dlu setelah itu sensor lainnya baca. solusinya gmana gan supaya bisa bekerja bersama2, makash

    ReplyDelete
    Replies
    1. Diajak musyawarah, terus diomongin, kalian ini sebagai sensor harus bekerja bersama-sama.

      Delete