Timer1 no funciona con un cristal externo (PIC16F628A)

0

No puedo obtener el cristal externo de 32.768 kHz (en RB6 y RB7) / timer1 para que funcione (PIC16F628A / Mikro C). El cristal nunca comienza. El mismo circuito se ha reproducido dos veces (con conexiones cortas de cristal, condensadores de valor correcto, etc.) y el problema es el mismo.

El código que tengo actualmente funcionando (funcionando en 4MHz interno), cambiando TMR1CS a 1 da como resultado que no haya una función de temporizador, que no haya un inicio crsytal.

TMR1L = 0;
TMR1H = 0;

T1CON.T1CKPS0 = 1;        // Set Timer 1 prescaler
T1CON.T1CKPS1 = 1;        // TICKPS0 & TICKPS1 set to 1 (for /8 prescale), not 0
//T1CON.TMR1CS  = 1;
T1CON.TMR1CS  = 0;        //Use internal OSC for testing
T1CON.T1OSCEN = 1;
//T1CON = 0b00001111;

CCP1CON = 0b00001011;            // Timer 1 compare mode, Special Event mode
CCPR1L = (16383 & 0x00FF);       // Preset compare register low/high bytes
CCPR1H = (16383 & 0xFF00)>>8;

Esto, no funciona

 TMR1L = 0;
      TMR1H = 0x80;

      T1CON.T1CKPS0 = 0;        // Set Timer 1 prescaler
      T1CON.T1CKPS1 = 0;        // RJ TICKPS0 & TICKPS1 set to 1 (for /8 prescale), not 0
      T1CON.TMR1CS  = 1;
      //T1CON.TMR1CS  = 0;      //RJ Use internal OSC for testing
      T1CON.T1OSCEN = 1;
      //T1CON = 0b00001111;

      CCP1CON = 0b00001011;            // Timer 1 compare mode, Special Event mode
      CCPR1L = (16383 & 0x00FF);       // Preset compare register low/high bytes
      CCPR1H = (16383 & 0xFF00)>>8;

¿Alguien tiene un escenario probado / de trabajo desde el cual pueda proporcionar la configuración precisa para T1CON y los bits de configuración? He seguido la hoja de Microchip timer1 hasta la carta y esto todavía no funciona.

Saludos Activo

    
pregunta

2 respuestas

1

Bien, he construido el esquema con un PIC16F628 no A, y después de varios cristales encontré algunos que funcionaron. De los 9 que tengo, solo 6 trabajaron. Los valores de resistencia intentaron variar de 10K a 1M ohm, los condensadores de 10p a 47p, no hicieron una diferencia. O bien simplemente funciona o no funciona. Algunos cristales son nuevos, otros fueron rescatados. Algunos nuevos tampoco funcionaron.

Yo uso xc8 v1.40. Utilicé un osc externo de 10MHz. El programador de pickit 3 tiene dificultades para programar el PIC16F628 cuando se conecta un oscilador. No tengo problemas con los PIC16F1827 y PIC16F1937 más avanzados.

Esta es la configuración de Timer1 que usé con éxito:

T1CONbits.T1CKPS = 0;        // Set Timer 1 prescaler

T1CONbits.TMR1CS  = 1;
//T1CON.TMR1CS  = 0;      //RJ Use internal OSC for testing
T1CONbits.T1OSCEN = 1;
T1CONbits.nT1SYNC = 1;
T1CONbits.TMR1ON = 1;

No verifiqué si el temporizador se incrementa, pero supongo que si la señal del reloj es visible en el osciloscopio como se mide en el pin 15, debería funcionar. Déjame saber si quieres que pruebe esto. Sin embargo, tendré que conectar un puerto serie para leer los valores.

También leí en la documentación de erratas de Microchip que los circuitos del oscilador PIC pueden ser un poco exigentes con los cristales. Esta parece ser mi experiencia también. Incluso vi un PIC32 "derrotado" para soportar cristales secundarios de 32KHz. Puede ser más confiable construir su propio circuito oscilador y alimentarlo en el pin Timer1 T1OSI.

Mi consejo: compre más cristales y de diferentes fuentes, marcas y lotes.

    
respondido por el imqqmi
0

Un PIC tiene algunos "Bits de configuración" (es decir, "fusibles"), y una de las cosas que hacen estos fusibles es configurar el PIC para usar la fuente apropiada para el reloj. Si no ha cambiado esto en el cambio al cristal externo, entonces este es probablemente su problema.

No uso su compilador, pero debería buscar cómo configurar estos bits con las herramientas que tiene.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas