...
Estoy usando un PIC18F4550 con un cristal de 20MHz, donde quiero que la interrupción se dé para una frecuencia de 7200Hz (T=138.89useg). Calculo el PR2 con la formula PR2=[(T*Fcristal)/(4*TMR2Prescaler)]-1 .
Todo genial para el cálculo de valores e ingresarlos al MPLAB XC8, pero al momento que hago la simulación en Proteus 8.9 viene el incoveniente, al tomar la medición de la frencuencia que obtengo me resulta solo la mitad de la deseada, 3600Hz.
...
Estoy usando un PIC18F4550 con un cristal de 20MHz, donde quiero que la interrupción se dé para una frecuencia de 7200Hz (T=138.89useg). Calculo el PR2 con la formula PR2=[(T*Fcristal)/(4*TMR2Prescaler)]-1 .
Todo genial para el cálculo de valores e ingresarlos al MPLAB XC8, pero al momento que hago la simulación en Proteus 8.9 viene el incoveniente, al tomar la medición de la frencuencia que obtengo me resulta solo la mitad de la deseada, 3600Hz.
7200Hz es la frecuencia con que se llama la interrupción y en cada llamado invertís la salida ---> Si se ocupan dos llamados para completar un período pues la frecuencia de RB0 será la mitad (3600Hz)
Tal y como te ha dicho el compañero, necesitas dos cambios de estado para tener un periodo completo. Por lo que los 138,89 us lo tienes que dividir entre 2: 69,45 us.
Aplicando regla de tres sabiendo que el Timer2 sin prescalador se incrementa fosc/4 = 5000000 en un segundo, para conseguir 69,45us de semiperiodo, el Timer deberá incrementarse 347 veces.
Para acercarte lo más posible a ese tiempo, al ser un timer de 8 bits me sale que lo más cercano es fijar el valor de PR2 a 29 (-1) y el postcaler a 12 (-1) ya que 347/12= 28,91. Es lo más cerca de un entero que he calculado así a lo rápido.
Con esos datos si que deberías tener la frecuencia a la salida que quieres.