TIMER Zamanlayıcı Kullanımı

Başlatan protech06, 22 Mayıs 2007, 01:20:21

protech06

Arkadaslar Devremde 2 adet lamba var bunların belirli bir sure yanık kalmasını istiyorum 16f877 ve 20 mhz osc kullanıcam devreye enerji verdigimde lambalar yanacak ve verilen süre boyunca yanık kalacak sonra sönecek
 timer zamanlayıcı ile bunu yapabılırmıyım ?
 zaman cok uzun cünkü melsela lambaların yanık kalma süreleri 30saniye ile  ile 8 saat arasında değişebilir  bunu nasıl bir zamanlama ile yapsam uygun olur? Zamanı bir değişken icinde bulunmam lazım

 mesela Süre=00:15:00   ' yani 15dk gibi yada buna benzer bir yol

ycmy

hocam 8 saat çok uzun bir süre bu kadar zaman neden lamba yakacaksın ki anlayamadım bir de bunu pic ile yapmak zorunda mısın? bence binalardaki merdiven otomatı gibi bişey yapabilirsin daha kolay olur.pic ile gecikme yapabilirmisin bilemiyorum ama ben 1 sn lik bir gecikme yaptım asm de 3 tane sayac tanımladım 4mhz için 30 sn için bu programı 30 kere tekrarlayabilirsin ama 8 saat olmaz sanırım yaparsan bana da anlat :D kolay gelsin

CLR

Birkaç register(counter olarak) kullanarak yapabilirsin fakat en sağlıklısı,kararlısı (zamanda sapma olmaması için) bir Saat IC(RTC)'si kullanmaktır (ds1307(I2C),ds1302(3-wire) gibi) Daha da iyisi ise ds1337 vb. alarm'lara sahip olan RTC kullanmak. Alarmı kurarsın ve zamanında sana interrupt için puls gönderir.

Registerlerle yapacaksan Timer1'i (16bit) kullan, prescale'yı 1/8 yap, 500msn delay için gerekli hex. değerleri timer1'in low order ve high order registerlerine yükle. Zaman değerlerine göre counter olarak kullanacağın registerlere gerekli değerleri yükle. timer1 interrupt'ını kur her 500msn'de bir interrupt'a gitsin ve counter(veya counter'lerini) ini bir azaltsın veya arttırsın.

Mesela tek register kullanırsan
255x500ms=127sn
iki reg. için
127snx255=32385sn=540dk=9 saat,

kolay gelsin
Knowledge and Experience are Power

protech06

Arkadaşlar Gördüğüm bir devrede zamanlama olarak dipsw kullanılmıstı bende bunu kod icerisinden yapmanın bir yoluna bakıyorum dipsw olanında 8 li bir dipsw kullanılmıstı ve su sekilde

DipSwitchler
1 = 15 saniye
2 = 30 saniye
3 = 1 dk
4 = 5 dk
5 = 15 dk
6 = 30 dk
7 = 45 dk
8 = 60 dk

 Şeklinde yapılmıstı zamanlardan hangisin isterseniz o numralı dip ON konumuna alınınca o zamanda oluyordu veya 1 saat 15 dk demek istersenizde  60dk ve 15 dk olan dipleri ON yapıyordunuz  devrede bir saat entegreside yoktu ben de buna bakarak bu zamanı  kod icerisnde bir degişkene verip yapmak istiyorum  sadece pic olmak zorunda harici bş kullanmadan nasıl yapılabılır?