Autor Tema: Problema en programa para mandar secuencias  (Leído 1615 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Problema en programa para mandar secuencias
« en: 09 de Julio de 2004, 17:08:00 »
Hola a Todos

Pues, hace ya un rato postee un programa para mandar secuencias de encendido de leds controlados por visual. Pues bien, me surgio el siguiente problema y es que en ocasiones el PIC hace todo a la perfección, le fijo una frecuencia y despues oprimo el botón adelante y lo hace. Así también si oprimo el botón de retroceder. Bueno pues en muchas ocasiones como que el micro deja de responder y lo hace hasta que lo reseteo. Mi pregunta es si existe alguna forma de corregir eso. De antemano muchas gracias.
Codigo:

#include <16f874A.h>
#fuses HS, NOPROTECT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  

char opcion;
long duty,per;

izq()
   {
        output_b(5);
        delay_ms(per);
        output_b(9);
        delay_ms(per);
        output_b(10);
        delay_ms(per);
        output_b(6);
        delay_ms(per);
   }
     
der()
   {
       output_b(6);
       delay_ms(per);
       output_b(10);
       delay_ms(per);
       output_b(9);
       delay_ms(per);
       output_b(5);
       delay_ms(per);
   }
   
detener()
       {
          output_b(0);
       }

main()
   {
    set_tris_b(0x00);
    output_b(0);
    while (TRUE)
         {
           opcion=getc();
          
           switch (opcion)
                  {
                   case "1":
                       while(!kbhit());
                       duty=getc();
                       per=(100*duty)/4;
                       do
                       izq();
                       while (!kbhit());
                       break;
                   case "2":
                       while(!kbhit());
                       duty=getc();
                       per=(100*duty)/4;
                       do
                       der();
                       while (!kbhit());
                       break;
                   case "3":
                       do
                       detener();
                       while (!kbhit());
                       break;          
                  }    
         }
   }


Cabe señalar que los valores de duty estan entre 30 y 3.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Problema en programa para mandar secuencias
« Respuesta #1 en: 10 de Julio de 2004, 00:57:00 »
Hay algo que no entiendo, quizá me haya levantado algo espeso.

Dices que los valores del Duty estan comprendidos entre 30 y 3, no serían como máximo entre 1 y 9 ya que el Duty según tu programa está esperando un caracter.

Otra cosa, si en el delay_ms utilizas una variable, esta como máximo puede alcanzar 255, si fuera una constante 65535. Has definido las variables per y duty como long y con int sería suficiente.

Un saludo

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Problema en programa para mandar secuencias
« Respuesta #2 en: 26 de Julio de 2004, 11:40:00 »
Despues de mucho tiempo he regresado... Pues respecto a lo que dices que mis valores duty estan entre 30 y 3 es porque son pulsaciones por minuto y pues eso lo convierto en tiempo, por lo que me quedan valores de un número mínimo a un número máximo. Y pues los mando como caracter ya que en el visual los trabajo como byte.

Respecto a la declaración de variables pues si que ando mal, yo no sabía que como variable solo se podian valores hasta 255, ahora voy entendiendo. Gracias por la información.


 

anything