Hola Bruno, estupenda librería. Gracias por compartirla.
He adaptado tu librería para trabajar con un 16f628a a 20mhz: cambio fuses, tris y demás.
También, estoy usando 74hc595 envés de 4094 como en la simulación.
Uso una matriz 8x8 de color rojo donde las filas tienen en común los anodos y las columnas tienen en común los catodos: para esto solo basto poner:
#define FILAS_ANODO TRUE //establece si las FILAS controlaran los anodos en comun de los LEDs
#define COLUMNAS_CATODO TRUE //establece si las COLUMNAS controlaran los catodos en comun de los LEDs
Me e dado cuenta que hay veces que el mensaje no se desplaza y esto ocasiona un feo efecto. Investigando, el problema viene por la función efecto_rota_izq(). Dentro de esta funcion, cuando la condición "if(ProximoElementoLetra())" devuelve false, es cuando no se desplaza las letras.
No se exactamente a que se debe este problema, seguro tu lo sabes más, de todas formas seguiré estudiando tu codigo. Por el momento, he resuelto este feo efecto agregando unas lineas de codigo alfnal de esta función, quedando así:
void efecto_rota_izq()
{
if(ProximoElementoLetra()) //intentar obtener proximo elemento de la lectra actual...
{
if(++BufferInicio >= COLUMNAS) BufferInicio=0; //rotar...
if(BufferInicio>0) efAux1= BufferInicio-1; else efAux1=COLUMNAS - 1; //calcular la ultima columna actual...
buffer[efAux1] = letraData; //e inyectarle el valor leido
}else{
//buffer[efAux1] = 0; //inyectarle 0
if(!nuevoEfecto) archivoPosicionActual++;
nuevoEfecto = FALSE;
if(demo[archivoPosicionActual] == 0) archivoPosicionActual = 0;
CargarLetra(demo[archivoPosicionActual]);
// ESTO HE AGREGADO ///////////////////////////////////////////////////////////////////////////////////////////////////
if(++BufferInicio >= COLUMNAS) BufferInicio=0; //rotar...
if(BufferInicio>0) efAux1= BufferInicio-1; else efAux1=COLUMNAS - 1; //calcular la ultima columna actual...
buffer[efAux1] = 0;
}
}
Saludos.