16F628A + 4511 0-99 display hatası

Başlatan algooo, 19 Ocak 2014, 20:52:24

algooo

Merhaba arkadaşlar.
proje ödevim olan 0-99 sayıcı devresinin 1 artırma 1 azaltma butonu var aynı zamanda devrede bir röle var her 10 rakamda bir röle çekiyor.
devreyi kurdum artırma butonuna basınca sayı displayde 0.1.2.3.4.5.6.7.0.1.10 şeklinde gidiyor yani 8 yerine 0, 9 yerine 1 görünüyor. simülasyonda düzgün çalışmasına rağmen gerçeğinde böyle bir problem var. 4511 in bağlanıtısını b portuna yaptım. B0,B1,B2,B3  portlarında 4511i entegresini girişleri B4 ve B5 portlarında da bir röle ve röle çekince yanan bir led var. Sayı 7 den sonra 0a gelince B4 portundaki Röle LEDi de yanıyor. acaba pic 4511 e gönderiği sayıyı tüm b portuna mı gönderiyor yoksa yazılımda mı bir problem var?
Yardımlarınız için teşekkür ederim.
#include <16F628A.h>
#FUSES NOWDT                   
#FUSES XT                       
#FUSES NOPUT                    
#FUSES NOPROTECT                
#FUSES NOBROWNOUT               
#FUSES NOMCLR                   
#FUSES NOLVP                    
#FUSES NOCPD                    
#use delay(clock=4000000)

#byte port_a=5
#byte port_b=6

signed long int birler=0,onlar=0, y=0,i=0;

void display ()
{
 birler=i%10;
 onlar=i/10;
 
 port_b=birler;
 output_low(pin_a0);
 delay_ms(20);
 output_high(pin_a0);
 port_b=onlar;
 output_low(pin_a1);
 delay_ms(20);
 output_high(pin_a1);
}


void main()
{

   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);
   set_tris_a(0b00111100);
   set_tris_b(0b00000000);
   port_a=0;
   port_b=0;
 while(true)
 {
  if(input(pin_a2)==0)
   {
    delay_ms(20);
    while(input(pin_a2)==0);
    i++;
    if(i>99) i=99;
    display ();
   }
  if(input(pin_a3)==0)
   {
    delay_ms(20);
    while(input(pin_a3)==0);
    i--;
    if(i<0) i=0;
    display ();
   }
   if((birler==0)&&(i!=0))
    {
     output_high(pin_b4);
     output_high(pin_b5);
    }
   if(input(pin_a4)==0)
    {
     delay_ms(20);
     while(input(pin_a4)==0);
     output_high(pin_b4);
     output_high(pin_b5);
    }
    if(input(pin_a5)==0)
    {
     delay_ms(20);
     while(input(pin_a5)==0);
     output_low(pin_b4);
     output_low(pin_b5);
    }
   if(i==99)
    {
       do
        {
         output_high(pin_b4);
         output_high(pin_b5);
         delay_ms(100);
         output_low(pin_b4);
         output_low(pin_b5);
         delay_ms(100);
         y++;
        } 
       while(y==100);
      }
    }
 }




ziyaretci

#1
Alıntı Yap
simülasyonda düzgün çalışmasına rağmen gerçeğinde böyle bir problem var.

Yukarıdaki cümlenden yüzeysel olarak çıkarılabilecek arıza sonuçları şunlar olabilir,
- Eğer kullandığın denetleyicinin B portu sağlamsa sorun 4511 'de olmalı,
- Simülasyonda çalışıyor demişsin, demekki yazılımsal hata yok, ama şöyle bir şüphem var, ccs c derleyicisinde bilmiyorum kaynak kodlarında sıkıntı mı var da, tris b ile fast io bütün yaptığım uygulamalarda, gerekli görevlerini gerçekleştirmedi hatta yoluma engel bile oldular diyebilirim. Ama bu düşüncemi Assembly 'de yaptığım uygulamalardan hariç tutuyorum,  birde tris b ve fast io kullanmadan dene.

Başka birşey gelmiyor aklıma, simülasyon dosyasıyla yazılım dosyalarını paylaşırsan daha net incelemelerde bulunabiliriz.

4511 'in örnek kulanımı aşağıdaki resimde var, pratikteki uygulaman ile uygun mu diye bir kontrol etmende fayda olacaktır.