74164 ve 7448 Denemesi Isis Similasyon sorunu

Başlatan NaMcHo, 25 Temmuz 2010, 17:28:49

NaMcHo

Öncelikle herkese merhabalar
CCS-C ile PIC PROGRAM kitabıyla pic programlamayı ogrenmeye calısıyorum.
Söyle birsey yaptım ;kitapda bulunan 74164 ve 7448 ile yapımlıs 2 displey uygulamasında kullanılan 74164 ve 7448 entegrelerini birlestirerek yeni bir tane displey uygulaması yapmak istedim fakat similasyonu yaparken soyle 2 hata aldım.(Proteus kullandım similasyon icin)
-No power supply specified for net 5V in Power Rail Configuration.
-Simulation FAILED due to netlist compiler error(s).


Düzeltme-1:Similasyonun neden hata verdigini buldum 7448 deki guc kaynağına 5V yazmışım +5V yazmam gerekiyomus.(benim gibi yeni baslayanlar varsa diye yazıyorum,belki yardımcı olur.)
Suanki sorun ise, displey calısmıyor.

Düzeltme-2:Displeyi calıstırdım devreden transistorleri cıkartıp direk 16f877 ye baglayınca displeyin 1 ve 2. uclarını bu oldu yani anot displeye dondu ve 7448(Katot disp. icin) yerinede 7447(Anot disp. icin) entegresini bagladım displeye ama yinede duzgun calısmıyor displey...Sonrada yeni kod yazdım 0-9 arasında sayıcı yapmak icin bunun similasyonu sorunsuz calıstı(Tek displey ile) ama 0-99 arası sayıcı calısmıyor.

0-99 icin yazdıgım kod ve Isis dosyasını ekliyorum http://hotfile.com/dl/57470319/d273fdb/0-99_sayc.rar.html
yardımlarınızı bekliyorum...



0-99 sayıcı kodu

#include <16f877.h>
#fuses xt,nowdt,nobrownout,noprotect,nolvp,noput,nowrt,nocpd
#use delay(clock=4000000)
#define saat pin_b0
#define data pin_b1
#define birlerdisp pin_b4
#define onlardisp pin_b5

int disp[10]={0,1,2,3,4,5,
6,7,8,9};
int birler,onlar,x,y,sayi=0;  
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(0);
   output_b(0b00110000);
   
   while(1)
   {
      
      birler=sayi%10;
      onlar=sayi/10;
      for(y=0;y<17;y++)                                                   //Displeyde Sayıların gozukmesi icin 16 defa donguyu dondurdum.
      {                  
         
         for(x=0;x<8;x++)                                                 //once birler basamagını 74164 e yolladım
         {
            output_bit(data,bit_test(disp[birler],x));
            output_high(saat);
            output_low(saat);
            if(x==7)                  //tum bitler gonderildikden sonra 7448e  displeyi aktif ettim sag displey.
            {                                                                 
               output_low(birlerdisp);                                       
               delay_ms(5);
               output_high(birlerdisp);
            }
         }
         
         delay_ms(25);
         
         for(x=0;x<8;x++)                       //onlar basamagını 74164 e gonderdim
         {
            output_bit(data,bit_test(disp[onlar],x));
            output_high(saat);
            output_low(saat);
            if(x==7)                          //tum bitler yollanıncada displeyi aktif ettim
            {
               output_low(onlardisp);
               delay_ms(5);
               output_high(onlardisp);
            }
         }
         
      }
      delay_ms(500);
      sayi++;
      if(sayi==100)
      sayi=0;
   }
}





NaMcHo

#1
Sonunda düzelttebildim.
Isis Dosyası : http://hotfile.com/dl/58018240    (C kodu ve hex de icindedir.)

#include <16f877.h>
#fuses xt,nowdt,nobrownout,noprotect,nolvp,noput,nowrt,nocpd
#use delay(clock=4000000)
#define saat pin_b0
#define data pin_b1
#define birlerdisp pin_b4
#define onlardisp pin_b5

int disp[10]={0,1,2,3,4,5,
6,7,8,9};
int birler=0,onlar=0,x,y,sayi=0;
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(0);
   output_b(0b00110000);
   
   while(1)
   {
      
      birler=sayi%10;
      onlar=sayi/10;
      for(y=0;y<15;y++)  //Displeyde Sayıların gozukmesi icin 16 defa donguyu dondurdum.
      {                  
         
         for(x=0;x<8;x++) //once birler basamagını 74164 e yolladım
         {
            output_bit(data,bit_test(disp[birler],x));
            output_high(saat);
            output_low(saat);
            if(x==7)                  //tum bitler gonderildikden sonra 7448e  displeyi aktif ettim sag displey.
            {                                                                 
               output_low(birlerdisp);                                       
               delay_ms(5);
               output_high(birlerdisp);
            }
         }
         
         delay_ms(25);
         
         for(x=0;x<8;x++)                       //onlar basamagını 74164 e gonderdim
         {
            output_bit(data,bit_test(disp[onlar],x));
            output_high(saat);
            output_low(saat);
            if(x==7)                          //tum bitler yollanıncada displeyi aktif ettim
            {
               output_low(onlardisp);
               delay_ms(5);
               output_high(onlardisp);
            }
         }
         
      }
      delay_ms(500);
      sayi++;
      if(sayi==100)
      sayi=0;
   }
}


Not : Forumları inceledigim kadarıyla forumda genelde hep üst düzey bilgileri olan büyüklerimiz var böyle basit seyleri foruma eklemek tuhaf bir his yaratıyo insanin icinde ister istemez ,ben ve benim gibi yeni baslayanlar icin ekliyorum belki faydam olur diye.(Artistlik yapıyor diye anılmak istemem.)

JKramer

Forumun amacı bu zaten. Eğer siz, düzeltilmiş halini eklemeden "Sorunu çözdüm, hadi bana eyvallah!" deyip gitseydiniz, o zaman artislik yapmış olurdunuz :). Çalışmalarınızda başarılar dilerim.

NaMcHo

Alıntı yapılan: JKramer - 28 Temmuz 2010, 12:09:15
Forumun amacı bu zaten. Eğer siz, düzeltilmiş halini eklemeden "Sorunu çözdüm, hadi bana eyvallah!" deyip gitseydiniz, o zaman artislik yapmış olurdunuz :). Çalışmalarınızda başarılar dilerim.

Teşekkür ettim :)