Paso 7: Implementar las rutinas de I²C
Es muy importante recordar que estamos hablando de un dispositivo esclavo aquí, vamos a tener en cuenta.
Si decides escribir funciones para esto, estas son las funciones que debe implementar.
void AckI2C (void) Esta función es responsable de establecer el bit ACK y enviarlo. Reconocer se envía para cada byte, que fue recibido con éxito por nuestros esclavos
void IdleI2C (void)
Hace que el autobús va inactivo
void CloseI2C (void) Se cierra el bus I²C, ninguna transmisión adicional se hace, no hasta que un OpenI2C() se llama
unsigned char ReadI2C (void)
Lee el bus y devuelve el valor que recibe
unsigned char DataRdyI2C (void)
Señales de una transacción de información
unsigned char WriteI2C (unsigned char)
Escribe un byte en el bus I²C
anular OpenI2C (unsigned char, unsigned char)
Abre y configura el módulo MSSP para comunicaciones I²C
Como ya dije, va a utilizar la hoja de datos breve para hacer este trabajo: habilitar interrupción SSP1 y tratar todo I²C en la rutina de servicio de interrupción. Ya que esta aplicación no es crítico, esto no nos da muchos problemas. Echale mi rutina de servicio de interrupción que se encarga de la comunicación I²C:
He hecho algunos recortes de comunicación con mi analizador lógico:
Ser feliz con ver este trabajo, he enviado el número 6500 a través del I²C a otro PIC, cortó en dos pedazos.
6500 es 1964h en hexadecimal, esto es lo que nosotros debemos ver cuando llena el progressbar. Y es un partido!
Punto en otra vez! Tuve que cortar en dos piezas, para hacerlos más fáciles de ver, hay decenas de microsegundos entre las transmisiones de dos datos.
Una paquete como la representación del intercambio de datos:Una imagen de la Junta mostrando las cosas le mando:
El PICKIT es el suministro de corriente al circuito. Recuerdo leer sobre él, de que la corriente máxima que puede proporcionar es alrededor de 30 mA. Digo, que es un consumo bastante bueno para un circuito con 32 LEDs!
Hecho esto, tenemos una foto, que responde a comandos de I²C. Se utilizará el nuevo periférico que acaba de crear en nuestra cinta de medición ultrasónico.