Xedi.Xermawan's Blog

personal-technical blog

Timer di AVR

with 55 comments

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:

FOC0WGM00 COM01COM00 WGM01CS2 CS1 CS0

7 6543210

CS0,CS1,CS2 digunakan untuk pengaturan prescaller, misalnya

000: timer dihentikan jika diset nilai ini

001: sekali detaknya sama dengan detak oscillator crystal yang digunakan

010 : sekali detaknya sama dengan oscillator/8.misalnya oscilator 8 MHZ,makasekali 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=0x96.

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=0x15

#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=0x00;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

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

TCCR0=0x02;

TCNT0=0x00;

OCR0=0x96; //sekitar 100us

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// interrupt timer digunakan

TIMSK=0x02;

// Analog Comparator initialization

// Analog Comparator: Off

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

// Analog Comparator Output: Off

ACSR=0x80;

SFIOR=0x00;

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 = 0x02

//stop timer

#define TSTOP() TCCR1B = 0x00

#define TRESET() TCNT1=0x00

#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.

Written by XediXermawan

September 28, 2007 at 1:52 am

Posted in elektronics design

55 Responses

Subscribe to comments with RSS.

  1. 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,,,

    zackyu

    March 25, 2008 at 5:34 am

  2. 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 🙂

    edee

    March 25, 2008 at 2:29 pm

  3. 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..

    ZUHDIE

    May 4, 2008 at 7:06 pm

  4. 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……….???

    Joko Priyanto

    May 26, 2008 at 5:08 am

  5. ==@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.

    edee

    May 27, 2008 at 11:09 am

  6. yup.. avr emang lebih mantap apalagi kalau programmingnya pakai bahasa C plus Code Vision. 🙂

    alhakim

    June 3, 2008 at 11:13 pm

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

    edee

    June 4, 2008 at 2:08 am

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

    momogie

    June 5, 2008 at 3:49 pm

  9. ngaruh mas momogie…

    edee

    June 6, 2008 at 2:14 am

  10. 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…

    aku

    July 8, 2008 at 2:59 am

  11. 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

    oth3rside

    July 11, 2008 at 3:07 pm

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

    aku

    July 12, 2008 at 9:15 am

  13. 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=0x96 buat ngatur apa??
    sorry nanya mulu.. coz baru belajar…

    aku

    July 12, 2008 at 9:23 am

  14. 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,,

    aku

    July 12, 2008 at 11:24 am

  15. tolong dong yang bsa ngajarin timer….

    aku gak ngerti….

    aku mau belajar private

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

    dk

    July 18, 2008 at 12:06 pm

  16. @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 0x96(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 😀
    (buzy TA mas,bsok senin ini sidang ,doakan sukses ya 🙂 )

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

    oth3rside

    July 18, 2008 at 1:19 pm

  17. 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,,,,,

    dk

    July 19, 2008 at 10:19 am

  18. 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 😀

    meep

    July 19, 2008 at 7:33 pm

  19. @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 😛 😀

    oth3rside

    July 20, 2008 at 3:44 am

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

    empty words was deleted

    meep

    July 20, 2008 at 7:48 am

  21. 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=0x02
    #define stop_timer1()TCCR1B=0x00
    #define reset_timer1()TCNT1=0x00
    #define habis_timer1()65000
    #include

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x15 ;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…

    aku

    July 21, 2008 at 1:16 pm

  22. 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?

    aku

    July 23, 2008 at 1:15 am

  23. 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

    aku

    July 26, 2008 at 7:36 am

  24. 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…

    aku

    July 26, 2008 at 7:38 am

  25. 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…

    aku

    July 26, 2008 at 7:39 am

  26. 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

    eri

    August 7, 2008 at 2:54 pm

  27. 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

    oth3rside

    August 8, 2008 at 1:19 am

  28. 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=0x00;DDRB=0xFE; maaf kemaren salah ketik , mohon bantuanya mas thanks before

    tdak ada yg salah,cek aja duluw semuanya

    eri

    August 8, 2008 at 3:55 am

  29. 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

    aku

    August 12, 2008 at 1:02 pm

  30. 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?

    ERI

    August 13, 2008 at 3:00 am

  31. 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

    ajo

    September 1, 2008 at 8:52 am

  32. 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)

    oth3rside

    November 6, 2008 at 2:48 am

  33. 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…

    hendra

    December 26, 2008 at 5:35 am

  34. 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)

    hendra

    December 26, 2008 at 5:47 am

  35. 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

    zul

    January 29, 2009 at 10:45 pm

  36. 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

    oth3rside

    January 31, 2009 at 7:40 am

  37. minta bantuan nya dunk..

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

    lufi

    February 27, 2009 at 11:58 am

  38. krimin k email aq y
    skyfirst@ymail.com

    lufi

    February 27, 2009 at 12:04 pm

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

    oth3rside

    March 4, 2009 at 4:32 pm

  40. 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.

    adhitya

    June 3, 2009 at 1:42 pm

  41. 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

    nanang qosim

    August 10, 2009 at 1:22 pm

  42. 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.

    oth3rside

    August 11, 2009 at 7:01 am

  43. 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?

    dangkal

    October 3, 2009 at 7:58 am

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

    oth3rside

    October 7, 2009 at 1:57 am

  45. 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

    ekos

    October 29, 2009 at 10:30 am

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

      oth3rside

      November 2, 2009 at 3:44 am

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

    dhee

    November 7, 2009 at 1:35 pm

  47. mas….
    punya source code program membuat timer countdown gitu, misalnya buat menghitung lama persewaan lapangan futsal, misalnya nyewa 1 jam terus di countdown selama 1 jam.
    butuh banget, tolong ya mas aku minta.
    emailq : andicks_aje@yahoo.co.id
    thanks be4….

    andi

    November 17, 2009 at 2:26 am

  48. mas,minta tolong donk…
    saya mau membuat speedometer menggunakan atmega8.
    sensor diletakkan pada cakram sepeda motor. disana kan ada lubang lubang, dijadikan sebagai encoder,
    saya menggunakan sensor optocoupler…
    jadi rencananya khan keluaran optocouplernya masuk ke pin T1…Catatan:anggap aja jumlah lubang pada cakram 8 jadi satu putaran itu terjadi misalnya 8 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…
    mohon bimbingannya
    roon_2themoon@yahoo.com

    indra saputra

    January 11, 2010 at 10:50 am

  49. mas aku mau bikin sensor pengaman yang bisa mengirim sms dan membunyikan bel dan sensornya menggunakan sensor phototransistor menggunakan mikrokontroler AT89s52,dan jika ada pencuri sensor tidak terkena chya karena ada orang masuk programnya gimana mas

    arif

    April 8, 2010 at 7:19 am

  50. mas2 yang ada di sana bisa bantu saya ga??? bisa minta program avr untuk menghitung putaran menggunakan sensor optocoupler,atmega8535 dan mengkonversinya ke dalam rupiah klo bisa dan ad tolong donk kirim ke email saya ndut_aditya@yahoo.com please…

    makasih……

    dhiet

    March 9, 2011 at 3:56 am

  51. mas saya mau tanya klo cara mengubungkan sensor gas ke ADC atmega16 gimana coding dan caranya kemudian ditampilkan ke lcd 16×2 dengan tampilan gas bocor dan suara buzzer mohon bantuananya kirim ke email ku mas gokong_49@yahoo.co.id mohon banget bantuannya

    agus

    January 4, 2012 at 4:26 pm

  52. halo mas Agus, itu program yang sangat umum, belajar dari awal aja dari textbook dan datasheet. atau belajar dari http://www.avrfreaks.net/

    edie

    January 12, 2012 at 1:30 pm

  53. Mas,,tanya,,untuk penghitungan prescaler jika yg diharapkan adalah T=25u sekon bagaiman?menggunakan timer 0 ATmega16

    Putra

    May 20, 2014 at 3:39 pm

  54. Mas saya ada pr nie kmren dari {sw==255}{sw==15;} Nah pengen dirubah menjadi 24 jam.nah pr nya.software dibuat 24 jam =255.gmna ya?terus dellay nya dirubah lagi gak.kmren pake 15 detik (300).kalaw dirubah 24 jam gmna?mohon pencerhan nya?

    ichsan

    October 13, 2015 at 12:42 am


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: