Autor Tema: Problema servo con PIC18F1320  (Leído 1406 veces)

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

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Problema servo con PIC18F1320
« en: 06 de Junio de 2008, 15:55:12 »
Hola amigos, acá de nuevo. Mucha escuela muchos proyectos  :shock:.

Checando los ejemplos de Redpic entre otros, estoy probando el control de un servo, pero el programa no hace nada. Al parecer todo está bien, ya chequé, y rechequé y nada. Espero que alguien pueda ver lo que no veo. Saludos y gracias de antemano.


Código: [Seleccionar]

#include <18f1320.h>
#fuses HS,NOMCLR,NOPUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(clock=20000000)

#define PIN_SERVO1 PIN_B3

int  contRTCC        = 0;
int1 flagRTCC = 0;
int1 flagSERVO1 = 0;
int16 tSERVO1=1875;



#INT_RTCC
RTCC_isr(){
  ++contRTCC;
  if(contRTCC==100){
    flagRTCC=1;
    contRTCC=0x00;
   set_TIMER0(6); 

}


void main(void)
{

 int16 ValTIMER0=0;
 
   setup_wdt(WDT_OFF);
   set_TIMER0(6);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_4|RTCC_8_bit);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(INT_RTCC);               
   enable_interrupts(global);

     


 do
     {
         // DISPARO DEL PULSO PWM
    if(flagRTCC==1){
      flagRTCC=0;
      output_high(PIN_SERVO1);
      flagSERVO1=1;
    }
    // CONTROL DE ANCHO DEL PULSO PWM
    if(flagSERVO1==1){
      valTIMER0 = get_TIMER0();
      if(valTIMER0>tSERVO1){
        flagSERVO1=0;
        output_low(PIN_SERVO1);
       
      }
    }       
                     
 }while(true);


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Problema servo con PIC18F1320
« Respuesta #1 en: 07 de Junio de 2008, 05:12:40 »
El programa creo que está mal.

Después de hacer los números correspondientes veo que el flagRTCC se activa cada 20ms. Estupendo es ahora cuando debemos tomar el valor para el pwm ... y esto es lo que está mal.

Cuando sale de la interrupción el TMR0 está cargado con 6, ahora vamos a:

    if(flagRTCC==1){
      flagRTCC=0;
      output_high(PIN_SERVO1);
      flagSERVO1=1;
    }
    // CONTROL DE ANCHO DEL PULSO PWM
    if(flagSERVO1==1){
      valTIMER0 = get_TIMER0();
      if(valTIMER0>tSERVO1){
        flagSERVO1=0;
        output_low(PIN_SERVO1);
       
      }

... se activa el PIN_SERVO1 comenzando el pwm, ahora hay que pararlo.

Y es aquí donde está el problema, no se puede parar, ya que    if(valTIMER0>tSERVO1)  -->  6 (ó un poco más) no es mayor que 1875

Un saludo

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Problema servo con PIC18F1320
« Respuesta #2 en: 07 de Junio de 2008, 09:39:34 »
Gracias amigo pocher, realmente no había dormido nada en toda la noche, llevaba trabajando desde del día anterior con un proyecto mas este código, ahora que ya dormí, salí un rato con mi novia, regreso y checo el código, jejeje, ya vi varios erorcitos y detalles. Así que a darle de nuevo.  Saludos.


 

anything