74164 ile matrix led

Başlatan _MeRKeZ_, 08 Ekim 2012, 21:51:32

_MeRKeZ_

Merhaba arkadaşlar,

74164 port çoğullayıcısıyla matrix led yakmak istiyorum. Amacım bu çoğullayıcının kullanımını öğrenerek daha fazla matrix led yakabilmek. Serdar Çiçek'in CCS C kitabında bulunan 74164 çoğullayıcısının 7 segment display örneğinden esinlenerek bu uygulamayı yazmaya karar verdim. Sizlerden ricam aşağıda kodunu ve benzetimini verdiğim devredeki hatayı bulma konusunda bana yardımcı olmanız



#include <16f877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)

#use fast_io(b)

#define data_1 pin_b0
#define data_2 pin_b2
#define data_3 pin_b4
#define data_4 pin_b6
#define clock_1 pin_b1
#define clock_2 pin_b3
#define clock_3 pin_b5
#define clock_4 pin_b7

int A[]={0xFF,0xFF,0x76,0x75,0X03};
int B[]={0x00,0X36,0X36,0x36,0X49};
int C[]={0x41,0x3E,0x3E,0x3E,0x5D};
int D[]={0x00,0x3E,0x3E,0x3E,0x41};
int E[]={0x00,0xB6,0xB6,0xB6,0xBE};

int sutun[]={0x01,0x02,0x04,0x08,0x10};


char i=0,j=0,k=0;

/* burada matrix ledin sütunlarını tek tek aktif ediyorum */

void sutunsec_1(int a)
{
      for(j=0;j<8;j++)
      {
         output_bit(data_1,bit_test(sutun[a],j));
         output_high(clock_1);
         output_low(clock_1);
      }

}

void sutunsec_2(int a)
{
      for(j=0;j<8;j++)
      {
         output_bit(data_3,bit_test(sutun[a],j));
         output_high(clock_3);
         output_low(clock_3);
      }

}

/* burada matrix lede yukarıdaki karakterleri yolluyorum */


void karakter_1(int tekrar)
{
   for(k=0;k<tekrar;k++)
   {
      for(i=0;i<5;i++)
      {
         sutunsec_1(i);
         
         for(j=0;j<8;j++)
         {
            output_bit(data_2,bit_test(A[i],j));
            output_high(clock_2);
            output_low(clock_2);
         }
         
         delay_ms(500);
         
      }
     
     
   }
}


void karakter_2()
{
   for(i=0;i<5;i++)
   {
      sutunsec_2(i);
     
      for(j=0;j<8;j++)
      {
         output_bit(data_4,bit_test(B[i],j));
         output_high(clock_4);
         output_low(clock_4);
      }
     
      delay_ms(500);
   }
}




void main()
{

   setup_psp(PSP_DISABLED);       
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);         
   setup_CCP1(CCP_OFF);           
   setup_CCP2(CCP_OFF);           
   
   set_tris_b(0x00);
   
   while(1)
   {
   
   output_b(0x00);
   karakter_1(10);
   output_b(0x00);
   karakter_2();
   
   }

}






Benzetim dosyası:

https://hotfile.com/dl/175406402/cd2b7ae/1.DSN.html

Teşekkürler

ete

#1
Burası bir basic derleyici kullananlar forumudur. Genellikle tartışmalar basic dili ve ona bağlı durumlar içindir. Sen c dilinde program yazmışsın bu en azından benim konu ile ilgilenmemi engelliyor. Belki anlayanlar vardır ama maalesef sayıları çok fazla değil.
En azından hatanın ne olduğunu söylersen dışarıdan fikir yürütme şansımız olacaktır.

Dosya ya baktım yalnızca DSN dosyası mevcut. Bu işe girişirken acaba 74164 nasıl çalışıyor diye bir inceleme yaptınmı?. Yada matrix sistem nasıl sürülüyor diye bir inceleme yaptınmı?. yapmadı isen  aşağıdaki linkte verdiğim ders notunu incele. Her ne kadar basic tabanlı anlatım var isede senin işinede mantık açısından yarayacaktır.

http://etepic.com/index.php?topic=24.0

74164 kullanımı son derece basit. R ( 9 ) bacağını HIGH da tutmak şartı ile CLK ( 8 ) bacağından clk plsini ve Data bacaklarından birisinden ( 1 ) vereceğin data bilgisini anında çıkışta görebilirsin. 595 den tek farkıda burası zaten. 595 de iki ayrı register var içeride. Bilgi önce ön registere alınıyor. Kilit bacağına bir puls verirsen bilgi pinlere aktarılıyor. Bu özelliği pek çok yerde işe yaramaktadır. Bu nedenle her zaman 595 kullanılmasını öneririm.
Ete

Powered by EzPortal