Problema del oscilador externo

1

Tengo este programa de ejemplo para parpadear LED con PIC18F4550 usando un oscilador externo.

Estoy usando un oscilador de cristal de 20.000 MHz con condensadores de 30pF.

El problema es cuando conecto los condensadores a tierra, el LED no parpadea (todavía está apagado), pero cuando los desconecto de la conexión a tierra (no cableada), el LED comienza a parpadear . Cambio de velocidad de parpadeo con _XTAL_FREQ .

El programa funciona bien con el oscilador interno (solo configurando FOSC = INTOSCIO_EC )

¿Hay cableado de dirección del capacitor u oscilador?

El terreno aquí es PIC Vss

Esto es cuando se usa PICKIT2 directamente. Cuando se usa el circuito solo como el esquema, no ocurre nada con la configuración FOSC = INTOSCIO_EC (no funciona), pero funciona bien con el oscilador interno.

#include<p18f4550.h>#include"delays.h"

/* COMPILER DIRECTIVES FOR CHIP CONFIGURATION BITS*/

#pragma config FOSC = HS //INTOSCIO_EC    /* Sets the oscillator mode to HS */
#pragma config WDT = OFF   /* Turns the watchdog timer off */
#pragma config LVP = OFF   /* Turns low voltage programming off */
#pragma config DEBUG = OFF /* Compiles without extra debug code */

#define _XTAL_FREQ   12000000  //delay_ms change by changing this


void main(void) {
    TRISD = 0xF0; // PORT B Setting: Set all the pins in port B to Output.
    while (1) {

        LATDbits.LATD0 = 1; // RD-0 to High
        LATDbits.LATD1 = 1; // RD-1 to High

        __delay_ms(50); // Half sec delay

        LATDbits.LATD0 = 0; // RD-0 to LOW
        LATDbits.LATD1 = 0; // RD-1 to LOW

        __delay_ms(50); // Half sec delay
    }
}
/* THE END */

    
pregunta Makhlouf GHARBI

4 respuestas

4

De acuerdo, la imagen cuenta la gran historia: es un problema de diseño: el xtal debe montarse en los pines de la imagen y los dos condensadores deben conectarse a 0 V a través de la ruta más corta posible. En este momento, los cables al xtal y a las tapas tienen demasiada inductancia y no es sorprendente que esto no funcione correctamente.

    
respondido por el Andy aka
3

En caso de que la respuesta de Andy no resuelva el problema, hay algo más que veo. Tienes _XTAL_FREQ configurado a 12MHz con un cristal de 20MHz.

Además, sus funciones de retardo se retrasan 50 ms, no 500 ms como indica su comentario. Con el valor _XTAL_FREQ no coincidente y el tiempo de retardo mal escrito, el retardo real será (12/20) * 50ms = 30ms.

Eso es 33Hz. Es posible que el ojo humano no sepa que está parpadeando a esa velocidad.

    
respondido por el Dan Laks
1

Pruebe estos bits de configuración:

#pragma config PLLDIV   = 5         /* PICs 96 MHz PLL prescaler divided 
                                       by 5 for 20MHz input */
#pragma config CPUDIV   = OSC1_PLL2 /* System clock post scaler 
                                       [OSC1/OSC2 Src: /1][96MHz PLL Src: /2] */
#pragma config FOSC     = HSPLL_HS  /* HS oscillator, PLL enabled */

Terminará teniendo una frecuencia de reloj de 96 / 2MHZ = 48MHz que producirá una frecuencia de instrucción de 12MHz, que es el máximo para PIC18F4550.

También la hoja de datos PIC18F4550 enlace en la página 27 recomienda usar capacitores de 15pF para cristal de 20 MHz.

Mirando tu foto, estoy bastante seguro de que tienes un pequeño error tipográfico ahí. 2 de los cables de los osciladores están conectados de manera incorrecta

    
respondido por el olltsu
0

después de asegurarse de que las conexiones de hardware estén bien, tal como se señaló, el otro error debe haber sido el valor de sus condensadores. Tuve exactamente el mismo error en el que la MCU haría parpadear el LED sin los condensadores, pero se apagó inmediatamente después de conectar los condensadores. El valor de los condensadores que utilicé fue "223pF" en lugar de "22pF". El valor de los condensadores de cerámica siempre está en picofaradios y, por lo tanto, tiene que hacer los cálculos correctos. "223 = 22000pf" mientras que "0.022nF = 0.022x1000pF = 22pF". Espero que te haya ayudado.

    
respondido por el user57689

Lea otras preguntas en las etiquetas