Autor Tema: Timers para controlar motor  (Leído 1273 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Leonid@s

  • PIC10
  • *
  • Mensajes: 2
Timers para controlar motor
« en: 27 de Septiembre de 2011, 22:48:37 »
Hola a todos, soy nuevo en el foro y en el mundo de los pics tambien  :? quisiera saber si me pueden ayudar con mi proyecto  :o

El funcionamiento es el siguiente:

Estoy trabajando con el pickit3 el cual me controla 2 servomotores, eso ya lo tengo, pero ahora necesito saber como llegar al segundo paso, necesito que por medio de un valor (numerico) que yo le entro al pic por el puerto RS232 este lo transforme en tiempo que el motor esta andando, es decir si por ejemplo yo ingreso el numero 7, el motor dure 7 segundos encendido.

Les agradeceria muchisimo me pudieran colaborar gracias  :)

ahi les va lo que llevo de codigo

#include "p18f45k20.h"
#include "delays.h"
#include "12 CCP PWM.h"  // header file


/** V A R I A B L E S *************************************************/
#pragma idata   // declare statically allocated initialized variables


/** D E C L A R A T I O N S *******************************************/
#pragma code  // declare executable instructions

void main (void)
{
unsigned char brightness = 125; // = 0x7D

    TRISDbits.TRISD7 = 0;
   TRISDbits.TRISD6 = 0;
    // Set up 8-bit Timer2 to generate the PWM period (frequency)
    T2CON = 0b00000111;// Prescale = 1:16, timer on, postscale not used with CCP module
    PR2 = 312.5;         // Timer 2 Period Register = 250 counts
    // Thus, the PWM frequency is:
    // 1MHz clock / 4 = 250kHz instruction rate.
    // (250kHz / 16 prescale) / 250) = 62.5Hz, a period of 16ms.

    // The Duty Cycle is controlled by the ten-bit CCPR1L<7,0>:DC1B1:DC1B0
    // 50% Duty Cycle = 0.5 * (250 * 4) = 500
    //CCPR1L = 0x19;  //10%xxx
   //CCPR1L = 0X1E; //12%
   //CCPR1L = 0X16; //NEUTRO
    CCPR1L = 0X0C; //REVERSA               
    CCP1CON = 0b01001100;
                 
   
   TRISCbits.TRISC1 = 0;
   //CCPR2L = 0x0C; //5%xxx
   //CCPR2L = 0X11; //7%
   //CCPR2L = 0X16; //NEUTRO
   CCPR2L = 0X19; //REVERSA
   CCP2CON = 0b00001100;
                     
               break

}
           



Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Timers para controlar motor
« Respuesta #1 en: 28 de Septiembre de 2011, 10:21:57 »
Citar
Estoy trabajando con el pickit3 el cual me controla 2 servomotores,...
 :undecided:  :mrgreen:

Podes hacerlo de 2 maneras, al recibir un numero desde el puerto serial setear una bandera que indique prender el motor durante cierto tiempo, y lo realizas mediante demoras comunes Delay10KTCYx(....) por ejemplo, o configurar un timer (timer 0 por ejemplo) para que interrumpa cada 1 segundo, y te dedicas a contar interrupciones, pasada la demora necesaria apagas el motor.


Nota: En ese código que muestras falta un while(1){}

Revisa por aquí, te puede ayudar: http://www.todopic.com.ar/foros/index.php?topic=31611.0

Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything