pic basic 7 segment display (hata)

Başlatan a4tech33, 02 Ocak 2014, 14:29:52

a4tech33








resimde görüldüğü gibi hem proteus çizimi var hem program var fakat display 9 a kadar saydıktan sonra 10 a geçmiyor koyduğum resimdeki gibi görüntü çıkıyor orhan altınbaşagın kitablarına biraz göz gezdirdim hatamı bulamadım

Kabil ATICI

hanelere ayırmayı dene.
Her ne kadar sen programını onluk sisteme göre yapsan da işlemci bunları 16'lık sayı sistemine göre yapar.
Bu yüzden işlem yaptıktan sonra sen bunları onluk sayı sisteminde gösterecek şekilde düzenlemen gerekir.
Aslında orda gösterilen işlemci açısından doğru.(0x0A)..
ambar7

a4tech33

#2
hocam hanelere derken zaten ondalık sisteme çeviriyorum ben ve çift hane

mesaj birleştirme:: 02 Ocak 2014, 15:10:49

dig komutu işe yararmıı

Kabil ATICI

nerede?
portb=say+1'de mi yoksa? burada sayıdığın değeri doğrudan portb'ye veriyorsun!


böyle yapıyorsan;
1,2,3..8,9,10,11 şeklinde sayar bu da işlemci tarafından 1,2,3..8,9,a,b şeklinde görülür.
ambar7

subram

7447 nin datasheet de 2. sayfaya bakarsın kullandığın malzemenin  doğruluk tablosunu  görebilirsin. Gördüğün sonuçta normal yani. Kodlar biraz değişiklik yapmam lazım.
1)sayı değerini Birler ve Onlar diye ayrı ayrı elde etmen lazım. "DIG" komutunu araştır
2)sayı değerini PORTB'ye gönderirken Birler kısmını ilk dört bit. Onlar Kısmını son dört bite göndermen lazım. Bunu yapmak için "OR" işlemini araştır
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

ete

Programda genel kusurların var.
trisa=11111 şeklinde komut verilmez. Şekle bakılırsa TRISA registerine binary bir değer yazdırıyorsun.  O halde doğru şekil TRISA=%00011111 şeklinde olmalıdır.

Benzer şekilde TRISB=%00000000 veya TRISB=0 şeklinde olmalıdır.

Ekranda yalnızca 2 haneli bir sayı göstereceksin. 2 haneli en büyük sayı 99 dur. Bu sayı normal şartlarda BYTE sınırı içinde yer alır. O halde SAY isimli değişkenini WORD cisninden tanımlaman gereksiz. Doğrusu SAY VAR BYTE şeklinde olmalı.

İşlemcinin hangi frekansta çalışacağını programda belirtmen gerekir. Şu anda senin programda bu çok önemli değil ama el alışkanlığı için koyamanda yarar var. DEFINE OSC 4

Sigorta ayarın hiç yok. İşlemcin için olası sigorta ayarları şunlar olabilir.
@ DEVICE Pic16F84A
@ DEVICE Pic16F84A, WDT_OFF
@ DEVICE Pic16F84A, PWRT_ON
@ DEVICE Pic16F84A, PROTECT_OFF
@ DEVICE Pic16F84A, XT_OSC

Her programda tanımlamalar bittikten sonra mutlaka bir açılış gecikmesi koymak gerekir. BASLA satırından evvel PAUSE 200 ilave etmen gerek .

Gelelim ana çalışma bölümüne. 7447 BCD (Binary Kodlanmış desimal ) değeri 7 segmente süren bir entegredir. Entegrenin ABCD girişlerine verilen binary değerle ekranda onlara karşılık üretilmiş rakamı desimal olarak görürsün. Bunlar;
%0001= ekranda 1
%0010= ekranda 2
....
%1001=ekranda 9    sayısını görebilirsin. Dikkat etti isen displayde 0-9 arası bir sayı görmek için 7447 nin ABCD girişlerine %0000 ile %1001 arasında binary bir değer vermek gerekiyor.
O halde senin yapman gereken şey SAY değişkenini hanelere ayırmak olmalı. Bunu hem DIG komutu ile hemde normal desimal sistem mantığını kullanarak yapabilirsin. ONLAR=SAY/10 işlemi sana Onlar basmağını verir (veya ONLAR=SAY DIG 1).  BIRLER=SAY-(ONLAR*10) işlemide birler basmağını verir veya BIRLER=SAY DIG 0 veya mod alma ilede yapabilirsin SAY//10 şeklinde).
Elinde şimdi hane değerleri olunca bunları ekrana BCD formatında vermen gerekiyor. Onlar basamağı sürücüsü PORTB nin 7-4 bitlerinden değer almakta olduğu için Onlar değerini 4 bit sola kaydırman gerekir. Birler zaten en sağda yer aldığı için PORTB=(ONLAR<<4)+BIRLER demen yeterli olacaktır. Böylece ekran sayma işlemi doğru çalışacaktır.

Bence ekrana yazdırma işini bir alt programa yaz ve gerekirse oraya Gosub ile gidip return ile dön.

Sonuç bekliyoruz.

Ete

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