Paso 5: Software
A continuación los enlaces de software. Mientras que son objeto de la 16F1847, son fácilmente portadas 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. Las líneas __CONFIG también pueden necesitar ajustar sólo porque uno o dos de las etiquetas utilizadas se deletrean diferentemente en algunos de los archivos de inclusión. Los requisitos más grandes son bastantes puertos de la entrada-salida, hay suficiente memoria de programa y capacidad direccionamiento indirecto de 16 bits.
Como vimos en la descripción de la pantalla LCD tiene la capacidad de ser tratado en un modo serial o de un modo paralelo. En el modo paralelo puede ser un poco 4 o una interfaz de 8 bits al igual que el LCD 1602. Ya que necesitaba actualizar el PIC para obtener la capacidad necesaria de direccionamiento indirecta que terminé con suficientes líneas de E/S para hacer fácilmente una interfaz paralela de 8 bits. También he creado una versión que funciona con el cambio de registro interfaz que detallada en episodio 1. Ambos archivos de montaje se incluyen a continuación.
Hay algunas otras diferencias significativas entre los 16F1847 y las fotos más que hemos estado utilizando. En primer lugar, el oscilador interno en las fotos antiguas sólo subirían a 8 Mhz. Que ha sido más de lo suficientemente rápido como para estos proyectos poco pero siempre es bueno tener una pequeña potencia extra disponible si alguna vez lo necesita. Oscilador interno de 16F1847 puede subir a 16 Mhz su propio y hasta 32 Mhz por sacrificar a una de las capacidades internas. Otra diferencia importante es que hay un montón de nuevos registros en el 16F1847 que significa que algunos de los que necesitamos no en Bank0 o Banco1. Es más importante para asegurar que tenemos el Banco correcto seleccionado en el acceso a los registros. Un nuevo conjunto de registros que no usamos aquí pero que puede ser muy útil son los registros LATA y LATB. Estos son registros de cierre que contenga el valor último que fue escrito a PORTA o PORTB. Puedes leer que la LAT se registra directamente si desea realizar una operación de leer-modificar-escribir. Usted también notará que hay dos líneas de "_CONFIG". Eso es porque todas las nuevas opciones requieren dos registros de configuración. Es muy importante asegurarse de que usted consigue las derecha opciones asociadas con el registro de configuración correcta porque MPLAB no esta bandera como un error. Aprendí la manera dura.
El selector que se muestra en el esquema consigue leer en tiempo de inicialización para determinar si debe mostrarse el texto o la imagen de gráficos. Cambiar el interruptor mientras esté en funcionamiento no cambiará a la otra pantalla. Necesita apagar, cambiar el interruptor, luego encender otra vez. Recuerde, esta es sólo la configuración de la demo. Las rutinas de llamada para mostrar texto básicamente son los mismos que utilizamos para el LCD 1602. La primera diferencia es que tenemos cuatro rutinas para cuatro líneas en lugar de dos. La segunda diferencia es que las direcciones a partir de las líneas son ligeramente diferentes.
El modo de gráficos requiere que usemos el "conjunto de instrucciones extendido". Suena aterrador, pero realmente no es. Qué es en realidad un poco más difícil es cómo abordar la memoria gráfica. La primera diferencia es que nos centramos en la memoria como una matriz así que tenemos que enviar las coordenadas verticales y horizontales de la memoria para escribir. La especificación habla de direcciones verticales y horizontales pero que puede resultar un poco confuso. En efecto, vertical equivale a fila y horizontal equivale a la columna. Puesto que estamos enviando un byte a la vez, hay 16 bytes por fila, que equivale a 128 bits (pixeles). Hay un total de 64 filas, pero la memoria no es totalmente contigua. Se divide en mitades superior e inferior, cada uno con 32 filas de 16 columnas. En la parte superior la mitad de las columnas siempre comienzan con dirección 80h. En la parte inferior la mitad de las columnas siempre comienzan con dirección 88h. La dirección de filas de 80h a 9Fh en ambas mitades. Usted puede entrar en problemas intentando enviar una dirección de columna que no sea de 80 h para que el método seguro es siempre escribir una fila completa de 16 bytes. Si intenta escribir sólo una parte de una fila que usted tendrá que enviar dos bytes de datos por la dirección. La lógica de LCD almacena 16 pedacitos por el espacio de la memoria.
Internamente, la pantalla LCD incrementará automáticamente la dirección horizontal (columna) cada vez que recibe datos y automáticamente volverá a 80h o h 88 según la cual la mitad de la pantalla nos dirigimos a. La dirección vertical (fila) no se incrementará automáticamente. El software necesita hacer un seguimiento de la dirección de la fila real pero también realiza un seguimiento del número de bytes escritos por fila para saber cuándo se debe actualizar la dirección de la fila. En nuestro ejemplo enviamos una fila completa de datos y luego envíe una actualización de dirección cuando cambiamos a una nueva fila. También utilizamos la dirección de la fila para saber cuándo reinicializar las direcciones para la parte inferior de la mitad de la pantalla.
Vimos antes que definimos cada línea de datos hexadecimal con la Directiva de "datos". En este caso los datos realmente se escribirá en la memoria de programa cuando programa el chip. Esto es un poco diferente de nuestros métodos anteriores del uso de tablas de búsqueda donde utilizamos los comandos "RETLW" para devolver el valor deseado. En nuestro ejemplo actual lo único que queremos leer una ubicación de memoria específica que utilizaremos una forma diferente de direccionamiento indirecto para llegar allí. Esta es una de las razones para usar un chip PIC más nuevos. Proporciona más de sólo 8 bits de direccionamiento indirecto. El software muestra realmente tiene dos tablas de gráficos, cada uno que requiere 1 byte k de espacio de memoria de programa. Para cambiar la visualización de gráficos necesita cambiar dos líneas de código en la rutina de "Do_Graph" para que apunte a "Foto1" o "Foto2".
Una cosa importante a tener en cuenta al crear los gráficos tablas de datos en nuestro programa de ejemplo es que debe empezar en un límite de página (xx00h) y debe contener exactamente 1024 bytes. Cada tabla es etiquetado por separado y da una dirección específica (la declaración de código). Mientras que la definición de cada código tiene una etiqueta, no es la etiqueta que usamos en el programa. Las etiquetas utilizadas en el programa son "Foto1" y "Foto2" que preceden directamente sus respectivas líneas de datos.