• Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PIC16F887 Stepper Motor Control

Status
Not open for further replies.

KBM

New Member
Hello everyone, new to this site and coding (moved from stack overflow due to too many sarcastic people).

I am writing a code to control a stepper motor to act as a barrier for a car park;

the motor has to rotate 90* to open and close the gate - via a button (manual operation) and sensors (auto operation)

Although what i have at the moment does not appear to work. What i need at the moment is for someone to tell me how to get it turning 90 degrees both ways by clicking a button for each direction.


Code so far;

void main() {
ANSEL = 0;
ANSELH = 0;

TRISC = 0; // these two essentially enable PORTC to be used
PORTC = 0; // ^
PORTD = 0; // this is to allow for PORTD to be used as control buttons

TRISD.B0 = 1; // setting up PORTD bit 0 as a control button
TRISD.B1 = 1; // setting up PORTD bit 1 as a control button

if (PORTD.B0 == 1); // this should only do this line of code if PORTD bit 0 is pressed
do {
PORTC = 0x09;
Delay_ms(100);
PORTC = 0x0c;
Delay_ms(100);
PORTC = 0x06;
Delay_ms(100);
PORTC = 0x03;
Delay_ms(100);
} while (0);

if (PORTD.B1 == 1); // for some reason it only rotates one way and stops when bit 1 is pressed
do {
PORTC = 0x03;
Delay_ms (100);
PORTC = 0x06;
Delay_ms (100);
PORTC = 0x0c;
Delay_ms (100);
PORTC = 0x09;
Delay_ms (100);
} while (0);

Please be patient with me as i am new to coding but i could really do with the help.

Thank you
 

Ian Rogers

User Extraordinaire
Forum Supporter
Most Helpful Member
Two things stick out.....

If(blah = blah); <-- the semi colon finishes the if, so loose the semi colon and encapsulate the conditions arguments with curly braces

Two do while(condition) not zero..
C:
if (PORTD.B0 == 1)  // this should only do this line of code if PORTD bit 0 is pressed
   {
   do {
      PORTC = 0x09;
      Delay_ms(100);
      PORTC = 0x0c;
      Delay_ms(100);
      PORTC = 0x06;
      Delay_ms(100);
      PORTC = 0x03;
      Delay_ms(100);
      } while (correct_position_achieved); // A zero here will only let the DO/WHILE execute once only..
   }
 
Status
Not open for further replies.

Latest threads

EE World Online Articles

Loading
Top