Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

display tarama

Başlatan subram, 26 Haziran 2011, 00:28:35

subram

arkadaşlar merhaba

2 digit 7 segment display kullanarak bir devre yaptım. devrede 16f877(4mhz ile sürüyorum) var. vericideki butona her basıtğımda alıcı kısımdaki displayde yazan değer bir artıtıyor. devre çalışıyor ama titreme netlik sorunum var.  programda ilk digiti aktif yapıp birler basamağını gönderiyorum sonra 2. digiti aktif yapıp onlar basamağını gönderiyorum. klasik tarama metodu yani. 4511 gibi ekstra bir malzeme kullanmadan bu titireme olayını ve netlik sorununu nasıl çözebilriz-çözebilir miyiz? yoksa 4511 şart mı?

BASLA: 
BIRLER=VERI DIG 0
ONLAR=VERI DIG 1
LOW LED2
HIGH LED1
GOSUB EKRAN_BIRLER
PORTD=SAYI
pause 5
LOW LED1
HIGH LED2  
GOSUB EKRAN_ONLAR
PORTD=SAYI
pause 5 
low led2


http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

hocam saatin geç olmasından mı kaynaklı bir  türlü yazdığınız iki noktanın arasındaki farkı göremedim! ikisinde de ilk biti aç veriyi gönder ilk biti kapa ikinci biti aç veriyi gönder ikinci biti kapa yazmışsınız! dikkatim çeken ilkinde bunun daha düzenli yazılmış olması ikincisinde biraz düzensiz bir yazım var... yani veriyi gönderir göndermez biti kapatmak mı lazım nedir tam olarak.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

programı düzeltip 10 dk içinde sonucu yazıyorum :D
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

yok olmadı. kristali 20 mhz'e çevirsem biraz daha düzgün olurmu. ekranda şöyle bir olay var; örneğin 18 gösterilecek. birler basamağında 8 var ama onlar basamağındaki 1 tam 1 değil sanki altta 8 var gibi görünüyor  B ve C  segmentleri parlak yanıyor ama A, D, E , F ve G segmentleride sönek şekilde yanıyor ve 1 net görünmüyor. 4511 mi 20MHZ mi? yada başka bir yöntem mi?

http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

tarama hızından kasıt araya koyduğum pause süreleri mi yoksa osilatör mü?
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

#5
yok kesme kullanmıyorum  :o daha doğrusu alıcından veri geldiğinde kesmeye giriyor. normal zamanda da vericinin gönderdiği sayı yazdırıyorum ekrana.


edit: bu arada son yazdığınız yöntemde  olmadı :(
Alıntı yapılan: FxDev - 26 Haziran 2011, 01:17:50
Şunu dene bir de

ikisini birden söndür
birinciyi yak
bilgiyi gönder
ikisini birden söndür
ikinciyi yak
bilgiyi gönder
ikisini birden söndür

Ben ilk verdiğim metotla işi çözmüştüm tarama hızını da arttır bence.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

BASLA: 
BIRLER=VERI DIG 0
ONLAR=VERI DIG 1
LOW LED2
low led1
HIGH LED1
GOSUB EKRAN_BIRLER
PORTD=SAYI
pause 5
LOW LED1
low led2
HIGH LED2  
GOSUB EKRAN_ONLAR
PORTD=SAYI
pause 5 
low led2
low led1
SELECT CASE VERI

.
.
.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

#7
herhalde budaha açıklayıcı olacktır;

BASLA:
BIRLER=VERI DIG 0
ONLAR=VERI DIG 1
LOW LED2
low led1
HIGH LED1
GOSUB EKRAN_BIRLER
PORTD=SAYI
pause 5
LOW LED1
low led2
HIGH LED2 
GOSUB EKRAN_ONLAR
PORTD=SAYI
pause 5
low led2
low led1
SELECT CASE VERI
CASE 1
PORTA=%000001
CASE 2
PORTA=%000010
CASE 3
PORTA=%000100
CASE 4
PORTA=%001000
CASE 5
PORTA=%010000
CASE 6
PORTA=%100000
END SELECT
GOTO BASLA

EKRAN_BIRLER:
LOOKUP BIRLER,[$C0,$F9,$A4,$B0,$99,$92,$83,$F8,$80,$90],SAYI
RETURN

EKRAN_ONLAR:
LOOKUP ONLAR,[$C0,$F9,$A4,$B0,$99,$92,$83,$F8,$80,$90],SAYI
RETURN
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

sayı BYTE tipi bir değişken. porta çıkacağım veriyi SAYI'ya yükleyip o şekilde displayde gösteriyorum.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

ete

Display tarama işi zaman paylaşımlı bir işlemdir. 1sn=1000 ms lik süre içinde displayleri belirli aralıkta açıp kapatmanız gerekiyor.
Açıp kapatma işlemi gözü aldatacak sayıda olmalıdır. Aksi taktirde açma kapatma işlemini titreme olarak algılar.
Display segmentleri ledlerden oluşur ve ledlerinde belirli süre yanık olması gerekir. Bu süre ortalama 1-5 ms civarındadır.
Bütün bunları açıkladıktan sonra yapılması gerekenler sırası ile şunlardır,
1. Önce displaylerde yer alacak değerlerin 7 segment karşılıklarını lookup tablosundan al. (Birler, Onlar ve Yüzler olarak)
2. Sıra isimli bir değişken tut. Bu değişken hangi displayin aktif olacağını belirlesin.
3. Sıra=sıra+1 yap ve Sıra=3 ise sıra=0 yap. (sıra=0 Birler hanesine, Sıra=1 onlar hanesine ve sıra=2 ise yüzler hanesine karşılık gelsin)
4. Sıra=0 ise , yüzler hanesinin segment sürücüsünü kapat ,birler hanesini Porta ver ve birler hanesinin segment sürücüsünüde aç.
    Sıra=1 ise birler hanesinin segment sürücüsünü kapat, onlar hanesini porta ver ve onlar hanesi segment sürücüsünü aç
    Sıra=2 ise onlar hanesinin sürücüsünü kapat. Yüzler hanesini porta ver ve segment sürücüsünü aç.
6. Normalde bu işlemden sonra sürücülere dokunmadan yani bir aç kapa yapmadan bırakıp alt programdan çıkmak gerekir.

Ama kesme kullanmaz iseniz, displaylerin açma kapama süreleri bir birine eşit olmayabilir. Siz alt programdan çıktınız displayin birisi açık olarak bekliyor.
İkinci gelişinize kadar geçen süre 1 ms den kısa ise ledler yeterince parlak görünmeyecektir. Süre 5 ms den fazla ise bu seferde titreme göreceksiniz muhtemelen.
Bu nedenle bu gibi işlerde genelde kesme kullanmak sistemin sağlıklı çalışmasını sağlar.
Kesme ile işi yapabilmek için her 1-5 ms arasında kesme oluşturur ve her kesme oluştuğunda bir displayi aktif edersiniz.
Böylece göz aldanır ve bütün displayleri aktif olarak görür.

BU konu ile ilgili bir ders hazırlamıştım. Aşağıdaki linkten yükleyebilirsiniz.

Basic Dersleri , Ders_13 :   http://etepic.com/?p=153

Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

canteknik

[img=http://img1.loadtr.com/k-693108-dijital_fiyat_panosu.gif][/img]
Tarama yapılacaksa en iyi sonuç displeyleri kesme içerisinde yakmak.Ben bu şekilde kullandım 5 Haneli 30 Satırdan Oluşan panoda bu yöntemi kullandım sonuç mükemmel

subram

yorumlar için  teşekkürler çok işe yaradı. ETE hocam bahsettiğiniz yöntemi uyguladım bu sayede aynı anda 2  adet kesme nasıl kullanılır onuda öğrenmiş olduk :D dısplayın netliği konusunda sıkıntı yok sayılar çok net ama titreme olayı halen devam ediyor.  eskiye nazaran daha iyi ama istediğim gibi değil.

option_reg=%xxxxx100
tmro değerini ise  99 a kurdum.

bu arada tekrar belirteyim osilatörüm 4 Mhz.

http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

ete

Kesme her 5 ms de bir ayarlamışsın. TMR ön yükleme değerini 210 yap bir de öyle dene yaklaşık 1,5ms de bir kesme oluşacaktır.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

subram

ETE hocam değerler şu şekilde ama halen titreme var

option_reg=xxxxx010
tmro=253

http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

subram

ETE hocam son yazdığım değer ile programda 96uS'de bir kesme oluşuyor olması  lazım. ben iki digit display kullanıyorum bu yüden her displayin için bu süre 192uS demek. sayının displayde gösterilmesi için kullandığımız komutlarla bu sürenin 210 uS olduğunu varsayarsak titreme olmasının nasıl bir açıklaması olabilir?
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz