PIC como identificador de tramas CAN

Para la programación del PIC como emisor de tramas, hemos programado el microcontrolador empleando la librería existente sobre el bus CAN de alta velocidad (según norma ISO 11898) y el conexionado al módulo MCP2515.

Identificador CAN

 

Hemos realizado dos versiones de PIC identificador de tramas: una con una pantalla LCD con integrado I2C y otra con una pantalla OLED integrada en los pines digitales 2 a 7 del PIC.

Las GPIOs 10, 11, 12 y 13 están reservadas para el conexionado con el integrado MCP2515 de igual forma que en los apartados anteriores.

Identificador CAN

El scketch se ha programado de forma que en pantalla indique los parámetros correspondientes a la trama recibida a través del bus al que esté conectada la unidad. Los parámetros son:
   
LCD
 
Sólo se muestran valores en pantalla cuando se detecta una trama en el bus (imagen b), permaneciendo la pantalla en reposo si el bus se encuentra en reposo (imagen a).

OLED


El mismo sketch puede emplearse con una ligera modificación para obtener datos del vehículo a través del conector de diagnosis EOBD. Para ello sólo es necesario añadir al sketch, en la función loop(), una línea que solicite el dato que se desea (PIC, según SAE). Para ello emplearemos el identificador 0x7DF y el campo de datos será {0x02. 0x01. 0xXX. 0x00. 0x00. 0x00. 0x00. 0x00}, siendo XX el valor del byte 3 correspondiente al dato de la información (PID, en ingles Performance Information Data) que se pretende obtener (velocidad, temperatura, velocidad de giro del motor,…).

Los valores de los bytes del campo de datos de la trama de envío para los distintos PID según la norma SAE pueden consultarse en el siguiente enlace:
[PID SAE Wikipedia]


La trama de respuesta obtenida presenta el ID 0x7E8 y su campo de datos se decodifica según el enlace anterior para cada PID.

Un ejemplo de datos obtenidos con este montaje puede observarse en la siguiente imagen, para un valor de temperatura del aire de 19 ºC (obtenido del valor decimal del byte 4 tras la correspondiente decodificación).

Trama de temperatura aire



Identificando en el sketch la respuesta para cada PID recibido y tratando cada dato podremos establecer un entorno de obtención de información más "amigable". En el siguiente enlace mostramos un breve vídeo en el que se observa el conexionado del microcontrolador al conector EOBD a través del módulo MCP2515 y la obtención de la información solicitada al vehículo.

[Vídeo de obtención de PIDs]


Otra funcionalidad que nos permite el uso de los PIDs consiste en la implementación del microcontrolador en el bus CAN del vehículo para equipar un cuadro de instrumentos digital en el vehículo. El cuadro digital diseñado muestra los valores usuales de un cuadro de instrumentos: valores numéricos de velocidad (en km/h) y temperatura del refrigerante (en ºC) y revoluciones por minuto del motor mediante un indicador a través de una barra gráfica.

Cuadro digital LCD


El montaje utilizado es idéntico al empleado de la obtención de PIDs y el sketch empleado, también similar al del apartado anterior, solicita de forma cíclica y mediante el identificador 0x7DF y el byte 3, la información a mostrar en pantalla simultáneamente mediante los PIDs 0x05, (temperatura motor) 0x0C (rpm) y 0x0D (velocidad).

En el siguiente enlace mostramos un breve vídeo en el que se observa el funcionamiento de la pantalla.

[Vídeo de cuadro digital mediante LCD]



[Sketch del identificador CAN con LCD para IDE de Arduino]
[Sketch del identificador CAN con OLED para IDE de Arduino]
[Sketch de identificador CAN a demanda en EOBD para IDE de Arduino]
[Sketch de cuadro digital CAN mediante EOBD para IDE de Arduino]
[Librería Wire]
[Librería LiquidCrystal_I2C]
[Librería Adadfruit_GFX]
[Librería Adafruit-SSD1331]
[Librería SPI]
[Librería mcp_can]