7 segmentli display ile 0 to 999 sayıcı

Başlatan paradox, 07 Mayıs 2007, 20:04:35

paradox

elimde 3lü ortak anotlu 7 segmenli display var.0 dan 999 a kadar saydırmak istedim fakat hem proteus hemde boardda kurduğum devrede çalışmadı.
yazdığım program şu şekilde;

TRISB=0
TRISA=0
I VAR BYTE
DEGER VAR BYTE
N VAR BYTE
BASLA:
FOR DEGER=0 TO 999
GOSUB AYAR
NEXT DEGER
GOTO BASLA

AYAR:
FOR I=0 TO 2
N=DEGER DIG I
GOSUB GOSTER
pause 1
NEXT I
RETURN

GOSTER:
porta=0
LOOKUP N,[$03,$9F,$25,$0D,$99,$49,$41,$1F,$01,$09],PORTB
PORTA=DCD I
RETURN


yalnız devreyi kurarken display seçme pinlerini transistörle tetiklediğim zaman farklı direk bağladığım zaman farklı sonuçlar gözledim.birde displaylerden ikisini devre dışı bıraktığımda tek display çalışıyor üçünü bağlarsam çalışmıyo nedenini çözemedim.proteusta transistörsüz kurduğum devre de bu :


Logan

@paradox, programını inceledim.Şu satırlar dikkatimi çekti.
FOR I=0 TO 2 
N=DEGER DIG I

Burada "DEGER" registerinin içeriği, DIG komutu ile N registerine atılıyor. Bunu yaparkende I registerini for döngüsü içerisinde kullanarak basamakları belirliyorsun gayet güzel . :) Fakat burada
FOR DEGER=0 TO 999

demişsin ama gelgelelim yukarıda DEGER registeri byte tanımlı.Bu bir.İkincisi PortA' yı aktif ettikten sonra herhengi bir bekleme yapmamışsın.Yani
PORTA=DCD I

satırında araya 100 MikroS bekleme koyup portA'yı tekrar "0" a çekmeliydin.Tarama yönteminin genelde mantığı budur.Bu da iki.Umarım problemi çözersin.Kolay gelsin...
İmza.

paradox

@Logan hocam verdiğiniz cevap için teşekkürler.dikkatimden kaçmış fakat denedim olmadı yine.devreden kaynaklanan bir sorun var başka türlü bağlantı lazım bence.displaylerin enable ucuna gelen veriler sürekli eksi potansiyelde.yani mavi renkte.programa göre pozitif olması gerekiyor ama olmuyo.

3 göstergenin enable ucuna giden tellere bd136 transistörünü bağladım üçünde de garip bi şey yazdı.ve değişmedi yazılar.iki tanesine bağladığımda ise garip garip saymaya başladı.

sezgin05


paradox

devreyi çalıştırdım sonunda isteyen olursa bu program ile deneyebilir.
333 lük zaman dilimini kafama göre belirledim şimdilik .sanırım tam bir saniye değil ince hesap yapmadım.onu değiştirirsiniz.
sorunsuz çalışan program aşağıdaki gibidir.

kolay gelsin...

TRISB=0
TRISA=0
I VAR BYTE
DEGER VAR word
N VAR BYTE
BEKLE VAR WORD

BASLA:
FOR DEGER=0 TO 999
BEKLE=0
GOSUB AYAR
NEXT DEGER
GOTO BASLA

AYAR:
FOR I=0 TO 2
N=DEGER DIG I
GOSUB GOSTER
pause 1
NEXT I
IF BEKLE<333 THEN AYAR
RETURN

GOSTER:
BEKLE=BEKLE+1
porta=0
LOOKUP N,[$03,$9F,$25,$0D,$99,$49,$41,$1F,$01,$09],PORTB
PORTA=DCD I
RETURN