Qué tal sblanco, bienvenido al foro!
Bueno yo trabajo con C pero de la casa CCS, aunque es bastante parecido al que tú usas.
Tu código lo veo en general bien, sólo que el trozo "OpenADC", que es la configuración del módulo ADC, no hace falta que lo coloques dentro del while, sino afuera, pero dentro del main. Quedaría así:
void main (void)
{
inicializar();
OpenADC(ADC_FOSC_8 &
ADC_RIGHT_JUST &
ADC_16_TAD,
ADC_CH0 &
ADC_INT_OFF, 15);
while (1)
{
SetChanADC (ADC_CH0); // Encender Ch 0 - ADC
Delay10TCYx (20); // Demora para aquisition time
ConvertADC (); // Hacer conversion Ch 0
while (BusyADC()); // Esperar hasta completar conversion
// Lee ADC y guarda en variable eje_Y:
eje_Y = ReadADC() & 0x3FF;
SetDCPWM1 (eje_Y); // Programa DC-1 al valor del ADC
Dices que lo simulas con el mismo mplab y el duty está en ceros? Supongo que es porque no le das ningún estímulo a la entrada analógica (no he probado jugar con estímulos analógicos), y por eso el simulador siempre dará como resultado de la conversión el valor 0. Ahora bien, pregunto... no lo has probado en proteus?
Yo te aconsejaría que le dieras valores al duty (constantes) a ver si funciona correctamente.. tal vez el error esté en la configuración del módulo PWM. Si al darle distintos valores no funciona, pues ya sabes donde está el error... si funciona, entonces hay que empezar a dudar de la conversión A/D, o del hardware. Porque veo el código bastante ordenado.
Y bueno, esperemos a que algún experto en C del foro dé opinión al respecto, a ver si aclara más la cosa.
Te deseo éxito, saludos!