PIC bekleme süresi hakkında

Başlatan Emre MERMİ, 05 Ağustos 2014, 12:54:40

Emre MERMİ

iyi günler arkadaşlar

Bir arkadaşım programda bekleme sürelerini timer kullanarak yapmamı önerdi bu şekilde hem PIC i boşta beklemede tutmazsın hemde kesme gelirse direk kesmeye girer dedi. Biraz araştırdım pek anlaşılır bir yazı bulamadım. Bu konuyla ilgili birkaç sorum olacak.

Tek bir port için bekleme yaparken timer kullanmak basit ama 2 port ve 2 parklı süre için kullanıcak olsam nasıl yapabilirim mesela;

a0 portu lojik 1 olcak 10 dakika bekledikten sonra lojik 0 seviyesine çekilcek
a1 portu, a0 portu lojik 1 olduktan 5 dk sonra lojik 1 olcak 10 dakika bekledikten sonra lojik 0 olacak.

bunun gibi birden fazla farklı bekleme süreleri olan bir kodda tek timer ile bekleme sürelerini nasıl ayarlayabilirim. programı ccs c de yazıyorum. çalışma mantığını anlatcak bir arkadaş olursa çok sevinirim.

şimdiden teşekkürler.

oyaz

timer ı kesmesinin içine bir adet counter koy ve bu counterı kesme içinde arttırarak, 1 sn ye denk gelecek değerini bul. Her 1 sn denk geldiğinde örneğin saniye diye bir değişken tanımla ve bununla işlemlerini yap. Bu bir yöntem.

Ya da direk timer ı 1 sn olarak ayarla ikiside olur.
Become a learning machine...

Emre MERMİ

yani timer da her bekleme süresi için ayrı bir değişken ata diyorsunuz ?

bk01

#3
Arkadaşın dediği gibi her 1sn'de bir timer oluştur. Timer içinede;

Sayı=Sayı+1

if Sayı=??? then


bu şekilde yapabilirsin.

Gökhan BEKEN

arkaplanda çalışan sistem tick'i oluşturun, her milisaniye bir kesme üretsin.
kesme içinde, zamanSayaci gibi bir değişkeni 1 artırın.
main içinde sonsuz döngüdeyken zamanSayaci değişkenini kontrol edin, istediğiniz kadar armış ise,
yapmak istediğiniz işleri yapın.
Bu sayede 10 dakika boyunca beklenecekse kilitleme olmaz, diğer işler devam eder.
Özel mesaj okumuyorum, lütfen göndermeyin.

kimlenbu

En temizi @meftun hocanın dediği gibi. Terimlere aşina değilseniz biraz daha açık yazayım.

1) Kullandığınız işlemcide her 1 milisaniyede çalışacak bir kesme yaratın.
2) Bu kesme içinde istediğiniz zaman değerleri için olan değişkenleri arttırın. Misal 1 dakika için dakika1 değişkeni tanımladınız diyelim :
3) Main içindeki ana döngüde dakika1 değişkenini kontrol edin

1 dakika = 60 saniye = 60.000 milisaniye.

yani dakika1 değişkeni 60.000'e eşit veya büyük olduğunda 1 dakika dolmuş demektir. Bu sayede bu değişkenden faydalanarak dakika bazında istediğiniz değeri elde edersiniz. Sadece eşitliği kontrol ederseniz ana döngüde delay vs varsa bu değeri kaçırırsınız ve programınız çakılır.

Bunu çalışır hale getirdikten sonra daha verimli şekilde (8 bitlik değişkenler kullanılacak şekilde) düzenleme yapabilirsiniz.


Emre MERMİ

yanıtlarınız için çok teşekkür ederim,

teori olarak hepsi kafama oturdu ama nedense kod yazmaya gelince takılıyorum. birkaç tane kod yazayım bir iki gün boyunca. takıldığım bir yer olursa tekrar sizlere danışırım.

oyaz

Alıntı Yap1) Kullandığınız işlemcide her 1 milisaniyede çalışacak bir kesme yaratın.
2) Bu kesme içinde istediğiniz zaman değerleri için olan değişkenleri arttırın. Misal 1 dakika için dakika1 değişkeni tanımladınız diyelim :
3) Main içindeki ana döngüde dakika1 değişkenini kontrol edin

1 dakika = 60 saniye = 60.000 milisaniye.

1 dakika,10 dakika için ayrı ayrı değişken tanımlamasına gerek yok hocam. Tanımlanan tek counter ile bu halledilebilir.
Become a learning machine...