LCD, Interrupt, While ve program yarılıyor ya da ben öyle sanıyorum

Başlatan ahmetzafer, 27 Eylül 2014, 09:51:55

ahmetzafer

Merhaba arkadaşlar,
Pic18f452 kullanıyorum ve Proteusta simulasyon üzerinde çalışıyorum. Sistemi kısaca anlatayım;
- An0, an1 ve an4 analog girişlerine 3 ac sinyal bağlı. Bunlardan sistem çalıştığı sürece değerleri okumam gerekiyor. Bu kısım While döngüsü içerisinde sorunsuz çalışıyor.
- 3 tane buton bir lcd var. Analog sinyalleriden okuduğum bilgileri sürekli ekranda görmeme gerek yok. 1 butona basıldığı zaman görmem yeterli.
- Basitçe 1 tane butonu INT0 kesmesini kullanarak kontrol ediyorum ve okuduğum değerleri ekrana basmasını sağlıyorum. Diğer butonlar void main() içerisindeki while() döngüsüyle durumları kontrol ediliyor.
Yaşadığım sıkıntı;
- Ekrana basmak için butona basıyorum. 2-3 sn düzgün değerleri yazıyor ve çalışıyor. Daha sonra sistem donuyor. Donmaktan kastım, Timer0 kesmeside aktif. Oraya koyduğum bir debug sayesinde saniyede bir ekrana 1 ve 0 yazdırıyorum, pic'in sürekli çalıştığını buradan anlayabiliyorum.
- Pic donuyor dememin sebebi ise, hata durumunda diğer iki butonun bağımsız olmasına ve Void main() içindeki while() içerisinde olmasına rağmen çalışmıyor.

- Analog bilgilerin her ölçüm durumunda ekrana basılmasına gerek olmadığı için 1 saniyede bir güncelleniyor.

Benim bir teorim, interrupt önceliklerinden kaynaklandığını düşünüyorum ama emin olamıyorum. high veya low priority olayı var. Mantığı basit ama kullanımından mı bi hata yaptım emin değilim. Aslında şu anda hepsi low priority.

Yardımlarınızı bekliyorum.
Saygılarımla.

Gökhan BEKEN

Sonsuz döngü 1 saniyede değil, hiç bekleme yapmadan dönsün. ADC ölçümlerini sürekli değil butona basınca yapsın. Böylece sorun kalmaz. Bütün butonları sonsuz döngü içinde kontrol edin.
Özel mesaj okumuyorum, lütfen göndermeyin.