Not 8: Kayan Yazı Uygulaması (5×7 Dot Matrix)

Yayınlandı: 22 Kasım 2011 / Microchip PIC Programlama...
Etiketler:, , , , , , , , , , ,

Alışveriş merkezinde, dükkanlarda, büfelerde, otobüslerde hatta dolmuşlarda bile gördüğümüz , reklam ve mesaj amaçlı tabelaların belki de en ilgi çekici olanı kayan yazılardır. Dot-matrix displayler kullanılarak yapılan bu tabelaların genelinde dışarıdaki bir PC ile haberleşecek yapıda  bir adet mikrodenetleyicili kontrol mekanizması bulunmaktadır. Aşağıda vereceğim şema ve kodları dikkatlice incelemenizi tavsiye ediyorum.  Lakin kod satırlarını burada tek tek yazarak anlatmak biraz zor. İşin temel mantığı mesajın bulunduğu diziyi tampon diziye birer eleman sola kaydırarak kopyalamak ve bu tampon diziyi dot matrix displaylere basmaktan ibaret. Unutmadan ekleyeyim kullandığım dot matrix ortak katod. Devre şeması ve kodu hemen paylaşıyorum…

Devrede dikkat edilmesi gereken eleman 74HC154 isimli 4’den 16’ya dekoder entegresi . Bu entegre girişlerine verilen sayıya göre herhangi bir çıkışını aktif eder. Diyelimki girişten binary olarak 5 sayısını girdik. O zaman 5. çıkışı aktif etmektedir. 0 girersek, 0. çıkış aktif olur. Dikkat edilmesi gereken nokta entegre çıkışlarının değillenmiş olmasıdır. Bu da aktif olan çıkışın “0”, pasif olan çıkışın ise “1” seviyesinde olacağı anlamına gelmektedir.

Büyütmek için tıklayın…

Kodumuz;

const char harf[64]={
0x00,0x00,0x00,0x00,0x00,//Boşluk
0x00,0x00,0x00,0x00,0x00,//Boşluk
0x00,0x00,0x00,0x00,0x00,//Boşluk

0x7f,0x20,0x10,0x20,0x7f, //'M' harfinin kodları.
0x00,0x11,0x5f,0x11,0x00, //'İ' harfinin kodları.
0x7f,0x08,0x14,0x22,0x41, //'K' harfinin kodları.
0x00, //Boşluk
0x7f,0x48,0x4c,0x4A,0x31, //'R' harfinin kodları.
0x00, //Boşluk
0x3e,0x41,0x41,0x41,0x3e, //'O' harfinin kodları.
0x00,0x00, //Boşluk
0x0e,0x11,0x11,0x11,0x00, //'c' harfinin kodları.

0x00,0x00,0x00,0x00,0x00,//Boşluk
0x00,0x00,0x00,0x00,0x00,//Boşluk
0x00,0x00,0x00,0x00,0x00,//Boşluk
};
char dizi[15];
char j=0,a=14,h,k;
signed char i=0;

//******************************************************************
//******************************************************************

void goster()
{
for(k=0;k<5;k++) //Hız ayarı (Düşürdükçe hızlanır)
{
for(h=0;h<15;h++)
{ PORTA=15; // Düzgün gözükmesi için sütunu söndürmek gerekiyor. 7 yüklememin sebebi tüm sütunları söndürmek.
PORTB=dizi[h];// Sırası ile harf'in sütun sütun kodları PORTB'ye yükleniyor.
PORTA=h; //PORTA'da hangi sütunun aktif edileceği saydırılıyor.
delay_ms(3); //Ledlerin belli bir süre yanması sağlanıyor.
} } }
//******************************************************************
//******************************************************************
void main()
{
trisb=0;
cmcon=7;
trisa=0;
portb=0;
while(1)
{
for(i=14;i<=0;i--) //harf katarını dizi katarına aktarmak için kullanılan döngü..
{ // Her seferinde dizi katarının değişkenlerini bir sola kaydırarak aktarır.
dizi[i]=harf[a-j];
j++;
}
goster();
a++;
j=0;
if(a==64)a=14; //eğer a değeri "harf" katarının boyunu aşmışsa a değerini 14 yap.
}
}

Devrenin çalışan hali; (Breadboardda kablo karmaşası yaşadığım için 2 adet 5×7 display kullandım.)

Konu ile ilgili bütün kaynakları buradan indirebilirsiniz.

Bu notumu da başarı ile bitirdiğime göre artık biraz keyfime bakabilirim…
Sorularınızı aşağıdaki iletişim kısmından iletebilirsiniz. İyi çalışmalar..

 

yorum
  1. SEDAT dedi ki:

    Hocam pic16f628a’da yaklaşık iki kelimeden fazla kayan yazı uygulaması yapmaya çalıştığımda “Not enough ram” hatası alıyorum.Bunu aşmanın bir yolu varmı yoksa Ram hafızası daha fazla olan bi pic mi kullanmalıyım..
    Şimdiden Teşekkürler..

  2. SEDAT dedi ki:

    Çok sağolasın hocam.. Problem çözüldü..

  3. 14rk10n dedi ki:

    öncelikle paylaşım güzel teşekkürler ama derlemeye çalıştığıtmda

    PORTA
    PORTB
    PORTA
    trisb
    cmcon
    trisa
    PORTB HAtaları karşıma cıkıyor bu kod ccs mi ?

    • mikrodunya dedi ki:

      Hayır CCS ile değil. MikroC ile yazdım, eski versiyonu ile. Not 1’den ulaşabilirsiniz programın setup dosyasına.

      • eren dedi ki:

        peki hocam bu 35 ledi pic ile nasıl besleyeceğiz ? tamam isis te çalışırda pic in bacağından maksimum 20 mA çekebiliyoruz , bunu nasıl çözeriz?

      • mikrodunya dedi ki:

        Sütun tarama yönteminde (bu yazıda anlatılan yöntem) sütunlar tek tek tarandığı için her led yeterli akımı almaktadır. Satır tarama yönteminde ise tüm satır aynı anda yandığı için sütun sayısı arttıkça çekilen akımda artacaktır. bu sorunu çözebilmek için ULN2003 gibi entegreler veya mosfetler kullanılabilir. Sütun tarama yöntenminde ise herhangi bir sürücüye gerek yok. Şekildeki devrenin aynısı, videosunu izlediğiniz devre.

  4. yasar dedi ki:

    PIC e bilgisayarda yazdığınız programın adı ne

  5. muratyamak dedi ki:

    dotmatrix sayısını nasıl artırabiliriz mikro c ile yazıldığı belli oluyor zaten emeğinize sağlık

  6. muratyamak dedi ki:

    burdaki program sütun taramalı olarak çalışıyor emeğinize sağlık cevap için çok teşekkür ederim

  7. Uğur dedi ki:

    KOD patlak çalımıyo

  8. Uğur dedi ki:

    Hocam bu devreyi aynen isis-proteus’da kurdum fakat şöyle bişey oldu. dikey çubuklar soldan sağa doğru kaymaya başladılar. Tamam scrolling olayını anladım da burada harfleri görmemiz gerekirdi. Siz bunun aynısını yapıp çalışıtğını söylüyorsunuz. İnşallah ben hata yapıyorumdur fakat defalarca kurdum devreyei en baştan. Amacım bunun doğru çalıştığından emin olduktan sonra ledler kendim bağlayıp büyük bir tabela tasarlamak.(buna ilişkin olarak mikro cile yazılmış bir proje de yok).Cevabınız için teşekkür ederim.

  9. Uğur dedi ki:

    Yukarıdaki mikro c kodunda bi sorun var. Ben bu gönderdiğiniz ccs c ile yapılmış kodun çalıştığını gördüm ve fakat mikro c ye aşinayım. mikro c ye yönelik yazılan koddaki sorunu çözmeniz mümkün mü?

  10. gürkan dedi ki:

    paylaşımınız çalııyor hiç bir sorun yok elinize sağlık yararlı bir paylaşım
    (5×7 Dot Matrix) sayısını artırmak istiyorum mesela 10 tane (5×7 Dot Matrix) ısis devresi ….
    ek olarak tarıhtır sıcaklıktır ..okuduğumuz sensörleri ,kayan yazı kodları ile nasıl birleştirebiliriz
    anlatıtığım şekılde bir çalışma yapabilirmisiniz

    • mikrodunya dedi ki:

      Yakın zamanda böyle bir çalışma yapmayacağım. Daha uzun yazılar yazmak istiyorsanız satır taramalı kayan yazı ile ilgili yazıma bakabilirsiniz.

  11. ibrahim dedi ki:

    öncelikle paylaşım güzel teşekkürler ama derlemeye çalıştığıtmda

    PORTA
    PORTB
    PORTA
    trisb
    cmcon
    tris
    bu hatayı alıyorum nasıl duzeltebılırm

  12. ibrahim dedi ki:

    sızdekı projenın aynısı hocam

  13. ibrahim dedi ki:

    #include
    #use delay(clock=4000000)
    #fuses xt

    char harf[63]={
    0x00,0x00,0x00,0x00,0x00,//Boşluk
    0x00,0x00,0x00,0x00,0x00,//Boşluk
    0x00,0x00,0x00,0x00,0x00,//Boşluk

    0x7f,0x20,0x10,0x20,0x7f, //’M’ harfinin kodları.
    0x00,0x11,0x5f,0x11,0x00, //’İ’ harfinin kodları.
    0x7f,0x08,0x14,0x22,0x41, //’K’ harfinin kodları.
    0x00, //Boşluk
    0x7f,0x48,0x4c,0x4A,0x31, //’R’ harfinin kodları.
    0x00, //Boşluk
    0x3e,0x41,0x41,0x41,0x3e, //’O’ harfinin kodları.
    0x00, //Boşluk
    0x3e,0x7f,0x63,0x63,0x36, //’C’ harfinin kodları.

    0x00,0x00,0x00,0x00,0x00,//Boşluk
    0x00,0x00,0x00,0x00,0x00,//Boşluk
    0x00,0x00,0x00,0x00,0x00,//Boşluk
    };
    char dizi[15];
    char j=0,a=14,h,k;
    signed char i=0;
    //******************************************************************
    //******************************************************************

    void goster()
    {
    for(k=0;k<5;k++) //Hız ayarı (Düşürdükçe hızlanır)
    {
    for(h=0;h=0;i–) //harf katarını dizi katarına aktarmak için kullanılan döngü..
    { // Her seferinde dizi katarının değişkenlerini bir sola kaydırarak aktarır.
    dizi[i]=harf[a-j];
    j++;
    }
    goster();
    a++;
    j=0;
    if(a==63)a=14; //eğer a değeri “harf” katarının boyunu aşmışsa a değerini 14 yap.
    }
    }

  14. EREN dedi ki:

    Merhabalar, piyasadaki led ışıklar sanırım “Dot Matrix” dediğimiz şey değil.Piyasada kullanılan p10 diye adı geçen 32*16’lık olanları nasıl kullanabileceğiz, proteusta da bulamadım.Yardımcı olursan sevinirim.

  15. ibrahim dedi ki:

    ne projesı bu

  16. ibrahim dedi ki:

    dırenc kullandınız mı devrede

  17. ibrahim dedi ki:

    devreyı kurdum matrix hep yanıyor

  18. ibrahim dedi ki:

    ortak anot

  19. ibrahim dedi ki:

    ortak katot kullandım hallettım ilgilendıgın ıcın saol

  20. ibrahim dedi ki:

    devreyi de ccs diline cevrdım ısteyen olursa atayım

    • Ates dedi ki:

      Bu programin cssne nasil ulasirim frekanstan dolayi galiba dengesiz sekilde ledler yaniyo katot matrix kulandim bide ust 7 bacak alt giris 5 bacak son iki bosta

  21. onur dedi ki:

    slm hocam ben devrede ortak anot matris kullanacam programda ne gibi değişiklik yapmak lazım.

  22. ateş ege dedi ki:

    bu devreyi yapmak istiyorum elimde 8*8lik iki tane dotmatrix display var aynı işlemci ve entegrenin sonunda e harfi var bu kod 8*8 çevrilirmi elimdeki işlemci bunu destekler mi kaç voltla beslediniz ya da bi 5*7 lik display alsam yeter mi

  23. osman tunçer dedi ki:

    ares çiziminde hata veriyor e postaya çizimi yollayabilirmisiniz

  24. osman tunçer dedi ki:

    hocam çizgi izleyen robot eklerseniz çok memnun olurum

  25. Durmus dedi ki:

    hocam devreyi yaptım ancak kelime ne kadar uzun olursa ledlerde titremeler oluyor dahili osilatör kullandığımda daha da belli oluyor öneriniz nedir?

  26. Durmus dedi ki:

    zaten hocam hc595 ile yapılan satır taramalı devrenizi yaptım onda öyle bir sıkıntı var

  27. ali dedi ki:

    hocam adam gibi bir MikroC poğramı lazım bana bi link paylaşabilirmisiniz?

  28. Hüseyin Kaderoğlu dedi ki:

    Elinize sağlık. Bir elektronik amatörüyüm. C ile yazılmış, işime yaramadı ama, çok hoş bir devre hazırlanmış. Böyle bir bilgiyi paylaştığınız için tebrik ediyorum. Başarı dileklerimle. Sağlıcakla kalın.

  29. Eren dedi ki:

    Hocalarım ben basic dili ile kendimi gelistirmekteyim kayan yazı devresi yapmak istiyorum paylastiginiz gibi acaba basic hali varmidir bu kodun nasil yardimci olabilirsiniz bana

  30. CAN dedi ki:

    Merhaba ben assembly dilini yeni öğrenmeye başladım. Burada dosyyayı indirip içindeki asm kodunu mplap a gecirdiğimde birçok hata alıyorum.Neler eksik tam çözmedim. Bu projeyi yapmak istiyorum. Rica etsem mailime assembly kodunu tekrar gönderebilirmisiniz

  31. berat dedi ki:

    hocam sizin bu devrenin malzeme listesine nerden ulaşabiliriz acaba ?

Hüseyin Kaderoğlu için bir cevap yazın Cevabı iptal et