0

Matrix Kayan Yazı

Başlatan 007kadir, 30 Aralık 2012, 14:22:04

007kadir

Arkdaşlar Merhaba,
  Kayan yazı işini öğrenmek için araştırmalar yaptım.74HC595 Çalışma mantıgını ögrendim.Matrixde karakter oluşturmayı tam anlamıyla öğrendim.Fakat kaydırma mantığını bir türlü anlayamadım.Bu yüzden aşağıda bulunan tek harf kaydırma programını geliştiremiyorum.Kaydırma bölümünü bana anlatabilirmisiniz.
Dosyayı ektedir.


ete

#1
Matriks satır ve sütunlardan oluşuyor. Karekterlerde bu matrikslere göre oluşturuluyor ve her bir satırın bit bazında bilgileri tespit edilip satır bazında sütundan bu bilgiler veriliyo. Bilg yukarıdanveirliyor ama hangi satıra ait ise o satır aktif ediliyor.
Bu bilgileri birer bit sola kaydırarak verirsen ne olur bütün karekter olduğu gibi bir bit sola kaymış olur. Her döngü sonunda bu işlemi yapar ve bütün karekter bilgilerini birer bit sürekli kaydırırsan karekterlerde otomatik olarak kaymaya başlar. Bu kadar basit.
Farzedelimki bir ekran hafızan var birde karekter hafızan.
Ekran hafızan bit bazında olsun ve 0-32 nokta yada bitlik bir hafıza olsun. Bu hafıza byte cinsinden 4 adet byte demektir.
Birde karejter hafızan olsun.
Ekran hafızan %00000000 00000000 00000000 00000000  şeklinde olursa ekranda hiç bir karekter görülmeyecektir.
Karekter hafızan şöyle olsun %00000000 00000000 00001111 11110000 
Ekran=Kareter şeklinde bütün bilgiyi ekrana verirsek karekterlerde yer alan 1 lerinkarşılığı olarak o ledlerin yandığını göreceksin.
Şimdi karekterleri 1 bit sola kaydıralım %00000000 00000000 00011111 11100000  şeklinde olacaktır.
Bunu ekrana veridğimiz zaman bu öncekine göre en sondaki led sönmüş onun yerine baştan bir başka led yanmış olacak ve karekter bir bit sola kaymış olacaktır.
Bu şekilde kayıdrmaya devam edersen en sonda birler en soldaki byte geçmiş olacaktır.


Ete

erdoganacun

ete hocam  bende  dotmatrix li  bir  kayan yazı  yapıyım  diyorum bende  netten  proje  buldum   yanlız  karakterler  ayna  görüntüsü  gibi  ters  bas  dosyasıda  var  hıocam bir  bakarmısınız  size  zahmet  veya  düzeltmem  gereken yer  neresi

ete

4094 bağlantıları ters olmuş. Programdan değil devre şemasından düzeltmen gerekiyor.
Mevcut bağlantıda 4094 ün Q0 pini matrix ledin en soldaki pinine bağlanmış. Halbuki en sağdaki pinden bağlaması gerekiyor.
O şekilde düzelt bitlerde düzelecektir.

Şemada hiç bir yer bağlanmamış. Nası lçalışacak bilmiyorum. Umarım sen biliyorsundur.

Ete

canbulut




dotta resimdeki kırmızı daire içine alınmış gibi bir ok işareti yapmak istiyorum .kodlar doğru fakat istediğim gibi çalıştıramadım.şekil bozuk çıkıyor.
TRISC=$00
TRISD=$00
ADCON1=7
CMCON=7

DEFINE OSC 20

DEGER VAR BYTE
DEGER1 VAR BYTE

SIFIR:
DEGER1=0
BASLA:
LOOKUP DEGER1,[128,64,32,16,9,5,3,15],DEGER

PORTD=DEGER
IF DEGER1=0 THEN
PORTC=254
ENDIF

IF DEGER1=1 THEN
PORTC=253
ENDIF

IF DEGER1=2 THEN
PORTC=251
ENDIF

IF DEGER1=3 THEN
PORTc=247
ENDIF

IF DEGER1=4 THEN
PORTC=239
ENDIF

IF DEGER1=5 THEN
PORTC=223
ENDIF

IF DEGER1=6 THEN
PORTC=191
ENDIF

IF DEGER1=7 THEN
PORTC=127
ENDIF

PAUSE 1

IF DEGER1=7 THEN SIFIR
ARTIR:
DEGER1=DEGER1+1

GOTO BASLA

canbulut

arkadaslar öncelikle herkese kolay gelsin.problemimi yukarıda belirttim.umarım anlaşılır olmuştur.Eger burayı işgal ettiysem özür dilerim yeni konu açalım.kolay gelsin.

ete

#6
Kodlarda yanlışlık yok ama uygulama şekli bence hatalı.
Aşağıdaki kodu bir denermisin?

Ete

BASLA:
FOR DEGER1=0 to 7
     LOOKUP DEGER1,[128,64,32,16,9,5,3,15],DEGER
     PORTD=DEGER
     PORTC=255-(DCD DEGER1)
    pause 1
    PORTC=255
Next

GOTO BASLA

canbulut

Hocam devre tamam çalıştı çok teşekkür ederim.Fakat nasıl çalıştığını anlamadım.kolay gelsin.

ete

Açıklaması basit.
Senin yazdığın bir sürü if satırının işini tek satırlık komut yapıyor.
PORTC=255-(DCD DEGER1)
Biliyorsun Deger1 0-7 arası değer alıyor. Bu sende de aynı benim yazdığımda da aynı. Ben döngü kurdum sen uzun yolu seçmişsin.
DCD Deger1 komutu şöyle çalışır.;
- Deger1=0 ise DCD Deger1=1 dir
- Deger1=1 ise DCD Deger1=2 dir
- Deger1=2 ise DCD Deger1=4 dür.
- Deger1=3 ise DCD Deger1=8 dir.
- Deger1=4 ise DCD Deger1=16 dır.
- Deger1=5 ise DCD Deger1=32 dir.
- Deger1=6 ise DCD Deger1=64 dür.
- Deger1=7 ise DCD Deger1=128 dir.
Böylece bu sayıları 255 den çıkartarak istenilen değeri elde edip PortC ye uygulamış oluyoruz.
Burada önemli olan ilgili led'i aktif ettikten sonra 1 ms yanık bırakıp sonra söndürmektir. Bunu yapmaz isen matrixde öyle gariplikler görülebiliyor.
Pause 1 yerine 5-6 kullanabilirsin.
Ete

canbulut

sizinki kısayolu hocam benimkide dediğiniz üzere 1ms gösterip söndürmemiz gerekiyormuş.gerekli gösterim yapıldıktan sonra portc=255 yapınca benim kodlarımda çalışmış oldu.çok teşekkürler.Allah razı olsun.

canbulut

hocam merhaba,ders13 matrix4 çalışmasına bağlı kalarak bir çalışma çıkardım fakat kaydırma yapmadı.Bir yanlışlık yok gibi ama Kaydır Etiketi nasıl çalışıyor.burdaki etkisini nasıl kullanıyor?kolay gelsin.


TRISC=$00
TRISD=$00

CLK VAR PORTD.0
DTA VAR PORTD.1
AKTAR VAR PORTD.2
ADCON1=7
CMCON=7
DEFINE OSC 4

DEGER VAR BYTE
DEGER1 VAR BYTE
DEGER2 var byte [8]
V var byte
W VAR BYTE
TEMP VAR BYTE
SIFIR:
DEGER1=0
BASLA:
FOR W=0 TO 10
FOR DEGER1=0 to 7
     LOOKUP DEGER1,[128,64,32,16,9,5,3,15],DEGER
     PORTD=DEGER
     PORTC=255-(DCD DEGER1)
    pause 2
    PORTC=255
    DEGER2[DEGER1]=DEGER
    NEXT
Next
  pause 1
KAYDIR:
temp= DEGER2[0]
for w=0 to 6
DEGER2[w]=DEGER2[W+1]
next
DEGER2[7]=temp

GOTO BASLA

ete

Yeni açtığım konuya bak. Projeler kısmında orada komutlarda açıklamalarda mevcut daha iyi anlarsın.
Ete

canbulut

gördüm hocam inceliyorum teşekkürler.

Powered by EzPortal