Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

timer kullanımı

Başlatan furkan81, 21 Mayıs 2014, 20:27:51

furkan81

Arkadaşlar merhaba,
Başlıkta timer kullanımı yazdım, aslında yapmak istediğim şey iki adet röle ile motor kontrolü, ancak bunu 16 bitlik bit timer ile yapmak istediğim için başlığı böyle açtım. İstediğim şey şu; bir adet zaman parametrem var motorun bir yöne dönmesi için gerekli olan zaman. Ben bu parametreye 5 sn ile 500 sn arasında bir değer verebilirim ve ileri-geri çalışma süresi bu parametreye göre belirlenecek(parametre 100 ise motorun bağlı olduğu röleler 100 sn açık kalacak ve kapanacak , bir nevi perde motoru gibi düşünebilirsiniz)
Örnek verecek olursam motoru ileri yönde ne kadar sürdüysem , durdurduğumda ve geri gitmesini istediğimde ileri gittiği süre kadar geri gidecek. Yani mesela 35 sn ileri gittiğini varsayalım , burada durdurup geri gel dediğimde sadece 35 sn geri gidecek ve motoru durdurcak( yani aslında röleyi kapatacak). Burda takıldığım yer benim kullandığım timer 16 bitlik ( yani maksimum değeri 32767) ben bunu milisaniye mertebesinde kurmaya çalıştığımda parametre max. 500000 milisaniye olduğunda kuramıyorum. Konu ile ilgili önerileriniz olursa sevinirim.

Salih

#1
timer'ı 100ms olarak ayarla. sonra değişken kullanarak bu değişkeni timer kesmesi içinde sıfırla
Dolayısı ile 100ms lik base zamanı olan bir zaman rölesi elde etmiş olursun.
Örneğin 35 sn elde etmek için değişkene 350 yükle ve bunun timer içinde birer azalt.
Değişkenin sıfır olduğunda 35 sn geçmiş demektir.

#kesme()
{
if (degisken)  degisken--;
}

.
.
.

if start
{
motor on;
degisken = 350;

}

if (!degisken) motor off;

furkan81

peki mesela ben motoru 3456. milisaniyede durdurur ve geri yönlendirmek istersem onu nasıl ayarlayabilirim ? cevabınız için sağolun bu arada.

hasankara

timer ile taban süreyi tanımla, yani minimum 1 milisaniyelik gecikmeler elde etmek istiyorsan timer, 1er milisaniye de bir interrupt versin. bunun yanında interrupt içerisinde, gecikme için kullanmak üzere başka global olarak tanımladığın değişkenleri birer arttır yada birer azalt, nasıl işine geliyorsa. içeriği otomatik 1 er milisaniye de artan yada azalan değişkenler elde etmiş olursun. sonra bu değişkenleri istediğin algoritma içerisinde veri yükle veri oku karşılaştırma yap sana kalmış.

Salih

#4
Alıntı yapılan: furkan81 - 21 Mayıs 2014, 20:55:20
peki mesela ben motoru 3456. milisaniyede durdurur ve geri yönlendirmek istersem onu nasıl ayarlayabilirim ? cevabınız için sağolun bu arada.

Yukarıda arkadaşın dediği gibi ihtiyacına göre timer'ın base süresini küçültebilirsin.
Diyelim base süresi 1 ms oldu. O zaman değişkene 3456 sayısını yüklersin.
Programa başla yardımcı oluruz.

furkan81

en başta dediğiniz gibi timer_kur diye bir değişken belirlesem ve hep 1000 olarak kursam her 1000 ms bitince timer_counter gibi bir değişkeni bir arttırsam ;

timer_kur = 1000 , timer bitince timer_counter ++ , herhangi bir zamanda durdurduğumu varsaysak onu da timer_oku değişkeni ile okusam . Bu durdurduğum zamandan tekrar geri sürmeye kalktığımda timer_kur = 1000 - timer_oku olarak mı kurmam gerekecek, yani böyle yaparsam mantıklı olurmu?

vitruvius

1'er arttırdığın değişkenin son değerini motoru durdurduğunda başka bir değişkene at (a diyelim). Ondan sonra ister ordan geri say, ister motor geri dönerken yine başka bir değişken arttır ve a'ya eşit olana kadar çalıştır. Değişkenleri uygun yerlerde sıfırlamayı unutma.