Paso 2: Software
El enlace de software se enumera a continuación. Mientras que se destina a la 16F688, fácilmente se adaptó a otras versiones de la foto. Usted necesitará 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.
Como se mencionó en la sección de hardware, la pantalla LCD se inicia en el modo de 8 bits y debe ser mandada al modo de 4 bits. Si nos fijamos en la sección de inicialización de LCD que se verá que los primeros cuatro comandos son enviados mientras la pantalla está en modo de 8 bits. Porque la pantalla verá los motivos en las líneas inferiores de cuatro datos, enviamos solamente el nibble superior de los datos. Por ejemplo, en la versión de interfaz de 8 bits sería enviar bytes hexagonales 30, 30, 30 a la pantalla que queremos reiniciarlo. En la versión de 4 bits enviamos hexagonal muerde 3, 3, 3 pero la pantalla LCD ve 30, 30, 30. El cuarto nibble que enviamos es 2 que ve en la pantalla LCD 20. Esto lo dice para cambiar el modo de 4 bits. Después de que el punto necesitamos enviar cada byte de datos como un par de mordiscos y la pantalla LCD será unirlas internamente antes de procesarlos. El resto de los comandos de inicialización tiene los mismos valores que en la versión de 8 bits salvo que enviamos 28 en lugar de 38 para la función de comando. Eso es porque "2" significa modo de 4 bits, mientras que "3" significa modo de 8 bits.
Porque tenemos que enviar cada octeto como consecutivos mordiscos añadimos unas pocas líneas de código a la rutina de "Write_LCD". La pantalla LCD espera el nibble superior primero así que hacer un swap de nibble para poner el nibble superior en los cuatro bits inferiores y luego enmascare los cuatro bits superiores. Cuando nos envía el nibble inferior no hacer el swap y simplemente enmascare los cuatro bits superiores. Bastante cambios sencillos pero durante mucho tiempo que no pude conseguir que correctamente Mostrar mis mensajes de datos. Pensé que algo debe estar mal con la rutina de "Write_LCD" pero lo confuso es que la rutina funcionado bien al enviar los comandos de inicialización. Sólo desordenado cuando intenté cambiar la pantalla a modo de entrada de datos. Lo que yo finalmente se estableció en una solución fue añadir un retraso 50us justo antes del pulso de activar que dice la pantalla LCD para capturar el primer nibble. Una vez lo conseguí trabajando he probado menos retardo (trabajó para sobre 25us). También probé poniendo el retraso antes de activar el segundo nibble pero no funcionaba. Curiosamente, ha funcionado poniendo el retraso dentro el primer pulso de activación. Fregó la especificación para el chip del controlador Hitachi LCD pero no encontraron nada que explicó la necesidad de la demora extra – sólo en modo de datos, y sólo mientras se tramita el primer nibble de cada byte. Simplemente dijo que usted debe comprobar la "bandera de ocupado" después de cada pieza de datos enviado pero que requiere la complejidad de la pantalla LCD para leer modo de conmutación. Resulta que los millones de ejemplos en la web fueron de ninguna ayuda tampoco y muchos de ellos me dejó preguntándome si realmente trabajaron como escrito. Tengo varias versiones diferentes de la pantalla LCD, así que no parece ser una anomalía en uno de ellos. Todavía me esta volviendo a un poco loco no saber "por qué".
En aras de la exhaustividad, debo mencionar que los tres primeros comandos "Set de función especial" (el 3, 3, 3) probablemente no son necesarios. Si la pantalla LCD enciende correctamente entonces la especificación dice que usted puede ir directamente a enviar el comando para el modo de 4 bits. No sobra para dejar ésos primer set de comandos ahí y pueden ayudar si el LCD no se enciende correctamente en ocasiones. Por eso les puse allí. Bueno, eso es para el episodio 12 de la "Diversión con foto montaje". Estad atentos para más episodios.