Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Kodda Hata

Başlatan Firzen, 14 Eylül 2017, 23:23:11

Firzen

Herkese Merhabalar;

30V 2 adet DC motor sürmek için aşağıdaki kodu yazdık. 18f4550 çip üzerinden 4 buton 4 sınır anahtar 8 adet pin ile bu işi halledebileceğime inandığımızdan tanımlamalarla rahat bir biçimde yazdık.

Sıkıntımız ise bu kodu derleyip aktardığımızda bütün ledler yanık kalıyor. Butonlar işlevsellik göstermiyor.

IDE : MikroC for PIC
Debugger : Mikroe Debugger
Chip : PIC18F4550
Çıkış Bağlantısını motor yerine şimdilik 8 tane led ile yaptık.


Emin olmamakla birlikte sanırsam fonksiyon tanımlama hatamız var. (Emin değilim.)
//ilk motor girişleri
#define m1 PORTB.F0
#define m2 PORTB.F1
#define m3 PORTB.F2
#define m4 PORTB.F3

//ikinci motor girişleri
#define m5 PORTB.F4
#define m6 PORTB.F5
#define m7 PORTB.F6
#define m8 PORTB.F7

//sag-sol butonlar
#define button1 PORTD.F6
#define button2 PORTD.F5

//yukarı-aşağı butonlar
#define button3 PORTD.F4
#define button4 PORTD.F3

//sag-sol limitler
#define sensorLimit1 PORTA.F1
#define sensorLimit2 PORTA.F2

//yukarı-aşağı limitler
#define sensorLimit3 PORTA.F3
#define sensorLimit4 PORTA.F4

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;

int limitState1 = 0;
int limitState2 = 0;
int limitState3 = 0;
int limitState4 = 0;

Stop(int);
Backward(int);
Forward(int);

void main() {

  ADCON1 = 7;
  
  TRISA = 0xFF;
  TRISB = 0x00;
  TRISD = 0xFF;
  
  PORTA = 0x00;
  delay_ms(1);
  Stop(1); 
  Stop(2);
  
  while(1) {
  if(buttonState1 == 0 || buttonState2 == 0 || buttonState3 == 0 || buttonState4 == 0){
    if(buttonState1 == 0 && limitState1 != 1){
      Forward(1); Stop(2);
    }
    else{
      Stop(1); Stop(2);
    }

    if(buttonState2 == 0 && limitState2 != 1){
      Backward(1); Stop(2);
    }
    else{
      Stop(1); Stop(2);
    }

    if(buttonState3 == 0 && limitState3 != 1){
      Forward(2); Stop(1);
    }
    else{
      Stop(1); Stop(2);
    }

    if(buttonState4 == 0  && limitState4 != 1){
      Backward(2); Stop(1);
    }
    else{
      Stop(1); Stop(2);
    }
  }
  else{
   Stop(1); Stop(2);
  }
}
}

void Stop(int m)
{
  if( m == 1){
    m1 = 0;
    m2 = 0;
    m3 = 0;
    m4 = 0;
  }
  else{
    m5 = 0;
    m6 = 0;
    m7 = 0;
    m8 = 0;
  }
}
void Forward(int m)
{
  if( m == 1){
    m1 = 1;
    m2 = 0;
    m3 = 1;
    m4 = 0;
  }
  else{
    m5 = 1;
    m6 = 0;
    m7 = 1;
    m8 = 0;
  }
}
void Backward(int m)
{
  if( m == 1){
    m1 = 0;
    m2 = 1;
    m3 = 0;
    m4 = 1;
  }
  else{
    m5 = 0;
    m6 = 1;
    m7 = 0;
    m8 = 1;
  }
}



Kodun haricinde sistemin çalıştığında nasıl göründüğüne dair resim de atıyorum.



Teşekkürler.

DipNot: Kod birebir fonksyion vs şeklinde arduinoda denendi ve çalışıyor. Şimdi ise PIC de aynı işi yapmak istiyoruz.

Kararsız...

mehmet

#1
Header ayarları yapıldı mı?

https://forum.mikroe.com/viewtopic.php?t=10646
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mehmet

#2
Muhteşem;
Buton durumları nasıl değişiyor?

Pinlerden buton ve limit bilgileri girilmemiş...
Arduino da muhtemelen buton kütüphanesi
kullandınız...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

LukeSkywalker


Firzen

Bir kontrol edeyim şimdi okuldayım hocam
Kararsız...