Software PWM

Bij gebrek aan ccp pinnen op mijn pic heb ik een simpele software pwm geschreven voor MikroC:

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 
unsigned int PWM_fade=200;   void Delay(int num){                     // De delay functie   while(num>0)   num--;}   void main() {   while(1){     for (i = 0; i <= PWM_fade; i++){     //Led1 van aan naar uit; Led2 van uit naar aan;            Led1 = 1;             Led2 = 0;             Delay(PWM_fade - i);             Led1 = 0;             Led2 = 1;            Delay(i);     }     for (i = 0; i <= PWM_fade; i++){     //Led2 van aan naar uit; Led1 van uit naar aan;             Led1 = 0;             Led2 = 1;            Delay(PWM_fade - i);             Led1 = 1;             Led2 = 0;             Delay(i);     }  } }

Deze puls-breedte-frequentie is altijd maximaal. Wil je een lagere frequentie voor je pwm dan moet je in de Delay() een extra vertraging maken. Bijvoorbeeld: Delay_us(20);.
Led2 heeft altijd te tegenovergestelde dutycycle van led1 zoals je uit de code kan opmaken. De waarde van PWM_fade bepaald hoe snel de led van uit naar aan gaat en vica versa. En zo ziet dit er dan uit:


Het mooist is natuurlijk om PWM_fade via een potmeter in te stellen. Je hebt daarvoor alleen een analoge poort op je pic nodig. De ADC library van MikroC maakt de rest erg makkelijk.
Ga er eens mee spelen en kijk hoe je het toe kan passen