Pages: [1] 2   Go Down
Author Topic: ayuda con tlc5940  (Read 2880 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos.
Quería pediros ayuda con el tlc5940 para manejar múltiples pwm.
He estado buscando mucha info y me he instalado la librería de la página de arduino para los ejemplos pero necesito encontrar algún ejemplo que empiece desde el principio.
Es decir, algún ejemplo que empiece desde cero a programar el tlc5940 porque no sé por dónde empezar con el para ir luego yo cambiando la potencia de los led, el número de led, etc.
Por más que busco no encuentro nada así. Por favor podrían ayudarme??.

Muchas gracias.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nadie ??  smiley-cry  .
Por favor que alguien me diga algo.
Solo quiero saber las instrucciones que hay que poner para habilitar las salidas del TLC5940, como decirle que encienda un led por pwm por varias salidas y demás.
He leido un montón de documentación sobre acerca de cómo se comunica y las patillas que tiene y para qué valen, pero a la hora de escribir el código no sé cómo hacerlo.
Por favor alguien que tenga una pequeña práctica, aunque sea que me la pase para ver cómo puedo empezar con ello.

Muchas gracias.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De verdad nadie ?? smiley-cry
Pero por el amor de Dios, que alguien me diga algo que no sé por dónde meterle mano a esto.
Tan solo que alguien me diga cómo programar el tlc5940 o si alguien tiene algún ejemplo.
He estado mirando también un ejemplo que viene en la página al bajarme la librería y demás, pero como mucho del código viene en la propia librería, no puedo modificar nada para poner los led a mi gusto.

Por favooooooooooor smiley-wink

Gracias.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es muy sencillo trabajar con este chip.
En void setup{} inicializas el dispositivo con la sentencia
Code:
Tlc.init();

Para activar un pin, escribes
Code:
Tlc.set(channel, value)

Donde channel es un numero entero entre 0 y 15 que corresponde con el numero de pin que quieres activar y value es un numero entero entre 0 y 4095. Este valor corresponde al nivel de intensidad que quieres en el led: 0 led apagado y 4095 led a tope.
Para enviar el seteo al chip y que ejecute escribes la sentencia
Code:
Tlc.update()
Asi que puedes configurar cada salida de forma independiente y despues mandas la configuracion al chip, que se mantiene hasta que vuelves a hacer un update o reseteas los valores configurados mediante la sentencia
Code:
Tlc.clear()

Si concatenas mas de un tlc5940, el pin 0 del segundo chip seria el channel 16. Todo esto esta bien explicado y con ejemplos incluso de conexionado en la documentacion que acompaña a la libreria. Te escribiria un programa para hacer la luz del coche fantastico con 16 leds, pero es tan sencillo de hacer que da casi hasta vergüenza.

Un saludo.
 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: July 01, 2013, 04:50:39 pm by krilos » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aqui esta la libreria completa

http://tlc5940arduino.googlecode.com/files/Tlc5940_r014_2.zip
En su interior hay un sketch titulado basicuse.pde, ahí puedes ver como se usa.

Y aquí tienes un completo tutorial
http://code.google.com/p/tlc5940arduino/

Exploralo, que viene muy completo. Trae conexionado incluso para más de un chip. Y muchos ejemplos de aplicaciones.

Un saludo.

Pd. Con las indicaciones que te he dado ya deberías ser capaz de hacer tu mismo el programa. A fin de cuentas se trata de encender y apagar consecutivamente cada canal...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok.
De nuevo, muchas gracias por tu ayuda.

Saludos.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 546
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Declara las funciones fuera del loop. Es decir:
Code:
void leds7y8(){
 //código
}

loop(){
//código
leds7y8(); //llamada a la función
}
De todas formas, ¿No sería más sencillo declarar una función genérica a la que le pases dos números de led, en lugar de una para cada pareja?

Code:
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 loop(){
    dosled(7,8);
    dosled(8,9);
// etc
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 546
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De nada. Si sigues con la misma ilusión aprenderás rápido, pero tienes que recorrer el camino: primero andar, después correr, y finalmente volar smiley-wink.
Saludos.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

También es importante que aprendas a interpretar los códigos de error. En los errores que tenías ya te advertía que te faltaba un } para cerrar la función void loop y otro para cerrar la función void led7y8. Cuando el programa no compila siempre te da una indicación de por donde va el fallo. Hay que leer más jijijijijijijiji
Un saludo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: July 08, 2013, 04:54:35 pm by krilos » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo más práctico para no hacerte la picha un lío con las llaves es ponerlas las dos separadas por una línea en blanco, situar el cursor en la línea en blanco y meter en medio el código que necesites. Tal que así:
Code:
void función (int param) {
Código;
.
.
.
Código;
}

Cuando sitúas el cursor junto a una llave, el ide te marca cual es la pareja. Si no la ves es que algo falla. Y si lo haces bien si puedes mandar al serial los números aleatorios.
Un saludo.
Logged

Pages: [1] 2   Go Up
Jump to: