Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

MikroC code for controlling motor

Status
Not open for further replies.

NadaF

Newbie level 6
Newbie level 6
Joined
May 1, 2013
Messages
13
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,364
hi, i need a help plz, i'm computer science and i don't know very well about electronics and my graduation project is about auto drive system , now i have in my car 2 motors and i need to control it using pic16F877A but i don't know how to control it !! plz anyone help me in coding it i don't have enough time :(

- - - Updated - - -

hi, i need a help plz, i'm computer science and i don't know very well about electronics and my graduation project is about auto drive system , now i have in my car 2 motors and i need to control it using pic16F877A but i don't know how to control it !! plz anyone help me in coding it i don't have enough time :(

i have made a flow chart for my project i just need a C code for controlling motors :)
 

hii
i think problem is so easy to use pic16f--
make that for each motor View attachment circuits design.rar
Capture.PNG
 

thank you very much, :)
can you help me,, now i'm using HC-SR04 ping sensor,, when i write the code i couldn't know how to get the time from timer in pic 16f877a ,, i'm using MikroC language plzz help me if you can :)

- - - Updated - - -

thank you for help but i need code not the circuit for controlling DC motor using MikroC language
 

This is my code to control Motor by using SONY tv remote control. Since I am using two dc motors I can turn it left or right. Hope this might be useful for you.
Use pic 16f877a at 4MHZ frequency.

Code:
   /*Your word is a lamp to my feet and a light to my path-- psalms 119:105
    Remote Ir Decode + Motor control  Code
  */
  sbit LCD_RS at RB7_bit;
  sbit LCD_EN at RB5_bit;
  sbit LCD_D4 at RB1_bit;
  sbit LCD_D5 at RB2_bit;
  sbit LCD_D6 at RB3_bit;
  sbit LCD_D7 at RB4_bit;

  sbit LCD_RS_Direction at TRISB7_bit;
  sbit LCD_EN_Direction at TRISB5_bit;
  sbit LCD_D4_Direction at TRISB1_bit;
  sbit LCD_D5_Direction at TRISB2_bit;
  sbit LCD_D6_Direction at TRISB3_bit;
  sbit LCD_D7_Direction at TRISB4_bit;

  sbit ir_rx at RC0_bit;   //Remote ir input
  sbit RIGHT_A at RD0_bit;
  sbit RIGHT_B at RD1_bit;
  sbit LEFT_A at RD2_bit; //motor pins
  sbit LEFT_B at RD3_bit;
  sbit MOTOR_EN at RD4_bit;
  sbit LED at RC1_bit;    // Indication LED pin
  //****************************
  void get_mark_time(void);               // get Sony IR mark time
  void right_dir();
  void left_dir();
  void fwd_dir();     //motor directions
  void back_dir();
  void stop_motor();

  // global variables
  unsigned char counter = 0;
  unsigned char bitcount;
  unsigned char ir_address;
  unsigned char ir_command;
  unsigned int mark_time;
  char str[5];
  /////////

  void interrupt() {

      if (INTCON.T0IF) {
          counter++;
          INTCON.T0IF = 0;
      }

  }
  void main() {

  OPTION_REG = 0x03;      //1:16 prescalar
  TRISB=0;
  PORTD =0;
  TRISC=0b00000001;
  TRISD=0;
  INTCON.GIE = 1;
  INTCON.T0IE = 1;
  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  Lcd_Out(1,1,"Press any Key:");
   while(1){
          ir_command = 0;                                        // initialise to prevent false trigger
          ir_address = 0;                                        // initialise to prevent false trigger
          get_mark_time();                                       // get Sony leader - 2.4mS Mark, 1.2mS space
          if ((mark_time > 0x80) && (mark_time < 0xB0)){         // ignore anything but 2.4mS mark

               for(bitcount = 0 ; bitcount < 7 ; bitcount++){    // 7 bit command
                  get_mark_time();                               // get a Sony IR bit
                  ir_command >>= 1;                              // shift
                  ir_command &= 0x7f;                            // top bit zero
                  if (mark_time > 0x40){                         // > 40 is assumed to be a 1
                      ir_command ^= 0x80;                        // top bit 1
                  }
              }
              ir_command >>= 1;                                  // shift 1 unused bit
              ir_command &= 0x7F;                                // clear top bit

              for(bitcount = 0 ; bitcount < 5 ; bitcount++){     // 5 bit address
                  get_mark_time();                               // get a Sony IR bit
                  ir_address >>= 1;                              // shift
                  ir_address &= 0x7f;                            // top bit zero
                  if (mark_time > 0x40){
                      ir_address ^= 0x80;                        // top bit 1
                  }
              }
              ir_address >>= 3;                                  // shift 3 unused bits
              ir_address &= 0x1F;


            }

           if(ir_address == 1){                  // address of tv remote
           //*********clear lcd*****
              LED = 1;

              //*****motor
              if(ir_command == 116){
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(2,1,"Fwd");   
              fwd_dir();       //motor contorl
              }
              if(ir_command == 117){
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(2,1,"Back");
              back_dir();
              }
              if(ir_command == 52){
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(2,1,"Left");
              left_dir();
              }
              if(ir_command == 51){
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(2,1,"Right");
              right_dir();
              }
              if(ir_command == 101){
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(2,1,"Stop");
              stop_motor();
              }
              //***********
              ByteToStr(ir_command,str);
              Lcd_Out(1,1,"Cd:");      //display key code
              Lcd_Out_Cp(str);
          }
          Delay_ms(190);
          LED = 0;
      }



  }

  void get_mark_time(void){
      while(ir_rx);                           // wait for a mark
      counter=0;
      TMR0 = 0;
      while(!ir_rx);                          // wait for space
      mark_time = (counter << 8) + TMR0;
  }
  void fwd_dir(){
  RIGHT_A = 0;
  RIGHT_B = 1;                            //move motor fwd direction
  LEFT_A =  0;
  LEFT_B =  1 ;
  MOTOR_EN = 1;
  }
  void back_dir(){
  RIGHT_A = 1;
  RIGHT_B = 0;                         //move motor back direction
  LEFT_A =  1;
  LEFT_B =  0;
  MOTOR_EN = 1;
  }
  void right_dir(){
  RIGHT_A = 0;
  RIGHT_B = 0;                      //move motor right direction
  LEFT_A =  0;
  LEFT_B =  1 ;
  MOTOR_EN = 1;
  }
  void left_dir(){
  RIGHT_A = 0;
  RIGHT_B = 1;                           //move motor lefft direction
  LEFT_A =  0;
  LEFT_B =  0 ;
  MOTOR_EN = 1;
  }
  void stop_motor(){
  RIGHT_A = 0;
  RIGHT_B = 0;
  LEFT_A =  0;
  LEFT_B =  0 ;
  MOTOR_EN = 0;
  }
 
  • Like
Reactions: NadaF

    NadaF

    Points: 2
    Helpful Answer Positive Rating
Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top