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.
(https://s26.postimg.cc/736eozgmt/durum.png) (https://postimg.cc/image/736eozgmt/)
Teşekkürler.
DipNot: Kod birebir fonksyion vs şeklinde arduinoda denendi ve çalışıyor. Şimdi ise PIC de aynı işi yapmak istiyoruz.
Header ayarları yapıldı mı?
https://forum.mikroe.com/viewtopic.php?t=10646
(http://www.rosseeld.be/DRO/PIC/USB_20Mhz_cfg.jpg)
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...
Şema da lazım.
Bir kontrol edeyim şimdi okuldayım hocam