Generar Frecuencia con Timer0

Soy algo nuevo en estos temas de los microcontraldores y me surgio un problema en el momento de generar un frecuencia de 38kHz con el PIC18F4550 ya que por la aplicacion en la que se esta usando no se puede utilizar PWM ya que estos pines estan ocupados para unos motores, mas sin embargo ocupo generar esta frecuencia para utilizar un sensor, A la hora de probar el siguiente codigo la frecuencia generada es de 15 Khz. Segun los calculos estoy correctamente la frecuencia pero no.. No se si se deba a algun fuse o tenga que ver con algun calculo :S


Este es el codigo:

#include <18f4550.h>
#fuses HSPLL,PLL5,CPUDIV1,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use fast_io(E)
#use delay(clock=48M)


#int_rtcc
void isr(void)
{
output_toggle(PIN_E0);
}


void main()
{
enable_interrupts(int_rtcc);
enable_interrupts(GLOBAL);
setup_timer_0(RTCC_DIV_4|78); //frecuencia de 38kHz
SET_TRIS_E( 0x02 );

while (TRUE)
{

if (INPUT(PIN_E1) == 0)
OUTPUT_HIGH(PIN_E2);
}
}



Cualquier ayuda sirve de mucho!
Gracias !
 
setup_timer_0(RTCC_DIV_4|78);

Eso creo que no se hace así, entiendo lo que quieres hacer y en teoría la línea debería ser así:

setup_timer_2(T2_DIV_BY_4, 78, 1);

He puesto el Timer2 copiado de un ejemplo mío, no estoy seguro de si eso te lo admite el Timer0, si no lo admite usa el Timer2.


Otra opción que también debería funcionar, es cambiar esto:

setup_timer_0(RTCC_DIV_4|78);

Por:

setup_timer_0(RTCC_DIV_4);

Y también en la interrupción precargar el Timer0 para que salte en 78 cuentas:

#int_rtcc
void isr(void)
{
output_toggle(PIN_E0);
set_timer0(177); // 177 = 255 - 78 (para obtener 38kHz)
}
 
Atrás
Arriba