Pierwszy test.
Program pwm1.c i skrypt do jego kompilacji cpwm1
Wygenerujemy sygnały o okresie 10 ms i wypełnieniu 10%, 20% ... 90%, każdy z nich będzie trwał 3 sekundy. Sygnał możemy obserwować programem markspace, albo podłączyć diodę LED pomiędzy piny 1 (według wiringPI, czyli 12 fizyczny pin łączówki GPIO) i masę, na przykład 6 fizyczny pin łączówki GPIO.
Dioda po każdych 3 sekundach będzie świeciła jaśniej.
Na początek programujemy kanał PWM0.
Pin 1 (według wiringPi, fizycznie będzie to pin 12) ustawiamy w tryb pwm:
pinMode(1, PWM_OUTPUT);Programujemy tryb mark:space generatora pwm:
pwmSetMode(PWM_MODE_MS);Ustawiamy dzielnik zegara 1920, jeden takt będzie trwał 0,1 ms:
pwmSetClock(1920);Programujemy okres sygnału, 100 * 0,1 = 10ms:
pwmSetRange(100);Uruchamiamy generator na pinie 1, 10% wypełnienia, czyli jedynka przez 1 ms. Dla kontroli wyświetlamy informację o czasie trwania jedynki logicznej. Pamiętamy, że jeden takt naszego zegara to 0,1 ms, więc potrzebujemy 10 taktów, żeby uzyskać 10 ms:
printf("1 ms\r");fflush(0); pwmWrite(1,10); sleep(3);Po 3 sekundach zmieniamy wypełnienie na 20%, impuls 2 ms:
printf("2 ms\r");fflush(0); pwmWrite(1,20); sleep(3);I tak kolejno co 1 ms aż do 9 ms.
Warto zwrócić uwagę, że po skończeniu pracy naszego programu sygnał pwm nie zniknie, pozostanie na pinie 1, 10 milisekund, z wypełnieniem 90%, takim, jak go ostatnio zaprogramowaliśmy.