sayıcı sayılar tam çıkmıyor

Başlatan secretagent, 02 Aralık 2011, 13:57:58

secretagent

arkadaşlar bıir sayıcı devresi yaptım fakat displayda rakamlar tam gözükmüyor tarama frekansıdamı sorunb yapıyorumn acaba kodu ekliyorumn yardım edebilirmisiniz
#include <16F876A.h>

#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=20000000)

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)


#define display_1 pin_c4
#define display_2 pin_c5
#define display_3 pin_c6
#define display_4 pin_c7
#define arttir pin_a3
char birler=0, onlar=0, yuzler=0, binler=0;
unsigned int32 sayi=0;
const int digit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
  
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   
   
   set_tris_c(0x00);
   set_tris_a(0x08);
   set_tris_b(0x00);
     
   output_low(display_1);
   output_low(display_2);
   output_low(display_3);
   output_low(display_4);
   
   while(1)
   {
   birler=sayi%10;
   onlar=(sayi/10)%10;
   yuzler=(sayi/100)%10;
   binler=(sayi/1000)%10;
   
   output_high(display_1);
   output_b(digit[birler]);
   delay_ms(5);
   output_low(display_1);
   
   output_high(display_2);
   output_b(digit[onlar]);
   delay_ms(5);
   output_low(display_2);
   
   output_high(display_3);
   output_b(digit[yuzler]);
   delay_ms(5);
   output_low(display_3);
   
   output_high(display_4);
   output_b(digit[binler]);
   delay_ms(5);
   output_low(display_4);
   
   if(input(arttir))
   {
   delay_ms(10);
   sayi++;
   
  if(sayi==10000)
  sayi=0;
  
  birler=sayi%10;
   onlar=(sayi/10)%10;
   yuzler=(sayi/100)%10;
   binler=(sayi/1000)%10;
   
   while(input(arttir))
   {
      output_high(display_1);
   output_b(digit[birler]);
   delay_ms(5);
   output_low(display_1);
   
   output_high(display_2);
   output_b(digit[onlar]);
   delay_ms(5);
   output_low(display_2);
   
   output_high(display_3);
   output_b(digit[yuzler]);
   delay_ms(5);
   output_low(display_3);
   
   output_high(display_4);
   output_b(digit[binler]);
   delay_ms(5);
   output_low(display_4);
   
   }
   }
}
}

Kabil ATICI

LED ekranlı bir sayıcı gibi görünüyor.  Ama devreni görebilsek daha çok yardımcı olabiliriz. LED ekran Ortak anot mu ortak katot mu? (işlemcilerde ortak anot kullanmak daha mantıklı oluyor. Çünkü işlemcinin dışarıya akım verme kapasiteleri sınırlı ama içeriye akım akıtmaları daha yüksek olabiliyor.) Aynı nedenle LED ekranın ortak ucunu bir transistörle sürmek, ekranın istediği akımı sağlamak açısından yararlı olabiliyor.

öncelikle saydırma çalışmadan ekranda bir şeyler gösterebiliyor mu?
programda hane sayaçlarına doğrudan atanmış değeri gösterme çalış. Gerekirse ilk değeri 0'dan farklı bir değer ver.

Önce bir hane için bile olsa bunu çöz. (tarama olmasa bile.) Tek tek tüm haneler için bunu yap. En azından verdiğin adreslerin doğru olduğuna emin ol. Sonra tarama için sonraki adıma geç. Burada gecikmeler konusu devreye giriyor.

Tüm haneler düzgün gösterdiğinde sonraki adımda sayma işlemi ve gösterme işlemine geçilebilir.
ambar7