Autor Tema: Pic16F84A Control de servo en CCS  (Leído 6655 veces)

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

Desconectado Olinqui

  • PIC10
  • *
  • Mensajes: 19
Pic16F84A Control de servo en CCS
« en: 28 de Febrero de 2012, 20:28:54 »
Hola amigos de todoPic pues les cuento que estoy intentando controlar un servo con un 16F84A y un pulsador lo que pretendo que haga el programa es que cuando se presiona el pulsador encienda un Led piloto luego valla avanzando el servo lentamente de 0º  a 180º al finalizar regrese a cero y apague el Led entiendo que tengo que modificar el ancho de pulso de mi salida en el pin_B4 tengo 500ms en estado bajo y voy de 1000us a 2000um en estado alto para que los pasos vallan muy cortos pretendo incrementar de 20 en 20 con la variable ( Grado) estoy aprendiendo CCS y no doy con la respuesta para ir sumando de 20 en 20 hasta llegar a 2000 seria de mucha ayuda si me dieran  alguna sugerencia desde ya gracias.

Este es el código.


#include <16F84A.h>                   
#use delay(clock=4000000)              //Oscilador a 4Mhz
#define Grado 25
#define maxima 2000
//------Programa principal-----

void main()
{
      Int Posicion=1000;               // Declaracion de Variable Auxiliar
      set_tris_b( 0b11000000 );        // RB7 RB6 como entrada y lo demás del puerto B como salida
DO
   {
   IF (INPUT(PIN_B7))                  //Revisa si es precionado el pin B7
      {
      output_high(PIN_B5);             //Enciende el Led piloto

      output_low(PIN_B4);              //Apago el Pulso
      delay_ms(500);                   //Espero 500ms.
      output_high(PIN_B4);             //Enciendo el Pulso
      delay_us(posicion);              //Espero 1000ms.

   for (Posicion=1000;Posicion<=maxima;Posicion+Grado)

      output_low(PIN_B5);              //Apaga el Led piloto
      }
   }
WHILE(TRUE);
}
MENTE SOBRE MATERIA

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Pic16F84A Control de servo en CCS
« Respuesta #1 en: 28 de Febrero de 2012, 22:21:33 »
  Me parece que 500ms en estado bajo es demasiado tiempo, si mal no recuerdo la trama de la señal PPM tiene un período de 20ms, De ser así cada servo permanecerá en estado bajo unos 20ms y en estado alto sería variable entre 1 y 2 ms (según la posición).
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Olinqui

  • PIC10
  • *
  • Mensajes: 19
Re: Pic16F84A Control de servo en CCS
« Respuesta #2 en: 29 de Febrero de 2012, 20:02:55 »

Gracias por responder AngelGris ,si es correcto lo que comentas el tiempo de OFF en el servo no es crítico puede estar alrededor de los 20ms yo utilicé 500ms para que el movimiento lo hiciera lento en la simulación de proteus pero esto fue en ASM, por eso lo tome como referencia supongo que debería de trabajar igual en CCS.

La variable (posición) la manejo en (us) para que los desplazamientos sean suaves
1ms=1000us seria 0 grados 1500um 90 grados 2000us 180 grados.

El CCS me arroja el error Code has no effect sabes por qué es esto?
Me preguntaba si la forma de incrementar la variable para que cambie la posición es la correcta ó ay otra forma?

De antemano agradezco tu ayuda.
MENTE SOBRE MATERIA

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Pic16F84A Control de servo en CCS
« Respuesta #3 en: 29 de Febrero de 2012, 21:08:54 »
  El tiempo en bajo de un servo sí es crítico porque si tarda mucho en recibir el pulso comienza a tiritar sobre todo si tiene que hacer fuerza.

  Supongo que el error te lo está arrojando sobre la construcción del ciclo for.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Olinqui

  • PIC10
  • *
  • Mensajes: 19
Re: Pic16F84A Control de servo en CCS
« Respuesta #4 en: 01 de Marzo de 2012, 19:12:24 »
Gracias por responder es correcto el error me lo marca sobre la construcción del ciclo for
En cuanto a lo del tiempo en estado bajo tienes razón pero no carga nada el servo como sea ya lo puse a 20ms y nada

Adjunto la simulación en proteus
MENTE SOBRE MATERIA

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Pic16F84A Control de servo en CCS
« Respuesta #5 en: 08 de Marzo de 2012, 11:08:23 »
El CCS me arroja el error Code has no effect sabes por qué es esto?
Me preguntaba si la forma de incrementar la variable para que cambie la posición es la correcta ó ay otra forma?

Bueno creo que te refieres a esto:

Código: [Seleccionar]
for (Posicion=1000;Posicion<=maxima;Posicion+Grado)
cambialo por esto:

Código: [Seleccionar]
for (Posicion=1000;Posicion<=maxima;Posicion=Posicion+Grado)


 

anything