Aplicar señal PWM al PIN de un microcontrolador

Estoy usando el MC9S08DZ60 . Me han dado un diagrama de circuito según el cual debo programar el microcontrolador. Estoy usando Code warrior con Processor Expert que me permite inicializar los registros requeridos, no tengo que escribir el código para el mismo.

Requisito del código: Detecte un pulso PWM en el pin 0 del registro D. En respuesta, encienda el LED y aplique la señal PWM en los pines 3,4,5,6 del Registro A. De acuerdo con la hoja de datos, he equiparado el valor de el valor del canal se registra en el pin esperado en el microcontrolador. ¿Cómo aplicar la señal PWM en el PIN requerido? He intentado lo mismo en el siguiente código.

Por favor, consulte el código dado:

unsigned int result;
   unsigned int pwmSignal()
   {
   If(PTDD_PTDD0) // to check for the incoming PWM signal.
   {
  PTDD_PTDD2 = 1;  //light up LED. 
 do // check Channel for 300ms.
 { 
  //my understanding is to latch the values of the channel value registers to the 
  //expected pin.
   result = TPM2C0VH;
   result <<=8;
   result = result + TPM2C0VL;
   result = PTAD_PTAD4;
   result = PTAD_PTAD5;
 } while (TPM2C0_CH0F == 0);
 }
 else PTDD_PTDD2 = 0;
 }

El código compila absolutamente bien. pero no veo ningun cambio. En este punto quiero decir, este es mi primer intento de hacer esto.

También tengo una pregunta más, ¿cómo uso, por ejemplo, el PIN 2 del Registro D, para dos operaciones diferentes en un solo main.c? Por favor, avíseme si puedo proporcionar más datos sobre todo lo anterior. ¡Gracias de antemano!

Puede que no sea la causa del problema, pero mi primera impresión (sin estar familiarizado con su MCU) es que es posible que desee considerar el uso de una interrupción de cambio de pin o una función de captura de entrada de temporizador para leer el pulso entrante. Además, parece que le falta un corchete de cierre al final de su código.
En realidad, se supone que el corchete faltante va entre while y else.
Lo que dijo Joe: si necesita detectar un cambio de pin, use un pin IRQ.
@JoeBaker: gracias compañero. Leeré sobre IRQ (esta fue mi segunda pregunta). pero todavía estoy atascado con el primer problema, ¿Cómo aplicar la señal PWM a un PIN específico?

Respuestas (2)

Falta un corchete entre while y else en su código, y uno extra al final.

Aquí, así:

unsigned int result;
unsigned int pwmSignal()
{
    If(PTDD_PTDD0) // to check for the incoming PWM signal.
    {
        PTDD_PTDD2 = 1;  //light up LED. 
        do // check Channel for 300ms.
        { 
           //my understanding is to latch the values of the channel value registers to the 
           //expected pin.
           result = TPM2C0VH;
           result <<=8;
           result = result + TPM2C0VL;
           result = PTAD_PTAD4;
           result = PTAD_PTAD5;
        } while (TPM2C0_CH0F == 0)

     } // here, this one is missing.
     else PTDD_PTDD2 = 0;
 }
 // }
 // ^ This one you added at the end isn't necessary.

Ayuda mucho si su código está sangrado correctamente. Estoy muy sorprendido de que su compilador no se haya quejado de esto.

gracias stacey! Había perdido el corchete cuando estaba editando la pregunta y el código para cargarlo aquí. Es mi falta de diligencia. Sin embargo, he hecho el cambio. ¡Gracias por su aporte!

Aparentemente, de acuerdo con la hoja de datos, PWM solo se puede configurar para los pines específicos de la MCU, es decir, PWM alineado con Edge. Y al mismo tiempo, solo algunos pines específicos (según la hoja de datos) solo se pueden configurar para detectar PWM, es decir, captura de entrada.

Como esta pregunta ya no tiene interés en el foro, consideraré esto como la respuesta.