Estoy deseando usar el oscilador interno del pic18f4520 a una frecuencia de 1Mhz, lo que deseo lograr al final es usar para controlar un servo.
#include p18cxxx.h
#include pwm.h
#include timers.h
#include adc.h
#pragma config OSC = INTIO1
#pragma config MCLRE = ON /* Set Master Clear */
#pragma config WDT = OFF /* set watchdog timer off */
#pragma config LVP = OFF /* Low Voltage Programming Off */
#pragma config DEBUG = OFF /* Compile without extra Debug compile Code */
#pragma config PBADEN = OFF /* Disable Analogue on PORTB */
void main() {
OSCCON = 0x42;
TRISC = 0X00;
PR2=152; // period
T2CON = 0x06; //prescale to 16
OpenADC(ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_20_TAD,ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 0b1011);
SetChanADC(ADC_CH0);
ConvertADC( );
while(BusyADC( )); /* wait for completion */
CCP1CONbits.CCP1M = 0x0C; //make the pin an output
CCPR1L = (ReadADC()/4); // duty cycle
CCP1CONbits.DC1B=0;
}
Cuando uso un oscilador externo, el pwm funciona bien, pero no puedo obtener una señal de 50Hz con un oscilador externo de 20Mhz. Quiero usar el PWM sin el oscilador externo solo porque parece un truco para saber.
Soy muy nuevo en los microcontroladores y me disculpo si no sigo ningún protocolo para explicar mi problema, pero para repetir, el problema es configurar el oscilador interno a 1MHz, leí la hoja de datos y asigné a OSSCON el registro valor necesario para encender el oscilador interno y configurarlo en 1MHZ.
El código no se compila y parece ser un poco dudoso acerca de mi configuración de OSC a INTIO1, aunque eso es lo que dice la hoja de datos cuando se desea utilizar las capacidades del oscilador interno del microcontrolador.
El programa está en el compilador c18
Por alguna razón, el sitio borra las palabras con "< >" y pone en mayúsculas todo lo que aparece delante del signo "#", por lo que debe asumir que todo es correcto, excepto en la inclusión y pragma, excepto pragma config OSC = INTIO1, que como se mencionó no permitió la construcción exitosa.