Acuariofilia Madrid

Versión completa: Aula Arduino para principiantes.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
(20-10-2014, 01:48 PM)xavi escribió: [ -> ]Mira David:

http://www.adafruit.com/product/815

Algo parecido a lo que comentas.

Es interesante, aunque este no es el aspecto que más me interesa de DUO. En las entrada me parece más útil aumentar la resolución. De todas formas PWM a 12 bits debería funcionar. He mirado y no he encontrado ejemplos de dimeo con resolución de 12 bits. Será una de las cosas que pruebe, pero tampoco me voy a obcecar demasiado. Estoy dispuesto a que sea la solución la que me encuentre a mí si no tarda en llegar demasiado je, je.

Tengo algunas cosas que Arduino Mega no conseguí que funcionara por sus limitaciones de memoria y por otras limitaciones que desaparecen con Arduino DUE.
(20-10-2014, 01:26 PM)Antonio Castro escribió: [ -> ]
(20-10-2014, 09:28 AM)Davidmadrid escribió: [ -> ]Ya he probado de todo Antonio, hay algo que hago mal en el codigo o como bien dices habra que utilizar otro tipo de TIP.

Por cierto, mira lo que encontre ayer, https://www.sparkfun.com/products/10616, es para dar resolucion de 12bit a las salidas de cualquier Arduno, que aparatejo mas curioso. En youtube hay muchos videos sobre el TCL5940, y tambien esta el TCL5947 que en vez de tener 16 canales tiene 24, y se puede conectar via SDA/SCL. Puede ser una solucion barata hasta que adaptes CAO1 a DUE.

Muy curioso el TLC5940 Breakout

Si está utilizando PWM y el TIP141 te hace cambios de luminosidad cada 16 paso es porque el PWM cambia cada 16 pasos. Da igual el TIP que uses. Incluso puedes conectar a la salida un led normal con una resistencia para hacer esa prueba y te tiene que salir lo mismo. Estoy convencido de que es un problema de software no de hardware.

Hay algo que se nos está pasando. Yo no puedo ponerme de momento con el DUE.

Entre otros temas, ando liadísimo con la pecera de 150L la plaga de cianofitas me da mucho trabajo y se está haciendo cada vez más fuerte. Podría tener que cambiar todo el sustrato y volver a partir de cero.

El caso que cuando lo programo a 8 bit, que seria por defecto PWM 0-255, y que cada paso lo haga a un segundo, cada segundo se nota un paso de luminosidad, pero cuando utilizo el analog.WriteResolution(12);, que supuestamente son PWM 0-4095, lo programo igual, a cada segundo un paso, pero en este caso hasta el segundo 16 no se encienden los led, luego hasta el 32 no se nota un paso de luminosidad, luego 64, 128, 256, etc etc. Me refiero que es como si el TIP141 no pudiese registrar esos pasos, y claro, me mosquea mucho.
De momento lo voy a dejar asi y seguire investigando.



(20-10-2014, 01:48 PM)xavi escribió: [ -> ]Mira David:

http://www.adafruit.com/product/815

Algo parecido a lo que comentas.

Si Xavi, hay muchos modulos de estos, se utiliza principalmente para proyecto que utilicen servos, pero sin duda el TCL5940 es el mas extendido, es mas, hay infinidad de ejemplos en internet con este integrado. Lo malo que veo que por sus capacidades tendriamos que seguir dependiendo de algun tipo de TIP.



(20-10-2014, 02:40 PM)Antonio Castro escribió: [ -> ]
(20-10-2014, 01:48 PM)xavi escribió: [ -> ]Mira David:

http://www.adafruit.com/product/815

Algo parecido a lo que comentas.

Es interesante, aunque este no es el aspecto que más me interesa de DUO. En las entrada me parece más útil aumentar la resolución. De todas formas PWM a 12 bits debería funcionar. He mirado y no he encontrado ejemplos de dimeo con resolución de 12 bits. Será una de las cosas que pruebe, pero tampoco me voy a obcecar demasiado. Estoy dispuesto a que sea la solución la que me encuentre a mí si no tarda en llegar demasiado je, je.

Tengo algunas cosas que Arduino Mega no conseguí que funcionara por sus limitaciones de memoria y por otras limitaciones que desaparecen con Arduino DUE.

Desde luego que no es lo mas interesante los 12bit, lei una vez en un foro ingles que el problema de que se noten los pasos a 8bit se soluciona intercalando un condensador, pero lo comentaba alguien y no logre encontrar explicacin sobre ello, pero creo que 255 pasos es mas que suficiente. No tengo conociemientos suficientes en programacion para ver como se puede estrujar al DUE, pero si es verdad que el mismo sketch que utilizaba en el MEGA en el DUE vuela, todo es mas rapido, es mas, mirar el proximo lanzamiento de la familia Arduino, Arduino ZERO, creo que estan cambiando todos sus producto a arquitectura de 32bits, si no me equivoco este ZERO pasaria a sustituir al UNO, seria un paso logico, hay tantos proyectos en Arduino y esta tan extendido que los Arduino anteriores se quedan cortos, y la prueba la tenemos contigo Antonio, para un simple controlador de acuarios te quedas sin espacio de memoria para hacerlo como quieres, si decidieras hacer algun proyecto mas complejo supongo que ni podrias empezar a escribir codigo.
(21-10-2014, 12:23 PM)Davidmadrid escribió: [ -> ]El caso que cuando lo programo a 8 bit, que seria por defecto PWM 0-255, y que cada paso lo haga a un segundo, cada segundo se nota un paso de luminosidad, pero cuando utilizo el analog.WriteResolution(12);, que supuestamente son PWM 0-4095, lo programo igual, a cada segundo un paso, pero en este caso hasta el segundo 16 no se encienden los led, luego hasta el 32 no se nota un paso de luminosidad, luego 64, 128, 256, etc etc. Me refiero que es como si el TIP141 no pudiese registrar esos pasos, y claro, me mosquea mucho.
De momento lo voy a dejar asi y seguire investigando.
Dudo mucho que el TIP tenga nada que ver, pero,... -huh.gif
Pásame el código con el que estás probando. Quiero sugerirte una modificación.
Jaja, ka verdad que es simplisimo, cuando llegue a casa te lo mando. Otra cosa que he estado pensando es si no tendran que ver los 3.3v que salen de las salidas pwm hacia el TIP que no estoy convirtiendo a 5v.
(21-10-2014, 03:05 PM)Davidmadrid escribió: [ -> ]Jaja, ka verdad que es simplisimo, cuando llegue a casa te lo mando. Otra cosa que he estado pensando es si no tendran que ver los 3.3v que salen de las salidas pwm hacia el TIP que no estoy convirtiendo a 5v.
Tampoco creo que sea eso. Tú pásame el código. Una de las cosas que quiero comprobar es si el Arduino lee el mismo valor que tú le pasas o hace algo raro. Multiblicar por 16 es lo mismo que desplazar 4 bits a la izquierda el contenido del dato. (8+4 = 12 bits) ¿Casualidad? No lo creo.
Bueno antonio, he estado haciendo pruebas con el led interno del DUE y el codigo esta bien, al menos para este ejemplo, y te puedo decir que acepta hasta 16bit.

Si tienes el DUE a mano puedes hacer la prueba a 8bit, 12bit y 16bit, lo malo que cuando esto se extrapola a los led con el TIP141 no se comporta igual, creo que el tipo de TIP no vale.

Te dejo los codigos que no son mas que el ejemplo de FADE modificados, he quitado las referencias a los reles y todo lo referente a mi proyecto para que simplemente hagas la prueba con el led interno del DUE.

Fade int led a 8bit
Código:
/* Fade int led a 8bit

int led        = 13;
int brightness = 0;
int fadeAmount = 1;


void setup()  {

  pinMode(led, OUTPUT);
  Serial.begin(115200);
}


void loop()  {

  analogWrite(led, brightness);
  Serial.println(brightness);

  brightness = brightness + fadeAmount;

  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }

  delay(5);
}

Fade int led a 12bit
Código:
Fade int led a 12bit

int led        = 13;
int brightness = 0;
int fadeAmount = 1;


void setup()  {

  pinMode(led, OUTPUT);
  Serial.begin(115200);
}


void loop()  {

  analogWriteResolution(12);
  analogWrite(led, brightness);
  Serial.println(brightness);

  brightness = brightness + fadeAmount;

  if (brightness == 0 || brightness == 4095) {
    fadeAmount = -fadeAmount ;
  }

  delay(5);
}

Fade int led a 16bit
Código:
Fade int led a 16bit

int led        = 13;
int brightness = 0;
int fadeAmount = 1;


void setup()  {

  pinMode(led, OUTPUT);
  Serial.begin(115200);
}


void loop()  {

  analogWriteResolution(16);
  analogWrite(led, brightness);
  Serial.println(brightness);

  brightness = brightness + fadeAmount;

  if (brightness == 0 || brightness == 65535) {
    fadeAmount = -fadeAmount ;
  }

  delay(5);
}

Te dejo un libro bastante interesante, aunque creo que alomejor te sabes todo ya jaja...
CookBook
Acabo de convertir la señal de 3.3v a 5v hacia los TIP y nada, he probado en todos los pines PWM y tampoco... no se ya que mas puedo hacer, estoy con que son los TIPs.
El pin 13 está conectado al LED "L" en la placa.
Yo voy a probar con todo el rango de enteros y quito el delay.

Código:
int led        = 13;
int brightness = 0;

void setup()  {
  pinMode(led, OUTPUT);
  Serial.begin(115200);
}

void loop()  {
  analogWriteResolution(12);
  analogWrite(led, brightness);
  Serial.print(brightness);
  Serial.print(" --> ");
  Serial.println(analogRead(led));
  brightness++;
}

El led me está haciendo un dimeo super suaje sin la corrección exponencial que yo suelo hacer y los valores altos no se aprecian tanto las diferencias de luz por efecto de la persistencia en la retina. Va muy suave.

El caso es que funciona, aunque es posible que el rango de valores a usar se tenga que multiplicar por 16. El caso es que funciona con ese led en la placa asociado al pin 13 y debería funcionar con el TIP enchufado al pin.
He probado con un led de 3v fuera de la placa y nada, 255 pasos como mucho aunque que cambies el analogWrite Resolution... a seguir investigando...
Leyendo las especificacines de la DUE creo que la funcion de aumentar la resolucion no esta disponible en los pin PWM, si leeis bien dice que se puede cambiar, pero creo que hacia abajo, donde si pone que se puede aumentar es en los convertidores DAC0 y DAC1 y en las en las entradas analogicas. En el apartado de lo pines PWM no hace mencion a aunmento, solo a cambiar la resolucion.
(22-10-2014, 09:21 PM)Davidmadrid escribió: [ -> ]Leyendo las especificacines de la DUE creo que la funcion de aumentar la resolucion no esta disponible en los pin PWM, si leeis bien dice que se puede cambiar, pero creo que hacia abajo, donde si pone que se puede aumentar es en los convertidores DAC0 y DAC1 y en las en las entradas analogicas. En el apartado de lo pines PWM no hace mencion a aunmento, solo a cambiar la resolucion.

Estoy mirando en http://arduino.cc/en/Main/arduinoBoardDue donde no viene mucho.
Fijándome mejor es cierto que dice:
PWM: Pins 2 to 13
Provide 8-bit PWM output with the analogWrite() function. the resolution of the PWM can be changed with the analogWriteResolution() function.

Tanto los temas de compatibilidad, como esto otro, parecen estar redactados de forma algo ambigua, tendenciosa y con un criterio más comercial que técnico. -glare.gif

¿Lo has consultado en algún otro lado?
En todos los lados ponen lo mismo, llega a ser un copy/paste de la pagina oficial de Arduino, buscando en foros siempre te dan referencia al analogWriteResolution, y en el datasheet, aunque no llego a entenderlo del todo si que llega a hacer referencia de PWM no a 12, si no ha 16 bit.

Lo maximo que he llegado a encontrar es que se puede llegar a cambiar la frecuencia del reloj interno y asi llegar hasta los 1000 pasos PWM, pero todo a referencia de otros Arduinos, del DUE es que casi no hay informacion. Luego te paso el enlace que no estoy en casa ahora, porque yo por mas que miro el codigo que ponen no llego a entenderlo jeje. Creo que la solucion mas rapida y creo que mejor antes de estar cambiando frecuencias es usar un TLC5940 o similares, aunque este tampoco llega a estar implementado 100% en el DUE.
Bueno, he encontrado la libreria pwm01.h especifica para DUE, y aquí viene un ejemplo, hechala un vistazo a ver que te parece, porque no llego a entenderlo muy bien.
Hay muy poca información sobre las aplicaciones de esta librería. Ofrece unas funciones para cambiar la frecuencia de PWM y la resolución, pero el ejemplo no aclara el objetivo último de todo esto.

Para ver lo que es capaz de hacer habría que probarla.
Antonio, ¿los TIP141 hacen algun tipo de consumo en mA en los pines que estan conectados?