DC Motor Control: Software

DC Motor Control Software
           Having seen how the hardware will be connected, we must now take a look at the software perspective. The last section showed us that only 6 pins will be used by the PIC. Those pins are on PORTD & PORTC. Take a look below and you'll see how easy it is to set the digital 0's or 1's on those ports.
           Follow the comments in the program below & you should be able to gather a simple understanding of how the system will function.

« Begin Code »
/*
Written by: Chris
Date: 10/21/2007
Purpose & Description: This program will send control
signals to the attached LMD18245 via PORTD & PORTC.
The Olimex P-40 provides an LED on PORTA which we will
turn on or off inbetween motor speed changes.
*/
#include <p18f452.h> //We're using the PIC18F452
#include <delays.h> //We'll need the delays library

void main(void){

TRISA = 0x00; //Initialize these Ports as Outputs
TRISC = 0x00; //This one too
TRISD = 0x00; //This one toooo

PORTA = 0x00; //Initialize PORTA...so the LED is off

PORTDbits.RD0 = 0; //Brake Off
PORTDbits.RD1 = 1; //Direction Forward

     while(1){
          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250); //4 * 0.5 seconds = 2 Second Pause
          PORTA = 0x01; //Turn LED On
          PORTC = 0b00001111; // 0x0F Full Speed

          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250); //4 * 0.5 seconds = 2 Second Pause
          PORTA = 0x00; //Turn LED Off
          PORTC = 0b00001011; //0X0B 3/4 Full Speed

          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250); //4 * 0.5 seconds = 2 Second Pause
          PORTA = 0x01; //Turn LED On
          PORTC = 0b00000111; //0x07 1/2 Full Speed

          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250);
          Delay10KTCYx(250); //4 * 0.5 seconds = 2 Second Pause
          PORTA = 0x00; //Turn LED Off
          PORTC = 0b00000011; //0x03 1/4 Full Speed

          PORTDbits.RD0 = 1; //Turn Brake On
          Delay10KTCYx(250); //Pause 0.5 Seconds
          PORTDbits.RD0 = 0; //Turn Brake Off
     }
}


« End Code »

Download the code here: bridge.c

           The code seen above is actually an abriged version of the code available for download. I urge you to look at the downloadable code. The functionality is the same, but there are more comments which describe PORTC's part better than the comments in the code above.
           If you have read the previous PIC Microcontroller tutorials I've done then this code should make a decent amount of sense. We're just flipping bits, turning on an led & waiting.

Now we'll enable the system, see it work and explain why & how it works.




;