Timer di AVR

Timer dalam embendded system sangat banyak kegunaannya.Itulah karenanya setiap mikrokontroler terdapat fitur timer. Mikrokontroller AVR keluaran Atmel memiliki beberapa timer(ATmega16 dalam hal ini,tipe lain yang lebih tinggi sama ,kecuali penambahan jumlah timernya),diantaranya timer0(8 bit),timer1(16 bit),dan timer2(8 bit).

Timer0 dan timer2(8 bit).

timer ini menghitung maksimal 255 hitungan.dimana periode setiap hitungan(detaknya) tergantung dari setting prescaler-nya. Untuk mengatur timer mode operasi apa yang digunakan dan mengatur prescaler digunakan register TCCRx(x=0,2).TCCRx adalah register 8 bit sebagai berikut:

FOC0 WGM00 COM01 COM00 WGM01 CS2 CS1 CS0

7 6 5 4 3 2 1 0

CS0,CS1,CS2 digunakan untuk pengaturan prescaller, misalnya

0 0 0 : timer dihentikan jika diset nilai ini

0 0 1 : sekali detaknya sama dengan detak oscillator crystal yang digunakan

0 1 0 : sekali detaknya sama dengan oscillator/8.misalnya oscilator 8 MHZ,maka sekali detak 1 perlu 1 mikrodetik.atau pada hitungan maksimal 255 us.

(atau clock berdetak 8 kali,timer baru sekali)

ànilai cs0,1,2 lain dapat dilihat di datasheetnya.

WGM00 dan WGM 01 digunakan untuk mode operasi dari timer,

Mode-Mode kerja Timer

1.mode normal,timer digunakan untuk ngitung saja,membuat delay,menghitung selang waktu .

2.mode PWM,phase correct

3.CTC,dalam mode ini ,nilai timer yang ada pada TCNTx akan di nol-kan lagi jika TCTx sudah match dengan nilai yang ada pada register OCRx.sebelumnya OCR diset dulu,.karena timer0 dan 2maksimumnya 255,maka range OCR 0-255.

4.Fast PWM

COM00,01:tergantung mode apa yang digunakan(nilaiWGM),COM00,01 untuk pengaturan lebih spesifik suatu mode timer.

Jadi hal utama jika akan menggunakan tiemr adalah setting TCCRx-nya,digunakan untuk mode apa(secara default,adalah sebagai mode normal).dan ketika saat timer jalan,jumlah hitungannya dapat dilihat Di register TCNTx.

Jika menggunakan compiler Seperti CodeVision ,penggunaannya auto generated,namun walaupun begitu ketika troubleshoot program setting manual adalah penting.

Interrupt Timer

1.Overflow Interrupt,akan terjadi interrupt jika TCNTx mencapai 255 untuk timer0 dan timer2 ,dan 65535 untuk timer1.

2.Compare Match interrupt,terjadi jika nilai OCR sama dengan TCNTx

Contoh Aplikasi:

1. Jam digital.

Digunakan Compare Match Interrupt,menggunakan crystal 12 MHZ,digunakan timer 0

Dengan prescaller Osc/8: 12mhz/8=1,5 mhz periode 1/1,5mhz==sekitar 100 us,jadi agar setara 1 detik harus dikali 10000.

Register OCR=0×96.

Output :tampilan Jam:Menit:Detik pada port C yang terhubung dengan LCD 2×16

/*********************************************

Project : jam digital

Date : 7/13/2007

Author : edee

Chip type : ATmega16

Program type : Application

Clock frequency : 12.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*********************************************/

#include <mega16.h>

#include <stdlib.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0×15

#endasm

#include <lcd.h>

unsigned int kdetik=0,detik=0,menit=0,jam=0;

unsigned char cdetik[10],cmenit[10],cjam[10];

// interrupt jika compare match

interrupt [TIM0_COMP] void timer0_comp_isr(void)

{

TCNT0=0; //jika sudah compare match,set awal lagi

if(++kdetik==10000)

{

if(++detik==60)

{ detik=0;

lcd_clear();

if(++menit==60)

{ menit=0;

lcd_clear();

if(++jam==24)

{

jam=0;

lcd_clear();

}
}
}
kdetik=0;
itoa(detik,cdetik);
itoa(menit,cmenit);
itoa(jam,cjam);
lcd_gotoxy(9,0);
lcd_putsf(“:”);
lcd_gotoxy(10,0);
lcd_puts(cdetik);
lcd_gotoxy(6,0);
lcd_putsf(“:”);
lcd_gotoxy(7,0);
lcd_puts(cmenit);
lcd_gotoxy(4,0);
lcd_puts(cjam);
lcd_gotoxy(0,1);
lcd_putsf(“= Jam Digital =”);

}

}

void main(void)

{

//PA.5,6,7 input,dengan pull up

PORTA=0xE0;

DDRA=0×00;

PORTB=0×00;

DDRB=0×00;

PORTC=0×00;

DDRC=0×00;

PORTD=0×00;

DDRD=0×00;

//timer 0 sumber 12mhz/8=1,5 mhz periode 1/1,5mhz

TCCR0=0×02;

TCNT0=0×00;

OCR0=0×96; //sekitar 100us

TCCR1A=0×00;

TCCR1B=0×00;

TCNT1H=0×00;

TCNT1L=0×00;

OCR1AH=0×00;

OCR1AL=0×00;

OCR1BH=0×00;

OCR1BL=0×00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0×00;

TCCR2=0×00;

TCNT2=0×00;

OCR2=0×00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0×00;

MCUCSR=0×00;

// interrupt timer digunakan

TIMSK=0×02;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

// Analog Comparator Output: Off

ACSR=0×80;

SFIOR=0×00;

lcd_init(16);

#asm(“sei”)

while (1)

{

};

}

2.Pengukur selang waktu

Dalam aplikasi ini timer digunakan untuk mengukur selang waktu dua kejadian,dimulai start dan stop(tanpa menggunakan interrupt apapun)

Deklarasi awal:

#define TSTART() TCCR1B = 0×02

//stop timer

#define TSTOP() TCCR1B = 0×00

#define TRESET() TCNT1=0×00

#define THABIS 65000

Penggunaan di program:

TSTART();

while(PINB.0!=1) //jika syarat stop terpenuhi

{

hitung++;

if(hitung==THABIS) //sampai nilai max

{ //j=0; // return 0;

break;

}

}

TSTOP();

t=TCNT1;

akhir2 ini sering pake timer.

47 comments so far

  1. zackyu on

    numpang tanya dong,,,

    kalau aplikasi timer untuk menggerakkan 18 buah servo secara hampir bersamaan dengan sudut yang berbeda bagaimana??

    mohon bantuannya,,,,

    dalam hal ini saya menggunakan ATmega32,,,

    terima kasih,,,

  2. edee on

    seingettku motor servo nge drive nya dengan pwm yaa?,dimana besar sudut setara dengan lebar pulsa(high) pwm dlm satu periode secara periodik.jadi pakae timer juga bisa,masalahnya kan jumlah timer atmega32 terbatas,Gimana kalau pakai multiplexer?.jadi pakai satu timer aja,gantian.mau bikin robot berkaki yach :-)

  3. ZUHDIE on

    butuh pertolongan,,

    gmn kalo menhitung selang waktu antara inputan pertama dengan inputan berikutnya,trus hasil penghitungan selang waktu tersebut dijadikan input untuk menggerakkan motor steper???

    mohon pertolongannya..

    terima ksih bnyk bgt..

  4. Joko Priyanto on

    saya masih bingun soal timer dan counter pada mikro.
    soalnya saya baru mengenal mikro 3 bulan yang lalu.
    mohon bantuannya donk mengenai hal tersebut.
    dan moho satu contoh program sederhana dengan aplikasi tiner dan counter.contohnya lampu kedip.
    trimakasih byak……….???

  5. edee on

    ==@ZUHDI
    untuk menghitung selang waktu dua kejadian dengan timer,dapat menfaatkan fitur external interrupt pin pada AVR(INT0,INT1…dll),eksternal interrupt yang terjadi dimanfaatkan untuk mengatifkan timer,nah output dari timer ini bisa di konvert ke satuan yang diinginkan, us,milisekon,sekon dll.
    ==@JOko
    untuk mempelajari timer(dan fitur lainnya),yang penting itu pelajari register2nya!!,kalo timer register yg dgunakan TCCR(ngeset mode kerja) dan TCNT(pnampung hitungan),dan register lain ,di datasheet diterangkan dgn jelas.

  6. alhakim on

    yup.. avr emang lebih mantap apalagi kalau programmingnya pakai bahasa C plus Code Vision. :)

  7. edee on

    iya :-D ,tp mo migrasi ke avr-gcc dgan ide avr studio,kan gratis,open source gtu

  8. momogie on

    klo pake x-tal yg 4MHz n 12MHz pengaruh ga sih sama itungan timernya?

  9. edee on

    ngaruh mas momogie…

  10. aku on

    minta bantu kasih contoh program mengukur selang waktu menggunakan timer dengan memanfaatkan eksternal interrupt int0 dan int1… dan cara mengkonvert output dari timer ke us or ms…
    klo bisa cepat ya.. soalnya kurang ngerti mikro.. klo bisa contohnya lengkap kayak contoh jam digital..
    mksh…

  11. oth3rside on

    hohoho
    bzi skali skrang aq….

    misalnya kamu capture kejadian 1 di INT0 dan kejadian 2 di INT1,
    menggunakan timer1(16bit-max 65535 tik)

    //aktif jika int0 ada input,awal kejadian
    interupt external_0
    {
    start timer1
    }
    //aktif jika int1 ada input,akhir kejadian
    interupt external_1
    {
    stop timer1
    waktu=mikro_sekon+konvert_us(TCNT)
    tampilkan LCD
    TCNT=0;
    }
    //
    interupt timer1overflow
    {
    mikro_secon++
    }

    konvert_us adalah rutin pengubah ke us,tergantung menggunakan crystal dan prescaler timer berapa

  12. aku on

    thanks ya dah dijawab..
    jika menggunakan crystal 11.059.200…. trus prescaler 1024, 256, 64, 8 bedanya apa??

  13. aku on

    oh iya sekalian nanya dari contoh jam digital..

    Dengan prescaller Osc/8: 12mhz/8=1,5 mhz periode 1/1,5mhz==sekitar 100 us,jadi agar setara 1 detik harus dikali 10000.

    Register OCR=0×96.

    prtanyaanya periode 1/1,5mhz == sekitar 100us cara ngitungnya gmn?

    trus register ocr=0×96 buat ngatur apa??
    sorry nanya mulu.. coz baru belajar…

  14. aku on

    oth3rside…..
    tolong dong yang lengkap mslah selang waktu… soalnya dicobain gak bisa2 eum.. aku pengen seperti proyek jam digital dicoba langsung jalan…

    tolong ya ya ya…
    klo bisa cepet… biar lansung dicoba n berhasil…

    aku tunggu jawabannya,,

  15. dk on

    tolong dong yang bsa ngajarin timer….

    aku gak ngerti….

    aku mau belajar private

    klo da yang bisa email za ke
    dikdik_w4hyu@yahoo.com

  16. oth3rside on

    @aku-1
    Jika digunakan sumber crystal dengan nilai berbeda tentu menghitungnya juga berbeda.Prescaler digunakan
    untuk mengatur besarnya frekuensi Timer berdasarkan nilai dari crystal yang digunakan
    misalnya crystal 11,059 Mhz dengan prescaler 8,maka frekuensi timer = 11,059 dibagi 8 = 1.382375 Mhz -> Nilai menunjukkan dalam sedetik timer menyampling 1.3 juta kali.
    periode=1/f=1/1.3juta=0.76923 mikrosecon
    jadi setiap 0.76923 us,register TCNT nambah satu bit.

    @aku-2
    cara ngitung spt diatas,
    register OCR(on compare register),pada program jam digital diatas saya gunakan untuk, interupt comapre match–interupt yang terjadi jika register OCR= TCNT—
    pda program jam digital:
    nilai 0×96(hexa)= 150 desimal
    100 us didapat dari 150 x perioda timer
    =150 x 0.666667 us
    =100 us

    @aku-3
    namanya mencoba kan tdak harus langsung bisa :-D
    (buzy TA mas,bsok senin ini sidang ,doakan sukses ya :-) )

    @dk
    tempat belajar otodidak: http://www.avrfreaks.com
    Nice Place……

  17. dk on

    otherside………

    mau tanya boleh gak aku private ke km….

    bingung nyari pengajar..

    klo boleh tau alamat dan no. telpnya….

    biar enak nanyanya langsung..

    bisa di email ke

    dikdik_w4hyu@yahoo,com

    saya berharap bgt ma kamu…

    tolong blz,,,,,

  18. meep on

    ruarr biazaaaa mas otherside ini…serba bisa euy! btw mas uda punya ce blum? pasti mpe kewalahan y nolak2 ce cz pinternya selangiiittt….
    peace mas propesor :D

  19. oth3rside on

    @ DK
    Add aja Instant messenger ku: edieryhjce[at]yahoo.com

    @meep
    pEhhh,ahli efek doopler mampir lagi…….
    aq ga bisa mbedakan pujian n hinaanmu
    jadi drpada aku salah sangka(kpala membesar-eh besar kepala)
    jadi di sama rata aj,itu adalah HINAAN :-P :-D
    Ce ?
    huw bout 4pri*ia? apa ada penawaran heheheh

  20. meep on

    waakakakkakakkk
    *******
    ********
    (hadoh…ojo nyebut nama prop…off the record…)

    empty words was deleted

  21. aku on

    mas otherside…

    aku dah nyoba program selang waktu

    kyak yang dibawah ini, eror gak ada.. cuman belum jalan… gmn ya??? kurang apalagi.. trus cara nampilin ke LCDnya jg belum bisa…

    #include
    #include
    #define start_timer1()TCCR1B=0×02
    #define stop_timer1()TCCR1B=0×00
    #define reset_timer1()TCNT1=0×00
    #define habis_timer1()65000
    #include

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0×15 ;PORTC
    #endasm
    #include
    unsigned int mikro_secon;
    unsigned int waktu;
    unsigned int konvert_us;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    start_timer1();
    }

    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Place your code here

    stop_timer1();
    waktu=mikro_secon+++konvert_us;
    TCNT0=0;

    }

    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
    mikro_secon++;
    }

    tolong bantuannya…. pusing eum…

  22. aku on

    mas otherside….

    kok coment yang aku hilang…
    yang beserta program yang minta dikoeksiin…

    gmn mas bisa ajarin gak?? minta no telp…

    komen yang mana, hub lewat email aja?

  23. aku on

    mas otherside bisa minta ketemuaan gak???

    minggu besok tgl 27.. aku mau belajar ke kamu..
    masalah program bahasa c..

    biaya lain2 ada…

    jadi private sehari gitu…

    klo bisa kirim no. telp km ke dikdik_EL05@yahoo.com

    tolong bgt ya bisa…

    Konfirmasi: cek emailnya

  24. aku on

    mas otherside…

    aku dah nyoba program selang waktu

    kyak yang dibawah ini, eror gak ada.. cuman belum jalan… gmn ya??? kurang apalagi.. trus cara nampilin ke LCDnya jg belum bisa…

    #include
    #include
    #define start_timer1()TCCR1B=0×02
    #define stop_timer1()TCCR1B=0×00
    #define reset_timer1()TCNT1=0×00
    #define habis_timer1()65000
    #include

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0×15 ;PORTC
    #endasm
    #include
    unsigned int mikro_secon;
    unsigned int waktu;
    unsigned int konvert_us;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    start_timer1();
    }

    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Place your code here

    stop_timer1();
    waktu=mikro_secon+++konvert_us;
    TCNT0=0;

    }

    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
    mikro_secon++;
    }

    tolong bantuannya…. pusing eum…

  25. aku on

    mas otherside…

    aku dah nyoba program selang waktu

    kyak yang dibawah ini, eror gak ada.. cuman belum jalan… gmn ya??? kurang apalagi.. trus cara nampilin ke LCDnya jg belum bisa…

    #define start_timer1()TCCR1B=0×02
    #define stop_timer1()TCCR1B=0×00
    #define reset_timer1()TCNT1=0×00
    #define habis_timer1()65000

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0×15 ;PORTC
    #endasm

    unsigned int mikro_secon;
    unsigned int waktu;
    unsigned int konvert_us;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    start_timer1();
    }

    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Place your code here

    stop_timer1();
    waktu=mikro_secon+++konvert_us;
    TCNT0=0;

    }

    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
    mikro_secon++;
    }

    tolong bantuannya…. pusing eum…

  26. eri on

    mas mau nanya nih…ak kan lagi buat TA make mikro, tapi ada masalah di pas ngedelaynya, ni penggalan prog buatan ak. mas
    if (PINB==0){ PORTD.0=0;delay_ms(1000);PORTB.1=1;};
    if (PINB==1){PORTD.0=1;delay_ms(9000); PORTB.1=0;};
    nah masalahnya saat program dijalankan delay yg 1000 gak jalan sesuai nilainya, tapi ngikut delay 9000, nah pas delaynya di ilangi jg tetep ikut ke delay juga,.kerjanya. mohon bantuanya mas….klo bisa cepet yah thanks before

  27. oth3rside on

    pada “if(PINB==0)” itu PINB yang mana?(0-7), kalau nulisnya gitu, PINB hrs sbg input semua dan harus 0 semua agar syarat terpenuhi.padahal di setelahnya kamu menggunakan portB sebagai output–> PORTB.1=1 (contradiktif). cek register DDRB-nya

  28. eri on

    oh ya mas ni prog yang benernya.
    if(PINB.0==0){PORTD.0=0;delay_ms(1000);PORTB.1=1;}
    if (PINB.0==1){PORTD.0=1;delay_ms(9000);PORTB.1=0;} settingan PORT B dah bener PORTB=0×00;DDRB=0xFE; maaf kemaren salah ketik , mohon bantuanya mas thanks before

    tdak ada yg salah,cek aja duluw semuanya

  29. aku on

    aku mau nanya ja….

    TUGAS AKHIR AKU BISA SELESAI GAK YA??????

    masalah… ketika beda fasa sensor mendeteksi cosphi jelek mikro kontak relay buat aktif kapasitor tuk kompensasi.. setelah kapasitor aktif relay mendeteksi cosphi bagus maka mikro nyuruh agar relay off dan kapasitor off… sedangkan beban induktif masih kerja.. setelah kapasitor off cosphi jelek lagi…
    nanti bolak-balik////////

    bisa gak???
    jadi ketika perbaikan cosphi telah diperbaiki kapasitor tidak off melainkan masuk ke program yang berbeda tuk scan beda fasa setelah kompensasi….

    mohon petunjuk

  30. ERI on

    tetep gak bisa mas,…matinya PORTD.0 dan nyalanya PORTB.1 tetep kedelay walaupun delaynya sudah dihapus…. mohon bantuanya.

    keadaan default/nilai awal dari PINB apa?,apakah program ini looping trus atau sekali cek saja setiap waktu keadaan PINB?,lalu input PINB ini sinyal nya bagaimana?

  31. ajo on

    leh nanya neh
    LCD gw kok petak2 penuh, bagian atas doang!!!
    ga da dihubungin kamana2 kok tetep dituuu:(
    dah ku coba program beulang2 ga juga da perubahan tatep
    walau cuman teg 5 doank yang di beri, kaki yang laen ga kemana2 tetep seperti ituuu
    kenapa yahhhh

  32. oth3rside on

    to ERI:
    delay yang tidak sesuai dapat disebabkan karena pemilihan crystal clock untuk uC yang salah
    aturfuse bitnya di CKSEL.lbih lengkap ttCKSEL dpat dbaca di dtasheet
    to AJO:
    kalo dihubungkan 5 volt aj,pin yang lain ga ya emang gitu(biasanya)

  33. hendra on

    mas,minta tolong donk…
    saya mau menghitung RPM(rotasi per menit) dari motor DC.
    saya menggunakan sensor optocoupler…
    jadi rencananya khan keluaran optocouplernya masuk ke pin eksternal interrupt…Catatan:anggap aja jumlah warna hitam putih pada gear masing-masing 4 jadi satu putaran itu terjadi misalnya 4 kali rising edge…
    nah,mas bisa tidak saya minta tolong dituliskan programnya…klo bisa lengkap dengan setting-settinganya di code vision,ya…secepatnya ya mas…thanks before…

  34. hendra on

    sorry,kayaknya belum terlalu jelas penjelasan saya yg sebelumnya mas,,,
    catatan:
    1. kecepatan putar motor berubah-ubah
    (tergantung input dari PWMnya)…
    2. diinginkan RPMnya ditampilkan ke LCD
    3. keluran optocouplerya masing-masing 0.7 V & 5 V
    4. jumlah terjadinya rising edge pd satu rotasi=4
    5. sekalian dgn setting2nya ya, mas…

    sorry,,,klo saya merepotkan…

    sebelumnya:
    thanks banget….

    gunakan saja pin ICP mazz Hendra
    konfigurasi register dapat dibaca di datasheet(sudah sangat jelas)

  35. zul on

    saya lagi buat jam digital, tapi masih belum ketemu programnya, tampilannya menggunakan Seven Segment,tanpa IC BCD,jadi langsuung ke port mikro,dan data2 tiap 7segment paralel(multiplex).mohon pencerahannya mas.terimakasih,jawabannya kirimkan jg ke email saya mas

  36. oth3rside on

    jam digital di posting diatas hanya untuk contoh penggunaan timer, jadi tidak presisi, kalo untuk jam digital beneran.
    kalo mo bwat jam digital,pbisa pakai ic RTC atau memanfaatkan RTC internal di uC AVR (dibeberapa tipe sudah ada,spt atmega16,32, dll)
    mungkin aj langsung pakai port uC, kan bnyak port tersedia

  37. lufi on

    minta bantuan nya dunk..

    leh g mnta program yang ngtung dri 0 ampe 9, trus bsa trundri 9 ke 0….

  38. lufi on

    krimin k email aq y
    skyfirst@ymail.com

  39. oth3rside on

    @Lufi
    Do.It.be Yourself, it’s very fun. Good project for learning….., Okayyyy?

  40. adhitya on

    mas Q da beli buku mK AVR ATmega16 karangan Heri Andrianto.
    jadi Q coba program jam digital, terus berhasil tapi jika mati lampu dia set dari awal lagi…
    jadi gimana cara mengembangkan program agar mengeset dengan menggunakan saklar push botton.
    blz ke email aku y mas

    @adhitya
    Heri Andrianto? siapa itu. program jam digital diatas memang g pas kalau di jadikan jam digital “beneran”. karena memang selalu set ke awal lagi jka power supply off.
    kalau mau buat jam digital beneran, bisa menggunakan IC RTC yang di-interface ke AVR, disamping mudah digunakan (tinggal comot data waktu) juga presisi.
    sebenarnya di IC AVR (ATMEGA) sendiri ada internal RTC yg bisa digunakan shgga ga perlu beli IC lain, cuma perlu nambahain crystal untuk sumber clock (crystal 32 kHz-an). pemakainnya bisa kamu baca di datasheet AVR bagian RTC.

  41. nanang qosim on

    kalau 0CR0 DAH KETEMU NILAINYA”kemudian dari 100us tadi agar setara 1detik harus dikalikan 10.000″ nilai sepuluh ribu darimana ya mas…belum ngeh nih

  42. oth3rside on

    10.000 adalah variabel pengali yang kita berikan di program. coba liat di kode program mulai :
    if(++kdetik==10000)
    {
    if(++detik==60)
    ….
    ….

    setiap ada interrupt variabel kdetik nambah 1, berulang terus sampai 10.000, baru var detik nambah satu. var detik nambah terus sampai 60 baru kmudian var menit nambah 1 dst.

  43. dangkal on

    mas, kalo kita pake timer buat mode normal (tanpa interrupt), kita ngeset 1 detiknya gimana?
    masalahnya nantinya saya pengen perulangan tetapi naiknya perdetik, bukan perhitungan timer mikro soale bingungi…
    contohnya gini mas:
    void main ()
    {
    while 1()
    {
    while (i< 10) /*10 di sini q pengennya 10 detik gitu, bukan 10 hitungan mikro*/
    {
    ………;
    i++;
    }
    }
    biar bisa kaya gitu gimana ya mas?

  44. oth3rside on

    kalo pingin spt itu gunakan saja delay_ms(1000)~ 1 detik kan?
    kalo pake codevision & avr-gcc hrus include delay.h
    smg mmbantu :-)

  45. ekos on

    kira” di AVR bisa pake delay di bawah 1us ga???

    soalnya kemaren pengen coba bangkitin gel kotak dengan frek 5us…tapi pas pake delay_us(5)>>>>terukur di osiloscop malah 50us

    • oth3rside on

      1 us sptnya sudah sangat kecil. periode 5 us maksudnya? atau 5 Hz?
      ditengok lagi tentang apa “Frekuensi” dan “periode” …:-)

  46. dhee on

    mas, tau g source code menghitung rpm dengan optocoupler. Klo tau pliz kasih tau ya!
    ato email ke dhee_must18@yahoo.com!


Leave a reply