Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

5x7 ve 8x8 matriks sayıcı.

Başlatan FATİH YILMAZ, 02 Mayıs 2020, 02:06:52

FATİH YILMAZ

Sayın, Ustalarım, Uzmanlarım. Herkese selamlar.
 
Ben Amatör Telsizciyim, uzun yıllardır hoby olarak elektronikle uğrasıyorum. Özellikle Radyo Frekans Tekniği ile ilgileniyorum. Başlangıçlarda Kristal osilatorlü veya ayarlanabilir osilatorlerle alıcı ve vericiler yapıyordum. Kristal frekanslarının sabit olması, birden fazla frekans için çok sayıda Kristal kullanılması ve bu kristallerin bir komutatörle değiştirilmesi çok hantaldı. Ayrıca her frekans için Kristal bulmak da çok zordu. Ayarlanabilir osilatorlu çalışmalarımda ise sıcaklık ve çevresel etkiler nedeni ile osilator frekansı sürekli değişerek kararsız çalışıyor, bu nedenle frekans ayarlarını sık sık gözden geçirmek gerekiyordu. Bütün bu zorluklar nedeni ile alıcı ve vericilerde çok kullanılan PLL devrelerine geçme mecburiyetim oluştu. İlk zamanlarda dep swich ler ile parallel bilgi girişli olan devreleri komuta ediyordum ancak, bu şekilde PLL sistemlerin komuta edilmesinin zorlukları da vardı. Bu zorlukları aşmak için, mikrodenetleyicilerle çalışmaya başladım ve Proton dili ile tanıştım. Başlangıçta  mikrodenetleyicilerin bir portundan bilgi göndererek parallel bilgi girişli PLL devreleri komuta edebiliyordum. Bu durumda çok sayıda port kullanmam gerekiyordu. Zamanla I2C ve SPI protokolleri ile çalışan PLL kompenentlerle ilgilenmeye başladım.  Belirli bir noktaya kadar da başarılı olabildim.  Yaptığım denemelerde  bu gune kadar  2x8, 2x16, 4x16, 4x20 ve Graphic  LCD ekranlar kullandım. LCD ile işler kolaydı. LCD'nin pinlerini,  mikrodenetleyicide tanımlayıp, frekansları LCD ekranda gösterebiliyordum. LCD ekranların karekterlerinin küçük olması, bu nedenle belirli bir uzaklıktan görünmemesi ve led displeylerin görselliğinin  daha iyi olduğu, bu displayleri kullanarak uzaktan kumanda çalışmaları yapılabileceğini düşünerek,  7 segment displaylere, sonra 5x7 ve 8x8 matriks  displaylere geçmeye karar verdim.  İlk olarak 7 segment led displayler ile çalışmaya başladım ve konuyu anlayabilmek için aşağıdaki program yaparak,  7 segmentli displayleri bir dereceye kadar anladım.
/**********************************************/
Device=16F628A 
Xtal = 4
Config BOREN_ON, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT 
TRISB=%00000000
TRISA=%00000000
PORTB=0
PORTA=0
'----PORT CIKISLARI SIFIRLANDI------------------------------------
Dim X As Word'ILK 4 RAKAM
Dim Y As Word'5. VE 6. RAKAMLAR 
Dim SAYMA As Word
Dim SAYI1 As Byte
Dim SAYI2 As Byte
Dim SAYI3 As Byte
Dim SAYI4 As Byte
Dim SAYI5 As Byte
Dim SAYI6 As Byte
Dim ARTIR As Word
Dim ONBIN As Word
X=0
Y=0
SAYMA=0
ONBIN=0
SAYI1=0'BIRLER
SAYI2=0'ONLAR
SAYI3=0'YUZLER
SAYI4=0'BINLER
SAYI5=0'ONBINLER
SAYI6=0'YUZBINLER
ARTIR=0
BASLA: 
GoSub SAYI_AL  
SHOut PORTB.0,PORTB.1,1,[%11111110,SAYI1]
PulseOut PORTB.2,2 
SHOut PORTB.0,PORTB.1,1,[%11111101,SAYI2]
PulseOut PORTB.2,2 
SHOut PORTB.0,PORTB.1,1,[%11111011,SAYI3]
PulseOut PORTB.2,2     
SHOut PORTB.0,PORTB.1,1,[%11110111,SAYI4]
PulseOut PORTB.2,2     
SHOut PORTB.0,PORTB.1,1,[%11101111,SAYI5] 
PulseOut PORTB.2,2     
SHOut PORTB.0,PORTB.1,1,[%11011111,SAYI6] 
PulseOut PORTB.2,2     
'ASAGIDAKİ SATIR YAZILMAZSA EN SON DISPLAY PARLAK YANIYOR.
SHOut PORTB.0,PORTB.1,1,[11111111,%00000000]'74595 IN 7 SEGMENT CIKISLARINI VE DİGER 74595 IN SIRALAMA CIKISLARINI SIFIRLA (SON RAKAMIN DAHA PARLAK YANMASINI ONLEMEK İÇİN) 
PulseOut PORTB.2,2
ARTIR = ARTIR + 1
If ARTIR = 5 Then SAYMA=SAYMA+1 ' 5 CEVRIMDE SAYMAYI 1 ARTIR
If SAYMA=10000 Then ONBIN = ONBIN+1 
If SAYMA = 10000 Then SAYMA = 0 '100O0'DEN SONRA SIFIRLA
If ONBIN = 100 Then ONBIN =0
If ARTIR = 5 Then ARTIR = 0
GoTo BASLA  
SAYI_AL:  
X= SAYMA Dig 0   
LookUp X,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI1'7.BİT 1 YAPILIRSA DİSPLAYDEKİ NOKTA YANİYOR. 
X= SAYMA Dig 1
LookUp X,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI2
X= SAYMA Dig 2
LookUp X,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI3
X= SAYMA Dig 3
LookUp X,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI4 
'SAGDAN 5. VE 6. RAKAMLARI OLUSTURMAK ICIN IKINCI BIR SABIT KULLANILDI 
Y= ONBIN Dig 0
LookUp Y,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI5 
Y= ONBIN Dig 1
LookUp Y,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111],SAYI6
Return
End
/**********************************************/

7 segment displayler ile "Mhz","khz", "UHF", "VHF" gibi bilgiler gösterilemiyordu. 5x7 matrik ekrana geçtiğimde ise işlerin, daha  önceki yaptığım çalışmalar kadar kolay olmadığını gördüm. Bu konuda internete de çok fazla kaynak  bulamadım. Bulduğum kaynaklar ise benim anlayabileceğim kadar açık değildi. İç içe For Next donguleri ile başka yazılım dilleri ile gerçekleştirilmiş bazı çalışmalar buldum ancak, bunlar da yeterince aydınlatıcı olmadı. Lookup'ta yer alan bilgilerin nasıl işleneceğini anlayamadım. Kendimce bazı çalışmalar yaptım, fakat yukarıdaki çalışmayı 5x7 matrikse aktaramadım. Tarama sistemi olarak, tüm satırları aynı anda taramanın daha uygun olduğu kanaatine vardım. Çünkü bu şekildeki tarama şekliyle ledlerin daha parlak yanacağını düşünmekteyim. Satır taramalarını da 74595 ile yapmaya karar verdim, çünkü böyle olunca mikrodenetleyicide daha az port kullanabilirim, belki displayde titreme olmaması için yüksek hızlı bir mikrodenetleyici kullanmam gerekebilir  Mikrodenetleyicinin diğer portlarını butonlar, keypat, rotary encoder, PLL devreleri gibi diğer çevresel donanımlar için kullanacağım. Bu nedenle satır taraması için bir portun tamamını kullanmak istemiyorum. Neticede, aşağıdaki şemayı oluşturdum. Kullandığım 5x7 displayin satırları ortak katotludur.  Tabiki yapmış olduğum Proton Paradigması çalışmadı. Bu nedenle sizlerin büyük yardımına ihtiyaç duyuyorum. Sizlerden ricam, 5x7 ve 8x8 matriks ile 0' dan 1.000.000'a kadar kendiliğinden sayan bir program yapma konusunda bana yardımcı olmanız. Niçin 1.000.000'a kadar sayan bir programa gerek duydun diyen arkadaşlar olabilir. Bu şekilde dotların nasıl oluşturulduğunu, dotların, artan sayıya göre nasıl ilişkilendirildiğini anlamaya çalışacağım. Bu bilgiler ışığında diğer uygulamalara geçmeye çalışacağım. Yapacağınız yardım ve görüş ve öneriler için, şimdiden teşekkür ederim.
/**********************************************/
Device=16F628A 
Xtal = 4
Config BOREN_ON, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT 
TRISB=%00000000
TRISA=%00000000
PORTB=0
PORTA=0
'----PORT CIKI.LARI SIFIRLANDI------------------------------------
Symbol CLK = PORTA.0
Symbol DAT = PORTA.1
Symbol LATCH = PORTA.2

Dim A As Byte
'SAYI1=0'BIRLER
'SAYI2=0'ONLAR
'SAYI3=0'YUZLER
'SAYI4=0'BINLER
'SAYI5=0'ONBINLER
'SAYI6=0'YUZBINLER
'Dim RAKAM [10]
Dim I As Byte ' FOR NEX DONGUSU SABITI 
'DIM J AS BYTE
Dim SAYI1 As Byte
Dim SAYI2 As Byte
Dim SAYI3 As Byte
Dim SAYI4 As Byte
Dim SAYI5 As Byte
Dim SAYI6 As Byte
Dim SAYMA As Word 
Dim X As Word'ILK 4 RAKAM
Dim Y As Word'5. VE 6. RAKAMLAR 
Dim ONBIN As Word
Dim ARTIR As Word 

'RAKAM [0]=4'%00100
'RAKAM [1]=12'%01100
'RAKAM [2]=4'%00100
'RAKAM [3]=4'%00100 
'RAKAM [4]=4'%00100         
'RAKAM [5]=4'%00100
'RAKAM [6]=14'%01110
X=0
Y=0
I=0
ONBIN=0
SAYI1=0'BIRLER
SAYI2=0'ONLAR
SAYI3=0'YUZLER
SAYI4=0'BINLER
SAYI5=0'ONB?NLER
SAYI6=0'YUZBINLER
SAYMA=0 
ARTIR =0
A=1'A yi bir aliyoruz eger 0 alirsak 7 satirin hic isik vermedigi bir an olur
'bu durum displayde titremeye sebep olur. A ilk 74595 (Satir Tarama) portlarini
'sirayla iletime surerek satir taramasinda kullanilacaktir.
'74595 e binary olarak sirayla 1,2,4,6,8,16 gonderilecek ara degerlerde birkac port 
'birden yanar ki bu durum ayni anda birkac satirin devreye girmesi demektir.
'biz satir portlarinin sirayla iletime gecmesini istiyoruz. 

BASLA: 
For I = 0 To 6
GoSub DATA_AL
SHOut DAT, CLK, 1, [%00000000,%00000000,%00000000,%00000000,SAYI2,SAYI1,A] 
PulsOut LATCH, 2
DelayMS 40
SHOut DAT, CLK, 1, [%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,A]' BU SATIR TITREMEYI ÖNLEMEK IÇIN DENENDI 
PulsOut LATCH, 2
A= A * 2
If I = 6 Then A = 1 ' A =0 YAPMA EN AZ 1 OLSUN. 74595 IN EN AZ BIR UCUNDAN CIKIS ALINSIN.
ARTIR = ARTIR + 1
If ARTIR = 20 Then SAYMA=SAYMA+1 ' 20 DONGUDE SAYMA BIR ARTSIN 
If SAYMA = 2 Then SAYMA = 0 'BASLANGICTA IKI DOT ICIN DUSUNULDU.
'If SAYMA=10000 Then ONBIN = ONBIN+1 
'If SAYMA = 10000 Then SAYMA = 0 '1000 den sonra sifirla 
'If ONBIN = 100 Then ONBIN =0
If ARTIR = 20 Then ARTIR = 0
GoTo BASLA
DATA_AL:
X= SAYMA Dig 0
LookUp I,[4,12,4,4,4,4,14,_ '1
         14,17,1,2,4,8,31,_ '2
         14,17,1,6,1,17,14,_'3
         2,6,10,18,31,2,2,_'4
         31,16,16,30,1,1,30,_'5
         14,16,16,30,17,17,14],SAYI1'6
'X= SAYMA Dig 1
'LookUp I,[14,17,1,2,4,8,31],SAYI2
'X= SAYMA Dig 2
'LookUp I,[14,17,1,6,1,17,14],SAYI3
'X= SAYMA Dig 3
'LookUp I,[2,6,10,18,31,2,2],SAYI4
'Y= ONBIN DIG 0
'LookUp I,[31,16,16,30,1,1,30],SAYI5
'Y= ONBIN Dig 1
'LookUp I,[14,16,16,30,17,17,14],SAYI6
Return
End
/**********************************************/