Librería para el control de displays LED alfanuméricos
basados en el chip VK16K33 I²C para Oshonsoft PIC18
Versión probada con:
• Microcontrolador: PIC18F46K22 @ 64 MHz
• Tarjeta entrenadora: HL-K18
• Entorno de desarrollo: PIC18 Basic Compiler v6.10
Introducción al circuito integrado VK16K33
El VK16K33 es un controlador multifunción para displays LED fabricado por VinKa,
compatible con el conjunto de instrucciones del conocido HT16K33. Integra todos
los elementos necesarios para controlar displays LED multiplexados, incluyendo el
oscilador interno, la memoria de pantalla (Display RAM), el control de brillo mediante
PWM, el parpadeo por hardware y el escaneo de teclados matriciales.
La comunicación con el microcontrolador se realiza mediante el bus I²C, por lo que
únicamente son necesarias dos líneas de comunicación independientemente del
número de dígitos del display.
El circuito integrado puede controlar hasta 128 LED, organizados como 16 salidas
de segmentos × 8 salidas comunes, siendo adecuado para una gran variedad de
módulos comerciales, entre ellos:
• Displays numéricos de 7 segmentos.
• Displays alfanuméricos de 14 y 15 segmentos.
• Matrices LED.
• Paneles de indicadores personalizados.
• Sistemas con teclado matricial.
Una de sus principales ventajas es que el multiplexado del display es realizado
completamente por el propio circuito integrado, liberando al microcontrolador de
esta tarea y reduciendo considerablemente el tiempo de proceso necesario para
mantener actualizado el display.
Particularmente este módulo por defecto se encuentra con la dirección I2C
preestablecida 0x70, tiene 3 puentes (A0, A1 y A2) para cambiar la dirección,
esto permite que se puedan colocar y controlar varios módulos iguales con distinta
dirección en el mismo bus I2C.
Nota: solo he podido encontrar en el mercado módulos compuestos por 4 dígitos
(14 segmentos + punto decimal por dígito), así que las pruebas se realizaron sobre
este formato.
Funcionamiento de la librería
Esta librería ha sido desarrollada específicamente para Oshonsoft PIC18 BASIC.
En lugar de escribir directamente sobre el display, todas las operaciones se realizan
inicialmente sobre una memoria RAM local (VK16K33_RAM) que actúa como framebuffer.
El contenido únicamente se envía al display cuando se ejecuta la función VK16K33_Update().
Este método proporciona numerosas ventajas:
• Actualización completa del display sin parpadeos.
• Posibilidad de modificar varios caracteres antes de refrescar la pantalla.
• Reducción del tráfico sobre el bus I²C.
• Implementación sencilla de efectos de visualización como desplazamientos de texto.
La librería incorpora una tabla con la mayoría de caracteres para displays alfanuméricos
de 14 segmentos más punto decimal, permitiendo representar letras mayúsculas
(minúsculas no implementado), números y los símbolos más habituales.
También incorpora una función de desplazamiento circular de texto de derecha a izquierda.
A diferencia de otros algoritmos de scroll, el primer carácter aparece inmediatamente sobre
el dígito situado más a la derecha y los siguientes caracteres se van incorporando
progresivamente hasta completar el display. Una vez lleno, el desplazamiento continúa
reutilizando los caracteres de la propia cadena, sin insertar espacios ni caracteres adicionales,
obteniendo un desplazamiento continuo y totalmente circular.
Cada llamada a la función de scroll realiza exactamente un único desplazamiento, siendo el
programa principal el encargado de controlar la velocidad del efecto mediante temporizadores
o retardos.
Nota: al usar la función scroll para mostrar información que ocupa más de 4 dígitos hace que
la utilidad del módulo se vea muy ampliada.
Funciones principales de la librería
Inicialización
VK16K33_Init()
Inicializa el controlador VK16K33, activa el oscilador interno, habilita el display,
configura el nivel de brillo por defecto y limpia la memoria de pantalla.
Actualización del display
VK16K33_Update()
Transfiere el contenido completo del framebuffer al display mediante el bus I²C.
Control del display
VK16K33_Clear()
Borra el framebuffer y actualiza el display.
VK16K33_Clear_RAM()
Borra únicamente el framebuffer sin actualizar el display.
VK16K33_Set_Brightness(nivel)
Configura el brillo del display mediante uno de los dieciséis niveles PWM disponibles.
VK16K33_Set_Blink(modo)
Activa o desactiva el parpadeo por hardware del controlador.
Para modo = 0 a 3 (blink: 0 = off, 3 = 2 Hz, 2 = 1 Hz, 1 = 0.5 Hz).
Escritura de caracteres
VK16K33_PutC(caracter)
Escribe un carácter en la posición actual del cursor.
VK16K33_Print(cadena)
Escribe una cadena ASCII completa.
VK16K33_DpMode(bit)
Trata el "." como punto decimal, no ocupa digito.
VK16K33_PadLeft(" ", ByRef String)
Rellena una cadena por la izquierda con el carácter indicado hasta completar
los 4 dígitos del display.
El número de dígitos se establece mediante la constante de librería VK16K33_Digits.
Resulta útil para alinear valores a la derecha o añadir ceros/espacios iniciales.
Gestión del cursor
VK16K33_Cursor(posición)
Selecciona la posición donde se escribirá el siguiente carácter.
VK16K33_CursorHome()
Sitúa el cursor en el primer dígito del display.
Desplazamiento de texto
VK16K33_ScrollReset()
Reinicia el motor de desplazamiento para comenzar una nueva cadena.
VK16K33_ScrollLeft(cadena)
Realiza un único desplazamiento circular de derecha a izquierda.
Durante las primeras llamadas el display se va completando progresivamente desde la derecha.
Una vez ocupado por completo, el desplazamiento continúa reutilizando los caracteres de la propia
cadena, generando un efecto continuo sin añadir espacios ni caracteres artificiales.
Aplicaciones
Gracias a la sencillez de la interfaz I²C y al multiplexado interno realizado por el VK16K33,
esta librería resulta especialmente adecuada para:
• Relojes digitales.
• Frecuencímetros.
• Voltímetros y amperímetros.
• Termómetros.
• Instrumentación electrónica.
• Automatización industrial.
• Domótica.
• Paneles informativos.
• Indicadores alfanuméricos de propósito general.
El reducido tiempo de proceso requerido permite utilizar esta librería incluso en microcontroladores
PIC de gama básica con módulo MSSP configurado en modo I2C, dejando prácticamente toda la
capacidad de proceso disponible para la aplicación principal.
Archivos adjuntos:
Main_Test_VK16K33_I2C.bas: Archivo de test
VK16K33_I2C.bas: Librería para controlar el display
_I2CLib.bas: Librería I2C por hardware
_Pic18F46K22Lib.bas: Facilita la configuración del Pic.