ze_tr
Üye
- Katılım
- 25 Kas 2006
- Mesajlar
- 520
- Puanları
- 6
Siz benim yazdığım 3-4 satırlık koddan bahsediyorsunuz.
Şu an yazdığınız program display taraması mantığından uzak. Öyle olduğu için de sorunu buraya yazmışsınız. Size orada uzunca bir program yazıp gönderdim. O program sizin eski programdan fazla sapmadan, gereksiz tekrarları bir alt programa atarak, koddaki hatalarınızı daha iyi görmenizi sağlayacaktı.
Ben verdiğim kurslarda bu tarz örnekler için timer kesmesi kullandırır ve ne işe yaradığını anlatırım. Sizin ilk önce yapmanız gereken şey, yazdığınız programı bir kenara bırakıp, sıfırdan kesme kullanarak 4 ms.lik (veya isterseniz 1 ms.lik) kesme oluşturup çalışır hale getirmenizdir. Bunu yaparsanız geriye kalanları birer birer bunun üzerine monte edebilirsiniz.
4 ms.lik kesme oluşturduğunuzu varsayalım. Ne işe yarayacak? Birincisi, her bir kesmeye gidişte 7 segment displaylerden birini süreceksiniz. İkincisi, 1000/4=250 sayısına kadar her kesmeye gidişte birer birer artan bir sayaç oluşturacaksınız. 250'ye vardığınızda sayıyı sıfırlayacaksınız. İster sıfırladığınız sayıyı veya isterseniz bir bitlik bir değişkeni (kendinize ait bir bayrak, veya plc cilerin kullandığı dahili röle) 1 yapacaksınız. Bu da size hassas bir saniyelik zaman dolduğunu bildirecek. Bu değişkenler global tanımlayacağınız için her yerden erişebileceksiniz. ana program döngüsünde kendi bayrağınızı sürekli takip edeceksiniz. O bayrak 1 olduğunda geri sayacağınz sayıdan bir çıkartıp (0 olup olmadığını da kontrol edeceksiniz) segmentlerde gösterilecek sayılara ayrıştıracaksınız ve bayrağı 0 yapacaksınız.
Döngünün diğer bir yerinde de (bayrak 1 olduğunda yapılacak işlerden olmadığı için o if bloğunun dışında) isterseniz butonları kontrol edip, set, + , - gibi işlemleri yapabilirsiniz. Arttırdığınız veya azalttığınız sayaç değerlerini ekranda görünsün diye yine dijitlere ayıracaksınız). İsterseniz timeout vs. gibi özellikler de ekleyerek, artırma veya azaltma işleminden sonra set etmezseniz belirli bir süre sonunda en son sayıya geri dönebilirsiniz. Elinizde 4 ms.lik zaman dilimlerini size bildirecek başka bir flag daha olursa, isterseniz hayalinizdeki pek çok şeyi yapabilirsiniz. Tabi 1 ms. kesme yaparsanız bu durumda çok daha hassas işler de yapabilirsiniz. Displaydeki her bir dijitin yanık kalma süresi 4 ms. olsa iyi olur. İsterseniz 1 ms. de bir sürün, fazla da bir şey farketmez.
Şu an yazdığınız program display taraması mantığından uzak. Öyle olduğu için de sorunu buraya yazmışsınız. Size orada uzunca bir program yazıp gönderdim. O program sizin eski programdan fazla sapmadan, gereksiz tekrarları bir alt programa atarak, koddaki hatalarınızı daha iyi görmenizi sağlayacaktı.
Ben verdiğim kurslarda bu tarz örnekler için timer kesmesi kullandırır ve ne işe yaradığını anlatırım. Sizin ilk önce yapmanız gereken şey, yazdığınız programı bir kenara bırakıp, sıfırdan kesme kullanarak 4 ms.lik (veya isterseniz 1 ms.lik) kesme oluşturup çalışır hale getirmenizdir. Bunu yaparsanız geriye kalanları birer birer bunun üzerine monte edebilirsiniz.
4 ms.lik kesme oluşturduğunuzu varsayalım. Ne işe yarayacak? Birincisi, her bir kesmeye gidişte 7 segment displaylerden birini süreceksiniz. İkincisi, 1000/4=250 sayısına kadar her kesmeye gidişte birer birer artan bir sayaç oluşturacaksınız. 250'ye vardığınızda sayıyı sıfırlayacaksınız. İster sıfırladığınız sayıyı veya isterseniz bir bitlik bir değişkeni (kendinize ait bir bayrak, veya plc cilerin kullandığı dahili röle) 1 yapacaksınız. Bu da size hassas bir saniyelik zaman dolduğunu bildirecek. Bu değişkenler global tanımlayacağınız için her yerden erişebileceksiniz. ana program döngüsünde kendi bayrağınızı sürekli takip edeceksiniz. O bayrak 1 olduğunda geri sayacağınz sayıdan bir çıkartıp (0 olup olmadığını da kontrol edeceksiniz) segmentlerde gösterilecek sayılara ayrıştıracaksınız ve bayrağı 0 yapacaksınız.
Döngünün diğer bir yerinde de (bayrak 1 olduğunda yapılacak işlerden olmadığı için o if bloğunun dışında) isterseniz butonları kontrol edip, set, + , - gibi işlemleri yapabilirsiniz. Arttırdığınız veya azalttığınız sayaç değerlerini ekranda görünsün diye yine dijitlere ayıracaksınız). İsterseniz timeout vs. gibi özellikler de ekleyerek, artırma veya azaltma işleminden sonra set etmezseniz belirli bir süre sonunda en son sayıya geri dönebilirsiniz. Elinizde 4 ms.lik zaman dilimlerini size bildirecek başka bir flag daha olursa, isterseniz hayalinizdeki pek çok şeyi yapabilirsiniz. Tabi 1 ms. kesme yaparsanız bu durumda çok daha hassas işler de yapabilirsiniz. Displaydeki her bir dijitin yanık kalma süresi 4 ms. olsa iyi olur. İsterseniz 1 ms. de bir sürün, fazla da bir şey farketmez.