Estoy tratando de recibir mensajes CAN de un radar, cuya especificación define los siguientes datos para la sincronización de bits:
CAN baudrate = 250 kBaud
Tseg1 = 8
Tseg2 = 7
Tsjw = 4
Synchronization on one edge only.
Estoy usando un cristal de 16 MHz en el clásico MCP2515 (Controlador CAN) + MCP2551 (Transceptor CAN) configuración que utilizo entre el bus CAN y un Arduino Uno Pero creo que estoy teniendo algunos problemas al establecer la configuración de la sincronización de bits en el MCP2515.
Esto se debe a que el uso de una frecuencia de reloj de 16 MHz limita el tiempo de quanta por bit a 16. Estoy usando el MBtime para verificar la sincronización de los bits.
1 time quanta synchronization segment
+ 1 time quanta propagation delay
+ 8 time quanta phase segment 1
+ 7 time quanta phase segment 2
----------------------------
= 17 time quanta
Que es uno más que el requerido (16). Siendo el segmento de sincronización siempre uno, y el de propagación al menos uno, ¿cómo es posible hacerlo funcionar con los parámetros requeridos?
Mis ideas son utilizar otro cristal, tal vez 18 o 20 MHz. (De hecho, lo intenté con 20 MHz y un retardo de propagación de cuatro cuanta, y no funcionó).
Sin embargo, utilizando un convertidor de CAN a USB en mi PC, recibí con éxito las tramas CAN que esperaba del radar. Configuré los mismos ajustes (Tseg1, Tseg2, SJW y velocidad en baudios). Y este convertidor utiliza un cristal de 16 MHz...
¿Hay algo que se me escapa? ¿Debo cambiar la frecuencia del oscilador a otro valor?