Escolar Documentos
Profissional Documentos
Cultura Documentos
AVRku.blogspot.com:BermaindenganTimer1AVR
Posts
Comments
Enteryouremailaddress:
Subscribe
DeliveredbyFeedBurner
HOME
SHOP
Arsip
LINK
Search ...
Brow seHomeMicrocontrollerBasicBermaindenganTimer1AVR
2011(5)
2010(6)
2009(5)
BermainDenganTimer1AVR
September(1)
Agustus(1)
Yangnamanyatimerseringkalikitagunakan.Misalsaatmaunampilinrpm,kita
Februari(1)
butuhtimersebagaiacuan.Atauuntukmenghidupkandevicedenganintervaltertentu.
Januari(2)
AVRyangsayapakaisebagaicontohadalahATmega8535.AVRinimemilki3timer.
Yaitu:
2008(7)
1. TIMER0(8bit)
2. TIMER1(16bit)
ShareIt
3. TIMER2(8bit)
Sharethis
on
Facebook
Tweetthis
View stats
(NEW)
Appointment
Apayangdimaksudtimer8bitdan16bit?
timer8bitadalahtimerygbisamencacah/menghitungsampaimaksimalnilai0xFF
heksa(dalambiner=11111111).PadaATmega8535ada2timerjenisiniyaitu
TIMER0dan2
Kloyg16bitnilaimaksimalnya0xFFFF.PadaATmega8535timerjenis16bitadalahTIMER1.Artikelkaliiniakanmembahas
TIMER1.
Duluakdisaraninklotimermaupresisiharusmemakaibahasaassembly.Hitungjumlahinstruksiygkitatulis.laluhitunglama
waktunya.Hmmmm..ribetbener...
Untungajanemuartikeltentanginterrupttimer.DenganInterruptkitagakperlususah2menghitungberapawaktuyangdi
perlukanuntukmengeksekusiseluruhprogramkita.Karenasaatprogramdijalanin,timerjugajalansendiri(digerakkanXTAL).
Trussaatnilaitercapaiterjadilahinterrupttimer.
RegisterygbiasasayagunakanuntukmensetnilaiTimer1adalahregisterTCNT,registerTCNTsendiridibagidua:TCNT1H
danTCNT1L.
rumusyangdigunakanadalah:
TCNT=(1+0xFFFF)(waktu*(XTAL/prescaler))
waktu>waktuygkitainginkan
XTAL>frekuensixtalygdipakai
prescaler>nilaiprescaler
Apanilaiprescaleritu?
Timermembutuhkanclocksource.Biasanyaclocksourceygsayapakaiadalahclocksistem(XTAL).Dankitabisamenset
besarnyanilaiini.MaximumsamadenganXTAL,minimumXTAL/1024.Nahnilaipembagi(1024)iniygdiseburnilaiprescaler.
Macam2nilaiprescalerygdiijinkan:1,8,64,256,1024
Untukmengubahnilaiprescalertimer1,kitaharusmerubahnilairegisterTCCR1Bbit0...2
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
1/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
#include<mega8535.h>
#include<stdio.h>
//LCDdiPORTB
#asm
.equ__lcd_port=0x18
#endasm
#include<lcd.h>
unsignedcharbuff[30]
unsignedlongdetik
//subrutinsaatterjadiinterruptTimer1
interrupt[TIM1_OVF]voidtimer1_ovf_isr(void)
{
TCNT1H=0xC2
TCNT1L=0xF7
detik++
lcd_clear()
sprintf(buff,"detik%d",detik)
lcd_puts(buff)
}
voidmain(void)
{
//Timer/Counter1initialization
//Clocksource:SystemClock
//Clockvalue:kHz
//Mode:Normaltop=FFFFh
//OC1Aoutput:Discon.
//OC1Boutput:Discon.
//NoiseCanceler:Off
//InputCaptureonFallingEdge
TCCR1A=0x00
TCCR1B=0x04
TCNT1H=0xC2
TCNT1L=0xF7
OCR1AH=0x00
OCR1AL=0x00
OCR1BH=0x00
OCR1BL=0x00
//Timer(s)/Counter(s)Interrupt(s)initialization
TIMSK=0x04
//AnalogComparatorinitialization
//AnalogComparator:Off
//AnalogComparatorInputCapturebyTimer/Counter1:Off
//AnalogComparatorOutput:Off
ACSR=0x80
SFIOR=0x00
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
2/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
//LCDmoduleinitialization
lcd_init(16)
//Globalenableinterrupts
#asm("sei")
lcd_putsf("wait...")
while(1)
{
}
}
Programdiatasmenggunakantimer1untukmenambahnilaivariabel"detik"setiap1detiksekali.Kemudianmenampilkan
hasilnyakeLCD.
ayokitamutilasicodeprogramdiatas:
yangakankitabahasdariprogramdiatasadalahcodeyangkliatanruwetaja.Kloygbiasasilahkanlihatdiartikel2sebelumnya
..^_^
**************
//LCDdiPORTB
#asm
.equ__lcd_port=0x18>>mendefinisakanbahwaLCDdihubungkankePORTB
#endasm
#include<lcd.h>>>libraryuntukfungsi2aksesLCD
**************
//subrutinsaatterjadiinterruptTimer1
interrupt[TIM1_OVF]voidtimer1_ovf_isr(void)
{
TCNT1H=0xC2>nilaididapatdarirumus......
TCNT1L=0xF7>....agarTimer1bernilai1detik
detik++
lcd_clear()
sprintf(buff,"detik%d",detik)>memasukkankarakterkarakterkevariabelbuff
lcd_puts(buff)>menampilkankarakterkaraktervariabelbuffkeLCD
}
SaatkitainginmenampilkansederettulisankeLCDmakakitaharusmemasukkankarakterkaraktertulisanitukesuatu
variab elarray(dalamprogramdiatasadalahvariabel"buff").Barukemudiandataygadadivariab elarraykitatampilkanke
LCD
***************
voidmain(void)
{
//Timer/Counter1initialization
//Clocksource:SystemClock
//Clockvalue:kHz
//Mode:Normaltop=FFFFh
//OC1Aoutput:Discon.
//OC1Boutput:Discon.
//NoiseCanceler:Off
//InputCaptureonFallingEdge
TCCR1A=0x00
TCCR1B=0x04>prescaler256
TCNT1H=0xC2>nilaididapatdarirumus......
TCNT1L=0xF7>....agarTimer1bernilai1detik
ingetrumus:TCNT=(1+0xFFFF)(waktu*(XTAL/prescaler))
waktuygdinginkanadalah1detik,XTALygsayapakaiadl4Mhzdannilaiprescaler=256
Jadi,...............
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
3/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
TCNT=(1+65535)(1detik*(4.000.000/256))
=65536(1detik*15625)
=6553615625
=49911(desimal)
=C2F7(heksadesimal)
NilaiuntukTCNTyangdidapatdarirumusbernilai16bit(4angkaHeksadesimal),2angkaygdidepankitamasukkanke
TCNT1Hdan2angkaygdibelakangkitamasukkankeTCNT1L
****************
//Timer(s)/Counter(s)Interrupt(s)initialization
TIMSK=0x04>Timer/Counter1,OverflowInterruptEnable
codediatashanyamenset"OverflowInterruptTimer1".Interruptbaruaktifsaatadaperintah:#asm("sei")
padacontohinisayapakeATmega8535,ketikasayacobauntukATmega162nilaiTIMSKdiubahmenjadiTIMSK=0x80
****************
//AnalogComparatorinitialization
//AnalogComparator:Off
//AnalogComparatorInputCapturebyTimer/Counter1:Off
//AnalogComparatorOutput:Off
ACSR=0x80>meOFFkananalogcomparator
SFIOR=0x00
jikatidakdipakai,sebaiknyaanalogcomparatordiOFF.Untukmenghematpemakaiandaya.Halinisangatpentingjikasumber
dayaygdigunakanmemakaibaterai.
*******************
//LCDmoduleinitialization
lcd_init(16)>inisialisasiLCD16*2
*******************
//Globalenableinterrupts
#asm("sei")>mengaktifkanInterruptinterruptygsudahdisetsebelumnya
Nah...padasaatiniinterruptTimer1aktif
*******************
lcd_putsf("wait...")>menampilkantulisanwait..keLCD
*********************
while(1)
{
}
Programiniygdijalankanolehmicrocontroller...mikrohanyamuterdisinididalamwhile(1){...}
(inget!!!infiniteloopingdiartikelBASICI/O)..Jadimikrosamasekalitidakmengeksekusiperintah.
lhakokbisa?????bingungg....~_~!
DisinilahbedanyapakeInterrupt!!.
saatterjadiInterruptTimer1,alurprogrammikroakanmeloncatke:
//subrutinsaatterjadiinterruptTimer1
interrupt[TIM1_OVF]voidtimer1_ovf_isr(void)
{
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
4/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
......................................
......yoww.....programygadadisiniygdijalanin...
......................................
}
setelahprogramygadadisubrutinINTERRUPTdijalankan,makaalurprogrammikroakanmuter2lagidiinfinitelooping
******************
jikaadaygkurangdariprogramdiatasmohonkritikdansarannya
anyquestions??postcommentonthisblog:http:\\avrku.blogspot.com
orsendemailto:zigan@ymail.com
CodeVisionAVRCCompileriscopyrightb yPavelHaiduc,HPInfoTechs.r.l.
AVRisaregisteredtrademarkofAtmelCorporation.
<
Postedbyzigan
COM M ENT S :
13commentstoBermaindenganTimer1AVR
keren
kiddieezmengatakan...on9Agustus200919.15
mas,kaloprogramyangnggapakeinterruptgmnmas?
apaemangharuspakeinterrupt?
masalahnyakantimerperdetikmausayagunakansebagaicounterperdetikdalam
perulangan....
contohnyakayatekmasukindalamwhile(i<10/*detik*/)/*10detikinidiperolehdari
perhitungantimertadigitumas*/
{
................
i++
}kalokayagitugmnmas?
balesymas,,,tulungpisan....
masalahnyakalopakepakeperulanganbiasa,angka10ituhukandetiktapigtau
(1/berapa)kalidetiknyamas,cepetpisan
Anonimmengatakan...on3Oktober200913.41
@anonim:
klomemangbutuhpresisisetaukuygpalingenakpaketimer(gktaulagisichkloada
referensiyglebihoke...:P)
definisinilaiygmodihitung:
unsignedintfreq,cacah
masukinnilaiyangmaudihitungdalam
loopingprogramutama
while(1)
{
if(PINB.0==0)cacah++
while(PINB.0==0)
}
nilaicacahakanbertambahsetiapPINB.0berubahdariHighkeLow.
masukkannilaicacahkefreqmelaluiinterupsitimer.
//subrutinsaatterjadiinterruptTimer1
interrupt[TIM1_OVF]voidtimer1_ovf_isr(void)
{
TCNT1H=0xC2
TCNT1L=0xF7
freq=cacah
cacah=0
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
5/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
lcd_clear()
sprintf(buff,"freq%d",freq)
lcd_puts(buff)
}
nahnilaifrequensiakandiupdatesetiap1detik...
zigan
zigan@ymail.commengatakan...on23November200908.30
Komentarinitelahdihapusolehpengarang.
prezstmengatakan...on18Agustus201011.25
mas,mautanyaapakahadaperbedaan,saatkitamenggunakannilaiprescaleryg
gedeamaygkecilpadasistemyangakankitakontrol?pengaruhnyapadaAVRapa?
suwun...
prezstmengatakan...on18Agustus201011.30
ituhanyaberpengaruhpadaseberapacepatclocktimeryangakankitagunakan..
jadisumberclocktimeruntukcontohdiprogramdiataskandarixtalyangdigunakan
olehmicrocontrollerdibagidengannilaiprescaler
ziganmengatakan...on18Agustus201017.58
bisatidaktimernyasejamatawlebih..?
oonmengatakan...on13Oktober201000.42
bisaaja,
timernyakandisettiapsatudetik..jaditinggalmasukinvaribeltrussetiaptimeraktif,
nilaivariabeltersebutdiincrement..
pasnilainya=3600makaitudahsatujam^_^
ziganmengatakan...on15Oktober201012.35
MantapTImeravr.kalomaubelajarlebihjauhdenganCVAVRkunjungiblogsaya
http://iswanto.staff.umy.ac.id/danhttp://blog.umy.ac.id/iswanto
iswantomengatakan...on13Februari201103.10
omprogramparallaxpingyangbuatngukurjarakgmnya?????mohonbantuanya
om......tapipakecodevisionavryaom.....makasih..
Anonimmengatakan...on7Mei201114.49
bangsayamautanyaklotimersayagunakanbuatngitunglebarpulsanyagmana,??
jadibisadilihatwaktuThighnyasamaTlownyamakasih
coky_coky11.blogspot.commengatakan...on1Juni201103.40
infonyamembantusekali,biarlebihmudahbisapkewizarddaricodevision.salam
avrmania,,
Kiki'Kaye'mengatakan...on14Oktober201111.40
maturnuwuninfonya,ikutbelajardisiniya
anotherorionmengatakan...on1April201209.18
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
6/7
12/2/2014
AVRku.blogspot.com:BermaindenganTimer1AVR
PoskanKomentar
L I NKS T O T HI S P OS T
BuatSebuahLink
PostingLebihBaru
Beranda
PostingLama
CopyrightAVRku.blogspot.com
http://avrku.blogspot.com/2009/02/bermaindengantimer1avr.html
TemplatebyBlogTemplate4U|BlogspotTutorial|Blogger
7/7