Encontré la solución a mi caso, y porque digo esto, porque no todas las versiones de los compiladores ccs funcionan exactamente igual (referencia http://www.todopic.com.ar/foros/index.php?topic=23135.80).
Allí se discutio bien a fondo este tema y al navegar por alli encontre esta solucion a mi caso. (Soy reiterativo,todo depende de la version del ccs con el que compilemos el archivo fuente de aplicacion que en mi caso es PWM y aclaro que yo uso un bootloader compilado en c18 y el PWM esta compilado en ccs OK)
Este es el código y funciona
Seguiré probando con otros códigos para ver si funciona
Allí se discutio bien a fondo este tema y al navegar por alli encontre esta solucion a mi caso. (Soy reiterativo,todo depende de la version del ccs con el que compilemos el archivo fuente de aplicacion que en mi caso es PWM y aclaro que yo uso un bootloader compilado en c18 y el PWM esta compilado en ccs OK)
Este es el código y funciona
Código:
//////////////////////////////////////////////////////////////////////////
////Control de 3 canales PWM por software //
////se utiliza para mesclar el brillo de tres leds;rojo,verde,azul //
////utilizando potenciometro conectados a puerto AN0,AN1 y AN2 //
////recuerde que la libreria PWM.h debe estar en la misma carpeta //
////donde se encuentre su codigo fuente //
//////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#device ADC=8
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 48000000)
#define CH0 PIN_B5 //led ROJO conectado a rb5, cambie de pin si desea
#define CH1 PIN_B6 //led VERDE conectado a rb6, cambie de pin si desea
#define CH2 PIN_B7 //led AZUL conectado a rb7, cambie de pin si desea
#include <PWM.h> //libreria para generar PWM de 8 bit por software
#build(reset=0x1000,interrupt=0x1008) //ACA ESTA EL TRUCO QUE NO ES
#org 0x0000,0x0FFF {} //MIO, SOLO LO BUSQUE.Esta es una forma de remapear el
// reset y las interrupciones para mi caso.
void main (void)
{
unsigned byte value;
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_TO_AN2); //A0,A1,A2 entradas analogicas
set_tris_b(0x00);
//set_tris_d(0x03);
PWM_init(225); //Inicia MACRO para generar PWM por software, RTCC_DIV_2
while(true)
{
set_adc_channel(0);
delay_us(50);
value=read_adc(); //lee canal AN0
write_duty0(value);//escribe canal PWM0
set_adc_channel(1);
delay_us(50);
value=read_adc(); //lee canal AN1
write_duty1(value);//escribe canal PWM1
set_adc_channel(2);
delay_us(50);
value =read_adc(); //lee canal AN2
write_duty2(value);//escribe canal PWM2
// output_toggle(PIN_D3);
// delay_ms(140);
}
}
Seguiré probando con otros códigos para ver si funciona
Última edición por un moderador: