Hola lista.
Este circuito y programa que presento está basado en un PIC16F877 y permite seleccionar mediante un solo pulsador un carácter cualquiera de las 27 letras del alfabeto (incluyendo guion y ESPACIO) y visualizarlo en un LCD de 2 x 16 lineas. De esta manera, puede escribirse un mensaje de hasta 32 caracteres en el LCD, seleccionando letra por letra del mismo.
El circuito esta compuesto por una matriz de leds de 4 filas y 7 columnas. Cada led representa un carácter alfabético. Pueden ver si lo simulan, que el circuito comienza escaneando fila por fila de la matriz (las filas van iluminándose una tras otra de arriba hacia abajo).
Con el primer click en el pulsador puede seleccionarse la fila donde se encuentra el carácter buscado. Luego del click en el pulsador, el circuito pasa a escanear la fila elegida (celda por celda, van iluminándose los leds de esa fila, de izquierda a derecha). Cuando se ilumina la celda correspondiente al carácter deseado, con un segundo click en el pulsador, el carácter parpadea (para denotar que ha sido seleccionado) y se visualiza en el LCD.
Luego el circuito continua con el escaneo fila por fila, como al principio.
El programa funciona bien, salvo dos detalles muy importantes que no logro subsanar:
-el display, luego de completada la escritura de sus dos lineas, no se limpia como debería para permitir seguir escribiendo en el.
-la simulacion con el Proteus me tira decenas de mensajes con el texto STACK OVERFLOW EXECUTING CALL INSTRUCTION y STACK OVERFLOW EXECUTING RETURN INSTRUCTION. Supongo que se debe a algún problema en los llamados a las subrutinas correspondientes (estimo que son errores en el incremento del PCL y/o del PCLATH). Al respecto, he probado utilizar las instrucciones PAGESEL, lgoto y lcall para que puedan encontrarse las subrutinas sin problemas, estén en donde estén en la memoria de programa, pero no he tenido éxito.
Agradecería que alguien me ilumine al respecto.
Cordial saludo.
Este circuito y programa que presento está basado en un PIC16F877 y permite seleccionar mediante un solo pulsador un carácter cualquiera de las 27 letras del alfabeto (incluyendo guion y ESPACIO) y visualizarlo en un LCD de 2 x 16 lineas. De esta manera, puede escribirse un mensaje de hasta 32 caracteres en el LCD, seleccionando letra por letra del mismo.
El circuito esta compuesto por una matriz de leds de 4 filas y 7 columnas. Cada led representa un carácter alfabético. Pueden ver si lo simulan, que el circuito comienza escaneando fila por fila de la matriz (las filas van iluminándose una tras otra de arriba hacia abajo).
Con el primer click en el pulsador puede seleccionarse la fila donde se encuentra el carácter buscado. Luego del click en el pulsador, el circuito pasa a escanear la fila elegida (celda por celda, van iluminándose los leds de esa fila, de izquierda a derecha). Cuando se ilumina la celda correspondiente al carácter deseado, con un segundo click en el pulsador, el carácter parpadea (para denotar que ha sido seleccionado) y se visualiza en el LCD.
Luego el circuito continua con el escaneo fila por fila, como al principio.
El programa funciona bien, salvo dos detalles muy importantes que no logro subsanar:
-el display, luego de completada la escritura de sus dos lineas, no se limpia como debería para permitir seguir escribiendo en el.
-la simulacion con el Proteus me tira decenas de mensajes con el texto STACK OVERFLOW EXECUTING CALL INSTRUCTION y STACK OVERFLOW EXECUTING RETURN INSTRUCTION. Supongo que se debe a algún problema en los llamados a las subrutinas correspondientes (estimo que son errores en el incremento del PCL y/o del PCLATH). Al respecto, he probado utilizar las instrucciones PAGESEL, lgoto y lcall para que puedan encontrarse las subrutinas sin problemas, estén en donde estén en la memoria de programa, pero no he tenido éxito.
Agradecería que alguien me ilumine al respecto.
Cordial saludo.
Adjuntos
Última edición: