Después de encontrar problemas con el hardware I²C como se describe aquí , decidí probar el software I²C usando las funciones de biblioteca del compilador MPLAB C18. Afortunadamente, las bibliotecas generan una señal atractiva en los pines, pero estoy un poco preocupado por los tiempos que utilizan.
La documentación y los archivos fuente del compilador C18 no dicen explícitamente para qué velocidad de bus y frecuencia del oscilador se establecen los retrasos en las funciones, por lo que me pregunto si hay una mejor manera de ajustarlos que sumergirse en los archivos fuente y calcular a mano el número de retrasos que necesito.
Por lo general, lo que haré es crear una macro que defina la frecuencia de reloj de mi sistema.
#define GetSytemClock() (41666667ul)
Luego cree una macro usando la fórmula en la hoja de datos para calcular la velocidad del reloj.
#define GetSSPBRG(i2c_clk) (((GetSystemClock()/i2c_clk)/4)-1)
Pase la frecuencia de reloj i2c (Hz) que desee a la macro GetSSPBRG() y le proporcionará el valor correcto para el registro SSPxADD.
Inicializar la comunicación requiere verificar todas sus suposiciones. . . Compruebe la integridad de la señal en ambos extremos utilizando dos sondas AB en modo diferencial. Utilice perlas o núcleos de ferrita en modo de comunicación para asegurarse de que ningún ruido de CM perdido se convierta en una señal diferencial. Asegúrese de que la impedancia termine correctamente y que los niveles sean buenos. . ¿El reloj en RTC está sintonizado con mayúsculas? y configurado correctamente? ¿Permitió un reinicio lo suficientemente largo para que el reloj se iniciara? ¿Está funcionando a la velocidad correcta? Verifique ambos extremos y elija algunos patrones de prueba como U = 55h = 01010101 3 = 33h = 00110011 verifique con alcance que está enviando bien.
Luego envíe el comando de llamada general 00h.
Luego pide pizza.
olin lathrop
AndrejaKo
dave
olin lathrop
dave
olin lathrop