TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: ricardonav46 en 03 de Junio de 2009, 22:46:32
-
Hola, ya que eh visto que nocturno y otros lo han hecho pero con otros compiladores de C, quisiera pedir su colaboracion, para poder implementar el codigo de pwm con dspic 30f4011 usando el CCS. Pues ya he hecho algunas pruebas pero en la compilación me salen errores que desconosco.
como se que el pwm se puede trabajar por capture o por pwm motor en este ddspic, pues eh intentado con 2 programas ( a continuacion).
//1PWM MOTOR
#include <30f4011.h>
#fuses FRC_PLL16,NOPROTECT,NOWDT
#use delay(clock=8000000)
#use fast_io(F)
#use fast_io(D)
#use fast_io(B)
#use fast_io(E) // PARA PERMITIRNOS CONFIGURAR MANUALMENTE
//DECLARACIÓN DE VARIABLES Y FUNCIONES DE USUARIO//////////
signed long duty;
void IniPuertos(){
set_tris_b(0);
set_tris_e(0);
}
void main(){
IniPuertos();
delay_ms(1000);
setup_motor_pwm(MPWM_FREE_RUN|MPWM_DUTY_UPDATES_IMMEADIATE); //// Configura CCP1 como PWM
duty=150;
while (true){
set_motor_pwm_unit(1,duty,0);
}
}
...
//2 COMPARE PWM
#include <30f4011.h>
#fuses FRC_PLL16,NOPROTECT,NOWDT
#use delay(clock=8000000)
#use fast_io(F)
#use fast_io(D)
#use fast_io(B)
#use fast_io(E) // PARA PERMITIRNOS CONFIGURAR MANUALMENTE
//DECLARACIÓN DE VARIABLES Y FUNCIONES DE USUARIO//////////
signed long duty;
void IniPuertos(){
set_tris_b(0);
set_tris_e(0);
}
void pwmini(){
SETUP_COMPARE(1,COMPARE_PWM); //// Configura CCP como PWM
setup_timer2(TMR_DIV_BY_8,6); //// frec
}
void main(){
IniPuertos();
pwmini();
delay_ms(1000);
duty=150;
while (true){
SET_PWM_DUTY(1,duty);
}
}
Agradesco su tiempo en revisar y colaboración.
-
¿Y cuál es el problema?
-
Hola nocturno disculpame por no ser tan claro. Pero pues entre ayer y hoy estuve pegado en mi pc haciendo pruebas de unas ideas que se me vinieron a la mente y queria comprobar mis ideas antes de preguntar nuevamente. hasta que por fin lo saque ( mis ideas dieron resultado), pues la primera parte que queria que es simplemente el pwm usando el oscilador interno.
este es el codigo que funciona.
/////////////////////////////////////////////////////////////////////////
//// PWM CON OSCILADOR INTERNO ////
#include <30f4011.h>
#fuses FRC,NOPROTECT,NOWDT,NOPUT
#use delay(oscillator=8000000)
#use fast_io(F)
#use fast_io(D)
#use fast_io(B)
#use fast_io(E) // PARA PERMITIRNOS CONFIGURAR MANUALMENTE
#define OSC_INTERNAL
//DECLARACIÓN DE VARIABLES Y FUNCIONES DE USUARIO//////////
signed long duty;
void IniPuertos(){
set_tris_b(0);
set_tris_e(0);
set_tris_d(0);
}
void main(){
IniPuertos();
setup_timer2(TMR_INTERNAL | TMR_DIV_BY_8, 0x1F40);
setup_compare(1, COMPARE_PWM | COMPARE_TIMER2);
delay_ms(1000);
while(TRUE){
duty=5;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=15;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=50;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=100;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=150;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=200;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=500;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
duty=2100;
set_pwm_duty(1,duty * (int16)64);
delay_ms(5000);
}
}
Ahora el siguiente paso que quiero dar es poder implementar interrupcion por cualquier metodo y usando el CCS. estare cacharreando y cualquier cosa lo publico. de antemano agradesco al que pueda colaborarme o aportar en esta nueva tarea.
-
Perfecto, pues sigue adelante y ya verás cómo lo consigues.