Paso 6: Configurar el PIC como un esclavo I²C
Configuración del módulo MSSP de la PIC12LF1840T39AEn nuestro caso, deberemos configurar el PIC12LF1840T39A para actuar como un dispositivo esclavo. Lo primero, que hay que hacer, es configurar el módulo MSSP. La hoja de datos describe este procedimiento en detalle, así como las transacciones.
1. empezar poco detectado.
2. se establece el bit S de SSP1STAT; SSP1IF se establece si la interrupción Inicio detección está activada.
3. coincidencia de dirección con R/W poco clara es recibida.
4. el esclavo tira SDA baja envía un ACK al maestro y establece el bit SSP1IF.
5. software borra el bit SSP1IF.
6. Lee software recibió dirección de SSP1BUF borrar la bandera BF.
7. si SEN = 1; Software de esclavo establece bit CKP para soltar la línea SCL.
8. el maestro relojes a un byte de datos.
9. esclavo conduce SDA baja envía un ACK al maestro y establece el bit SSP1IF.
10. software borra SSP1IF.
11. el software lee el byte recibido de SSP1BUF claro BF.
12. pasos 8-12 se repiten para todos los bytes recibidos del maestro.
13. el maestro envía condición de parada, bit de configuración P de SSP1STAT y el autobús va a marcha lenta.
Vamos a empezar a escribir nuestro programa. A un lado de nuestras configuraciones habituales, como configuración de oscilador, tenemos que dar valores a los registros MSSP:
SSP1STAT = 0 X 80
1 = control de la velocidad de giro para el modo de velocidad Standard (100 kHz y 1 MHz)
0 = deshabilitar SMBus entradas específicas
0 = indica que el último byte recibido o transmitido dirección
0 = parada bit no se detectó el último
0 = Inicio bit no se detectó el último
0 = escribir
0 = dirección no necesita ser actualizado
0 = datos transmiten completa (no incluye los bits ACK y parada), SSP1BUF está vacía
SSP1CON1 = 0X26
0 no = ninguna colisión
0 = no hay desbordamiento
1 = habilita el puerto serial y configura los pines SDA y SCL como la fuente de los pines del puerto serie
1 = desactivar reloj
0110 = modo esclavo I2C, dirección de 7 bits
SSP1CON2 = 0 X 00
0 = dirección de llamada general con discapacidad
0 = reconocimiento recibió
0 = reconocimiento
0 = secuencia de reconocimiento Idle
0 = recibir inactivo
0 = parada condición ociosa
0 = repetido Inicio condición ociosa
0 = reloj de estiramiento está deshabilitado
SSP1ADD = 0X88
1000100 = dirección de 7 bits esclavo
0 = no utilizados
SSP1MSK = 0X0F
Esclavo de enmascaramiento de la dirección, no busca el partido en los primeros cuatro bits
Así que estos son los ajustes que debemos aplicar a nuestro PIC para que funcione como esperamos. Todo esto entra en la rutina de inicialización, antes nuestro bucle infinito.
Una vez hecho esto, tenemos que escribir nuestra escritura, leer, reconocer, negativa reconocer, ralentí, arranque y parada de rutinas. Siempre es una cosa agradable para construir algo desde cero, pero si alguien trabajó con I²C antes y ya tiene sus rutinas favoritas/optimizado - sólo tiene que utilizarlos. He seguido las instrucciones de la hoja de datos, aunque ya había escrito hace un tiempo las funciones de I²C. Comencé desde cero por el instructable.