Nada, aun no soy capaza de hacerlo funcionar.
Le he programado el siguiente código:
// Encendemos todos los led's
void leds_encendidos(void)
{
PORTC = 0xff;
delay_ms(1000);
}
// Hacemos parpadear los led's
void leds_parpadeantes(void)
{
signed char i = 0;
while(i<20)
{
PORTC = 0xff;
delay_ms(100);
PORTC = 0x00;
delay_ms(100);
i++;
}
}
// Hacemos el efecto del coche fantástico
void leds_fantastico(void)
{
int pos_luz = 0x1;
int i = 0;
for(i = 0; i < 10; i++)
{
do{
PORTC = pos_luz;
delay_ms(100);
pos_luz << 1;
}while(pos_luz != 0b00001000);
do{
PORTC = pos_luz;
delay_ms(100);
pos_luz >> 1;
}while(pos_luz != 0b00000001);
}
}
// Sacamos todos los números
void led_num(void)
{
int pos_luz = 0x1;
int i;
int tabBCD[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001}; //BCD 0-9
for(i = 0; i < 10; i++)
{
PORTB = tabBCD[i];
do{
PORTC = pos_luz;
delay_ms(100);
pos_luz << 1;
}while(pos_luz != 0b00001000);
do{
PORTC = pos_luz;
delay_ms(100);
pos_luz >> 1;
}while(pos_luz != 0b00000001);
}
}
void main()
{
signed char i = 1;
int parp = 0;
int tabBCD[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001}; //BCD 0-9
TRISA = 0xff; // Puerto A como entrada
TRISB = 0x00; // Puerto B como salida
TRISC = 0x00; // Puerto C como salida
PORTB = 0x00; // Apaga todos los bits del puerto B
PORTC = 0x00; // Apaga todos los bits del puerto C
PORTB = tabBCD[i]; // Fijamos el valor del BCD
while(1) // Bucle infinito
{
// Comprobamos si se ha pulsado el primer botón
if(button(&PORTA, 0, 100, 0))
{
i++; // Incrementamos el contador
if(i>4) // Comprobamos si se ha mostrado el valor máximo
i=1; // Sí -> Volvemos al inicio (0)
PORTB = tabBCD[i];
}
// Comprobamos si se ha pulsado el segundo botón
if(button(&PORTA, 1, 100, 0))
{
// Hacemos parpadear el 7seg antes de entrar en la función
for(parp = 0; parp < 5; parp++)
{
delay_ms(10);
PORTB = tabBCD[i];
delay_ms(10);
};
switch(i){
case 1:
leds_encendidos();
break;
case 2:
leds_parpadeantes();
break;
case 3:
leds_fantastico();
break;
case 4:
led_num();
break;
}
}
};
}
Tengo un cristal de 20 Mhz, lo único que no tengo una C de 33 pf, asi que he probado con una configuración RC con una R de 4,7 K y una C de 30 pF; por ver si fallaba en eso pero sigue sin funcionar.
Lo conecto, lo activo y me saca el nº 1 por el 7seg, pasado un tiempo saca el 2 y se queda ahí pillado; da igual que en A0 y A1 haya un 0, o un 1, falla igual.
Ya no se si lo que falla es el programador que tengo, es un JDM y he programado el el micro con el WinPic, en principio parece que funciona pero no se que puede estar fallando, he intentado programar un 18F2550, pero no he podido me daba error al grabar.
El código lo he compilado con mikroC, ¿alguna idea de que puede estar fallando?