jueves, 4 de febrero de 2021
martes, 2 de febrero de 2021
viernes, 9 de octubre de 2020
Reparación de display Peugeot 3008. Parte 6.
En esta sexta parte voy a mostrar el montaje del circuito electrónico y las adaptaciones mecánicas para encajar el nuevo LCD en el módulo de display. No es un proceso demasiado complicado pero si que exige tener ciertos conocimientos de electrónica y estar acostumbrado a montar y soldar componentes de pequeño tamaño. Los coches son caros y las reparaciones también, así que si no estás seguro de poder acabar todo el proceso con éxito, quizá sea conveniente que busques ayude. Si sigues adelante será solo bajo tu responsabilidad. ¿Queda claro? |
Esperaba que esta fuese la última parte, pero no; habrá una séptima ya que a la hora de montar el módulo en el coche me he llevado una sorpresa que precisará de algún añadido al circuito electrónico. No obstante y a pesar de todo, estoy contento con el resultado; por fin vuelvo a ver las informaciones con nitidez y el aspecto final es mejor de lo que esperaba a pesar de usar un LCD con un color distinto al original y al resto de controles del coche.
Montaje del circuito electrónico.
Lo primero es montar todos los componentes en el circuito impreso. Cuando hice el diseño de la placa, tuve en cuenta el tipo de componentes que estaba utilizando y en aquellos que me fue posible utilicé pads más grandes de lo habitual para facilitar la soldadura manual. El componente más difícil de soldar será el conector FPC para el display por lo juntas y pequeñas que tiene las patillas. Hay que prestar especial atención en que no nos queden patillas cortocircuitadas y no calentarlo demasiado ya que podemos ablandar el plástico y estropearlo.
sábado, 26 de septiembre de 2020
Reparación de display Peugeot 3008. Parte 5.
Una de las tareas más complicadas de todo el proyecto era encontrar un display que cumpliese con los requisitos necesarios (medidas, color, resolución, etc) y por supuesto no lo encontré. Un requisito indispensable, además de la resolución, características técnicas, etc, es que no me obligue a hacer demasiadas modificaciones mecánicas, al menos en la carcasa frontal. No quiero tener que hacer cortes o modificaciones que cambien demasiado la estética del salpicadero del coche.
Después de mucho buscar, me decanté por el siguiente display.
https://www.buydisplay.com/serial-240x64-cog-monochrome-lcd-graphic-module-black-on-white
viernes, 25 de septiembre de 2020
Reparación de display Peugeot 3008. Parte 4.
Para capturar los datos gráficos utilizo el mismo montaje con un firmware distinto cuya misión es capturar los datos, interpretarlos y enviar el resultado por el puerto serie al programa terminal en el PC.
Y a continuación se puede ver el resultado de la primera captura.
----------------------------------------- >>>> Peugeot Type C display data capture. ----------------------------------------- Count ---------------> 5122 ------------------------------------------------------------------------------------- ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| * ********************| ** ********************| *** ********************| *** ********************| ***************** ********************| ***************** ********************| ***************** ********************| ********************| *** *** ********************| **** **** ********************| ***** ***** ********************| **** ****** ********************| *** ******* ********************| *** **** *** ********************| *** **** *** ********************| **** **** *** ********************| ********* *** ********************| ******* *** ********************| **** *** ********************| ********************| ********************| ********************| ********************| ********************| ********************| *** *** ********************| *** *** ********************| *** *** ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********* ********************| ************* ********************| *************** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *************** ********************| ************* ********************| ********* ********************| ********************| ********* ********************| ************* ********************| *************** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *** *** ********************| *************** ********************| ************* ********************| ********* ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ********************| ************* *********************************************** ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * * ********************| * ******** ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ******** ********************| * * * * ********************| * * * * ********************| * * * ********************| * ********************| * ****** ********************| * * ********************| * * ********************| * * ********************| * ******** ***** ********************| * * ********************| * * **** ********************| * * * * * ********************| * * * * ********************| * ***** * * * ********************| * * ** * ********************| * * ********************| * * ****** ********************| * ****** * ********************| * * ********************| * ****** * ********************| * * * ********************| * * ********************| * * **** ********************| * ***** * * ********************| * * * ********************| * **** * * ********************| * * * * **** ********************| * * * * ********************| * * * * ********************| * ** * ********************| * ********************| * * * ********************| * * * * ********************| * * * * * ** ********************| * * * * * * * ********************| * ** * * * ********************| * * * * ********************| * ** * ********************| * ********************| * ****** ********************| * * * ********************| * * * ********************| * * * ********************| * ****** ********************| * ********************| * ****** ********************| * * * ********************| * * * ********************| * * * ********************| * ****** ********************| * ********************| * * ********************| * * *** ********************| * * * ********************| * * * ********************| * *** ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| ** * ********************| ** * ********************| ** * ********************| ** * ********************| ** * ********************| * ********************| *** **** * ********************| ********** * ********************| ** ** ** * ********************| ** ** ** * ********************| ** ** ** * ********************| ********** * ********************| *** **** * ********************| * ********************| * ********************| ** *** * ********************| * * * * * ********************| * * * * * ********************| ** * * * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| * ********************| ************************************************************************************| ************************************************************************************| ************************************************************************************| ************************************************************************ |
El firmware captura los datos gráficos entre el microcontrolador y el controlador gráfico. Los almacena en un buffer, a continuación los interpreta y por cada punto de la imagen en el LCD envía un carácter de texto al puerto serie (en este caso el asterisco).
De la misma forma capturo distintas pantallas y una cosa curiosa que observé es que, a pesar de que el controlador gráfico se configura para trabajar en una escala de grises de cuatro niveles (2 bits), nunca se muestran los datos en el LCD con distintos tonos. Siempre se muestran los puntos encendidos o apagados, es decir, en monocromo.
Con un sencillo script en Python reorganicé los datos que tenía grabados en distintos archivos, cambié el carácter gráfico utilizado para los puntos y ahí tenemos las distintas capturas que demuestran que ya sabemos cómo interpretar esos datos.
miércoles, 23 de septiembre de 2020
Reparación de display Peugeot 3008. Parte 3.
Para capturar los datos que circulan entre el microcontrolador y el controlador gráfico utilicé un kit de desarrollo de Cypress con un micro PsoC 4245.
Se conectaron las líneas de datos, las líneas de control CS, A0, E y RESET y por supuesto la masa.
martes, 22 de septiembre de 2020
Reparación de display Peugeot 3008. Parte 2.
Ahora que ya se que no voy a poder reparar el display de forma sencilla, el objetivo es sustituir el display original por otro display controlado con un microcontrolador que haga de puente entre los buses de los dos.
Para poder hacerlo, primero es necesario saber cómo se comunica el microcontrolador con el controlador gráfico. Y necesitamos localizar en la cinta del display aquellas líneas de datos y control que nos sirvan para interceptar los datos.
Gracias al "datasheet" no es complicado saber cuál será la orientación de las líneas ya que al estar el integrado montado en la cinta flexible no hay las mismas posibilidades que en un circuito impreso multicapa para que las señales cambien de dirección y tendrán que ir paralelas desde la salida del integrado hasta su destino final.
Si nos fijamos en el "datasheet" y descartamos aquellas líneas correspondientes al display LCD, ya podemos hacernos idea de la orientación de las señales de control y datos en la unión de la cinta con el circuito electrónico.
lunes, 21 de septiembre de 2020
Reparación de display Peugeot 3008. Parte 1.
Llegó el momento dedicarse a una tarea que llevaba esquivando durante bastante tiempo. Se trata de reparar el display del ordenador de a bordo de mi coche; un Peugeot 3008 del año 2009.
Es un problema aparentemente bastante común en muchos displays de coche y este mismo problema ya lo sufrí en el coche que tube antes que este, un Peugeot 4007; aunque en aquella ocasión, como tocaba cambiar de coche no llegué a hacer nada por resolverlo.
El problema está en que cuando la temperatura interior del coche aumenta el display empieza a verse bastante mal.
lunes, 7 de septiembre de 2020
Cómo comprobar un transistor MOSFET con el polímetro.
Hace poco, un conocido me contactó para que le echase una mano con un circuito controlador de temperatura por PWM, en el cual, el transistor mosfet de salida que controla una resistencia de calentamiento se ponía en cortocircuito y la resistencia no calentaba. Ya había cambiado el mosfet casi media docena de veces, siempre con el mismo resultado.
Figura 1. |
sábado, 26 de octubre de 2019
Circuito de sonido de tragaperras años 80. Parte 2.
El
firmware.
- P1.3 perteneciente al puerto 1.
- P2.4 a P2.7 pertenecientes al puerto 2.
-
INT. Que es la señal de interrupción del microcontrolador y que es activa a nivel bajo.
-
RESET. También activa a nivel bajo que es el reset del microcontrolador.
;; 0x0000 vector de arranque.
0000 04 9B JMP 009BH ; salto a 0x009B
0002 00 NOP
;; 0x0003 vector de interrupción.
0003 E5 SEL MB0 ; MBF = 0. Selecciona banco 0 de memoria.
0004 04 0B JMP 000BH ; Salta a 0x000B
0006 04 9B JMP 009BH ; Salta a 0x009B
0008 00 NOP
0009 04 9B JMP 009BH
;; viene de vector de interrupción.
000B 99 F7 ANL P1,#F7H
000D 8A F0 ORL P2,#F0H ; Configura P2.4 a P2.7 como entradas.
000F 0A IN A,P2 ; Lee valor de P2
0010 53 F0 ANL A,#F0H ; Descarta P2.0 a P2.3, usados en direccionamiento.
; se queda con bits P2.4 a P2.7
0012 47 SWAP A ; Intercambio de nibbles. P2.4 a P2.7 pasa a bits bajos.
0013 A8 MOV R0,A ; Almacena valor en R0
0014 B9 08 MOV R1,#08H ; R1 = 0x08
0016 23 1F MOV A,#1FH ; A = 0x1F
0018 A1 MOV @R1,A ; [ R1 = 0x08 ] = 0x1F. Posición 8 memoria = 0x1F
0019 19 INC R1 ; R1 = 0x09
001A 27 CLR A ; A = 0
001B A1 MOV @R1,A ; [ R1 = 0x09 ] = 0x00. Posición 9 memoria = 0x00
001C 17 INC A ; A = 1
001D D7 MOV PSW,A ; PWS = A = 1 ¡¡¡ OJO !!!
001E 93 RETR ; NO RETORNA. CONTINUA PERO LIMPIA FLAG DE LA INTERRUPCION.
; Qué cabroncete, casi se me pasa esto. :-)
;; saltos según valor leído en P2.4 a P2.7
001F E5 SEL MB0 ; MBF = 0. Selecciona banco 0 de memoria.
0020 F8 MOV A,R0 ; A = R0 = Valor leído de P2.
0021 C6 9B JZ 009BH ; Si = 0x00, salta a 0x009B
0023 23 0F MOV A,#0FH ;
0025 D8 XRL A,R0 ;
0026 C6 98 JZ 0098H ; Si = 0x0F, salta a 0x0098
0028 23 0E MOV A,#0EH ;
002A D8 XRL A,R0 ;
002B C6 96 JZ 0096H ; Si = 0x0E, salta a 0x0096
002D 23 0D MOV A,#0DH ;
002F D8 XRL A,R0 ;
0030 C6 92 JZ 0092H ; Si = 0x0D, salta a 0x0092
0032 23 0C MOV A,#0CH ;
0034 D8 XRL A,R0 ;
0035 C6 8D JZ 008DH ; Si = 0x0C, salta a 0x008D
0037 23 01 MOV A,#01H ;
0039 D8 XRL A,R0 ;
003A C6 70 JZ 0070H ; Si = 0x01, salta a 0x0070
003C 23 02 MOV A,#02H ;
003E D8 XRL A,R0 ;
003F C6 72 JZ 0072H ; Si = 0x02, salta a 0x0072
0041 23 03 MOV A,#03H ;
0043 D8 XRL A,R0 ;
0044 C6 75 JZ 0075H ; Si = 0x03, salta a 0x0075
0046 23 04 MOV A,#04H ;
0048 D8 XRL A,R0 ;
0049 C6 78 JZ 0078H ; Si = 0x04, salta a 0x0078
004B 23 05 MOV A,#05H ;
004D D8 XRL A,R0 ;
004E C6 7A JZ 007AH ; Si = 0x05, salta a 0x007A
0050 23 06 MOV A,#06H ;
0052 D8 XRL A,R0 ;
0053 C6 7D JZ 007DH ; Si = 0x06, salta a 0x007D
0055 23 07 MOV A,#07H ;
0057 D8 XRL A,R0 ;
0058 C6 81 JZ 0081H ; Si = 0x07, salta a 0x0081
005A 23 08 MOV A,#08H ;
005C D8 XRL A,R0 ;
005D C6 83 JZ 0083H ; Si = 0x08, salta a 0x0083
005F 23 09 MOV A,#09H ;
0061 D8 XRL A,R0 ;
0062 C6 85 JZ 0085H ; Si = 0x09, salta a 0x0085
0064 23 0A MOV A,#0AH ;
0066 D8 XRL A,R0 ;
0067 C6 87 JZ 0087H ; Si = 0x0A, salta a 0x0087
0069 23 0B MOV A,#0BH ;
006B D8 XRL A,R0 ;
006C C6 89 JZ 0089H ; Si = 0x0B, salta a 0x0089
|
Empezando con las pruebas.
Adaptador para pruebas. Esquema. |
Circuito de sonido de tragaperras años 80. Parte 1.
viernes, 2 de septiembre de 2016
Librería RFM69 para micros PSoC 4 y PSoC 5LP.
lunes, 18 de enero de 2016
Port de la librería FatFs para micros PSoC de Cypress.
Sobre el Port.
El motivo para realizar el port de la librería fué la necesidad de implementar la grabación de datos en tarjetas SD con un micro de Cypress de la familia PSoC 4, para posteriormente tratar esos datos en un PC de sobremesa.
Cómo utilizar la librería.
-
Añade un módulo de comunicaciones SPI al esquema de tu proyecto y configúralo como maestro en modo CPHA = 0, CPOL = 0.
-
Añade una salida digital que será utilizada para la señal de selección del bus SPI. Para el buen funcionamiento de la librería, esta señal tendrá que ser controlada por el código de la librería en lugar de dejar al hardware y a la API que lo hagan. En PSoC 4 puedes hacerlo de dos manera distintas: añadir una salida digital, o reutilizar una de las señales SS del propio módulo SPI. Para utilizar esta última manera, habrá que desconectar la señal SS del módulo SPI del HSIOM (High Speed I/O Matrix). Si no sabes a qué me refiero, mira los ejemplos y consulta el manual de referencia de PSoC 4.
-
Añade los archivos que hay dentro de la carpeta PSoC_FatFs_Library del repositorio a tu proyecto.
-
Si vas a configurar la librería con funciones de escritura y quieres que la fecha y hora de los archivos sean los correctos tendrás que implementar por tí mismo un reloj de tiempo real (más información sobre RTC aquí).
-
Añade los “#includes” necesarios en la parte que corresponda de tu código (mira los ejemplos).
-
Retoca los valores de las macros que hay al principio del archivo “sdcard.c”:
-
SPI_NAME. En esta macro, pon el nombre que le hayas dado al módulo SPI en el esquema de tu proyecto. Gracias a esta macro, si decides cambiar el nombre del módulo SPI en el esquema, no tendrás que retocar los nombres de todas las funciones relativas al bus SPI dentro del código de “sdcard.c”, solo tendrás que cambiar el valor asignado a esta macro.
-
mmSPI_SS_Write(value). Función de la API correspondiente a la línea que hayas utilizado para la señal SS del bus SPI. Ejemplo: supón que añades en el esquema una salida digital a la que llamas SS. La api proveerá una función llamada SS_Write(valor) que permitira, desde el firmware fijar el valor lógico de esa salida. Esta es la función que has de asignar a esta macro. El motivo es el mismo que para la macro anterior.
-
CS_DELAY_US. Retardo en microsegundos desde que se activa la señal SS del bus SPI hasta que empieza el envío de datos.
-
M_DELAY_US. Retardo utilizado internamente en “sdcard.c”.
-