avatar_Blue High

C dili ile dot matrix kayan yazı algoritması

Başlatan Blue High, 25 Aralık 2020, 22:30:37

Blue High

Merhaba. Öncelikle ete hocama teşekkür ediyorum verdiği derslerden dolayı.
74HC595 ile kayan yazı devresi yapmaya çalışıyorum. Hocamın 13. Dersinde anlattıklarını okudum lakin kendi proğramıma uyarlayamadım. C dili ile yazmaya çalışıyorum. Ekranda sabit harfleri görebiliyorum ama yazıyı kaydırma işini çözemedim. Yardımcı olabilecek varmı?

https://paste.ofcode.org/eL5M8aWBUStiAyaNWFryzv

Düşündüklerin kadar değil, yaptıkların kadarsın.

ete

Ekranda sabit harfleri görebildiğine göre kaydırma için bir şey yapmamış oluyorsun demekki.
Öncelikle kendi kendine bir sor bakalım. Kaydırma mekanizmasını anlamışmısın.
Basitçe açıklayayım. Karekterler, dotmatrix ekranda bit bazında oluşturulurlar. 8x8 matrixden oluşan bir displayde noktaların herbirisi bir led dir. O ledleri yakıp söndürerek karekter oluşturuyoruz.
Ekranın tam ortasına oturtabildiğin bir H harfin olduğunu varsayarsak bunu bir dot yani bir nokta sağa kaydırmak için (veya sola) harf datalarını bir bit kaydırarak ekrana vermen gerekiyor. Bunu araya ufak bir gecikme koyarak yaptığın zaman birer nokta kayarak aynı harfi oluşturursun. Bunu belirli bir ahenk içinde yaptığın zamanda gözün o harfin bir tarafa kaydığını görür. Aslında yapılan iş aynı harfi birer nokta atlayarak ekrana vermektedir. Elbette bir noktadan sonra harf ekran dışına taşacak yada atlayacaktır. Taşan kısmı diğer ekrana verirsen aynı harfin devamını orada izlemiş olursun. Temel mantık bu.
Harfler satır datalarının üst üste gelmesi ile oluşturulduğuna göre en üstteki satırdan başlayarak diyelimki bir bit datayı sağa kaydırdın. Bit0 bu durumda kaybolacaktır. Bu nedenle kaydırmadan önce onu alıp bir Temp değişkeninde saklaman gerekiyor. Bir sonraki işlemde bu sakladığın biti yanındaki display datalarını bir bit kaydırınca orada da 7. bit boş kalacaktır. Bu sakladığın biti ise gidip oraya 7. bit olarak yazarsan harfin devamlılığını sağlamış olursun.
Kısaca temel fikir şöyle, 8 bitlik satır data sını bir bit kaydır. 8 bitin dışına çıkan tek biti götürüp kayan taraftaki datanın başına ekle. Bu ifade data yı hangi yöne kaydırdığına bağlı olarak değişir. Yani bir yönde başına eklerken diğer yönde sonuna eklersin gibi.
Örnekle açıklamak gerekir ise;
ELimizde yan yana duran iki displayin üst satırında yer alan şu datalar olsun.
01101101   11100011   şimdi bunları bir bit sağa kaydırırsak ne olur bakalım
00110110   11110001 bu tarafa 1 bit geçer oda 1 dir. Sol başta ise bir bitlik yer boşaldı yerine sıfır girdi otomatikman. Şimdi ne yaptık ona bakalım.
01101101 datasını 1 bit sağa kaydırınca 00110110 oldu en baştaki 1 biti açığa çıktı. Bunu yandaki 8 bitlik bilginin başına eklemem gerekir. Ama önce onuda 1 bit sağa kaydırırım,
11100011 ==> 01110001 oldu ardından diğer kaydırmadan gelen 1 bitini 7.ci bite koyarım böylece bilgi 11110001 şeklini alır.
Bu işlemi bütün satırlar için yaptığın zaman ekranda o harf sağa doğru kaymış olur. Unutma taşan bitlerin ne zaman diğer tarafa ekleneceği önemlidir. Önce ekleyip sonra kaydırırsan bilgi bozulmuş olur önce kaydır yeri boşalsın sonra gelen biti yerine ekle.
Bu işlemin tersinde de benzeer işler yapılır. Ders notlarında da açıkça anlatmıştım. Umarım bu sefer anlamışsındır.
Hepsi bu kadar.
Ete
 

Blue High

Evet hocam dediğiniz gibi mantığını anladım. Sıkıntı yaşadığım şey shift registera veri gönderme kısmıydı. Aslına bakarsak ben sanki hex sayıyı 2lik sayıya gönderme kısmında hata yapmışım. O şekilde bir dönüşüme gerek yok. Bu arada ilk başta dediğiniz ekranda sabit görünüyorsa kaydırma için bir şeyler yapamamışsın demişsiniz. Saygımı sunuyorum. Bi kaç sefer kodu tekrar yazdım ama kilit noktayı değiştirmem gerekirmiş. Sağolun hocam bir deneyeyim geri dönüş yapacağım
Düşündüklerin kadar değil, yaptıkların kadarsın.

ete

Dijital sistemlerde çalışma için sayı formatı binarydir. Desimal, hex, octal bunlar senin görsel formatlarındır. Hangisini kolay anlıyorsan sen onu yazar onunla çalışırsın. Ama işlemciye bir iş yaptıracağın zaman o ister istemez binary çalışacaktır geri planda. Bu nedenle sayı formatlarına takılma. Hangisi kolayına geliyorsaki bu konuda desimal ve hex en kolayıdır onunla çalış.

Ete

Blue High

Hocam harfleri hex formatında sutun bilgisi olarak giriyorum. Hex_to_bin fonksiyonunda her 8 bitlik hex sayısını binary olarak gecici bir diziye atıyorum. Ardından 8 defa işleyecek bir kodla 0 mı 1 mi diye kontrol ettüriyorum. 1 ise shift registera 1 , 0 sa 0 gönderiyor.

Kodu farklı bir bakış açısıyla sizin dediğiniz gibi sesli düşünerek yazmaya çalışayım. Çok sıkılmışsınızdır tahminen yıllardır aynı soruların sorulmasından. Dediklerinizi baz alarak yeniden deneyeyim ben en iyisi. Sağolun
Düşündüklerin kadar değil, yaptıkların kadarsın.

Powered by EzPortal