PIC 16F877A'da RC2/CCP1 pinini I/O kullanımı ?

Başlatan makinahmet, 15 Mart 2014, 14:24:07

makinahmet

Herkese merhabalar.
Yaptığım bi projede şu anlık C portundan iki tane step motor sürmeye çalışıyorum. Devre aşağıda verilen gibidir.

Ancak C2 pini yani CCP1 bacağını I/O olarak kullanmayı başaramadım. PİN HİÇ TEPKİ VERMİYOR. Datasheete baktığımda bu pinin I/O olarak kullanılabileceği yazmakta. Daha sonra aynı kodları pinleri değiştirerek D portunda deneyince kod çalıştı. Demekki C2 pininden kaynaklı bir programlama problemi yaşıyorum.  İnternette pek bu tür bi problemle karşılaşan da yok galiba. Kullandığım kodlar ise aşağıdaki gibidir.
#use fast_io(b) 
#define use_portb_lcd TRUE //port b yi lcd portu olarak kullanacağız
#include <lcd.c> //Pic c cpmpiler içindeki lcd kütüphanesini include edelim.

int tam_adim_kuzey[] = {0b00000001,0b00000010,0b00000100,0b00001000}; 
int tam_adim_guney[] = {0b00001000,0b00000100,0b00000010,0b00000001}; 
int tam_adim_dogu[] = {0b10000000,0b01000000,0b00100000,0b00010000}; 
int tam_adim_bati[] = {0b00010000,0b00100000,0b01000000,0b10000000}; 
int i = 0;

void main(){

    while(1)
   {

//ara ADC kodlarını sildimki açıkça anlaşılsın.

      //Eğer ki kuzey > güney ise yani güneş kuzey sensörüne daha yakınsa
      if(ADC0 > ADC1)
      {
      output_c(tam_adim_kuzey[i]);
      i++;
      delay_ms(100);
         if(i==4){i=0;}
      }
      
      //Eğer ki güney > kuzey ise yani güneş güney sensörüne daha yakınsa
      if(ADC1 > ADC0)
      {
      output_c(tam_adim_guney[i]);
      i++;
      delay_ms(100);
         if(i==4){i=0;}
      }
      
      
      //Eğer ki dogu > bati ise yani güneş dogu sensörüne daha yakınsa
      if(ADC2 > ADC3)
      {
      output_c(tam_adim_dogu[i]);
      i++;
      delay_ms(100);
         if(i==4){i=0;}
      }
      
      //Eğer ki bati > dogu ise yani güneş bati sensörüne daha yakınsa
      if(ADC3 > ADC2)
      {
      output_c(tam_adim_bati[i]);
      i++;
      delay_ms(100);
         if(i==4){i=0;}
      }
   
   }
   
}


Sonra ki günlerde ise PIC16f877A ile toplamda 4 tane step sürmek istiyorum. Dolayısı ile C portunuda kullanmak istiyorum. Aklıma gelen bir başka çözüm ise LCD yi C portuna takıp 4 tane stepin ikisini B portuna İkisinide D poruna bağlamak.
Değerli düşünceleriniz için şimdiden teşekkür ederim.
Makinahmet.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

Mucit23

Default olarak CCP donanımı aktif olabilir. Kullanmadığınız donanımları kapatın.

Mainden sonra şu kodları ekleyin

   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);

makinahmet

Denediğim yolları yazmayı unutmuşum. Evet ilk yaptığım bu oldu zaten ancak çözüm alamadım.

CCP kapatma yolunu ilk olarak denemiştim zaten.
#use fast_io(c) denedim.
set_tris ifadelerin, denedim.
output_bit ifadesi ile de denedim.
Compilerden mi kaynaklı acaba diye de düşünmeye başladım.
DC, STEP, SERVO MOTOR -> www.sinematronik.com