atmega8 0...99 sayıcı tarama süresi hakkında

Başlatan aykut54, 22 Ekim 2010, 15:49:36

aykut54

Merhaba
Bir sayıcı uygulaması yaptım ancak tarama süresi ms olduğunda gözle görülür şekilde kötü bir görüntü ortaya çıkıyor. Bu sorunu ortadan nasıl kaldırabilirim?

atmega8 win avr c eclipse kodları  ve proteus 7.7 şematiği link içersindedir.
http://www.dosyaupload.net/496atmega8.rar
[IMG]http://img189.imageshack.us/img189/8941/adszchmp.jpg[/img]

Burdaki komutta şu 2 kısmı anlamadım
  PORTC=0X02;
  PORTD=karakter[i/10];
  delay_ms(5);
  PORTC=0x01;
  PORTD=karakter[i%10];
  delay_ms(5);

Bu komutlar [i/10]....[i%10] ne işe yaramaktadır.



Cevaplarınız adedince teşekkür ederim.

NOT: C ve ATmega serisiyle daha yeni kod yazıyorum ufak  hatalarımız var ise de affola ;)


JKramer

i=92 olsun.
i/10 = 92/10 = 9 (bölüm)
i%10= 92%10 = 2 (kalan)

Bu sonuçlara göre karakter dizisinde ilgili rakamın 7 segment karşılığı porta gönderiliyor.

Kötü görüntünün oluşma sebebi, butona basılma rutinlerindeki 25'er ms'lik beklemeler ve buton bırakılmadığı sürece program akışının kesilmesidir. Kesmeleri kullanmayı deneyebilirsiniz.

fatihinanc

#2
Alıntı yapılan: JKramer - 22 Ekim 2010, 16:14:38
i=92 olsun.
i/10 = 92/10 = 9 (bölüm)
i%10= 92%10 = 2 (kalan)

Bu sonuçlara göre karakter dizisinde ilgili rakamın 7 segment karşılığı porta gönderiliyor.

Kötü görüntünün oluşma sebebi, butona basılma rutinlerindeki 25'er ms'lik beklemeler ve buton bırakılmadığı sürece program akışının kesilmesidir. Kesmeleri kullanmayı deneyebilirsiniz.

Evet ben de benzer bir problemle karşılaşmıştım yazın.
Sorunu kesme kullanarak hallettim.
Herhangi bir timer i 1ms lik saydırarak gerekli gecikmeyi elde edebilirsiniz hocam hem mcu da kilitlenmemiş olur.

ek : 7segmentleri 74hc595 kullanarak da sürebilirsiniz hocam. Latch sayesinde en son gönderdiğiniz veri 7segmentte kalıyor.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

Elektroemre

Selamlar,

Arkadaşların dediği gibi en sağlıklı yol kesme kullanmak.
Daha önce Timer0 kesmesini kullanarak bir deneme yapmıştım. Ekranda gösterilmesini isteğiniz değiskeni

EkranaYaz(1234); şeklinde kullandım.
Bu fonsiyonun içerisinde hemen sayı basamaklara ayırılıp, Seven segmentteki karşılığına dönüştürülüp
Segment[1] , Segment[2], Segment[3], Segment[4]
diye kaydediliyor ve Timer0 kesmesi geldiği anda kesmede tek yapılması gereken sırayla bu segmentleri dışarıya aktarmak.
Farklı teknikler kullanılarak direkt işlemciden seven segmentlerin parlaklığı bile ayarlanabilir.

Yaptığım ölçümler de 16MHz'de ATmega8'de kesmelerin işlem yükü %1 civarındaydı.

İyi çalışmalar...

aykut54

İlerleyen zamanlarda dediğiniz gibi yapmaya çalışıcam. Bittiğinde inşallah bu başlıktan devam ederiz.

muhittin_kaplan

aykut denemyi isis de yaptıysan tarama da atlama,kırpma normaldir. gerçekte dene