Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Dot Matris Titreyerek Yanıyor

Başlatan Recep METE, 12 Mayıs 2013, 13:35:10

Recep METE

CCS C de kodları yazılmış olan 5x7 katot matrix display titreyerek yanıyor.Matrixde "A-B-C-D-+" gösterilmeye çalışılıyor.Bunun nedeni acaba nedir.Voltaj olarak  Usb li telefon şarjı ile 5 volt verilmektedir.Kodlar katot displaye göre tarafımdan terslenmiştir.
Kodlar şudur:
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use fast_io(b) // Port yönlendirme komutları B portu için geçerli
#use fast_io(c) // Port yönlendirme komutları C portu için geçerli

//******** Matrise Gönderilecek Karakter Bilgileri *******
 int A[]={0x7C,0xA,0x9,0xA,0x7C};
 int B[]={0x7F,0x49,0x49,0x49,0x36};
 int C[]={0x3E,0x41,0x41,0x41,0x22};
 int D[]={0x7F,0x41,0x41,0x41,0x3E};
 int E[]={0x7F,0x49,0x49,0x49,0x41};
 int arti[]={0x8,0x8,0x7F,0x8,0x8};
 int cift_ok[]={0x4,0x2,0x7F,0x2,0x4};

//******* Sütun Seçme Fonksiyonu ************
int sutunsec (int s)
{
   switch (s)
   {
      case 0: return(0xEF);break;  // 1. Sütun aktif, diğer sütunlar pasif
      case 1: return(0xF7);break;  // 2. Sütun aktif, diğer sütunlar pasif
      case 2: return(0xFB);break;  // 3. Sütun aktif, diğer sütunlar pasif
      case 3: return(0xFD);break;  // 4. Sütun aktif, diğer sütunlar pasif
      case 4: return(0xFE);break;  // 5. Sütun aktif, diğer sütunlar pasif
   }
}

//******* Matrise Veri Gönderme Fonksiyonu *******
void matris_karakter_gonder(char harf[], int tekrar)
{
   int i,j;  // Değişkenler tanımlanıyor

   for (i=1;i<tekrar;i++)  // Karakterin Matris LED'de görünmesi için tekrar döngüsü
       {
         for(j=0;j<5;j++) // // Bu döngüde tarama işlemi yapılıyor
         {
            output_c(sutunsec(j)); // Sütun seç ve C portuna sütun değerini gönder
            output_b(harf[j]);     // Gösterilecek harfin satır bilgisini B portuna gönder
            delay_ms(10);          // Gecikme veriliyor
         }
      }
}

/********* ANA PROGRAM FONKSİYONU********/

void main ()
{ 
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_b(0x00);  // B portu tümüyle çıkış olarak yönlendiriliyor
   set_tris_c(0x00);  // C portu tümüyle çıkış olarak yönlendiriliyor

   while(1)
   {
        matris_karakter_gonder(A,25);// A karakterini matriste göster
        matris_karakter_gonder(B,25);// B karakterini matriste göster
        matris_karakter_gonder(C,25);// C karakterini matriste göster
        matris_karakter_gonder(D,25);// D karakterini matriste göster
        matris_karakter_gonder(E,25);// E karakterini matriste göster
        matris_karakter_gonder(arti,25);//+ karakterini matriste göster
        matris_karakter_gonder(cift_ok,25);// Çift yönlü ok karakterini matriste göster

   }
}
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

muhtemelen tarama frekansı düşük geliyor...

(ASM ile)
Bu tür bir yapıyı ben yazdırılacak şekli önce RAM'e koyuyorum. Gösterme bölümünde  veriyi ram'dan okuyup matris ekrana gönderiyorum... Böylece aradaki her seferında karakteri tekrar okuma gibi durumu kalmıyor...
ambar7

lojikmemo1


10 ms gecikme fazla. 1ms olarak dener misin?
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

Recep METE

Hocam 1 ms yaptım ancak görüntülenen harfler çok hızlı  geçiyor.Titreme kayboluyor.8 ms denedim titreme var ama azaldı.Birde 5 ms deneyeceğim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

bymrz

Alıntı yapılan: semfero - 12 Mayıs 2013, 22:17:00
Hocam 1 ms yaptım ancak görüntülenen harfler çok hızlı  geçiyor.Titreme kayboluyor.8 ms denedim titreme var ama azaldı.Birde 5 ms deneyeceğim.

Yine 1ms olsun fakat aynı görüntüyü 5-6 kez bas...

Recep METE

Alıntı yapılan: alone_lover - 13 Mayıs 2013, 09:16:04
Yine 1ms olsun fakat aynı görüntüyü 5-6 kez bas...

Hocam görüntüyü 5-6 kez bas.. tam anlayamadım.Biraz açar mısınız?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

bymrz

Alıntı yapılan: semfero - 13 Mayıs 2013, 09:33:58
Hocam görüntüyü 5-6 kez bas.. tam anlayamadım.Biraz açar mısınız?

Hocam muhtemelen kayan yazı gibi bir şey yapıyorsun. Bütün satırları taradıktan sonra sutunları bir kaydırıyorsun ve yeni bilgileri basıyorsundur. Ben de diyorum ki o 1 ms beklemelerin yine 1 ms olarak kalsın. Fakat sütunlardaki bilgiler değişmeden aynı görüntüyü 5-6 kez tararsın. Bu sayede geçiş süren uzamış olur.

Kayan yazı konusunda bir diğer önemli nokta ise, bir satıra ilgili datayı basıp o satırın enerjisini(ortak anot veya katod) verdikten sonra boş boş beklemesin işlemci. O satır yanıyorken bir sonraki satır için gerekli bilgileri, ilgili yerlerden okuyup shift registerların içine basabilirsin. Bu arada süre dolduğunda shift registerlara "Latch" komutunu verirsin. Böylece displayin sönük kalma süresi kısalmış olur. Tabi bu işlemleri yapabilmen için "DelayMs" vb komutlar kullanmak yerine Timer kullanmalısın... Yani satırlar arası geçiş süresini herhangi bir timer ile yapmalısın...

lojikmemo1

#7
1 ms olarak kalsın.
main döngüdeki  "matris_karakter_gonder(A,25);" fonksiyonunu şu şekilde çağır " matris_karakter_gonder(A,250);"
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.