Error en frecuencia de Timer1

Hola, el problema esque tendria q generarse una onda cuadrada ( por software ) de 880Hz, pero sin embargo no da 880...sino unos 746Hz, la formula es clara, viene en el programa y si me equivoco por algun lado...seria de gran ayuda saber en donde, gracias y ay va el programa


Código:
#include <16f628a.h>
#use standard_io(a,b)
#fuses intrc_io, NOWDT, NOMCLR, NOBROWNOUT, NOLVP, NOCPD
#use delay(clock = 4000000)

#define ONDA PIN_B5

//T=Tosc*4*Preescaler*N
//Tosc es periodo reloj ( 4Mhz), 4 por el tiempo de ejecucion de cada instruccion, N el numero a cargar en timer1
//para una frecuencia de 880Hz, el numero N es 568.1818
//es decir, para una onda cuadrada de 880Hz generamos interrupcion con frecuencia de 1760Hz


float A=568.1818; 

int16 A1=0; 

int1 e=0;



#int_timer1
void Segunda_Onda(void)
{

if ( e==0){

A1=A;

set_timer1(65536-A1);
output_high(ONDA);
e=1;
}
else {

set_timer1(65536-A1); 
output_low(ONDA); 
e=0;
}


}





void main (void) {


disable_interrupts(global); 

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1 );

disable_interrupts(INT_TIMER0); 
enable_interrupts(INT_TIMER1); 
disable_interrupts(INT_TIMER2);
disable_interrupts(INT_RB); 
disable_interrupts(INT_EXT);
disable_interrupts(INT_TBE);
disable_interrupts(INT_RDA);
disable_interrupts(INT_CCP1);
disable_interrupts(INT_COMP);
enable_interrupts(global);
set_timer1(50000);

do {



}
while(true);
}
 
Última edición por un moderador:
Atrás
Arriba