Autor Tema: Configurar oscilador externo en PIC16F887  (Leído 4706 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado peguerosdc

  • PIC10
  • *
  • Mensajes: 1
Configurar oscilador externo en PIC16F887
« en: 24 de Diciembre de 2014, 08:47:06 »
Hola! Estoy usando el compilador MPLABX y quiero usar un cristal de 3.58MHz como oscilador externo para mi PIC. He leído la hoja de especificaciones y tengo entendido que debo modificar los bits OSCCON, además de que el compilador me pide especificar el valor de la frecuencia en una constante _XTAL_FREQ. Mi programa es un "hola mundo", solo quiero leer el valor en un pin (usando un push button) y escribirlo en otro pin para verlo en un LED. Este es mi código:

#include <stdio.h>
#include <stdlib.h>

#include <xc.h>
#include <pic16f887.h>

#define _XTAL_FREQ 3579545
// CONFIG1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF      
#pragma config MCLRE = OFF      
#pragma config CP = OFF
#pragma config CPD = OFF        
#pragma config BOREN = OFF      
#pragma config IESO = OFF      
#pragma config FCMEN = OFF      
#pragma config LVP = OFF        
// CONFIG 2
#pragma config BOR4V = BOR40V  
#pragma config WRT = OFF        

int main(int argc, char** argv) {
    ANSEL = 0;
    ANSELH = 0;
    TRISA = 0xFF;
    TRISC = 0x00;

    OSCCONbits.OSTS = 0b1;
    OSCCONbits.HTS = 0b1;
    OSCCONbits.LTS = 0b1;
    OSCCONbits.SCS = 0b0;

   while (1) {
       RC6 = RA0;
   }
    return (EXIT_SUCCESS);
}

Esto funciona perfectamente si uso el oscilador externo que trabaja a 4MHz (para esto quito las lineas de OSCCON y _XTAL_FREQ =4000000), el problema es que cuando intento usar mi oscilador externo mi PIC se vuelve muuuy lento. El ciclo while tarda unos 8 segundos en ejecutarse por primera vez y el tiempo que tarda en leer el valor en RC6 y escribirlo en RA0 es de unos 3 segundos, pero no veo razón por la que esto suceda!! Alguien me podría ayudar, por favor? :)

La resistencia que uso entre las patitas de mi cristal es de 10Mohms y los capacitores son de 33pF.
« Última modificación: 24 de Diciembre de 2014, 08:49:15 por peguerosdc »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Configurar oscilador externo en PIC16F887
« Respuesta #1 en: 24 de Diciembre de 2014, 10:22:35 »
Citar
#pragma config FOSC = XT

Con esa linea seleccionas tu oscilador, el OSCCON solamente te serviria para un cambio de frecuencia cuando tenes:

Citar
#pragma config IESO = ON

Asi tu micro arranca con el oscilador interno y luego pasas al externo.

Citar
   OSCCONbits.OSTS = 0b1;
   OSCCONbits.HTS = 0b1;
    OSCCONbits.LTS = 0b1;

    OSCCONbits.SCS = 0b0;

Los bits que NO estan en negrita en el reset se ponen a esos valores, asi que no tienen sentido cambiarlos, y los que estan en negrita son de estado asi que no los podes escribir, y solamente sirven para ver que el oscilador interno esta estable ( tanto el de 8Mhz HTS como el de 32k LTS )

Si me decis que con un cristal de 4 Mhz anda, y imagino que es un resonador ceramico, podrias probar con otra resistencia mas chica ( 2Mohm en paralelo o tal ves sacarlo ) o podrias aumentarle la ganancia al circuito del oscilador poniendolo en HS y no XT, asi le aumentas la ganancia al inversor. Son las unica opciones que se me ocurren.

Incluso me encontre un Application Note que no es del PIC:
http://www.st.com/web/en/resource/technical/document/application_note/CD00004059.pdf

Pero incluso dice de sacar la resistencia en paralelo y para valores de 4Mhz capacitores de 47pF a 100pF dependiendo del resonador.
Y tambien veo resonadores ceramicos con capacitores incluidos que en ese rango estan dentro de los 30pF, asi que primero probaría lo de arriba.
« Última modificación: 24 de Diciembre de 2014, 10:30:39 por KILLERJC »


 

anything