Hola intelectuales Sres taringueros:
Comento que he estado realizando unas rutinas para controlar una pantalla clonica tipo HD44780 de 16x2.
El asunto es que necesitaba saber como funcionan, por lo cual no quise usar librerías. La idea es aprender como funcionan en profundidad y así poder trabajar con distintos protocolos en el futuro.
Monté el siguiente esquema:
y mediante SDCC me puse a escribir las rutinas en C.
Para programar con mi pickit, usé el programa PK2CMD el cual sirve para programar pics en linux.
No voy a mostrar las rutinas escritas directamente puesto que la idea es que se entienda como funcionan y no dar mucho en bandeja.
Estas pantallas pueden trabajar en dos modos: 4 bits y 8 bits. en el caso de 4 bits, se deben usar los pines D4...D7 quedando los demás D0...D3 aterrizados.
para iniciarlas se deben enviar los siguientes comandos
Estos comandos se deducen de la tabla que viene en el datasheet del 44780
Para escribir un comando o un datos se usa básicamente la misma rutina con la salvedad de poner un pin llamado RS = 0 para comandos y RS=1 para datos.
En el caso de trabajar en modo 4 bits. Se debe copiar primero el nibble de mayor peso activar el pin E=1 y luego de unos mili segundos apagar el pin E=0
luego se pone en el puerto el nibble de menor peso y se activa nuevamente E=1, una espera y E=0
Dejo un diagrama improvisado de esta rutina
Para cuando se necesite escribir un carácter o una cadena de texto, es importante darle unas coordenadas previas para saber donde se desplegará en pantalla. por lo cual se puede implementar una rutina tipo setXY.
EN la imagen se puede ver como la primera linea usa el comando 0x80 donde el cero indica primera posición, 0x81 la segunda, 0x82 la tercera....etc
Para la segunda fila el comando es 0xC0.....0xCn
Cuando queramos escribir una cadena de texto directamente, podemos pasar un arreglo de caracteres y luego detectar el final del carácter gracias al símbolo ' 0'
El resultado seria:
Como dato extra.... encontré en una feria de pulgas, una pantalla original pero de 16x1
Al querer escribirla, llega hasta la mitad y después cero letras.
El detalle es que al llevar un solo chip, quedan limitadas las posibilidades de manejar muchas columnas, entonces mapearon el asunto como si fuera una pantalla de 8x2, y esto causa que para escribir en la celda #9 se debe usar el comando de segunda fila 0xC0.
Para el resultado de escribir números como caracteres y poder tratarlos matemáticamente, se puede usar el truco de sumarle un carácter "0" (cero) al numero y así queda "casteado" para ingresar como carácter.
Pero bueno, seguiré trabajando en esto para lograr importarla en otros proyectos y asi usar mis propias librerías.
aquí mi mascota cuidando unas pantallas que tengo para seguir investigando
Saludos Sres Taringueros y espero que las personas que sepan mas del asunto, dejen tips y los que saben menos, pregunten para que así nos ayudemos todos a pensar (no comparto la idea de pasar códigos enteros y usarlos sin pensar)
Comento que he estado realizando unas rutinas para controlar una pantalla clonica tipo HD44780 de 16x2.
El asunto es que necesitaba saber como funcionan, por lo cual no quise usar librerías. La idea es aprender como funcionan en profundidad y así poder trabajar con distintos protocolos en el futuro.
Monté el siguiente esquema:
y mediante SDCC me puse a escribir las rutinas en C.
Para programar con mi pickit, usé el programa PK2CMD el cual sirve para programar pics en linux.
No voy a mostrar las rutinas escritas directamente puesto que la idea es que se entienda como funcionan y no dar mucho en bandeja.
Estas pantallas pueden trabajar en dos modos: 4 bits y 8 bits. en el caso de 4 bits, se deben usar los pines D4...D7 quedando los demás D0...D3 aterrizados.
para iniciarlas se deben enviar los siguientes comandos
Estos comandos se deducen de la tabla que viene en el datasheet del 44780
Para escribir un comando o un datos se usa básicamente la misma rutina con la salvedad de poner un pin llamado RS = 0 para comandos y RS=1 para datos.
En el caso de trabajar en modo 4 bits. Se debe copiar primero el nibble de mayor peso activar el pin E=1 y luego de unos mili segundos apagar el pin E=0
luego se pone en el puerto el nibble de menor peso y se activa nuevamente E=1, una espera y E=0
Dejo un diagrama improvisado de esta rutina
Para cuando se necesite escribir un carácter o una cadena de texto, es importante darle unas coordenadas previas para saber donde se desplegará en pantalla. por lo cual se puede implementar una rutina tipo setXY.
EN la imagen se puede ver como la primera linea usa el comando 0x80 donde el cero indica primera posición, 0x81 la segunda, 0x82 la tercera....etc
Para la segunda fila el comando es 0xC0.....0xCn
Cuando queramos escribir una cadena de texto directamente, podemos pasar un arreglo de caracteres y luego detectar el final del carácter gracias al símbolo ' 0'
El resultado seria:
Como dato extra.... encontré en una feria de pulgas, una pantalla original pero de 16x1
Al querer escribirla, llega hasta la mitad y después cero letras.
El detalle es que al llevar un solo chip, quedan limitadas las posibilidades de manejar muchas columnas, entonces mapearon el asunto como si fuera una pantalla de 8x2, y esto causa que para escribir en la celda #9 se debe usar el comando de segunda fila 0xC0.
Para el resultado de escribir números como caracteres y poder tratarlos matemáticamente, se puede usar el truco de sumarle un carácter "0" (cero) al numero y así queda "casteado" para ingresar como carácter.
Pero bueno, seguiré trabajando en esto para lograr importarla en otros proyectos y asi usar mis propias librerías.
aquí mi mascota cuidando unas pantallas que tengo para seguir investigando
Saludos Sres Taringueros y espero que las personas que sepan mas del asunto, dejen tips y los que saben menos, pregunten para que así nos ayudemos todos a pensar (no comparto la idea de pasar códigos enteros y usarlos sin pensar)