TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fastyx2 en 26 de Diciembre de 2007, 18:03:14

Título: problemas en barrido de colores de led rgb de manolo
Publicado por: fastyx2 en 26 de Diciembre de 2007, 18:03:14
Amigos: he hecho el circuito de manolo para controlar un led rgb , y ha ido espectacular

el tema es que cuando barre colores , en el ciclo for en el que la variable sube ( ejemplo : rojo++ ) no hay problema , ahora cuando hago el regresivo ( rojo -- ) en el descenso hace unos destellos como si en lugar de pasar de 255 a 1 de a uno por vez , en algun momento por ejemplo entre el 67 y el 66 se intercala un 255 que es el que pega el " relampagazo" de color.

Si alguien me puede ayudar ,desde ya gracias!!
Título: Re: problemas en barrido de colores de led rgb de manolo
Publicado por: Nocturno en 27 de Diciembre de 2007, 03:42:43
Hola Fastyx, no entiendo qué es lo que te ocurre, no tiene lógica que pase por el valor 255.
Más bien me imagino que pudiera tener algo que ver con la atención de alguna interrupción que detenga la generación del PWM o algo parecido.
¿Has utilizado el mismo programa, tal y cual estaba?, ¿y los fuses?
Título: Re: problemas en barrido de colores de led rgb de manolo
Publicado por: fastyx2 en 27 de Diciembre de 2007, 22:33:52
desde ya gracias por contestar!

lo de 255 lo puse como una suposicion de lo que podria estar pasando ya que cuando la variable del color disminuye por el ciclo for en la que esta involucrada,
de repente hacia un destello de maximo brillo y seguia normal.

con respecto al pic usado , lo hice con un 16f648a , logicamente adaptando las direcciones de memoria de los puertos , los pines en los que puse los leds , y tambien varió los pines del rs232.

funcionó todo , la comunicación serial, el cambio de colores , inclusive le agregue un printf en el barrido para jugar un poco.

de paso te comento que lo solucioné haciendo esto :

en la interrupcion del timer0 en lugar Ticks == rojo , TIcks == verde y Ticks == azul , les coloque el signo de mayor , es decir cuando los ticks sean inmediatamente mayores a la variable , que se apaguen el led en cuestión.

esto lo hice en forma medio empirica , ya que hubo veces en donde tenia un conteo en el main  , y en el momento de la comparacion entraba justo una interrupción , y por ahi la igualdad se perdia , pero no asi la comparacion de: mayor que .

#int_Timer0
void ActivaLed ( )
{   
      Ticks ++ ;     
      if ( ticks == 0 )
      {
         LedAzul  = 1 ;
         LedRojo  = 1 ;
         LedVerde = 1 ;
      }     
      if ( Ticks > Rojo  )  LedRojo = 0 ;      // aca cambie la == por la >
           
      if ( Ticks > Verde ) LedVerde = 0 ;    // aca cambie la == por la >
           
      if ( Ticks > Azul  )  LedAzul = 0 ;      // aca cambie la == por la >
     
      set_timer0 ( 140 ) ;

}


otra cosa : es seguro dejar que los ticks pasen " solos" a cero por overflow de variable? ya que no encontre que lo hayas puesto ,salvo al principio en el main


Un abrazo

Fastyx
Título: Re: problemas en barrido de colores de led rgb de manolo
Publicado por: Nocturno en 28 de Diciembre de 2007, 02:59:23
No veo lógica a que se haya resuelto con ese cambio, pero si lo has logrado, bienvenido sea :D

Sí, es seguro que se reinicien por overflow, ya que la variables pasan de 255 a 0 con las mismas garantías que pasan de 14 a 15 o de 33 a 34, por ejemplo.
Título: Re: problemas en barrido de colores de led rgb de manolo
Publicado por: J1M en 29 de Diciembre de 2007, 08:08:44
Pues, me pasaba lo mismo (excepto que lo hacía aleatoriamente) y al igual que Fastyx lo he solucionado con su aporte... la verdad tiene sentido lo que comenta, es decir, si la interrupción no entra 'a tiempo' el color no se apaga y da un destello. Pero claro es extraño, ya que supuestamente el PWM es a 100Hz y no debería dar tiempo a que viéramos el 'destello'. En cualquier caso parece que la cosa va bien de esa forma...!!

saludos!