Autor Tema: no consigo usar bien PWM para led rgb  (Leído 5703 veces)

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

Desconectado lolong

  • PIC10
  • *
  • Mensajes: 9
no consigo usar bien PWM para led rgb
« en: 18 de Enero de 2007, 17:01:17 »
Hola, abajo tngo un cacho de un programa, en teoria, que hace esto:

Bien, el problema que encontré es que no cambia de un led al otro. tiene 6 fases: R-->RG-->G-->GB-->B-->RB-->R
por lo tanto será la variable FASE(de 6 valores:1..6).
luz1, luz2, y luz3 son variables del puerto B.
contador: sirve para prolongar el tiempo de cada fase
crece: sirve para saber si el tiempo es creciente(tiempo=tiempo+1;) o decreciente:(tiempo=tiempo-1;)
color: es una variable para otras funciones q no esta escrita aqui.

La funcion AUTOMATICO hace PWM de unos puertos direccionados por LUZ1 y LUZ2, el periodo es 1000us. LUZ1 y LUZ2 cambian de valor en la funcion CAMBIO_COLOR dependiendo del valor de FASE.
Despues de simular para un TIEMPO menor, veo que funciona pero en el protoboard no cambia de led. Y no entiendo por que... alguien me puede echar una mano? o intentar mejorar este codigo. gracias


/* Led  rojo --> RB.1
/* Led  azul --> RB.2
/* Led verde --> RB.3
/********************/

#include <16lf84a.H>
#use     delay(clock=4000000)
#byte    puertab=06
#byte    puertaa=05
int contador,fase;
int luz1,luz2,luz3,tiempo;
int crece,color;


void automatico(void)
{
   bit_set(puertab,luz1);
   bit_set(puertab,luz2);
   delay_us(tiempo-1000);
   bit_clear(puertab,luz2);
   delay_us(2000-tiempo);
   bit_clear(puertab,luz1);
}

void cambio_color(void)
{
   switch (fase)
   {
      case 1:
      {
      luz1=1;
      luz2=2;
      break;
      }
      case 2:
      {
      luz1=2;
      luz2=1;
      break;
      }
      case 3:
      {
      luz1=2;
      luz2=3;
      break;
      }
      case 4:
      {
      luz1=3;
      luz2=2;
      break;
      }
      case 5:
      {
      luz1=3;
      luz2=1;
      break;
      }
      case 6:
      {
      luz1=1;
      luz2=3;
      break;
      }
   }
}

/*************************************************************/
/*    RUTINA QUE SIRVE PARA CALCULAR SI HAY CAMBIO DE LED    */
/*     Y EL TIEMPO SI ES CRECIENTE O DECRECIENTE             */
/*************************************************************/

void rutina_automatico(void)
{
if (contador==3)
   {
   if (crece==1)
      {
      if (tiempo>2000)
         {
         tiempo=tiempo-1;
         if (fase==7)
         {fase=0;}
         fase=fase+1;
         cambio_color();
         crece=0;
         }
         else tiempo=tiempo+1;
      }
   else
      {
      if (tiempo<1000)
         {
         tiempo=tiempo+1;
         if (fase==7)
         {fase=0;}
         fase=fase+1;
         cambio_color();
         crece=1;
         }
      else tiempo=tiempo-1;
      }
   contador=0;
   }
}

/****************************/
/*    PROGRAMA PRINCIPAL    */
/****************************/

void main(void)
{
   set_tris_a(0xFF); /* configuro la puerta A como entradas*/
   set_tris_b(0x00); /* configuro la puerta B como salidas*/
   puertab=0;        /* apago los leds */
   tiempo=1000;
   luz1=1;
   luz2=2;
   contador=1;
   fase=1;
   crece=1;
   color=1;
   do
   {
      if ((puertaa & 0x04)==0x00)
      {
         automatico();
         contador=contador+1;
         rutina_automatico();
      }
     while(true);
}

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: no consigo usar bien PWM para led rgb
« Respuesta #1 en: 19 de Enero de 2007, 06:31:22 »
Revisa esto.

Esta persona hizo lo mismo pero programa en un entorno que te genera .jal (no se que sea) pero también te proporciona el .hex para un 16F628, quizá si lo pones en el MPLAB puedas ver cómo le hace.
http://tobe.nimio.info/led_mood_lamp.php
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: no consigo usar bien PWM para led rgb
« Respuesta #2 en: 27 de Febrero de 2007, 01:10:16 »
es muy interesante el proyecto que deseas hacer.. yo tambien lo quise hacer alguna vez pero no pude concretarlo... porque no pones el programa completo ..tal vez nos podamos ayudar..... te informo que lei algo parecido en la revista de ELEKTOR.. y lo hacia con un pic de solo 8 pines... no se muy bien como .. por que soolo lo lei mas no llege a ver como era el codigo..pues para ello tenias que descargarlo de su pagina oficial .. si te interesa puedo darte el nuemro de la revista en la que salio el articulo..... bueno pon el codigo completo.. y tal vez nos podamos ayudar mutuamente
Atte.
Johnny Bravo

Desconectado Kedutpic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 219
    • Microelectronica
Re: no consigo usar bien PWM para led rgb
« Respuesta #3 en: 27 de Febrero de 2007, 01:33:21 »
 :) hola lolong aca tengo un código con el PIC16F877A que te puede servir para tu aplicación, solo es cuestion de que lo revises ,para que le hagas el cambio a 16F84A .

Actel  -  VHDL un nuevo mundo por descubrir :D
Grupo de Microelectronica - CIDI - UTP
Visitanos en : http://ue.accesus.com

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: no consigo usar bien PWM para led rgb
« Respuesta #4 en: 05 de Marzo de 2007, 12:29:58 »
Buen dato .. esta en C...... le dare un vistazo. y loprobare..haber que tal me va... yo tengo el CCS... le hare una modificaciones pa pasarlo a 16f84 ... luego les comento...  gracias ..yo lo quiese hacer hace mucho tiempo..pero nunca me salio... no se porque?.. lo voy a revisar minucisamente ... luego ..muy luego les comento como me fue...ya que ahora mismo estoy en otro proyecto.. tal vez sepan algo de CRC... gracias por el dato Kedupic
Atte.
Johnny Bravo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: no consigo usar bien PWM para led rgb
« Respuesta #5 en: 08 de Marzo de 2007, 20:52:54 »
q es CRC? como vas con ese proyecto?  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: no consigo usar bien PWM para led rgb
« Respuesta #6 en: 09 de Marzo de 2007, 15:56:12 »
CRC = Contro de Reundancia Cíclica, es un sistema para detectar errores. Se usa, por ejemplo, en los sistemas 1-wire, se basa en polinomios.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: no consigo usar bien PWM para led rgb
« Respuesta #7 en: 10 de Marzo de 2007, 10:50:13 »
Una duda que me ha surgido al leer el código y mirar el manual de CCS:

Según el manual de CCS la función delay sólo acepta o bien una variable de 0 a 255 o bien una constantee 0 65535 (si no recuerdo mal), por lo que el hacer delay_us(2000-tiempo) no puede funcionar. Además tiempo está declarado como int a secas y luego se le asigna un valor de 1000 por lo que tampoco es correcto.

No se si me he liado o lo que digo es correcto, pero juraría que sí lo es.

Un saludo!!
« Última modificación: 10 de Marzo de 2007, 10:54:04 por DarkVect »

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: no consigo usar bien PWM para led rgb
« Respuesta #8 en: 10 de Marzo de 2007, 12:08:13 »

espero me disculpen por meter otro tema ..pero solo quiero responder al amigo micro cadaver
bueno amigo micro cadaver.. lo del crc .. esta listo .. funcionando .... ahora me falta probarlo con un enlace via rf.... ya tengo un modulo tranasmisor pero aun me falta el modulo receptor.. que se lo comprare a un amigo .... pero bueno por ahora lo he paralisado el proyectito por unos dias ya.. ya que ..  estoy full chamba.. pero luego retomare.....

un aporte para nuestro amigo que inicio este post... por ahi en el foro tambien lei algo de esto de genrar un led rgb... ahorita no tengo en enlace ..pero si pones en el buscador del foro "led multicolor" encontraras  un tema de como generar PWM por codigo... segun lo leido ya esta funcionando.....
que tengas suerte
Atte.
Johnny Bravo

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: no consigo usar bien PWM para led rgb
« Respuesta #9 en: 28 de Marzo de 2007, 20:12:32 »
Además tiempo está declarado como int a secas y luego se le asigna un valor de 1000 por lo que tampoco es correcto.

Pues realmente así es si a una variable int le colocas un valor arriba de 255 (o de 128 si es signed int) te da valores negativos. Si no funciona es por eso por las variables mal declaradas y mal usadas.

Una vez me paso de una variable que no pense que llegara a mas de 100 y solo la declare como int entonces hubo un momento en el que llego arriba de 128 y comenzo a dar valores negativos (declarar int x; es algo asi como si fuea signed int) entonces tuve que cambiar la variable a unsigned int para llegar a 255.

Claro esta que según yo si declaro int x; debería de ser unsigned pero no se por que CCS la toma como signed int ó era la version 3 y algo del compilador??.
Que la fuerza te acompañe

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: no consigo usar bien PWM para led rgb
« Respuesta #10 en: 30 de Marzo de 2007, 11:13:34 »
Para declarar una variable unsigned o signed, mirar las caracteristicas del compilador, yo creo que normalmente son asignadas signed.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte