Show Posts
Pages: [1] 2 3
1  International / Proyectos / efecto amanecer. código se reinicia solo. on: August 03, 2013, 08:02:14 am
Hola a todos.
Quería preguntaros sobre un pequeño problemilla que ya he resuelto pero al que no le encuentro una respuesta muy lógica.
He hecho un efecto amanecer para mi acuario. Y una vez que ha terminado de "amanecer" puedo seleccionar mediante un solo pulsador, 3 opciones de potencia.
La verdad es que todo funciona bien hasta que una vez que ha "amanecido" el código está continuamente leyendo el pulsador. Y todo va bien y puedo elegir la potencia de salida. Pero si estoy dos o tres minutos sin pulsar nada, automáticamente se reinicia todo y empieza de nuevo con el efecto amanecer sin que en ningún momento yo le diga que salga del código de leer el pulsador.
A base de hacer pruebas he podido solucionarlo cambiando una llave de sitio.
En mi opinión (de novato) creo que la llave estaría bien en cualquiera de los dos sitios. Pero no entiendo por qué al estar donde está ahora, sí que funciona bien, y si dejo la llave que está más arriba y quito la de abajo, se reincia el programa.
He pensado en el watchdog por eso de que está siempre leyendo el pulsador, pero no sé si arduino tiene de eso.
También me ha comentado un amigo que tal vez sería mejor usar un "while" en lugar de un "if" para la lectura del pulsador. Pero tampoco sé si arduino acepta el "while". De hecho lo he probado pero no ha cambiado el resultado.
Si pudiérais echar un vistazo al código que es muy sencillo y ver la diferencia entre las dos llaves que os digo, tal vez me podríais resolver esta pequeña duda que aunque no me impide hacer el circuito porque ya he encontrado solución, sí que me gustaría tener más clara para el futuro.

Gracias y un saludo.




int led = 9;           // the pin that the LED is attached to
int brightness = 200;    // how bright the LED is
int fadeAmount = 1;    // how many points to fade the LED by
int pulsador =8;
int contador = 0;


void setup()  {
Serial.begin (9600);
  pinMode(led, OUTPUT);
  pinMode (pulsador, INPUT);
}


void loop()  {
   
 
  amanecer();
 
}
 

void amanecer()
{
 brightness = brightness - fadeAmount;
 Serial.println (brightness);
analogWrite(led, brightness);
delay (500); 
if (brightness <= 25) {
     
     Serial.println (brightness);
    analogWrite(led, 25);

pulsadores();
}
}

void pulsadores ()
{

delay(50);

  if ( digitalRead (pulsador) == HIGH){
    delay(500);
   
    contador++ ;
       
    //}  // Esta llave es la que tengo que poner comentada.Y la que está más abajo, justo encima de "pulsadores();" es la que tengo que dejar puesta. 
   
   
    if (contador ==1){
  analogWrite (led,179 );
  delay (50);
  pulsadores();
  }
  if (contador == 2){
  analogWrite(led, 98);
  delay(50);
  pulsadores();
 
  }
  if (contador == 3){
  analogWrite(led, 25 );
  contador = 0;
  delay(50);
  }

}  // Esta llave es la que tengo que dejar puesta. Y la que está más arriba, justo debajo de "contador ++" la que tengo que quitar.
 pulsadores();
 
}




2  International / Proyectos / Re: ayuda con tlc5940 on: July 16, 2013, 08:47:57 pm
Sí sí. Si ya te digo yo que estoy de acuerdo con que no le he terminado de sacar el jugo al TLC. Pero creo que sé lo que quieres decir ahora con eso de greyscale[0].
O sea que si quiero que el led 1 se vaya apagando desde 1000 y el led 2 lo haga desde 1500. Haría algo parecido a:
for (int i= 1000; i= 0; i--)[0];
for (int i= 1500; i= 0; i--)[1];

Y luego lo iría el Tlc.update();

Algo así, no?.
Espero tener tiempo mañana para probar algo así a ver si consigo hacer lo que me dices.
Es que, una cosa es que pueda ponerle a cada led de forma independiente un brillo fijo. Por ejemplo a un led un brillo 2500 y a otro un brillo 3000. Pero el problema es cuando quieres que ese brillo vaya cambiando en todos, porque tiene que ir pintándolo a la vez con cada uno.
No sé. Ya te digo que probaré a ver qué saco.

Gracias. Un saludo.
Ya te contaré.
3  International / Proyectos / Re: ayuda con tlc5940 on: July 16, 2013, 10:00:19 am
Hola. Por trabajo ayer no pude tampoco conectarme.
Bueno, antes de nada, decirte que ya funciona todo perfectamente.
Solo he podido añadir hasta 4TLC porque no tengo aquí el 5º. Pero ya está hecho el código como si estuvieran los 5 y funciona todo a la perfección. Así que, una vez más MIL GRACIAS por la ayuda.
En cuanto a lo de la matriz. Sé lo que quieres decir con que se controlan de forma independiente, pero es que con el tlc también tienes que ponerle a cada uno un bucle "for" para que el brillo vaya aumentando/ descendiendo, no?.  De acuerdo que tal vez se pueda hacer con un poco menos de código pero si quieres ponerles a dos led del TLC un brillo distinto, tienes que ponerles un for distinto a cada uno, no?.
No sé. yo creo que es que no le he terminado de sacar al tlc todo su jugo y tengo que probar más cositas porque en realidad no he terminado de conseguir el efecto que quiero. Así que, seguiré con ello.

Por cierto, al hilo de esto y de que no termino de conseguir el efecto que quiero.  Como dije en otro de mis mensajes, el circuito que estoy montando es una simulación de disparos que van de más a menos brillo. Entonces, ¿se podría hacer que no tenga que esperar a que un led esté apagado para que otro ya se esté apagando desde su brillo máximo?. Es decir, como si estuvieran disparando cada uno a su ritmo.
A mi se me ocurre que cuando uno de los led que ha empezado en 1000 y esté por 300, entonces otro empieza desde 1000 también, pero tengo que hacer que el que va por 300 siga apagándose mientras lo hace también el de 1000. Pero no sé si es una forma correcta o si me podrías dar alguna idea. Que tus ideas siempre son buenas smiley-wink  .


Muchas gracias.
Saludos.
4  International / Proyectos / Re: ayuda con tlc5940 on: July 14, 2013, 09:27:24 am
Bueno, ya estoy en el trabajo y te escribo para contarte y por si a alguien más le pasa lo mismo, que tenga de dónde tirar.
Resulta que como muy bien me indicaste, el problema venía por que yo estaba cambiando el archivo " tlc_config.h " del sitio equivocado.
Cuando yo me bajé la librería, la guardé en un sitio del disco duro y era esa librería la que estaba modificando. Por lo tanto, como bien has dicho, no sirve.
Hay que cambiar el archivo de la librería donde la guarda arduino. En la página de arduino dice que la ruta es  <Arduino Folder>/hardware/libraries/ .  Pero en cambio yo la tengo en   " <arduino folder> \libraries\Tlc5940 ".  Es decir, sin meterme en la carpeta de "hardware".
No sé por qué, pero es ahí donde se me instaló la librería.
El caso es que ya funciona perfectamente con dos TLC. Según he modificado la última vez el tlc_config.h de su lugar correcto y he vuelto a compilar, inmediatamente se han apagado los leds del segundo TLC.
Más cosas. Por lo de que los leds solo se encienden hasta 1000. Yo creo que es de lo único que he hecho sabiendo yo lo que hacía, jejeje.
Es que así evitaba tener que andar poniendo resistencias porque como solo quiero ver si funciona la secuencia que quiero, me es suficiente con que se encienda poco.
Es que, de software no tengo ni idea, pero de hardware sí que llevo haciendo cositas muchos años, y también con temas de leds.
No te preocupes, que el efecto sí que se ve. Es una simulación de un disparo para una maqueta.
Ahora probaré a ir ampliando hasta los 5 tlc que necesito y veremos si mi próximo post es para volver a preguntar o decir que finalmente he terminado de montarlo todo y funciona, jejeje.
Por cierto, una última pregunta.
Ya sé que me vas a decir que con el TLC se pueden manejar hasta 16 pwm pero, Qué diferencia hay entre conectar un TLC al arduino para conseguir 16 pwm o crear una matriz con las 6 salidas pwm del arduino y conseguir así hasta 36 salidas ?.
En teoría con el tlc mandas las salidas independientes, pero con el arduino también, no?.Envías una fila y una columa para encender el/los leds que quieras y va subiendo el brillo hasta 256, no?.

Muchas gracias de verdad por toda tu ayuda con este tema que ha sido imprescindible para poder hacerlo funcionar.
Saludo.s
5  International / Proyectos / Re: ayuda con tlc5940 on: July 14, 2013, 08:25:30 am
YA FUNCIONA !!!
Era la librería. Dentro de un rato te cuento más cosas porque me tengo que ir corriendo a trabajar. Pero desde allí te escribo.
Tan solo era para darte rápido las gracias y decirte que ya funciona con 2 tlc.

Mil gracias.
Un saludo.

6  International / Proyectos / Re: ayuda con tlc5940 on: July 13, 2013, 03:07:24 pm
Gracias donrodrigo.
He probado el circuito que me has enviado, aunque solo con 2 TLC. Cuando me funcione con 2, añadiré hasta 5 que son los que necesito.
El circuito es el mismo que tengo montado yo. Lo acabo de revisar y está todo igual. Tan solo, que yo había puesto también una resistencia de 10k para el BLANK del 2º IC, pero nada más. Aún quitándola sigue sin funcionar bien.
Doy por hecho que los led del segundo TLC se llamarán 17, 18, 19......,  verdad?.

Te pongo el código por si tal vez me pudieras decir si es que tengo algo mal.
He seguido vuestras indicaciones y gracias a eso me ha salido muy cortito aunque esto es solo para probar. Cuando consiga que funcione tendré que ampliarlo.
La secuencia es: en el primer TLC y empezando desde el centro, se encienden 8 leds de dos. Es decir 4 hacia cada lado.
Luego se encienden los 4 primeros también del primer TLC y después los 4 últimos también del primer TLC.

Pues con este código, como os digo, en el segundo TLC, del led 6 al 14 están siempre encendidos. Pero es que, cuando el código llega a que se enciendan del 1º al 4º del primero, también se encienden del 1 al 4 del segundo TLC.

Y luego, en una carpeta a la que he llamado "librería TLC5940" me he metido en el archivo " tlc_config.h" y he cambiado el número de TLC, de esta manera:

/* ------------------------ START EDITING HERE ----------------------------- */

/** Number of TLCs daisy-chained.  To daisy-chain, attach the SOUT (TLC pin 17)
    of the first TLC to the SIN (TLC pin 26) of the next.  The rest of the pins
    are attached normally.
    \note Each TLC needs it's own IREF resistor */
#define NUM_TLCS    2


Te digo lo de que yo he llamado de tal manera a la carpeta por si acaso estuviera mal el haberle cambiado el nombre y se tiene que llamar de otra forma.


Aquí, el código:


#include "Tlc5940.h"

void setup()
{
  /* Call Tlc.init() to setup the tlc.
     You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
  Tlc.init();
  
  
}


      
  void dosled(int a, int b)  {
   for (int i= 1000; i>= 10; i= i-5) {  
      Tlc.set(a, i);
      Tlc.set(b, i);
      Tlc.update();
      delay(2);
    }
   Tlc.set(a, 0);
   Tlc.set(b, 0);
   Tlc.update();
}


void cuatroled(int a, int b, int c, int d)  {
   for (int i= 1000; i>= 10; i= i-5) {  
      Tlc.set(a, i);
      Tlc.set(b, i);
      Tlc.set(c, i);
      Tlc.set(d, i);
      Tlc.update();
      delay(2);
    }
   Tlc.set(a, 0);
   Tlc.set(b, 0);
   Tlc.set(c, 0);
   Tlc.set(d, 0);
   Tlc.update();
}
    
      
      
      
void loop()
{
 
  
   void dosled(int a, int b);
   void cuatroled(int a, int b, int c, int d);  
  
  

    Tlc.clear();

  
    
     dosled(7,8);
    dosled(6,9);
    dosled(5,10);
    dosled(4,11);
    
    cuatroled(0,1,2,3);
    cuatroled(12,13,14,15);
            
delay (3000);


 }




Por favor, cualquier idea será bien recibida.
Muchas gracias.
Saludos.


7  International / Proyectos / Re: ayuda con tlc5940 on: July 13, 2013, 08:56:45 am
Nada, que no hay forma.
Modifiqué el NUM_TLCS y puse 2. Cerré todas las ventanas. Bueno realmente hasta reinicié el pc.
Pero todo sigue igual.
Del segundo TLC se quedan encendidos continuamente un grupo de leds (desdel el 6º hasta el 14º) mientras que el primer TLC sigue funcionando perfectamente.
Una cosa curiosa que ocurre es que, cuando en el primer TLC llega a una rutina en la que se tienen que encender a la vez del led 1 al 4, eso mismo se repite en el segundo TLC. Y luego, el segundo TLC vuelve a quedarse como estaba, encendidos del 6º al 14º y los demás apagados, mientras el primer TLC hace su rutina.
He seguido buscando más info pero en cada esquema que encuento con dos TLC conectados, lo ponen de una forma distinta. En unos, VPRG tiene que ir a masa y en otros no.

Esto es una locura.
Por favor, alguna pista más?.
Muchas gracias donrodrigo por tu ayuda.
Saludos.
8  International / Proyectos / Re: ayuda con tlc5940 on: July 11, 2013, 02:19:06 pm
Bueno, pues como lo prometido es deuda. Aquí estoy con más problemas, jejeje.
He conectado un segundo TLC5940 y funciona fatal.
El primero sigue funcionando perfecto, pero al segundo se le quedan encendidos desde el sexto led hasta el 14. Además se le quedan encendidos a tope, es decir como si hubiera metido un "1" directamente.
He hecho la conexión que se indica en el ejemplo del TLC5940 y he llevado la salida SOUT del primero hasta el SIN del segundo y todas las demás conexiones las he hecho como en el primero.
He probado que si el SIN del segundo lo llevo a la misma conexión del SIN del primero, entonces ya no se quedan todos los led del segundo encendidos, pero los dos TLC5940 hacen lo mismo. Eso es evidente, pero es una prueba más para ver por dónde puede venir el problema.
Después de buscar mucho, he visto que hay que modificar "NUM_TLCS" del archivo "tlc_config.h" y borrar el "tlc5940.o" que están en la carpeta de la librería.
He abierto el tlc_config.h y he buscado donde aparecía NUM_TLCS y he cambiado el "1" por el "2" y he guardado tal cual el archivo. (no sé si habrá que guardarlo de otra forma o compilarlo o lo que sea).
El archivo "tlc5940.o" no lo tengo dentro de esa carpeta. Y buscando información he visto en otros foros extranjeros que había gente que le había pasado lo mismo pero que tampoco tenía este archivo para borrarlo.

Podíais decirme algo que se os ocurra o si a vosotros os ha pasado lo mismo, cómo lo habéis solucionado?.
Muchas gracias.
Saludos.
9  International / Proyectos / Re: ayuda con tlc5940 on: July 08, 2013, 04:51:00 pm
Jajajaja. La verdad es que tienes razón. Los códigos de error están ahí para algo, pero voy poco a poco con ellos.
Me hago bastante lío con las llaves { y al final siempre termino compilando una y otra vez y poniendo o quitando llaves donde más o menos voy interpretando que faltan o sobran, jejeje.
Bueno, os informo de que la cosa no va mal del todo y estoy ampliando con la selección de pin de forma aleatoria con "random".
He pasado un mal rato hace un momento pero se ha solucionado  smiley-sweat  .
Vamos a ver qué tal seguimos con esto.

Por cierto. Esta instrucción debería funcionar aquí también ?:    Serial.println(numaleatorio);
Saludos.
10  International / Proyectos / Re: ayuda con tlc5940 on: July 06, 2013, 12:08:27 pm
La genérica también funciona!!.
No me lo puedo creer. Esto está genial !!.
Así da mucho más juego para hacerlo con varias posibilidades a la vez. He probado con la que me has dicho de dos y tambien he creado otra de cuatro.
Debo reconocer que al principio me daba algún problemilla porque no sabía como declarar la función    "dosled" y he tenido que hacer pruebas hasta que he caido en que sería  "void dosled (int a, int b); "  .
Qué quieres?, estoy acostumbrado a poner tan solo " void ......  (); "  . smiley-grin .
Así que, una cosita más.

Muchas gracias smiley-wink
11  International / Proyectos / Re: ayuda con tlc5940 on: July 06, 2013, 11:28:28 am
Hola  noter.
Funciona perfecto declarando la función fuera del loop como dices. Muchas gracias !.
Ahora que ya funciona esto intentaré hacerlo como dices con una función genérica.
Lo cierto es que me cuesta mucho crear funciones genércias para varios usos porque no sé mucho (más bien casi nada) de programación y por eso casi siempre voy metiendo todo de uno en uno con las pocas instrucciones que voy aprendiendo.
Pero intentaré hacerlo como dices porque tengo que poner 4 TLC5940 seguidos para conseguir cuatro filas de leds y encenderlos de varios en varios a la vez. Unas veces serán de dos en dos otra de cuatro en cuatro, otra vez quiero encender las filas enteras (primero la de arriba, luego la segunda.... ) y por último quiero que se enciendan absolutamente todos los leds de forma aleatoria pero también con el mismo efecto de pwm desvaneciéndose.
Vamos a ver lo que tardo en volver a pediros ayuda, jejeje.

Gracias y saludos.
12  International / Proyectos / Re: ayuda con tlc5940 on: July 05, 2013, 11:45:05 am
Hola.
Estoy teniendo tiempo en mi viaje para ir haciendo pruebas y voy consiguiendo buenos resultados gracias a tus explicaciones.
Quería preguntarte si en el TLC5940 hay posibilidad de crear funciones como si trabajara solo con el arduino.
Me explico:
He puesto los 16 leds en fila y he hecho que se vayan encendiendo abriéndose desde los dos del centro (pines 7 y8) hacia las puntas haciendo un desvanecimiento del brillo. Pero el programa lo he hecho metiendo uno a uno los dos leds. Así que quería crear una función como ya hice en otro programa cuando era solo el arduino sin el tlc5940, y así poder ir llamando a los leds cuando yo quiera en lugar de volver a poner el código para cada led cuando quiera hacer otros efectos. Pero me da problemas al compilar.

Primero declaro las funciones:
void loop()
{
  void led7y8();
  void led6y9();
  void led5y10();
  void led4y11();
  void led3y12();
  void led2y13();
  void led1y14();
  void led0y15();

Y luego al final del todo creo la función:

void led7y8() {
       for (int i= 1000; i>= 10; i= i-5) {  
      Tlc.set(7, i);
      Tlc.set(8, i);
      Tlc.update();
      delay(2);  
      if (i<=20) {
      delay (100);
      Tlc.set(7, 0);
      Tlc.set(8, 0);
       Tlc.update();

Así luego ya solo tengo que ir llamando a la función    led7y8();  , luego llamaría a la función led6y9();  , después a led5y10........

Pero al compilar me sale esto:
prueba1tlc5940.cpp: In function 'void loop()':
prueba1tlc5940:106: error: a function-definition is not allowed here before '{' token
prueba1tlc5940:240: error: expected `}' at end of input

Por favor alguien me puede decir si es que hay que crear la función de forma distinta o si no se pueden crear funciones?.
Muchas gracias.
Un saludo.
13  International / Proyectos / Re: ayuda con tlc5940 on: July 01, 2013, 06:11:26 pm
Ok.
De nuevo, muchas gracias por tu ayuda.

Saludos.
14  International / Proyectos / Re: ayuda con tlc5940 on: July 01, 2013, 04:47:51 pm
Hola donrodrigo. Antes de nada, agradecerte tu respuesta. Casi ya daba por perdidas las esperanzas.
Por motivos de trabajo voy a estar fuera casi todo el mes pero tengo pensado llevarme mi arduino para intentar hacer pruebas. Aunque no aseguro nada porque no creo que tenga mucho tiempo libre.
También quería decirte que cuando alguien no sabe sobre un tema, cualquier información siempre es bien recibida por mucho que al que la da le pueda parecer innecesaria. Así que, por favor, siéntete libre de poner cuantos ejemplos quieras  smiley-lol porque te aseguro que a mi me vendrán estupendamente.
Por lo que dices de la documentación que acompaña a la librería, yo solamente he encontrado la librería en si pero no la documentación que dices porque siempre que encontraba otros links que hacían referencia a la página de arduino, estos links no funcionaban. Podrías por favor ponerme el link donde esté esa documentación?

Muchas gracias otra vez  smiley-lol
saludos.
15  International / Español / Re: Háblanos de tu proyecto... on: June 25, 2013, 04:10:16 am
Hola qué tal.
Tal vez podrían ayudarme.
Estoy buscando información para programar el TLC5940.
Quiero montar una simulación para múltiples leds en una maqueta que tengo y quiero simular disparos.
Necesito hacerlo con el TLC5940 porque permite múltiples pwm simultaneos y controlados individualmente.
He buscado mucha info pero solo encuentro el datasheet. Y en el único sitio que he encontrado un ejemplo ha sido donde había una librería para instalarla en el programa de arduino pero como el código está en la librería no sé cómo poder modificar los parámetros para los leds o saber como se pueden programar individualmente.

Por favor, si pudieran echarme una mano, se lo agradecería.
Gracias.
Pages: [1] 2 3