Autor Tema: Necesito ayuda.. muy simple pero no me funciona  (Leído 2324 veces)

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

Desconectado algc80

  • PIC10
  • *
  • Mensajes: 4
Necesito ayuda.. muy simple pero no me funciona
« en: 20 de Septiembre de 2007, 09:37:56 »
 Bueno, soy novatillo y voy al grano:

- El programa es una adaptación de uno que encontré por ahi, pero simplificado.Genera un senyal PWM y es muy sencillo. Lo he compilado con PCWH Compiler. Lo vuelco con IC Prog, comprobado q llega al PIC. Simulo con PIC Simulator IDE (Osho) y funciona (eso entiendo pq se me activa portB0 cuando debe). Probando con la PIC no obtengo nada en salida.. ¿que ocurre? ¿configuración ICProg? ¿compilador? ¿configuración I/O en el PIC?

Os escribo el programilla.. a ver si alguien me puede ayudar.. GRACIAS

// servo_pwm

// Ejemplo con un servo Hitech HS-325
// Alimentación y pulsos a 5V

// Cuadro de Tiempos :

//    Periodo 20 ms (Frecuencia 50 Hz)
//    Ancho Pulso minimo 0.9 ms
//    Ancho pulso medio  1.5 ms
//    Ancho pulso maximo 2.1 ms

//    TMR0 a 1:16 -> 1 RTCC cada 4.096 ms
//                -> 1 Tick cada 0.096 / 256 = 0.016 ms
//                -> 20 ms = (4 x RTCC completas) + (1 * RTCC - 30 ticks)

//    Ancho Pulso minimo 0.9 ms ->  56 ticks de TMR0
//    Ancho pulso medio  1.5 ms ->  93 ticks de TMR0
//    Ancho pulso maximo 2.1 ms -> 131 ticks de TMR0


#include <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)

#define PIN_SERVO1 PIN_B0

const int AJUSTE_FINO_DE_RTCC =  30;
const int ticks_PULSO_MINIMO  =  56;
const int ticks_PULSO_MEDIO   =  93;
const int ticks_PULSO_MAXIMO  = 131;

int1 flagRTCC   = 0;
int  contRTCC   = 0;
int1 flagSERVO1 = 0;
int  tSERVO1    = ticks_PULSO_MINIMO;


#int_RTCC
RTCC_isr(){

   ++contRTCC;
   if(contRTCC==4){
      set_TIMER0(AJUSTE_FINO_DE_RTCC);
   }
   if(contRTCC==5){
      flagRTCC=1;
      contRTCC=0x00;
   }
}

void main() {

   int ValTIMER0;

   setup_counters(RTCC_INTERNAL,RTCC_DIV_16);

   enable_interrupts(global);

   set_TIMER0(0);

   enable_interrupts(INT_RTCC);


   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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Necesito ayuda.. muy simple pero no me funciona el SERVO
« Respuesta #1 en: 20 de Septiembre de 2007, 10:18:52 »
Salvo algún pequeño detalle y la evidente simplificación del código creo que el autor soy yo y el "por ahí" puede ser Picmanía ... publicado también en este mismo foro en Controlando un SERVO con el PIC desde nuestro PC
 :mrgreen:

¿No obtienes nada de nada? .... hummm ... ¿tienes alguna forma de verificar que el PIC está oscilando correctamente, un led, un osciloscopio o algo así?

« Última modificación: 20 de Septiembre de 2007, 10:27:16 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado algc80

  • PIC10
  • *
  • Mensajes: 4
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #2 en: 20 de Septiembre de 2007, 11:03:57 »
Oh.. se me caen las lagrimas de la emoción. Podrías decirme como verificar esto que me dices.. tngo led's y lo que haga falta. Estaba investigando en el manual del 16F876 sobre la activación de TRISB.. es donde se establece si es entrada o salida ¿no? Pensaba que podía faltar eso en el código.. pero si me dices que parece que esté bien..
Y perdón por la copiada/adaptación. Se entendía muy bien y es lo que necesitaba.

Saludos

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #3 en: 20 de Septiembre de 2007, 19:54:20 »
Oh.. se me caen las lagrimas de la emoción. Podrías decirme como verificar esto que me dices.. tngo led's y lo que haga falta. Estaba investigando en el manual del 16F876 sobre la activación de TRISB.. es donde se establece si es entrada o salida ¿no? Pensaba que podía faltar eso en el código.. pero si me dices que parece que esté bien..
Y perdón por la copiada/adaptación. Se entendía muy bien y es lo que necesitaba.

Ya lo estas conociendo a Don Diego... jeje, tiene códigos para muchas cosas, a veces tiene cosas que ni el mismo se acuerda que tiene ¿no diego?  :D :D
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #4 en: 21 de Septiembre de 2007, 05:06:23 »
Ja, ja, ja  :D :D :D muy cierto mauricio pero cuando veo código hecho por mí reconozco mis nombres de variables y la forma que tengo de "flage-ar" todo ...  :mrgreen: :mrgreen: :mrgreen:

sobre la activación de TRISB.. es donde se establece si es entrada o salida ¿no? Pensaba que podía faltar eso en el código..

Al usar el standard_io es el propio CCS el que pone los TRIS automáticamente según detecte un input o un output en el correspondiente PIN.

Y perdón por la copiada/adaptación. Se entendía muy bien y es lo que necesitaba.

No hay nada que perdonar, está publicado para que todo el mundo lo use, lo modifique, lo adapte o haga con él lo que quiera, solo que la leer eso de "por ahí" decidí el ponerle nombre y apellidos al padre y convertirlo en un "por aquí".  :mrgreen:

tngo led's y lo que haga falta.

Lo que quiero primero es establecer que el programa está rodando correctamente. Y por eso decía ponerle un led en algun pin y conmutarlo cada cierto tiempo para ver que está funcionando ... por ejemplo si colocas un Led en PIN_B1 podrías incrustar en el bucle del main() algo así ...

Código: C++
  1. do{
  2.    if(++contador==0) output_toggle(PIN_B1);
  3.    ...
  4. }

Así podrías ver una onda cuadrada con un periodo de 256 veces el tiempo que tarde el bucle while(true) en ejecutarse. Y eso te diría que el PIC corre adecuadamente ... después podríamos pasar a ver lo demás ...

Nota: Si quieres quita el #use standard_io(b) ya que si no pones nada es el modo por defecto de compilar CCS.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado algc80

  • PIC10
  • *
  • Mensajes: 4
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #5 en: 21 de Septiembre de 2007, 13:29:33 »
OK.. mil gracias.. sois geniales.. a partir del Lunes me pondré en marcha con ello. Mi modesto objetivo es mover un servo con 2 pics. Tengo que generar 2 PWMs (uno para poner el servo a 90º y otro para llevarlo a 0º. Con lo cual, 20ms de periodo y un Duty Cicle de 0'9 y 1,5 milis en cada caso.. ya os contaré.

Saludos

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #6 en: 21 de Septiembre de 2007, 15:10:41 »
... Mi modesto objetivo es mover un servo con 2 pics. Tengo que generar 2 PWMs ...

Ja, ja, ja  :D :D :D Muchos PIC para tan poco Servo. Ja, ja, ja  :D :D :D

Imagino un Lapsus Scritptae y serán dos servos con un PIC  :shock:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado 5GTT

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 915
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #7 en: 24 de Septiembre de 2007, 00:56:57 »
Yo probaria antes de nada a utilizar el wimpic800 en lugar del ICprog, es mucho mas intuitivo y facil de utilizar.

A mi me paso algo parecido al principio con ICProg y era por que no supe poner los valores debidamente y el PIC realmente no estaba programado.

Tutoriales y proyectos de electrónica

Desconectado algc80

  • PIC10
  • *
  • Mensajes: 4
Re: Necesito ayuda.. muy simple pero no me funciona
« Respuesta #8 en: 08 de Octubre de 2007, 09:38:51 »
Gracias.. me voy a poner con esto.. ahora llevaba dias fuera por trabajo.. ya os contaré  !!


 

anything