Timer1 no se ejecuta en PIC16F628

1

Tengo este pequeño proyecto que requiere un reloj exacto, así que estoy usando cuarzo a 32768 Hz en RB6 & RB7 en mi PIC16F628 . Ambas clavijas están conectadas a tierra usando capacitores de 33 pF.

Mi código que configura el timer1 es el siguiente (compilador HI-TECH C):

TRISA = 0b11100011; //x3F;      // bit=0 - output; bit=1 - input
TRISB = 0b11110000; //x3F;      // bit=0 - output; bit=1 - input
nRBPU = 1; //affects inputs only
TMR1ON = 0;     // Disable Timer 1
T1CKPS1 = T1CKPS0 = 0;   // 1:1 Prescale value
T1OSCEN = 1; //start tmr1 oscillator
TMR1CS = 1;  //0: internal clock; 1: wait external clock
nT1SYNC = 0; //sync by external clock
TMR1 = 0x8000;
PEIE = 1;
TMR1IE = 1;
ei(); //sets GIE
//T1CON = 0b00001111;
TMR1ON = 1;     // Enable Timer 1

Los bits de configuración:

__CONFIG(WDTE_OFF & MCLRE_ON & PWRTE_ON & BOREN_OFF & LVP_ON & FOSC_INTOSCIO & CP_OFF & CPD_OFF);

El problema - nunca se ejecuta. Tengo un LED en el ISR que debería estar encendido. También utilicé un osciloscopio para investigar. Cambió los condensadores. Probé otro cristal. Probé todos los enfoques posibles. Nada ayudó.

    
pregunta Nedko

1 respuesta

1

La directiva FOSC_INTOSCIO significa que la parte está utilizando su oscilador interno, y las líneas que normalmente se usan para el cristal se configuran como líneas de E / S. Por eso tu cristal no está oscilando.

Este dispositivo tiene una frecuencia de oscilador interno de aproximadamente 4MHz, por lo que es muy posible que su ISR se ejecute más rápido de lo que su ojo puede percibir que el LED parpadea.

Querrá usar algo como LP_OSC en lugar de FOSC_INTOSCIO (no tengo el archivo de encabezado exacto, por lo que no puedo decir cuál es el que debe usar).

Además del comentario a continuación: de acuerdo con la hoja de datos , las opciones para el reloj temporizador las fuentes son: un reloj externo de RB6 o el oscilador interno / 4. Lo que esto significa es que can puede usar el oscilador interno de 4 MHz para el reloj principal, y llevar una señal de reloj a RB6 para el temporizador . Sin embargo, como no está utilizando el hardware de oscilador incorporado, tendrá que generar externamente un reloj desde el cristal y aplicarlo al RB6.

Afortunadamente, Microchip explica cómo en la hoja de datos :

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas