contador de microsegundos PIC18

-1

Quiero contar microsegundos entre el temporizador ON / OFF. Mi FOSC es de 48 MHz. Descubrí que timer1 tendría que ser inicializado como (estoy programando en mplab):

// Freq = 1000000.00 Hz - Period = 0.000001 seconds
T1CONbits.T1CKPS1 = 0;   // Prescaler rate
T1CONbits.T1CKPS0 = 0;   // 1:1

T1CONbits.T1OSCEN = 1;   // Oscillator enable control bit 1 = on
T1CONbits.T1SYNC = 1;    // External Clock Input Synchronization Control bit...1 = Do not synchronize
T1CONbits.TMR1CS = 0;    // Timer1 Clock Source Select bit...0 = Internal clock (FOSC/4)
T1CONbits.TMR1ON = 0;    // disable timer
TMR1H = 255;             // preset for MSB register
TMR1L = 253;             // preset for LSB register

Y luego la sincronización:

T1CONbits.TMR1ON = 1;
... some work ...
T1CONbits.TMR1ON = 0;
us = (TMR1H<<8) + (TMR1L);

No está funcionando correctamente. Probablemente debido al desbordamiento del temporizador. ¿Cómo trato con esto correctamente?

    
pregunta c4rrt3r

1 respuesta

1

Algunas cosas no tienen sentido. El temporizador 1 no tiene registro de períodos, solo un prescaler que puede hacer potencias de 2 a 1, por lo que no puede medir el tiempo directamente. El oscilador de 48 MHz significa un reloj de instrucciones de 12 MHz, por lo que tendría que dividir entre 12 para obtener µs. Sin embargo, no dio ninguna justificación de por qué necesita medir µs exactamente, por lo que podemos suponer que puede usar otra cosa aproximadamente en ese rango y escala más tarde si realmente importa.

Ya que parece que intentas medir los ciclos de código, configuré el preescalador para 8, que es el más grande que puedes hacer de todos modos. Eso incrementará el temporizador a 12 MHz / 8 = 1.5 MHz, que es cada 667 ns. El intervalo máximo que puede medir es de 65535 cuentas, que es de 43.7 ms. Si intentas calcular un tiempo mayor que eso, la información se perderá debido a la reinversión del temporizador.

No tiene comentarios en su código que indiquen qué cree que hace cada configuración. ¡Qué verguenza! No voy a pasar mucho tiempo diagnosticando código escrito de manera irresponsable. Sin embargo, me di cuenta de que tienes el oscilador del temporizador 1 habilitado. Sin comentarios, no podemos decir cuál cree que es el propósito de eso, o si realmente lo intentó o no.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas