(CCS C 5.070) iki buton ile step motor kontrol

Başlatan silver_wolf, 03 Şubat 2018, 22:42:57

silver_wolf

Selam Arkadaşlar;
İki buton ile unipolar step motor uygulaması yapmaya çalıştım. Kitaptaki kodları birebir yazdım. İsis'te çalıştıramadım! Ama http://ccspic.com/ccs-c-ile-step-motor-uygulamasi/ linkte yapılmış ve çalışıyor. Aşağıdaki kodlar da kitapta geçen kodlar. Kitap ve sitedeki kodlar arasında iki fark var: (1)iki adım arası bekleme süresi (2) while(1) yerine while(true) var.
#include <16F877.h>

//Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) //gecikme fonksiyonu için kullanılacak osilatör
                           //frekansı belirtiliyor

// Giriş ve çıkış pinlerine isim atanıyor
#define buton_ileri pin_a0
#define buton_geri pin_a1

int i=0,hiz=400; //tam sayı değişkenleri tanımlanıyor

// Step motor yarım adım dönüş bilgiler
const int yarim_adim[]=(0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09);

/*************** ANA PROGRAM FONSİYONU ***************************************/
void main()
{
   setup_psp(PSP_DISABLED);  // PSP birimi devre dışı
   setup_timeR_1(T1_DISABLED);  //T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); //T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS); //ANALOG giriş yok
   setup_adc(ADC_OFF);  //ADC birimi devre dışı
   setup_CCP1(CCP_OFF);  //CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);  //CCP2 birimi devre dışı
   
   output_b(0x00); //İlk anda B portu çıkış sıfırlanıyor
   
   while(true) //sonsuz döngü
   {
      if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
      {
         output_b(yarim_adim[i]); //Step motor 1 adım ileri
         while(input(buton_ileri)); //Tuş bırakılana kadar bekle
         delay_ms(hiz); //Adımlar arası bekleme süresi
         if (i==7) //i değişkeni 7 olunca i değeri -1 olsun
            i=-1;
         i++; //1 değişkeninin değerini 1 arttır
      }
      if (input(buton_geri)) //GERİ Butonuna basıldı ise
      {
         if (i==0) // i değişkeni 0 ise i değeri 8 olsun
            i=8;
         i--; // i değişkeninin değerini 1 azalt
         output_b(yarim_adim[i]); //Step motor 1 adım geri
         while(input(buton_geri)); //Tuş bıraklana kadar bekle
         delay_ms(hiz); //Adımlar arası bekleme süresi
      }
   }
}

silver_wolf

Selam Arkadaşlar;
Sabit tanımlarken süslü parantez kullanılmadığı için program düzgün çalışmıyor. Kitapta aşağıdaki gibi yazıyormuş.
Saygılar

const int yarim_adim[]={0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};