PIC12LF1552 I2C; uC no saldrá de la condición de inicio

1

Así que he estado abordando este problema con la integración de la funcionalidad I2C en mi código, que se documenta aquí en StackOverflow: enlace

TLDR: I2C plib no funcionó porque PIC12 no es un PIC18, lo resolví copiando las fuentes y cambiando los registros relevantes, con la esperanza de que funcionara ...

... y ahora me he topado con otro escollo. Cuando el programa intenta abrir una conexión I2C, aparentemente permanece atascado en el método StartI2C() que establece SSPCON2bits.SEN high y, como está comentado en las fuentes copiadas, espera que "se elimine automáticamente por el hardware". Estoy ejecutando esto en el simulador de MPLABX y aquí es donde está atascado, tengo un PICkit3, pero me dice que no puede interrumpir ningún punto, por lo que es inútil para realmente depurar la pieza, así que asumo lo que está sucediendo en el simulador es exactamente lo que está sucediendo en la parte (que es una suposición pobre, pero no tengo nada más en lo que confiar en este momento).

Entonces supongo que hay dos preguntas aquí, ¿el código portado debe ser compatible como está escrito ya que fue escrito para el módulo MSSP que probablemente se copie en muchas de sus partes?

y

Si se supone que el hardware borra el SSPCON2bits.SEN bit automáticamente, ¿por qué no se borra?

Todo el código relevante relacionado con mis envoltorios y la configuración se encuentran en la pregunta vinculada de StackOverflow. Todos los códigos relevantes relacionados con los controladores I2C de Microchip se encuentran en cualquier instalación de MPLABX con XC8 bajo /path/to/xc8/install/directory/version/sources/pic18/plib/i2c/i2c_*.c con el archivo de encabezado dentro de /path/to/xc8/install/directory/version/include/plib/i2c.h .

ACTUALIZACIÓN: Todo el código

  • i2c.h - Código de microchip modificado para PIC12LF1552
    • pastebin.com/wLUJ0xpH
  • i2c.c - Código de microchip modificado para PIC12LF1552
    • pastebin.com/CTEyZETf
  • plur_i2c.h - Mi archivo de cabecera para envolver las funciones I2C de Microchip
    • pastebin.com/HvphrFC8
  • plur_i2c.c - Mi archivo fuente para envolver las funciones I2C de Microchip
    • pastebin.com/F95Kjrzj
  • main.c - Cuerpo principal del código que se ejecutará (no está completo)
    • pastebin.com/NyTkP2pU
pregunta James Lui

1 respuesta

1

No debe asumir que el simulador imita exactamente el hardware real, sin embargo, en este caso puede estar fallando por una razón similar. Si SCL o SDA son bajos durante el inicio, se asume una colisión en el bus, se cancela el inicio, se establece el indicador BCLIF (que genera una interrupción si está habilitado) y se reinicia el módulo MSSP. Si el bus I 2 C está en un estado de colisión permanente y su programa se reintenta continuamente, puede parecer que está "atascado" en ese punto.

SCL y SDA normalmente se mantienen altos con resistencias pullup. En el simulador, ¿cuál es el estado normal de los pines SCL y SDA? En su hardware real, ¿ha comprobado que sus dominadas están en los pines correctos? ¿Qué voltajes están presentes? ¿Ha monitoreado los pines con un osciloscopio o analizador lógico?

Otra posibilidad es que sus archivos de encabezado modificados aún no sean compatibles, y el MSSP no se inicialice correctamente. Puede examinar todos los registros de hardware relevantes en el simulador para verificar que tienen los valores correctos, o publicar su código aquí para que otros lo prueben.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas