Sustitución de driver linterna Bici 3 Focos

Modificaciones y mejoras de tus linternas en fotos.

16 Sep 2013 14:27 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Sustitución de driver linterna Bici 3 Focos

Bueno pues en mi linea de modificar los drivers para adaptarlos a mis necesides, he dicidido meterle mano a este paciente:


Imagen

El tema es que el driver que es este:

Imagen

Solo tenia 4 modos:

1 Apagado
2 3 Focos
3 1 Foco
4 2 Focos

Todos se cambian con el pulsador, no tiene interruptor de puesta en marcha, y uno de los modos es apagado. Con el amperimetro en serie el modo de apagado consume microamperios, así que la bateria no sufre.

No se que microcontrolador usa, los chinos lo han borrado, pero me parece ideal el consumo que tiene en vacio, he intentado leerlo como pic, pero no es y atmel tampoco pues no coincide el patillaje.

Decido diseñar el driver desde 0, usando un pic, para estos menesteres y dado que tengo dos focos (y mas espacio al ir en el portapilas) uso un 16f1824 que tiene 2 pwm.

Los modos que elijo son:
1 apagado (para activarlo hay que pulsar mas de 2 segundos)
2 los tres focos al 100 % (este es para bajar)
3 los tres focos al 50 %
4 Un foco al 25 % (este es para subir)
5 Los dos focos al 10 % (este es para circular por ciudad)

PAra el modo apagado utilizo el sleep del micro con lo que se queda en un consumo de 0,2 mah.

LA placa diseñada en fase de pruebas.

Imagen

A esta le he puesto mosfet de lsos de verdad no los juguetitos que llevaba la china.

Me falta probarla en el frontal y ver como se baja con ella pero en el banco de pruebas funciona todo como tenia previsto.

Tengo que implementarle el medidor de nivel de bateria (que estaba previsto) y nose si se me ocurrira algo mas, por ejemplo un atenuador de luz cuando te cruzas con alguien pues el frontal da luz de verdad.
16 Sep 2013 14:32 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: Sustitución de driver linterna Bici 3 Focos

El fuente por si alguien se anima o para aprender:

'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 13/09/2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************

EEPROM 2,[127,127,0]
define OSC 4
DEFINE ADC_BITS 8
DEFINE CCP1_REG PORTA 'Hpwm 1 pin port
DEFINE CCP1_BIT 5 'Hpwm 1 pin bit
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port
DEFINE CCP2_BIT 5 'Hpwm 2 pin bit
DEFINE HPWM2_TIMER2
APFCON1=%0001 ' Configuro los pines alternativos para los PWM
OSCCON=%01101000 'Configuro el oscilador a 4 mghz
TRISA=%011111 'Configuro pines del Puerto A
TRISC=%000111 'Configuro pines del Puerto C
ANSELA=%000000 'Configuro Todo el Puerto A como digital
ANSELC=%000100 'Configuro Todo el Puerto c como C2 Analogica
WPUA=%000100 'Activo todas las pull-up en puerto A
WPUC=%000000 'Activo todas las pull-up en puerto A
OPTION_REG=%10000000 'Activo todas las pull-up
LEDVERDE VAR LATC.3
LEDROJO VAR LATC.4
LED1 VAR LATA.5
LED2 VAR LATC.5
AUX VAR BYTE
AUX2 VAR WORD
DATOLED1 VAR BYTE
DATOLED2 VAR BYTE
LEDVERDE=0
LEDROJO=0
LED1=1
LED2=1

prime:
INTCON=%10010000 'Activo todas la interrupción hardware y la configuro
PIE1 = 0
PIE2 = 0
PIE3 = 0
IOCAN=%000000
IOCAP= %000100


ON INTERRUPT GOTO INTERR 'Defino el vector de interrupción

READ 2,DATOLED1 'Leo las memorias de modo
READ 3, DATOLED2
READ 4, AUX
PAUSE 10


INICIO: 'bucle principal de programa como va con interrupciones y pwm hard es muy simple
HPWM 1,DATOLED1,2000 'activo el pwm 1
HPWM 2, DATOLED2,2000 'activo el pwm 2
PAUSE 100
GOTO INICIO



INTERR: 'rutina de interrupción
DISABLE 'desactivo la interrupción para que no me moleste en su misma rutina.
INTCON=%0 'Como no me fio del picbasic y produciria un cuelgue fuerzo su desactivación en registro.
AUX2=0
BUCLE1: 'bucle de captura de tiempo si pulsa mas de 2 segundos apaga la linterna
AUX2=AUX2+1
PAUSE 10
IF AUX2=200 THEN FIN
IF PORTA.2=0 THEN BUCLE1



AUX = AUX+1 'Rutina de cambio de modo
IF AUX=4 THEN
AUX=0
ENDIF

IF AUX=1 THEN 'Rutina de modo 1
DATOLED1=0
DATOLED2=0
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=2 THEN 'Rutina de modo 2
DATOLED1=127
DATOLED2=127
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=3 THEN 'Rutina de modo 3
DATOLED1=200
DATOLED2=255
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=0 THEN 'Rutina de modo 0
DATOLED1=240
DATOLED2=240
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

GOTO RESUM

FIN: 'Rutina de apagado
HPWM 1,255,2000
HPWM 2, 255,2000
HIGH LEDROJO
HIGH LEDVERDE
PAUSE 500
LOW LEDROJO
LOW LEDVERDE
PAUSE 500
INTCON=%10010000 'Activo la interrupción para poder salir de sleep
DATOLED1=0
DATOLED2=0
SLEEP 1
INTCON=%0 'DESACTIVO LA INTERRUPCIÓN.
read 2,datoled1,datoled2,aux
HPWM 1,DATOLED1,2000 'activo el pwm 1
HPWM 2, DATOLED2,2000 'activo el pwm 2
pause 200



RESUM: 'fin de interrupción
INTCON=%10010000
RESUME
ENABLE
16 Sep 2013 19:45 por manredu
<<

Tecnólogo LED

Mensajes: 136

Registrado: 30 Ene 2011

Re: Sustitución de driver linterna Bici 3 Focos

Ya he incluido el indicador de bateria, a 3'5 v pasa a media y a 3 a baja a 2,6 apaga la linterna.

He optimizado al maximo los perifericos y utilizado el DAC interno para la referencia de la bateria, de manera que no uso nada de corriente en modo sleep.

He bajado el modo sleep a 16 microamperios eso son 0,016 mA osea que se puede considerar que en modo apagado la linterna no consume nada. Solo me falta probarla en le frontal y el jueves en pista.

'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 13/09/2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************

EEPROM 2,[127,127,0]
define OSC 4
DEFINE CCP1_REG PORTA 'Hpwm 1 pin port
DEFINE CCP1_BIT 5 'Hpwm 1 pin bit
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port
DEFINE CCP2_BIT 5 'Hpwm 2 pin bit
DEFINE ADC_BITS 8 ' Set number of bits in result
DEFINE HPWM2_TIMER2

APFCON1=%0001 ' Configuro los pines alternativos para los PWM
OSCCON=%01101000 'Configuro el oscilador a 4 mghz
TRISA=%011111 'Configuro pines del Puerto A
TRISC=%000111 'Configuro pines del Puerto C
ANSELA=%000000 'Configuro Todo el Puerto A como digital
ANSELC=%000100 'Configuro Todo el Puerto c como DIGITAL
WPUA=%000100 'Activo todas las pull-up en puerto A
WPUC=%000000 'Activo todas las pull-up en puerto A
OPTION_REG=%10000000 'Activo todas las pull-up
DACCON0 = %10000000 'Configuro el DAC para que funcione con V+ Y GND
DACCON1 = %10000 ' Confuguro el DAC para que de la tension de bateria /2
ADCON1= %00010011
FVRCON = %10000010
LEDVERDE VAR LATC.3
LEDROJO VAR LATC.4
LED1 VAR LATA.5
LED2 VAR LATC.5
AUX VAR BYTE
AUX2 VAR WORD
DATOLED1 VAR BYTE
DATOLED2 VAR BYTE
tension var byte
LEDVERDE=1
LEDROJO=0
LED1=1
LED2=1



prime:
INTCON=%10010000 'Activo todas la interrupción hardware y la configuro
PIE1 = 0
PIE2 = 0
PIE3 = 0
IOCAN=%000000
IOCAP= %000100


ON INTERRUPT GOTO INTERR 'Defino el vector de interrupción

READ 2,DATOLED1 'Leo las memorias de modo
READ 3, DATOLED2
READ 4, AUX
PAUSE 10


INICIO: 'bucle principal de programa como va con interrupciones y pwm hard es muy simple
HPWM 1,DATOLED1,2000 'activo el pwm 1
HPWM 2, DATOLED2,2000 'activo el pwm 2

ADCIN 30,TENSION 'Leo el puerto del DAC (V+/2)
PAUSE 100
if tension <218 then
high ledrojo
ELSE
LOW LEDROJO
ENDIF
if tension <187 then
low ledverde
ELSE
HIGH LEDVERDE
ENDIF
IF TENSION < 163 THEN FIN1
GOTO INICIO

FIN1: 'Rutina de que me quedo sin bateria, enciendo 1 led al 5 % y parpadeo el rojo durante 2 minutos luego apago
HPWM 1,255,2000
HPWM 2, 240,2000
FOR AUX =1 TO 255
HIGH LEDROJO
PAUSE 250
low ledrojo
PAUSE 250
NEXT
GOTO FIN

INTERR: 'rutina de interrupción
DISABLE 'desactivo la interrupción para que no me moleste en su misma rutina.
INTCON=%0 'Como no me fio del picbasic y produciria un cuelgue fuerzo su desactivación en registro.
AUX2=0
BUCLE1: 'bucle de captura de tiempo si pulsa mas de 2 segundos apaga la linterna
AUX2=AUX2+1
PAUSE 10
IF AUX2=200 THEN FIN
IF PORTA.2=0 THEN BUCLE1



AUX = AUX+1 'Rutina de cambio de modo
IF AUX=4 THEN
AUX=0
ENDIF

IF AUX=1 THEN 'Rutina de modo 1
DATOLED1=0
DATOLED2=0
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=2 THEN 'Rutina de modo 2
DATOLED1=127
DATOLED2=127
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=3 THEN 'Rutina de modo 3
DATOLED1=200
DATOLED2=255
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

IF AUX=0 THEN 'Rutina de modo 0
DATOLED1=240
DATOLED2=240
WRITE 2,DATOLED1,DATOLED2
PAUSE 100
ENDIF

GOTO RESUM

FIN: 'Rutina de apagado
HPWM 1,255,2000
HPWM 2, 255,2000
HIGH LEDROJO
HIGH LEDVERDE
PAUSE 500
LOW LEDROJO
LOW LEDVERDE
WRITE 10, TENSION
PAUSE 500
INTCON=%10010000 'Activo la interrupción para poder salir de sleep
DATOLED1=0
DATOLED2=0
DACCON0 = 0
FVRCON = 0
ADCON0=0
SLEEP 1
INTCON=%0 'DESACTIVO LA INTERRUPCIÓN.
read 2,datoled1,datoled2,aux
HPWM 1,DATOLED1,2000 'activo el pwm 1
HPWM 2, DATOLED2,2000 'activo el pwm 2
PAUSE 10
DACCON0 = %11000000
FVRCON = %11000010
pause 200




RESUM: 'fin de interrupción
INTCON=%10010000
RESUME
ENABLE
27 Oct 2015 10:52 por zaero_divide
<<

Tecnólogo LED

Mensajes: 267

Registrado: 28 Jun 2013

Re: Sustitución de driver linterna Bici 3 Focos

2 años más tarde... voy y me encuentro con esto hahah

:aplauso: :aplauso: :aplauso:

Gracias por compartir, me gusta, buen trabajo

© ForoLinternas