Gracias tapi8 por responder, si necesito generar a la salida una señal de corriente de alta frecuencia (50khz-150Khz), el objetivo de esto es para el diseño de un calentador por induccion.. Quiero hacer una pausa antes y exponer una duda que tengo. Debido a que soy muy novato programando en pic, solamente encendía y apagaba led, leer adc etc..
Actualmente ando confundido de que compilador elegir. Ando trabajando simultáneamente con el CCS, ya he leído bastante el manual y pues no es que me vaya mal. por otra parte también ando cacharreando con el MPLABX- c18, la verdad me gusta esta interfaz, me parece que uno conoce todos los bits y registros del Micro.
He estado generando una señal PWM de 35khz con un duty cycle del 50%. En ccs no he tenido problemas pero cuando desarrollo el código en MPLABX-C18 se me genera una señal PWM pero no de la frecuencia deseada... en ambos caso trabajo con el oscilador interno. CREO YO que el problema en MPLAX-C18 es que ando configurando mal el oscilador y me esta generando una frecuencia de 8.33Khz . Anexo los dos codigos y espero que me puedan orientar.. Gracias saludos y exitos a todos
Codigo CCS
////MODULACION POR ANCHO DE PULSO///////////
#include <18F4550.h>
#fuses CPUDIV1,PLL1,NOUSBDIV,INTRC_IO,NOFCMEN,NOPUT,NOBROWNOUT,BORV46,NOWDT,WDT16384,CCP2C1,NOPBADEN,NOLPT1OSC,NOMCLR,NOSTVREN,NOLVP,NOICPRT
#use delay (clock=8000000)
void main(){
set_tris_c(0x00);
setup_timer_2(T2_DIV_BY_4,13,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(0);
while(true){
set_pwm1_duty(28L); //Trabajando una resolucion de 10bits
}
}
En MPLAB-X
#include<p18f4550.h>
#include<delays.h>
#include<pwm.h>
#include<timers.h>
/*-----------Configuracion_de_bits----------------------*/
#pragma config PLLDIV = 1 /*No prescale (4Mhz oscillator input drives PLL directly)*/
#pragma config CPUDIV = OSC1_PLL2 /*System clock postscaler seletion bits*/
#pragma config USBDIV = 1 /*USB clock*/
#pragma config FOSC = INTOSCIO_EC /*Oscillator selection bits*/
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config BORV = 0
#pragma config VREGEN = OFF
#pragma config WDT = OFF
#pragma config WDTPS = 16384
#pragma config MCLRE = OFF
#pragma config LPT1OSC = OFF
#pragma config PBADEN = ON
#pragma config CCP2MX = OFF
#pragma config STVREN = OFF
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF
void main(void){
TRISB=0X00; /*Puerto B como salida*/
TRISC=0X00; /*Puerto C como salida*/
LATB=0X00;
LATC=0X00;
OSCCON=0b01110110; /*Configuró el oscilador interno a 8Mhz*/
ADCON1=0X0F; /*Todos los pines digitale*/
OpenTimer2(TIMER_INT_OFF|T2_PS_1_4|T2_POST_1_1); /*prescales 4*/
OpenPWM1(13);
SetDCPWM1(0);
while(1){
SetDCPWM1(6);
Delay10KTCYx(10);
}
}