Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Utilizar el oscilador interno del pic 18F4550 con SDCC

2 participantes

Ir abajo

SDCC - Utilizar el oscilador interno del pic 18F4550 con SDCC Empty Utilizar el oscilador interno del pic 18F4550 con SDCC

Mensaje por JosePablo Sáb 9 Oct 2010 - 5:12

Hola a Tod@s
Estoy tratando de poner a funcionar un pic 18F4550 y quiero utilizar el oscilador interno y estoy haciendo una prueba activando un led (al principio era hacer un blinking pero no me funciona asi que lo cambie a solo encenderlo), el led lo enciendo con lógica negativa, o sea se activa con cero voltios a la salida del pic.

No sé si las configuraciones de los CONFIGs están bien.
Este es el código
Código:

#include <pic18f4550.h>

code char at __CONFIG1L CONFIG1L = _PLLDIV_NO_DIVIDE__4MHZ_INPUT__1L & _CPUDIV__OSC1_OSC2_SRC___1__96MHZ_PLL_SRC___2__1L & _USBPLL_CLOCK_SRC_FROM_OSC1_OSC2_1L;
code char at __CONFIG1H CONFIG1H = _OSC_INTOSC__INTOSC_RA6__USB_EC_1H & _FCMEN_OFF_1H & _IESO_OFF_1H;
code char at __CONFIG2L CONFIG2L = _PUT_OFF_2L & _BODEN_ON_2L & _BODENV_2_0V_2L & _VREGEN_OFF_2L;
code char at __CONFIG2H CONFIG2H = _WDT_ON_2H & _WDTPS_1_32768_2H;
code char at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H & _PBADEN_PORTB_4_0__CONFIGURED_AS_DIGITAL_I_O_ON_RESET_3H & _LPT1OSC_OFF_3H & _MCLRE_MCLR_ON_RE3_OFF_3H;
code char at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_ON_4L & _ENICPORT_OFF_4L & _ENHCPU_OFF_4L & _BACKBUG_OFF_4L;
code char at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H CONFIG5H = _CPB_OFF_5H;
code char at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H;
code char at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H;

void main()
{
    ADCON1=0x0F;
    TRISAbits.TRISA1=0;
    PORTAbits.RA1=0;
   
}

Alguna ayuda por favor.
JosePablo
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica

Volver arriba Ir abajo

SDCC - Utilizar el oscilador interno del pic 18F4550 con SDCC Empty Re: Utilizar el oscilador interno del pic 18F4550 con SDCC

Mensaje por maigke Lun 18 Oct 2010 - 12:48

Hola espero que no sea muy tarde para responder, mira de momento no he usado el oscilador interno del 18f4550, pero si el interno de un 16f819, y por lo que acabo de leer del data sheet, es muy similar para "configurar" el interno del 16f81 y el interno del 18f4550.

Por lo que vi en tu config word, si esta bien, pero de acuerdo a la pagina 33 del datasheet del Micro que usas, esta el registro OSCCON

en el cual tienes los siguientes bits

IRCF2:IRCF0 son los bits para configurar la velocidad desde 32kHz hasta 8MHz del oscilador
SCS1:SCS0 son los bits para seleccion del sistema de reloj, de acuerdo al datasheet

1x es para seleccionar el oscilador interno

Por lo que creo que tu código quedaría mas o menos así
Código:

#include <pic18f4550.h>

code char at __CONFIG1L CONFIG1L = _PLLDIV_NO_DIVIDE__4MHZ_INPUT__1L & _CPUDIV__OSC1_OSC2_SRC___1__96MHZ_PLL_SRC___2__1L & _USBPLL_CLOCK_SRC_FROM_OSC1_OSC2_1L;
//Aguas con esta, ¿vas a usar el PLL?

code char at __CONFIG1H CONFIG1H = _OSC_INTOSC__INTOSC_RA6__USB_EC_1H & _FCMEN_OFF_1H & _IESO_OFF_1H;

//Aqui defines el oscilador interno, ok
code char at __CONFIG2L CONFIG2L = _PUT_OFF_2L & _BODEN_ON_2L & _BODENV_2_0V_2L & _VREGEN_OFF_2L;
code char at __CONFIG2H CONFIG2H = _WDT_ON_2H & _WDTPS_1_32768_2H;
code char at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H & _PBADEN_PORTB_4_0__CONFIGURED_AS_DIGITAL_I_O_ON_RESET_3H & _LPT1OSC_OFF_3H & _MCLRE_MCLR_ON_RE3_OFF_3H;
code char at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_ON_4L & _ENICPORT_OFF_4L & _ENHCPU_OFF_4L & _BACKBUG_OFF_4L;
code char at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H CONFIG5H = _CPB_OFF_5H;
code char at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H;
code char at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H;

void main()
{
    ADCON1=0x0F;
    TRISAbits.TRISA1=0;
    PORTAbits.RA1=0;
    //Esto si quieres que el oscilador trabaje a 8MHz
    IRCF2=1;
    IRCF1=1;
    IRCF0=1;
    //Seleccion de sistema de clock
    SCS1=1;
  /*En caso de que no funque prueba
  OSCCONbits.IRCF2=1;
  no te digo si funciona, puesto que no lo he probado, pero
  haber si mas al rato, ya con certeza te digo si funca o no
*/
}

Saludos
Cool
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.