Gönderen Konu: Kayan Yazı Örnek Çalışması  (Okunma sayısı 1762 defa)

Çevrimdışı ete

  • Yönetici
  • Kahraman Üye
  • *****
  • İleti: 3804
Kayan Yazı Örnek Çalışması
« : 19 Ocak 2013, 12:46:42 »
Sık sık kayan yazılarla ilgli istekler alıyorum. Aslında sevmediğim bir konu. Çok fazla beyin Jimnastiği gerektiriyor.
Ama bir arkadaşınıza yerdım ederken işin temel prensiplerinide ortaya koyan bir sistemi örnek çalışma olarak hazırlayıp bu işe kafa yoracaklara yol göstereyim istedim.
İlişikteki dosyada yer alan sistem 3 adet 8x8 matrix dispaly kullanan bir sistem. Matrix adedi elbette artırılabilir.
Her artırılan display için programa DISPn[8] şeklinde dizi değişkeni ilave etmek gerekir. Onun yanında TEMPn değikenini de programa ilave edip kodları çoğullamak gerekir.
Bu örneklerde yer alan n harfi sıradaki sayıyı belirliyor. Mevcut sistemde 3 adet olduğuna göre n=3 imiş o halde yeni bir display ilave ederseniz n=4 olacak ve böylece DISP4[8] değişkeni, TEMP4 değişkeni programa ilave edilecektir.

Eminim yine birileri soracak 2 tane displayilave etsem ne yapacağım diye burada onu açıklıyorum umarım sormazsınız.
İşin karmaşık olduğunu söylemiş idim. Bilmeyen yada anlamayan en iyisi bulaşmasın.
Gerek Shift registerlere aktarma işinde gerekse kaydırma işlemlerinde yeni (ilave) display kodları programa ilave edilmelidir. Nasıl olacağını anlamak zor değil sanırım.
Shift registerler ile ilgili olanını ben anlatayım,
Orada ki mevcut koda bakarsak;
Kod: [Seç]
AKTAR:
    TEMP1=DISP1[I]:TEMP2=DISP2[I]:TEMP3=DISP3[I]   'HER BİR HARFİN SATIR BİLGİSİ SHİFT REGİSTERE VERİLDİ
    SHIFTOUT DTA,CLK,1,[TEMP3,TEMP2,TEMP1]
    PULSOUT OE,1                 'VERİLENLERİN ÇIKIŞA AKTARILMASI SAĞLANDI
    RETURN
Bu koda yeni display şöyle ilave edilecektir.;
Kod: [Seç]
AKTAR:
    TEMP1=DISP1[I]:TEMP2=DISP2[I]:TEMP3=DISP3[I]:temp4=DISP4[I]   'HER BİR HARFİN SATIR BİLGİSİ SHİFT REGİSTERE VERİLDİ
    SHIFTOUT DTA,CLK,1,[TEMP4,TEMP3,TEMP2,TEMP1]
    PULSOUT OE,1                 'VERİLENLERİN ÇIKIŞA AKTARILMASI SAĞLANDI
    RETURN
Gördüğünüz gibi bu kısım son derece kolay.
birde kaydırmaya örnek vereyim isterseniz. Rastgele birini seçelim diyelimki aşağı kaydırmayı seçtik. Mevcut kodlar şöyle;
Kod: [Seç]
KAYDIR_ASAGI:
      TEMP1= DISP1[7]:TEMP2=DISP2[7]:TEMP3=DISP3[7] 'SONBITLER YERİNE YENİSİ GELECEĞİ İÇİN KAYIT EDİYORUZ     
      for X=7 to 1 step -1
        DISP1[X]=DISP1[X-1] 'BIR BITI BİR ÖNCEKİ BİT İLE YER DEĞİŞTİRİYORUZ
        DISP2[X]=DISP2[X-1]
        DISP3[X]=DISP3[X-1]
      next
      DISP1[0]=TEMP1:DISP2[0]=TEMP2:DISP3[0]=TEMP3 'KOPYALADIĞIMIZI İLK BİTE AKTARIYORUZ.
      RETURN
Bunu ilave displaye göre tadil edersek şunları yapmamız gerekecek.
Kod: [Seç]
KAYDIR_ASAGI:
      TEMP1= DISP1[7]:TEMP2=DISP2[7]:TEMP3=DISP3[7]:TEMP4=DISP4[7] 'SONBITLER YERİNE YENİSİ GELECEĞİ İÇİN KAYIT EDİYORUZ     
      for X=7 to 1 step -1
        DISP1[X]=DISP1[X-1] 'BIR BITI BİR ÖNCEKİ BİT İLE YER DEĞİŞTİRİYORUZ
        DISP2[X]=DISP2[X-1]
        DISP3[X]=DISP3[X-1]
        DISP4[X]=DISP4[X-1]
      next
      DISP1[0]=TEMP1:DISP2[0]=TEMP2:DISP3[0]=TEMP3:DISP4[0]=TEMP4 'KOPYALADIĞIMIZI İLK BİTE AKTARIYORUZ.
      RETURN
Hepsi bu kadar.
Sağa yada sola kaydırmalar biraz daha komplike o nedenle bir tanede ona örnek vereceğim.

Sağa kaydırmaya bakalım;
Kod: [Seç]
KAYDIR_SAGA:
       FOR X=0 TO 7
         TEMP1=DISP1[X]:BIT1_7=TEMP1.7 'DISP1 in 7. ci bitini aldık
         TEMP2=DISP2[X]:BIT2_7=TEMP2.7   'DISP2 nin 7 nolu bitini aldık
         TEMP3=DISP3[X]:BIT3_7=TEMP3.7
         
         TEMP1=TEMP1<<1:TEMP1.0=BIT3_7 'DISP1'İ 1 BİT SOLA KAYDIRIP SIFIR NOLU BİTİNE DSP2 NİN 7 NOLU BİTİNİ KOYDUK     
         DISP1[X]=TEMP1 'KAYDIRILAN DATAYI TEKRAR DİZİ YE YERLEŞTİRDİK   
         
         TEMP2=TEMP2<<1:TEMP2.0=BIT1_7
         DISP2[X]=TEMP2
         
         TEMP3=TEMP3<<1:TEMP3.0=BIT2_7
         DISP3[X]=TEMP3
       NEXT
       RETURN
Display ilave edince değişen kodlar şöyle olacak;
Kod: [Seç]
KAYDIR_SAGA:
       FOR X=0 TO 7
         TEMP1=DISP1[X]:BIT1_7=TEMP1.7 'DISP1 in 7. ci bitini aldık
         TEMP2=DISP2[X]:BIT2_7=TEMP2.7   'DISP2 nin 7 nolu bitini aldık
         TEMP3=DISP3[X]:BIT3_7=TEMP3.7
         TEMP4=DISP4[X]:BIT4_7=TEMP4.7
         
         TEMP1=TEMP1<<1:TEMP1.0=BIT4_7 ' ENSONDAKİ BİTİ EN BAŞA ALIYORUZ
         DISP1[X]=TEMP1 'KAYDIRILAN DATAYI TEKRAR DİZİ YE YERLEŞTİRDİK   
         
         TEMP2=TEMP2<<1:TEMP2.0=BIT1_7
         DISP2[X]=TEMP2
         
         TEMP3=TEMP3<<1:TEMP3.0=BIT2_7
         DISP3[X]=TEMP3
         
         TEMP4=TEMP4<<1:TEMP4.0=BIT3_7
         DISP4[X]=TEMP4
       NEXT
       RETURN 

Gördüğünüz gibi karmaşık ama zor değil. Temel mantık şu ne tarafa kaydırıyorsanız bir bit boşa çıkıyor ona da diğer baştaki biti yerleştiriyoruz böylece yazı kendi içinde dönerek ilerlemiş oluyor.
Dosyalar ilişiktedir.
Ete
« Son Düzenleme: 19 Ocak 2013, 12:47:36 Gönderen: ete »

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #1 : 19 Ocak 2013, 13:21:03 »
Hocam verdiğiniz örneği 8*80 e kadar çıkardım ve adımı soyadımı matrixlerde kaydırabilir hale getirdim displaylerin artışınada örnek olsun.ekte veriyorum.Sağa Aşağı ve Yukarıyıda eklemeye çalışacağım hocam çok teşekkürler bıkmadan sıkılmadan açıklama yaptıgınız ve mantıgını anlamamı sağladıgınız için minnettarım size tekrar teşekkürler.

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #2 : 19 Ocak 2013, 18:48:18 »
Buda 8*80 sola kayan biraz önceki dosyanın ETE hocamızın yaptıgı gibi çift yazı gösteren halidir.

Çevrimdışı proteus

  • Tam Üye
  • ***
  • İleti: 128
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #3 : 19 Ocak 2013, 20:36:56 »
haberleşme ,
N' harfini ters çevirmişsin tepe takla çıkıyo
j Harfide ters
« Son Düzenleme: 19 Ocak 2013, 20:39:34 Gönderen: ete »

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #4 : 19 Ocak 2013, 21:28:00 »
haberleşme ,
N' harfini ters çevirmişsin tepe takla çıkıyo
j Harfide ters



proteus,

Ben örnek olarak koydum harfleri oluştururken hatalar olabilir ilgili kodları değiştirerek düzeltebilirsin.Zamanım olursa ilgilenip dosyaları yenilerim uyarın için teşekkürler.

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #5 : 19 Ocak 2013, 21:57:51 »
N Ve J harfleri düzeltilmiştir.

Çevrimdışı ete

  • Yönetici
  • Kahraman Üye
  • *****
  • İleti: 3804
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #6 : 20 Ocak 2013, 08:03:27 »
Harflerde hala bazı kusurlar var. Aklıma gelenleri söyleyeyim.
Mesela k harfi R harfine benziyor ve karışıyor. K harfinin çıkıntıları düz ve 45 derece açı ile çıkmalı. Sen uçları yuvarlamışsın.

Bazı harfleri 5x7 matrik se sığdırmışsın genelde 6x7 matriks kullanmışsın. Mesela B harfi. Bu durum gözü tırmalıyor. Bana kalırsa ya hepsini 5x7 yap yada 6x7 yap. Böylece yürüyen harfler eşit aralık alır ve göze hoş görünürler.
Ete

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #7 : 20 Ocak 2013, 13:14:09 »
Hocam şuan final sınavlarım falan onları anlatıp ve boş zamanlarımda harflerin hepsini dediginiz gibi yapıp yayınlayacağım.Onun harici hocam programlamada bir sorun gözünüze çarptı mı şöyle olsaydı dediginiz.

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #8 : 20 Ocak 2013, 16:01:15 »
Programdaki kodları düzelttim hocam ekte veriyorum.Ve tüm harfleri 6*7 formatında hazırladım ekteki not defterindedir.

Çevrimdışı ete

  • Yönetici
  • Kahraman Üye
  • *****
  • İleti: 3804
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #9 : 20 Ocak 2013, 16:56:24 »
Kaptın bu işi kim tutar seni. Şaka bir yana teşekkür ederim. İyi oldu bu deneyeyim bakalım.
Ete

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #10 : 20 Ocak 2013, 17:35:04 »
Rica ederim Hocam Birşeyler yapabildiysem bu kesinlikle sizin sayenizdedir yani sizin şu yorumunuz bile ne kadar azim verici oluyor Tekrar çok teşekkür ederim.6x7 kodlarda hepsini denedim ama gözümden kaçmışsa hemen düzeltirim.

Çevrimdışı ete

  • Yönetici
  • Kahraman Üye
  • *****
  • İleti: 3804
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #11 : 21 Ocak 2013, 13:12:29 »
Haberleşme,
Harf kodları doğru ancak pek çok harfi 8x8 matrix içinde ortalamamışsın.
Bu şu demek harfin solunda ve sağında boş bir sütun olmalı. 6x7 matrix içine sığdırdığımıza göre ilk sütun boş ve son sütun boş olmalıdır.
E  harfi datalarına bakarsak;
$3F  %00111111  bu aslında %01111110 yani $7E olmalı idi.
$01  %00000001 bu aslında %00000010 Yani $02 olmalı idi.
bu şekilde örnek gidiyor.

Ete

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #12 : 21 Ocak 2013, 14:57:14 »
Hocam bu sefer tam istediğiniz gibidir ben birçok harfi değil hepsini matrixsin 0 nolu bitinden 6x7 yaptım ortalamamıştım şimdi oldu hocam tüm harfler ortalı bir şekilde ektedir.Hocam bide bu 8x80 lik devrede kırpışmalar falan oluyor bunun dediğiniz parametrelerde oynamalar yapsam da devam ediyor bunun sebebi artık simulasyon ve grafik özelliklerimdendir değil mi program da bir sorun yok çünkü.

Çevrimiçi elektromanyaq

  • Yeni Üye
  • *
  • İleti: 17
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #13 : 14 Mart 2013, 17:28:13 »
ETE, hocam ben kayan yazıda matrixleri arttırdım ancak yazının tamamını gosteremedım anımasyonda sadece 3 harf 3 harf   kayıyor  programda yenıyım bazı duzenlemelerı basardım 
 64 sutun da yazının tamamını kaydırmam için nasıl bı duzenleme yapmam lazım..
« Son Düzenleme: 14 Mart 2013, 17:57:49 Gönderen: elektromanyaq »

Çevrimdışı haberlesme

  • Tam Üye
  • ***
  • İleti: 132
Ynt: Kayan Yazı Örnek Çalışması
« Yanıtla #14 : 14 Mart 2013, 22:29:01 »
Sorunu hallettim yeni Basic Dosyasını ekte veriyorum sorunu kısaca açıklayayım programda 3 harften sonrasını kopyala yapıştırla gittigin için disp 3 ü gösterdikten sonra yani şurda

Kod: [Seç]
            X=x+1:GOSUB YAZI
            GOSUB HARF_SEC
            TEMP1=YERI           
            FOR I=0 TO KACDATA
              YERI=TEMP1+I
              GOSUB DATA_AL
              DISP3[I]=VERI
            NEXT
            YERI=TEMP1 
            RETURN 

return ile beraber kopyaladıgından dolayısıyla program alttaki disp 8 e kadar olan bölümü görmeden return komutuyla geri dönmüştür bunları kaldırınca sorun halledilmiş oluyor dosya ektedir kolay gelsin.