Instalación GPS
El GPS utilizado es un viejo Tomtom modelo GO 510. Es un modelo veterano pero con unas capacidades que le permiten estar al día con
actualizaciones del core (núcleo del sistema) y boot (sistema de carga) y correr mapas recientes sin ninguna ralentización.
Para el uso que le voy a dar, he prescindido de la capacidad Bluetooth y el sistema de actualización en tiempo real vía radio.
El sensor de luz tampoco lo utilizo ya que la luminosidad la regulo a mi gusto con un acceso directo que incorpora en la
propia pantalla.
Todo esto ayuda ha ganar capacidad de proceso, y como he dicho antes, el tener funcionando mapas de última hornada
(información de carriles y avisador de radares).
Despiece
Dado el espacio tan reducido (en altura) que existe en el hueco de la visera, es necesario despiezar el TomTom al máximo
posible y alojar el controlador de la alimentación en uno de sus laterales.
Alimentación
Este modelo de TomTom dispone de una batería de Lítio que utiliza para un funcionamiento autónomo (sin necesidad de tenerlo conectado a la
alimentación del vehículo).
Aunque la batería estaba en perfecto estado, no me gustaba la idea de mantener una pila de Lítio soportando las altas temperaturas del verano de
forma continua. Por ello decidí quitarla y realizar un alimentador, que conectado a los terminales de la batería original, pudiera alimentar el GPS
solamente con la batería del automóvil.
Aparte de la alimentación del TomTom es necesario tener control sobre el encendido y apagado y que este sea de forma automática.
Para ello he utilizado uno de los pines del pulsador de on-off del gps y conectándolo a masa consigo ejecutar la orden de encendido, el apagado es
otra historia.
El apagado hay que hacerlo de manera controlada para que se puedan guardar los cambios realizados en la configuración del gps, así como la ruta
marcada, etc. Esto se consigue con una doble alimentación que proporciona la energía necesaria para un funcionamiento normal y por otro lado una
segunda alimentación a un nivel de tensión inferior que solo se utilizará para salvar los cambios en la tarjeta de memoria SD.
Ambas alimentaciones están controladas por el PIC 16F688 el cual proporciona todas temporizaciones que hay que respetar durante el encendido y
apagado del TomTom.
El circuito de alimentación lo tengo alojado junto al gps (hay bastante hueco lateral y de profundidad bajo la visera) en una caja donde se han
montado en dos placas.
La complejidad del sistema reside en la necesidad de controlar temporizaciones de arranque y apagado, supervisión de la alimentación del contacto y
conseguir el mejor rendimiento posible en cuanto a la adecuación de las tensiones (pasar de 12V a 3,5V se pierde mucha potencia). Por esto último se
ha optado por usar un convertidos DC/DC en vez de un regulador.
Todo el conjunto se queda sin consumir nada cuando se retira la llave del contacto.
Descargar
Firmware microcontrolador
En las fotos inferiores se pueden ver los soportes que sujetan el gps en el hueco de la visera.
Modificación del marco visera
Las imágenes ilustran la transformación del soporte de plástico que originalmente rodeaba la pantalla multifunción.
Pieza original
Aspecto de la pieza ya transformada antes de aplicarle la imprimación y pintura.
Detalle de los orificios próximos al altavoz del GPS.
Ha sido necesario cortar los planos superior e inferior para ganarle en altura y añadir pequeñas piezas de plástico para tapar los huecos.
Hay que ser lo más cuidadoso posible a la hora de pegar los planos de nuevo, ya que han de estar perfectamente paralelos y a la medida adecuada.
Se han utilizado conectores de despiece de un ordenador
para el conexionado de alimentación y control.
En dos niveles y con placa prototipo se ha realizado el
circuito de control del GPS así como las alimentaciones.
Es importante controlar los tiempos de encendido y apagado para
sincronizar el GPS con las maniobras de arranque y paro del vehículo.
El empleo del convertidor DC/DC para alimentar el GPS optimiza el rendimiento del circuito eliminado la necesidad de utilizar disipadores.
Detalle de los soportes que sujetan el GPS. Su forma permite dejar situado el equipo en la inclinación adecuada y firmemente.
Se puede ver que solo son necesario tres conexiones: Dos de alimentación y uno de control (pulsador).
Aunque hay hueco suficiente para alojar el GPS y la caja de control, la altura es limitada. Ha sido necesario realizar
algún pequeño corte en plásticos interiores (bajo la visera), para optimizar el ángulo de visión de la pantalla.
Utilizando la misma tornillería y anclajes que Peugeot emplea para sujetar otros elementos
del vehículo, el GPS queda afianzado al conjunto con toda seguridad.
Debido a las grandes diferencias de medidas entre la pantalla del GPS y el display multifunción, es necesaria la modificación total del fondo de la pieza.
Para un buen acabado hay que lijar y lijar...
Bricos Peugeot 308
Modificaciones
CAN-BUS
GPS
Montaje
Aspecto final
;*************************************************************************
; Control de encendido Tomtom en Peugeot 308
;*************************************************************************
list p=16F688
; list directive to define processor
#include <p16F688.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _CPD_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
__IDLOCS 1234 ;ID
#define Bank0
bcf
STATUS, RP0
#define
Bank1
bsf
STATUS, RP0
cblock 0x71
TEMPOVAR
; Temporizador de valor variable.
endc
;*************************************************************************
org 00h
goto Inicio
;*************************************************************************
;
;
Main
;
;*************************************************************************
org
08h
Inicio:
Bank1
movlw
b'00000001'
movwf
OSCCON^80H
; Set INTOSC to 31KHz
call
IniPORT
; Inicializa puertos.
call
IniTIMER0
; Inicializa TIMER0.
Bank0
clrf
PORTC
; Limpiar PORTC.
call
Tempo06s
; Primera temporización de 0,6 seg. tras alimentar.
; No se realiza ninguna acción hasta estabilizar
; la alimentación.
bsf
PORTC, RC0
; Pulso de 0,6 seg para encendido Tomton.
call
Tempo06s
;
bcf
PORTC, RC0
;
movlw
d'70'
; Temporización para activar segunda alimentación.
movwf
TEMPOVAR
; 0,6 * 70 = 42seg
Tempo_Va_a:
call
Tempo06s
;
decfsz
TEMPOVAR, F
;
goto
Tempo_Va_a
;
bsf
PORTC, RC1
; Activación segunda alimentación.
nop
nop
AlimOK:
btfsc
PORTC, RC2
; Comprobación de la alimentación principal.
goto
AlimOK
; Alimentación principal correcta.
AlimNoOK:
movlw
d'10'
; Esperar 6seg y comprobar si hay alim. nuevamente.
movwf
TEMPOVAR
; 0,6 * 10 = 6seg
Tempo_Va_b:
call
Tempo06s
;
decfsz
TEMPOVAR, F
;
goto
Tempo_Va_b
;
btfsc
PORTC, RC2
; Comprobación alimentación principal.
goto
AlimOK
; Si se restablece la alimentación no se apagará Tomtom y
; comenzar de nuevo supervición alim. principal.
movlw
d'8'
; Esperar 5seg antes de desconectar la alimentación.
movwf
TEMPOVAR
; 0,6 * 8 = 5seg
Tempo_Va_c:
call
Tempo06s
;
decfsz
TEMPOVAR, F
;
goto
Tempo_Va_c
;
bcf
PORTC, RC1
;Desactivación segunda alimentación.
LoopEnd:
clrf
PORTC
;Limpiar PORTC.
goto
LoopEnd
;-------------------------------------------------------------------------
;Tratamiento temporización de 0,6 seg.
;-------------------------------------------------------------------------
Tempo06s:
btfss
INTCON,T0IF
;¿Terminado contador TMR0?
goto
Tempo06s
;Esperar fin contador TMR0.
bcf
INTCON,T0IF
;Limpiar badera.
return
;*************************************************************************
;
PORTC: RC0
out
Control encendido Tomton.
;
RC1
out
Control rele Aliment2.
;
RC2
in
Lectura estado Aliment1.
;*************************************************************************
IniPORT:
Bank0
clrf
STATUS
clrf
PORTC
movlw
b'00000111'
;Comparator Mode I/O.
movwf
CMCON0
Bank1
clrf
ANSEL^80H
;digital I/O
movlw
b'00000100'
;RC<7:3, 1:0> output.
movwf
TRISC^80H
;RC<2> input.
return
;*************************************************************************
;*************************************************************************
;
32Khz(F.osc)/64(prescaler)/TMR0(256-desmultiplic). aprox.0,6s
;*************************************************************************
IniTIMER0:
Bank1
bsf
OPTION_REG^80H,PS0
;prescaler 1:8
bsf
OPTION_REG^80H,PS1
;
''
bcf
OPTION_REG^80H,PS2
;
''
bcf
OPTION_REG^80H,PSA
;prescaler TMR0.
bcf
OPTION_REG^80H,T0SE
;incr _/-.
bcf
OPTION_REG^80H,T0CS
;clock interno.
return
;*************************************************************************
end
;*************************************************************************
; Control de encendido Tomtom en Peugeot 308
;*************************************************************************
list p=16F688
; list directive to define processor
#include <p16F688.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _CPD_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
__IDLOCS 1234 ;ID
#define Bank0
bcf
STATUS, RP0
#define
Bank1
bsf
STATUS, RP0
cblock 0x71
TEMPOVAR
; Temporizador de valor variable.
endc
;*************************************************************************
org 00h
goto Inicio
;*************************************************************************
;
;
Main
;
;*************************************************************************
org
08h
Inicio:
call
IniWDT
Bank1
movlw
b'00000001'
movwf
OSCCON^80H
; Set INTOSC to 31KHz
Bank0
call
IniPORT
; Inicializa puertos.
call
IniTIMER1
clrf
PORTC
; Limpiar PORTC.
ContactoOFF:
clrwdt
btfss
PORTC, RC2
; Comprobación tension del "Contacto".
goto
ContactoOFF
; Contacto en OFF.
ContactoON:
call
Tempor05s
; Primera temporización de 0,5 seg. tras alimentar.
; No se realiza ninguna acción hasta estabilizar
; la alimentación.
bsf
PORTC, RC0
; Tres pulsos de 0,5 seg para encendido Tomton.
call
Tempor05s
;
call
Tempor05s
;
call
Tempor05s
;
bcf
PORTC, RC0
;
movlw
d'16'
; Esperar hasta arranque Tomtom.
movwf
TEMPOVAR
; 0,5 * 16 = 8seg
Tempo_Va_a:
call
Tempor05s
;
decfsz
TEMPOVAR, F
;
goto
Tempo_Va_a
;
ContactoONb:
clrwdt
btfsc
PORTC, RC2
; Comprobación estado del "Contacto".
goto
ContactoONb
; Permanece en contacto en ON.
ContactoOFFb:
Bank1
bcf
TRISC^80H, 1
; Config. RC1 salida.
Bank0
bcf
PORTC, RC1
; Establece 3,2V al Tomtom para que se apague.
ApagarTT:
movlw
d'28'
; Esperar 14s para que se apague el Tomtom.
movwf
TEMPOVAR
; 0,5 * 28 = 14seg
Tempo_Va_b:
call
Tempor05s
;
decfsz
TEMPOVAR, F
;
goto
Tempo_Va_b
;
LoopEnd:
goto
LoopEnd
;*************************************************************************
;*************************************************************************
;Tratamiento temporización de 0,50 seg.
;*************************************************************************
Tempor05s:
clrwdt
clrf
TMR1L
movlw
d'242'
movwf
TMR1H
LoopTMR1:
btfss
PIR1,TMR1IF
;¿Terminado contador TMR1?
goto
LoopTMR1
;Esperar fin contador TMR1.
bcf
PIR1,TMR1IF
;Limpiar badera.
return
;*************************************************************************
;*************************************************************************
;PORTC: RC0 (pin 10) out
Control encendido Tomton.
;
RC1 (pin 9) in/out
Control alimentacion.
;
RC2 (pin 8) in
Lectura estado alimentacion.
;*************************************************************************
IniPORT:
Bank0
clrf
STATUS
clrf
PORTC
movlw
b'00000111'
;Comparator Mode I/O.
movwf
CMCON0
Bank1
clrf
ANSEL^80H
;digital I/O
movlw
b'00000110'
;RC<7:3, 0> output.
movwf
TRISC^80H
;RC<2:1> input.
return
;*************************************************************************
;*************************************************************************
;
32Khz(F.osc). aprox.0,5s
;*************************************************************************
IniTIMER1:
Bank0
bcf
T1CON,T1GINV
;Timer1 gate is active low
bcf
T1CON,TMR1GE
;
bcf
T1CON,T1CKPS0
;1:1 Prescale Value
bcf
T1CON,T1CKPS1
; '' ''
bcf
T1CON,T1OSCEN
;LP oscillator is off
bcf
T1CON,NOT_T1SYNC
;
bcf
T1CON,TMR1CS
;Internal clock (FOSC/4).
nop
bsf
T1CON,TMR1ON
;Enables Timer1.
return
;*************************************************************************
;*************************************************************************
;
Watchdog aprox. 1,8s
;*************************************************************************
IniWDT:
Bank0
movlw
b'00001000'
movwf
WDTCON
return
;*************************************************************************
end
Cambiando unos pocos componentes y actualizando el firmware se consigue un nuevo sistema de control de arranque.
El nuevo circuito ha sido posible montarlo sobre una de
las placas de la versión anterior.
Un menor número de componentes propicia un reducido
número de interconexiones.
Firmware microcontrolador
Actualización control de alimentación del Tomtom
Después de más de un año funcionando el sistema y tras poner a la última la cartografía del Tomtom, realicé la siguiente actualización del circuito
de control de alimentación del gps.
Con este cambio quiero conseguir un arranque más rápido y un mejor control del encendido del Tomtom. Hasta ahora el sistema arrancaba desde la
tarjeta SD, esto hacía que se ralentizase el proceso de carga, a la vez que mostraba dicho proceso en la pantalla que no es del todo bonito.
En la versión anterior se contempla temporizaciones críticas que son necesarias para el encendido y apagado correcto del gps (para evitar la pérdida
de datos), también se ha observado que actuando numerosas veces sobre el contacto (poniendo y quitando el contacto repetidamente) en algún momento
podría no arrancar adecuadamente.
Un nuevo arranque.
Con este nuevo circuito se consigue un arranque prácticamente instantáneo, así como tener el control del gps de una manera precisa y sin necesidad
de respetar las temporizaciones tan férreas que impone el Tomtom.
Aunque pueda parecer similar a la versión anterior, en este caso la filosofía es totalmente nueva. Se ha optado por no cortar la alimentación del gps
cuando se encuentra apagado. Lo que se pretende es que se mantenga alimentado tal y como lo haría si tuviese la batería interna (solamente para
mantener los datos en la RAM).
Con el gps apagado, se le entrega una tensión de alimentación de 3,2V y en el momento de encenderlo dicha tensión sube hasta los 4,6V.
La tensión de 4,6V es la máxima que utiliza el Tomtom para funcionar normalmente, mientras que la tensión de 3,2V es utilizada para indicar al gps que
se tiene que apagar (simula batería agotada).
El convertidor DC1 conmuta entre ambas tensiones gracias al conjunto de resistencias R4 y R5 así como el transistor Q1. Cuando damos tensión de
contacto, inmediatamente activamos Q1 para que este señalice la necesidad de tensión de alimentación al gps. En ese mismo instante se envía la orden
de encendido a través de Q2 al Tomtom generado por IC1.
Para el apagado necesitamos bajar la tensión a los 3,2V y mantenerlos un tiempo mínimo para garantizar que el gps a entendido la orden de apagado
(simulando que la batería está agotada), y evita incongruencias si en ese momento volvemos a dar contacto. El nivel bajo que nos suministra IC1 a través
del diodo D2 y R6 garantiza respetar dicha temporización de apagado.
Una vez apagado el gps, el microcontrolador se reinicia y comienza nuevamente el ciclo de supervisión de la tensión de contacto a través de D1 y R1 por
si fuera necesario encenderlo de nuevo.
El circuito en reposo consume prácticamente como un LED, unos escasos 20mA que son totalmente asumibles.
Bricos Peugeot 308