HOla gente, este es mi primer mensaje, y en este caso es una pregunta. Estoy aprendiendo con un 16f84A y se me ocurrio hacer una rutina que si aprieto un pulsador en rb0 menos de un tiempo delta t determinado (2 segundos en este caso) me prenda un led por ejemplo en ra0, y si el tiempo de apretado es mayor, que me prenda un led conectado en rb1. QUIERO usar en una parte del programa la interrupcion del desborde del timer0, pero necesitaria que sea a los 2 segundos. Mi pregunta es: como hago jaja?
Bueno tambien me gustaria compartir una rutina para que la agreguen en los ejemplos, que hace lo siguiente: modula el ancho del pulso en un led conectado a rb1 en forma senoidal (creo), sospecho que es en forma triangular (que alguien lo confirme o me corrija) produciendo un efecto de prendido y apagado del brillo en forma gradual. No les dejo la simulacion porque no se ve el efecto (por lo menos en mi precaria pc) aqui esta:
//Modulacion del ancho de pulso en forma senoidal en RB1
# INCLUDE <16F84.h>
# USE DELAY(clock=4000000)
# FUSES HS,NOWDT,NOPUT
# USE FAST_IO(A)
# USE FAST_IO(B)
pwm(int brillo) //Prende el led hasta que j llega a brillo y lo apaga
{ //hasta que llega a 100, es decir modula el ancho de
int j; //del pulso en cada ciclo
for(j=0;j<brillo;j++)
output_high(PIN_B1);
for(;j<100;j++)
output_low(PIN_B1);
}
frec_onda(int brillo) //Retarda entre la funcion onda y pwm. Cada vez que onda
{ //cambia el valor de brillo. Esta funcion produce un retardo,
int i; //en consecuencia varia la frecuencia de la onda senoidal
for(i=0;i<10;i++)
pwm(brillo);
}
onda()
{ // Cambia el valor de brillo de forma senoidal
int brillo; // entre 0 y 100 y se lo pasa a frec_onda
for(brillo=2;brillo<100;brillo++)
frec_onda(brillo);
for(brillo=100;brillo>2;brillo--)
frec_onda(brillo);
}
main()
{
set_tris_b(0);
while(true)
onda();
}
Salu2