El circuito es el mismo que se ha utilizado en la versión sin RTOS, y el único cambio es el mencionado sistema operativo, el cual nos ha dado mejores resultados tras la ejecución.
El código fuente es el siguiente:
#include<16F883.h>
#use delay(int=4000000)
#fuses XT,NOWDT
#use rtos(timer=0,minor_cycle=1ms)
//Definicion de variables
int fila[5],letra=0;
//Definicion de la primera tarea (sensado de columnas)
#task(rate=1ms,max=1ms)
void funcion1();
//Definicion de la segunda tarea (barrido de caracteres)
#task(rate=30ms,max=1ms)
void funcion2();
//Inicio del programa
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
rtos_run();
}
//Funcion de sensado de columnas
void funcion1(){
output_a(0b00000001);
output_c(~fila[0]);
delay_ms(10);
output_a(0b00000010);
output_c(~fila[1]);
delay_ms(10);
output_a(0b00000100);
output_c(~fila[2]);
delay_ms(10);
output_a(0b00001000);
output_c(~fila[3]);
delay_ms(10);
output_a(0b00010000);
output_c(~fila[4]);
delay_ms(10);
}
//Funcion de muestreo de caracteres
void funcion2(){
switch(letra){
case 0: fila[0]=0b01000001;
fila[1]=0b01000001;
fila[2]=0b01001001;
fila[3]=0b01001001;
fila[4]=0b01111111;
letra++;
break;
case 1: fila[0]=0b00000001;
fila[1]=0b00000001;
fila[2]=0b00000001;
fila[3]=0b00000001;
fila[4]=0b01111111;
letra++;
break;
case 2: fila[0]=0b01000001;
fila[1]=0b01000001;
fila[2]=0b01001001;
fila[3]=0b01001001;
fila[4]=0b01111111;
letra++;
break;
case 3: fila[0]=0b01000001;
fila[1]=0b01000001;
fila[2]=0b01000001;
fila[3]=0b01000001;
fila[4]=0b00111110;
letra++;
break;
case 4: fila[0]=0b01000000;
fila[1]=0b01000000;
fila[2]=0b01111111;
fila[3]=0b01000000;
fila[4]=0b01000000;
letra++;
break;
case 5: fila[0]=0b00000110;
fila[1]=0b01001001;
fila[2]=0b01001001;
fila[3]=0b01000001;
fila[4]=0b00111110;
letra++;
break;
case 6: fila[0]=0b00110000;
fila[1]=0b01001000;
fila[2]=0b01001000;
fila[3]=0b01001000;
fila[4]=0b01111111;
letra++;
break;
case 7: fila[0]=0b00000001;
fila[1]=0b00000001;
fila[2]=0b00000001;
fila[3]=0b00000001;
fila[4]=0b01111111;
letra++;
break;
case 8: fila[0]=0b00000000;
fila[1]=0b00000000;
fila[2]=0b00000000;
fila[3]=0b00000000;
fila[4]=0b00000000;
letra = 0;
break;
}
}
Que tal buenos días, tengo un problema, hice la simulación primero en proteus y si funciono con la matriz que ya viene predefinida 8x8, pero también lo intente hacer con puros leds, que 1.- el barrido es muy lento por más que le di el oscilador de 20 mhz, 2.- marca que: Simulation is not running in real time due to excessive CPU load.
ResponderBorraren teoría debería de funcionar igual una matriz predefinida a una hecha con leds, o algo estoy haciendo mal?
Espero me puedas a ayudar a comprender eso.
Saludos