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