Paso 4: Software
A continuación los enlaces de software. Aunque está dirigido para el 12F683, fácilmente es portado a versiones más grandes de la PIC. Sobre todo requiere cambiar nombres como TRISIO TRISA y GPIO a PORTA. Usted también tendrá que cambiar la línea que identifica la versión de PIC (lista =) y el archivo de inclusión, pero los cambios intuitivas. La línea __CONFIG también necesite ajustar sólo porque uno o dos de las etiquetas utilizadas se deletrean diferentemente en algunos de los archivos de inclusión. Sólo asegúrese de que el PIC que uso tiene un pasador que permite una entrada de interrupción externa (generalmente denominada EXT). Como hemos visto antes, la 16F688 (14 pines PIC) podría utilizarse con las mismas conexiones pin físico como el 12F683, si quieres más pines de I/O.
El software es básicamente el mismo código que fue escrito para la interfaz de LCD 4 bits en el episodio 12. Los cambios principales están en los bytes de datos son qué salida para la interfaz serial y en cómo el PIC maneja el protocolo I2C. Las rutinas I2C fácilmente encontradas en internet pero, como con muchas cosas en internet, tenían que ser inspeccionado para asegurarse que siguieron las especificaciones. Un error que encontré fue en el final de la rutina de "i2cwaitack" donde el pin SDA era retroceder a una salida antes de la línea SCL fue traído bajo para completar el ciclo de reloj. Potencialmente podría tener el PIC (maestro) y el dispositivo esclavo intentando conducir la línea SDA en el mismo tiempo. La rutina obviamente ha trabajado para otras personas pero no hace lo correcto.
El módulo I2C tiene una serie de 8 bits a registro de cambio paralelo construido en conexión con la pantalla LCD. Las definiciones de bits se muestran en el diagrama anterior. Los cuatro bits superiores conectan a las líneas de cuatro datos superior en la pantalla, al igual que en un típico interfaz de LCD 4 bits. Los cuatro bits inferiores están conectados a varios pines de control en la pantalla LCD. En una LCD normal interfaz estos pines de control cualquiera sería duro con cable (como R/W) o controlar con una línea GPIO en el PIC. El control de contraluz no tendrá algún efecto para muchos módulos LCD porque la retroiluminación es generalmente difícil por cable en.
En interfaces de LCD normales la línea enable activa alto y luego baja para hacer la pantalla para los datos de cierre. En esta aplicación manejamos esa transición enviando dos veces cada byte. El primer envío tiene el conjunto de habilitar bits alto y el segundo envío tiene el enable bit bajo. Para una interfaz normal de 4 bits que tenemos que hacer dos envía para cada octeto porque enviamos el nibble superior y luego el nibble bajo. La pantalla LCD entonces piezas dos picadas juntos internamente. Para el I2C aplicación realmente terminamos haciendo cuatro envía para cada byte. Tipo de ineficientes, pero que es el precio que pagamos por un interfaz de dos hilos.
Como he mencionado anteriormente, hice un pequeño arreglo a la rutina de "i2cwaitack" que encontré en línea. También he añadido un pequeño código con el fin de la rutina. Si el esclavo no reconoce a una transferencia del maestro entonces el software se restablecerá habilitando el Watch Dog Timer (WDT). Nuevas fichas PIC tienen un comando de restablecimiento de software que puede utilizarse en su lugar. Una alternativa para algunas aplicaciones de I2C sería simplemente hacer una llamada a "i2cstop" y luego continuar donde lo dejó el código.
Bueno, eso es para el episodio 22 de diversión con PIC "montaje". Estad atentos para más episodios.