Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

delay komutu ile saat sorunu

Başlatan erdinch, 13 Mayıs 2007, 23:04:05

erdinch

delay_ms(1000) komutu ile küçük bir saat programladım ve lcd sayesinde saatin okunmasını gerçekleştirdim.Fakat devreyi kurup çalıştırdıktan 8-10 saat sonra pic ile yaptığım saatin gerçek saatten 3-4 dk kadar ileride( ya da geride tam olarak hatırlayamıyorum) olduğunu gördüm.İlk olarak bu kadarlık bir gecikmeye neden olan faktör nedir arkadaşlar?

Bunun üzerine biraz araştırma yaptım.Gördüğüm şu ki; digital saat uygulamaları timer, interrupt ve ayrı entegrelerden elde edilen 1 hz lik sinyaller sayesinde gerçekleştirilmiş.Bu bilgiler doğrultusunda ikinci sorum şu olacak; digital saat uygulamalarında timer, interrupt ve harici sinyal kullanımının mantığı nedir?Nerelerde ve niçin kullanılır?

ilgilenen arkadaşlara şimdiden teşekkürler.

İyi çalışmalar dilerim.

arslan74

Merhaba,

Mirochip'in "Demo Plus2 borad" unu incele. İçinde programı dahil öyle yapılmış bir uygulama var.

Microchip'in web sitesinde bulursun.

Selamar.

bigbey

Ben bu tip işlemlerde Real Time Clock entegresi kullanıyorum. Zaman kararlılığı oldukça iyi ve sen sadece zaman dilimlerini I2C protokolünde okuyup değerlendiriyorsun. saniye, dakika,saat,haftanın günü,gün,ay,yıl olarak bilgileri alabiliyorsun.Ayrıca clockout olarak pulse alabiliyorsun. DS1307 buna bir örnek.
TA6R

ete

Erdinc´,
Esas soruna yanit almadigini gordum cevaplayayim dedim.
Biliyorsun bir program yazdigin zaman her bir program komutunun (ASM komut karsiliklarindan bahsediyorum) belirli bir islenme suresi vardir. Bazi komutlar 1 saat palsi bazilari, 2 pals kullanir. Kisaca her bir komutun olusturdugu gecikmeler vardir. Bu yuzden zamana bagli komutlar kullanilir iken komut gecikmelerinide hesaplamak gerekir.
Delay 1 gibi bir komut verdiginde diyelimki 1 ms bekleyecek bir komut olsun bu komuta delay komutunun olusturdugu belkide birkac mikro saniyelik gecikmeyide eklemen gerekir. Bu komut gecikmeleri birikince belirgin gecikmelere sebep olabilirler. O yuzden saat gibi hassas zamanlama gereken yerlerde bu tip komutlari kullanmak uygun olmaz.
Ne uygun olur dersen, iste o zaman harici clock palslerinin alinmasi yada kesme ile clock palslerini olusturmak uygun secim olacaktir.
Harici clock palsleri,  disarida calisan ve sn plaslerini kendisi ureten bir sistemin uretmis oldugu saniye palsleridir. Bu sinyalleri uygun araliklarla alir ve saatini isletirsin.
Kesme denilen sistem ise sana 1 sn lik sureyi olusturacak ve ana programindan sure olarak etkilenmeyecek bir sistemdir. Bunun icin genelde TMR0 zamanlayicisi kullanilir. Bu zamanlayici sayet dahili sistem osilatorunden pals alacak sekilde kurulur ise geri planda sayar. Arada 1/2 yada 1/4 yada 1/16 gibi boluculeride devreye koyarak sayicinin daha gec surelerde saymasini saglayabilirsin. Isin icine birde TMR0 sayisinin 255 den 256 ya yani tekrardan sifirlanmasina gecis aninda kesme olusturmasini eklersen TMR0 sayicisi her 0 sifir olmada sana bir kesme olusturur. Program o anda isini gucunu birakir kesme kismina gider. Kesmeyi oyle ayarlarsinki her kesmede ya 1 sn sure gecer ki biraz zor yada birkac kesme sonunda 1 sn lik sureyi yakalarsin. 1 sn dolmuş ise sn degiskenini bir artirir ve boylece saatini calistirmis olursun.
Isin temel prensibi budur. Bu tip saatlerde program komut gecikmesinden etkilenirler ancak kesmenin olusturulma sureleri ile az bir sekilde oynayarak bu gecikmeleri de hesaba dahil edebilirsin. En azindan yaklasik bir sekilde ne surelerle kesme olusacagi konusunda hesap yapabilirsin.
Bu sistemlerin en iyisi hangisi dersen tabiiki disaridan bir pals almak derim.
Yazim icin kusura bakmayin. Turkce olmayan bir klavyede yazdim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com