En busca del driver perfecto.

Modificaciones, averías, reparaciones, piezas, repuestos...

16 May 2013 16:44 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

buff siesque me da una pereza aprender un lenguaje de tan "alto nivel" yo prefiero tener mas control sobre el micro, por eso siempre le he tirado al ensamblador, y ahora me estoy volviendo perro y programo con el PBP y "C" mas que nada para no tener que calentarme demasiado la cabeza y utilizar las librerias existentes. Pero el arduino me parece ya muy poco control sobre el micro.

He visto tu post del medidor de tension para las baterias, mira el proyecto que tengo parado ya 3 o 4 meses por falta de tiempo y un atranque con el protocolo de comunicación con el medidor de intensidad:

Imagen

Imagen

PEnsaba medir 2 tensiones y 2 intensidades,

Lo queria usar para cargar baterias evidentemente pero ademas para medir eficiencia en drivers, ver eficiencia de leds, etc.... cuando tenga ganas lo retomare.
16 May 2013 19:57 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

706 bytes en Arduino usando EEPROM, y dos modos de luz...

tendremos bastante memoria?
:comor:
16 May 2013 20:18 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

eso es lo que te queda o lo que usa el bootloader del arduino?
16 May 2013 21:06 por Bailer
<<
Avatar de Usuario

Jamás ve la oscuridad

Mensajes: 1178

Registrado: 26 Ene 2012

Ubicación: Andalucía

Re: En busca del driver perfecto.

PacoA escribió: Arduino es una maravilla. Lo que yo haría es comprar uno de los kits que hay en ebay. Como éste:
http://www.ebay.es/itm/Official-Arduino ... 2a201756a2

y el programador se descarga desde arduino.cc Los tutoriales que hay en esa página son muy buenos. Y el foro es muy activo y la gente te ayuda enseguida.

si sabes programar en cualquier lenguaje, en un par de días ya estás haciendo maravillas. Inlcluso sin saber programar... puedes rápidamente utilizar código de otras partes, juntarlo, y hacerte tu programa.
:respeto: Gracias por la info, lo dejaré para verano porque no tengo ni idea de programar...como mucho un copia y pega jejeje
17 May 2013 00:15 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

manredu escribió:eso es lo que te queda o lo que usa el bootloader del arduino?
por lo que he leído no hay bootloader para ese chip en Arduino. Solo se queman los fuses... aunque no lo entiendo muy bien.

Mira, este código tiene 808 bytes. Son 4 modos con memoria a los 4 segundos. Lo estoy ejecutando en el Attiny85, aun no me han llegado los Attiny13



#include <EEPROM.h>
int led = 1; //el led está conectado al pin 1

byte address = 0; //dirección memoria donde guardar modo
byte mode; //el modo de luz que hace la linterna
byte guardamode; //modo a guardar en memoria
unsigned long time; //hora de encendido de la linterna
unsigned long time2; //hora actual
boolean primer = false;


void setup() {

// initialize the digital pin as an output.
pinMode(led, OUTPUT);
mode = EEPROM.read(address); //lee modo desde memoria
delay(80); //tiempo para leer
if (mode == 0) {mode = 1;}
if (mode > 4) {mode = 1;}
time = millis(); //hora a la que se enciende linterna
}

// the loop routine runs over and over again forever:
void loop() {

guardamode = mode +1; //en principio se guarda el
//sigiente modo, salvo que pasen 4 segundos
if (guardamode >= 5) {guardamode = 1;}
if (primer == false) {EEPROM.write(address, guardamode);
primer = true;} //se guarda el modo solo una vez

//siguen 4 modos de parpadeo
if (mode == 1) {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
if (mode == 2) {
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
}
if (mode == 3) {
digitalWrite(led, HIGH);
delay(50);
digitalWrite(led, LOW);
delay(50); //
}

if (mode == 4) {
digitalWrite(led, HIGH);
delay(20);
digitalWrite(led, LOW);
delay(20); //
}


time2 = millis(); //hora actual en milisegundos
//si han pasado más de 4 segundos se guarda el modo actual, no el
//siguiente
if ((time2 - time) > 4000) {EEPROM.write(address, mode);}
}
17 May 2013 08:15 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

Pero en principio esto solo hace unos strobo, prueba ha meterle el analogwrite a ver si cambia la intensidad del led. No se en el modo 4 lo mismo si podria parecer menos luz porque con pausas de 20 ms, el ojo lo mismo ni se entera del parpadeo.

Efectivamente tienes razon en estos micros no se carga bootloader, mas que nada porque lo programas con el USBasp y lo unico que hace arduino es de lenguaje de programación, de hecho que leches se parece al "C"

Bien, mi programa funciona igual, de hecho el almacenar modos parece que te has basado en el mio.
17 May 2013 09:41 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

manredu escribió:Pero en principio esto solo hace unos strobo, prueba ha meterle el analogwrite a ver si cambia la intensidad del led. No se en el modo 4 lo mismo si podria parecer menos luz porque con pausas de 20 ms, el ojo lo mismo ni se entera del parpadeo.

Efectivamente tienes razon en estos micros no se carga bootloader, mas que nada porque lo programas con el USBasp y lo unico que hace arduino es de lenguaje de programación, de hecho que leches se parece al "C"

Bien, mi programa funciona igual, de hecho el almacenar modos parece que te has basado en el mio.
La verdad es que no he mirado tu programa... me cuesta seguirlo. Me he imaginado que se utilizaba la memoria no volátil para guardar el modo. Y ya ves con la librería de Arduino es muy fácil.

Sí, sólo son strobes, sólo quería ver si cambiaba de modo. Ahora ya le pondré el PWM...que sólo llevo un día programando :)

Y el siguiente paso es que te diga como está la batería... mediante destellos y/o también se puede hacer mediante led bicolor utilizando las salidad libres del chip. He comprado unos leds de 3 mm bicolor rojo verde... pero hacer agujeros en la linterna es algo para pensarlo bien.
17 May 2013 09:56 por Bailer
<<
Avatar de Usuario

Jamás ve la oscuridad

Mensajes: 1178

Registrado: 26 Ene 2012

Ubicación: Andalucía

Re: En busca del driver perfecto.

Dos preguntas ya que estís con el programa.
  • *Delay a que se refiere?
    *El ultimo parrafo es el que controla la memoria de todos los modos?
17 May 2013 10:10 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

Delay es retardo o espera en este caso hemos definido los tiempos en milisegundos.

El primer parrafo define los pines de salida y lee el modo almacenado.

El siguiente establece al modo siguiente y al final espera los 4 segundos antes de los 4 segundos cambia de modo y sino lo almacena, lo mismo que hace la tuya pero lo hace en 200 ms por lo que a efectos practicos son toques de pulsador.

Y eso que no se arduino, pere me recuerda mucho a otros lenguajes, imagino que es lo que les pasara a los poliglotas que entenderan los idiomas por similitud con otros.
17 May 2013 10:48 por Bailer
<<
Avatar de Usuario

Jamás ve la oscuridad

Mensajes: 1178

Registrado: 26 Ene 2012

Ubicación: Andalucía

Re: En busca del driver perfecto.

Menos mal que te da pereza arduino jeje yo pensaba que eso era C: porque se parece bastante al WPI, un programa de instalción desatendida. Supongo que tendré que investigar un poco o acabaré preguntando por cada cosa :eaea:

Gracias!

Edito.

Arduino En esta web hay toda la información necesaria...nunca se sabe a quien puede ayudar. :silbando:
Spoiler
Yo mismo :sisi1:
17 May 2013 15:53 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

hombre, no soy capaz de programarlo, pero si entiendo lo que hace.
19 May 2013 13:22 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

Os pongo el último código pero no ensucio más este hilo con cosas del Arduino. Cuando tenga ya todo listo abriré un hilo nuevo con instrucciones detalladas.

Me ha costado un poco, pero aquí sigue un código para un driver que:

1.- tiene memoria de modo a los 3 segundos.
2.- tiene 5 modos. 3 no ocultos: Alto, bajo y medio. 2 ocultos. Flash lento, flash rápido.
3.- Para activar o desactivar los modos ocultos hay que ir a modo bajo... esperar 3 segundos hasta que se vea un flash, y entonces apagar la linterna.

Sigue el código:

#include <EEPROM.h>
int led = 1; //el led está conectado al pin 1
int tiempomemoria = 3000; //tiempo en milisegundos
//para que se guarde el modo actual en memoria EEPROM
byte mode; //el modo en el que funciona la linterna
//valor mínimo es 1, máximo es maxmodereal
byte memooculto; //si es 1 estan activos modos ocultos
byte maxmode = 3; //máximo número de modos sin grupo oculto
byte maxoculto = 5; //número de modos total cuando se accede al grupo oculto
byte maxmodereal; //uno de los dos valores anteriores;
byte guardamode; //modo a guardar en la memoria EEPEOM
unsigned long time; //a que hora se enciende la linterna
unsigned long time2; //tiempo para guardar modo
unsigned long time3; //tiempo para modos ocultos
unsigned long time4; //tiempo para modos ocultos
boolean primer1 = false; //para grabar modo en memoria
boolean primer2 = false; //para grabar modo en memoria

boolean primeroculto = false; //booleano para modos cocultos
boolean modolow = false; //booleano para modos cocultos
boolean donelow = false; //booleano para modos cocultos


void setup() {

pinMode(led, OUTPUT); //activamos pin1 como salida digital

time = millis(); //hora a la que se enciende linterna
//ahora leemos si está activado el modo oculto
memooculto = EEPROM.read(0); delay(80);
if (memooculto == 1) { maxmodereal = maxoculto;}
else {maxmodereal = maxmode;} //valores máximos para la variable mode

mode = EEPROM.read(1); //lee modo desde memoria
delay(80); //tiempo para leer
if (mode == 0) {mode = 1;}
if (mode > maxmodereal) {mode = maxmodereal;} //OJO AQUI


}

// the loop routine runs over and over again forever:
void loop() {


if (primer1 == false) {
guardamode = mode +1; //en principio se guarda el
//sigiente modo, salvo que pasen 3 segundos, entonces se
//guarda el modo actual
if (guardamode > maxmodereal) {guardamode = 1;}
//No existe modo con número superior al maxmodereal. pasamos al mode = 1
EEPROM.write(1, guardamode);
primer1 = true;} //para que se se guarde solo una vez

//siguen los modos
if (mode == 1) {analogWrite(led, 255);}

if (mode == 2) {analogWrite(led, 110);}

if (mode == 3) { //modo bajo con activación/desactivación modos ocultos
analogWrite(led, 60);
if (donelow == false){
if (modolow == false) {time3 = millis(); modolow = true;}
//time3 es hora en que se encendió el modo low
if (primeroculto == false)
{time4 = millis(); //tiempo actual
if ((time4 - time3) > tiempomemoria) //a los 3 segundos parpadeo
{analogWrite(led, 255); delay(200);
analogWrite(led, 60);
primeroculto = true;
if (memooculto == 1){EEPROM.write(0, 0);
memooculto = 0;}//guarda oculto activado
else {EEPROM.write(0, 1);
memooculto = 1;}//guarda oculto deactivado
if (memooculto == 1) { maxmodereal = maxoculto;}
else {maxmodereal = maxmode;}
time4 = millis(); //tiempo desde parpadeo
EEPROM.write(1, mode); //guarda memoria del modo low porque
//han pasado tres segundos
}}
if (primeroculto == true) { //si pasan más de 2 segundos cambio oculto
time3 = millis(); //hora actual
if ((time3 - time4) > 2000){
modolow = true;
if (memooculto == 1){EEPROM.write(0, 0);
memooculto = 0;}//guarda oculto activado
else {EEPROM.write(0, 1);
memooculto = 1;}//guarda oculto deactivado
if (memooculto == 1) { maxmodereal = maxoculto;}
else {maxmodereal = maxmode;}
donelow = true;
}
}
}}

if ((memooculto == 1) && (mode == 4)){//modo oculto
digitalWrite(led, HIGH);
delay(150);
digitalWrite(led, LOW);
delay(150); //
}

if ((memooculto == 1) && (mode == 5)) {//modo oculto

digitalWrite(led, HIGH);
delay(80);
digitalWrite(led, LOW);
delay(80); //
}

if (primer2 == false) {
time2 = millis(); //hora actual en milisegundos
//si han pasado más de 3 segundos se guarda el modo actual, no el
//siguiente
if ((time2 - time) > tiempomemoria)
{EEPROM.write(1, mode);
primer2 = true;}

}

}
19 May 2013 17:39 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

Caunto ocupa??? te ha cabido en un attiny 13v?

Lo unico que no veo operativo es lo de los cambios al modo oculto hay que madurarlo mas pero realmente nose muy bien como, poruqe siempre cabe la posibilidad de uqe te interese el modo bajo y cuando enciendas y apagues el modo bajo se activaran los ocultos.

Mira por ejemplo como usas pausa de 3 segundos para almacenar la memoria, la solucion seria que apagues y enciendas la linterna en menos de 0,2 segundos 2 veces seguidas, de esa manara diguamos que con un doble toque activas los modos ocultos.
19 May 2013 17:44 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

Otra cosa yo el modo alto lo pondria directamente sin PWM:

if (mode == 1) {digitalwrite led,HIGH}

te va a dar igual el 100 % de luz y seguro que gastas menos memoria.

El modo bajo lo veo demasiado alto, has establecido:

1 100%
2 50 %
3 21 % mas o menos

Yo el 3 lo bajaria al orden del 5 o 10% despues en el XML da mas luz de lo que parece.
19 May 2013 17:48 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: En busca del driver perfecto.

El cambio de modo oculto, no lo termino de entender, digamos que has hecho una ventana de 2 segundos despues de los 3 segundos de almacenamiento de memoria para activarlo, así tambien me parece correcto, de esa manera todos los modos son operativos y puedes activar/desactivar los strobos.

otra cosa si es para bici los strobos yo los haria al modo medio o bajo, en alto con XML no se pueden usar, yo mis ultimos driver con PWM por hard, hago así los strobos.
19 May 2013 19:22 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

manredu escribió:Caunto ocupa??? te ha cabido en un attiny 13v?

Lo unico que no veo operativo es lo de los cambios al modo oculto hay que madurarlo mas pero realmente nose muy bien como, poruqe siempre cabe la posibilidad de uqe te interese el modo bajo y cuando enciendas y apagues el modo bajo se activaran los ocultos.

Mira por ejemplo como usas pausa de 3 segundos para almacenar la memoria, la solucion seria que apagues y enciendas la linterna en menos de 0,2 segundos 2 veces seguidas, de esa manara diguamos que con un doble toque activas los modos ocultos.


así no cabe el ATtiny13. Pero creo que puedo desactivar funciones que no se usan del core y podría caber. Lo curioso es que sigo sin tener el Attiny13... todas las pruebas las hago con el 85.

además tu sugerencia para activar/desactivar modos ocultos es muy buena. Ahora se gasta un montón de memoria para solo esa función.
manredu escribió:Otra cosa yo el modo alto lo pondria directamente sin PWM:

if (mode == 1) {digitalwrite led,HIGH}

te va a dar igual el 100 % de luz y seguro que gastas menos memoria.

El modo bajo lo veo demasiado alto, has establecido:

1 100%
2 50 %
3 21 % mas o menos

Yo el 3 lo bajaria al orden del 5 o 10% despues en el XML da mas luz de lo que parece.
manredu escribió:El cambio de modo oculto, no lo termino de entender, digamos que has hecho una ventana de 2 segundos despues de los 3 segundos de almacenamiento de memoria para activarlo, así tambien me parece correcto, de esa manera todos los modos son operativos y puedes activar/desactivar los strobos.

otra cosa si es para bici los strobos yo los haria al modo medio o bajo, en alto con XML no se pueden usar, yo mis ultimos driver con PWM por hard, hago así los strobos.las hago con el 85.


es verdad... el 100% se hace directamente, más sencillo

realmente no me he fijado en los niveles de PWM todavía. Lo importante es ahora aprender. Y para la bici por la ciudad quiero algo más elaborado... dos destellos cortos y dos largos, por ejemplo, y en low... claro.

Lo siguiente que voy a hacer es leer el nivel de la batería, ya que el driver 105c lleva ya la resistencias para bajar el voltaje hasta el 1.1V de referencia interna.

PREGUNTA. Creo que hay drivers que te indican el nivel de la batería por destellos. Por ejemplo 4 destellos batería llena, un destello batería muy baja.

¿Alguien puede decirme como lo hacen las linternas que lo llevan incorporado?
21 May 2013 23:30 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

Bien, ya he programado mi primer driver...

:vota:

ya abriré un hilo para explicar como hacerlo con Arduino
22 May 2013 12:57 por Bailer
<<
Avatar de Usuario

Jamás ve la oscuridad

Mensajes: 1178

Registrado: 26 Ene 2012

Ubicación: Andalucía

Re: En busca del driver perfecto.

A ver si puedes poner alguna foto de como queda todo. :grin:
22 May 2013 13:41 por PacoA
<<

Tecnólogo LED

Mensajes: 204

Registrado: 17 Abr 2013

Re: En busca del driver perfecto.

Bailer escribió:A ver si puedes poner alguna foto de como queda todo. :grin:
mi idea es hacer un buen manual... a ver si os ayudo a perder el miedo a programar un driver...

tal vez con Arduino os dé menos miedo.
22 May 2013 19:27 por Bailer
<<
Avatar de Usuario

Jamás ve la oscuridad

Mensajes: 1178

Registrado: 26 Ene 2012

Ubicación: Andalucía

Re: En busca del driver perfecto.

PacoA escribió:
tal vez con Arduino os dé menos miedo.
Bueeeno (en mi caso) para ser sinceros es que no se nada de estos temas....y no tiene nada mucho que ver con lo que estudio que digamos. Si he leido que cualquiera puede usar arduino pero prefiero preguntar.

© ForoLinternas