fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Error en frecuencia de Timer1

1 Respuestas
1 Usuarios
0 Reactions
1,052 Visitas
operational
Respuestas: 16
Topic starter
(@operational)
Active Member
Registrado: hace 15 años

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

#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);
}

Responder
Compartir: