Por favor considere el siguiente código:
for(;;)
{
int i=0;
TPM1C2VL =~ (i<<1); // Channel Value(Lower)Register.
TPM1C2VH +=TPM1C2VL;
}
CÓDIGO ALTERADO
unsigned long duty[420] = {<from zero to 65535>}
for(i = 0; i != 420; i++ )
{
TPM1C2VL =~ duty[i];
TPM1C2VH += TPM1C2VL;
}
for( ; i != 0; i-- )
{
TPM1C2VL =~ duty[i];
TPM1C2VH += TPM1C2VL;
}
También después de la modificación, no hay ningún cambio efectivo, ya que ahora el LED parpadea de forma aleatoria
Sólo quería aplicar un efecto de respiración en un LED. Solo para probar, escribí el código con la intuición básica de cómo se supone que funciona, no esperaba que funcionara de una sola vez, pero sí.
Ahora mi pregunta es, ¿CÓMO REVERSAR ESTE EFECTO? es decir, lentamente el LED se apaga a cero. No soy capaz de inducir una inversión de este efecto. Estoy usando PWM de MC9S08DZ60 . He realizado los siguientes ajustes: Prescaler = 1.
Módulo contador = 65535.
Periodo = 4.096ms.
Borde alineado.
En el canal 1.
PWM: Establecer OUtput en comparar.
Canal de servicio = 4.095ms.