Hola,
estoy realizando un generador de funciones, en concreto ahora estoy implementando la función seno. Para ello utilizo un 18f452 a 20Mhz, con el compilador CCS.
Tengo un array de 50 posiciones con el seno tabulado y la idea es ir creando interrupciones cada cierto tiempo dependiendo de la frequencia que quiero, para ello utilizo el timer1. De esta manera consigo una onda senoidal de cerca de 1Khz, generando una interrupción cada 50 ciclos de reloj. Si inicializo el valor del timer a un valor más alto ya no me aumenta la frequencia puesto que imagino que necesita estos ciclos para ejecutar la interrupción.
El problema está en que tengo que llegar a 8Khz, y aun quitando muestras no consigo llegar a esta frequencia.
Os pongo el código que utilizo a ver si alguien me puede ayudar. Un saludo.
Codigo:
//En mostres hay el valor 50 (numero de muestras)
#INT_TIMER1
void isr() {
set_timer1(0xFFCD);
output_c(SINE_WAVE[sine_index]);
if(++sine_index==mostres) {
sine_index=0;
}
}
void senoidal(long f, byte v){
byte i;
boolean acabar=false;
char k;
long delay = 0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // setup interrupts
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(!acabar){
k = kbd_getc();
if(k!=0)
if(k == "F")
acabar=true;
}
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
}
Un saludo y muchas gracias anticipadas.