Kolejnym, który chciałbym przybliżyć jest program wykorzystujący możliwość modulacji długości fali mikrokontrolera, czyli program sterujący PWM. Opis działania PWM zostanie zamieszczony pod tym adresem: http://kodx.pl/mikrokontrolery-avr-poradnik/pwm/ .
Projekt rozwija się dalej. Aktualnie dokładamy drugi microswitch między wyprowadzenie 27 mikrokontrolera, a linię 16 na płytce stykowej. Dodatkowo linię 16 na płytce stykowej należy zewrzeć do GND za pomocą zworki z drutu.
Podłączenie zdjęcia:
Kod źródłowy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
/* * _03___PWM___dioda___switch.c * * Created: 2015-02-18 10:03:01 * Author: kodx.pl */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define LED (1<<PB1) //definicja wyprowadzenia do którego podłączona jest dioda LED #define SW (1<<PC5) //definicja wyprowadzenia do którego podpięty jest microswitch #define SW_ON !(PINC & SW) //makro do obsługi zwartego/wciśniętego przycisku SW #define SW2 (1<<PC4) //definicja wyprowadzenia do którego podpięty jest microswitch #define SW_ON2 !(PINC & SW2) //makro do obsługi zwartego/wciśniętego przycisku SW int main(void) { uint8_t zmienna = 0; DDRB |= LED; DDRC &= ~((SW) | (SW2)); PORTC |= ((SW) | (SW2)); //Ustawimy PWM w trybie Fast PWM, 8-bit, //wyprowadzenie OC1A ustawione na Compare Match. TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<WGM10); TCCR1B = (1<<CS12); //Ustawienie preskalera na 256 while(1) { _delay_ms(20); if(SW_ON) { if(zmienna<50) zmienna += 1; //zmiana PWM (kork co 1) else if (zmienna<250) zmienna += 5; //zmiana PWM (kork co 5) } else if (SW_ON2) { if(zmienna>50) zmienna -= 5; //zmiana PWM (kork co 5) else if (zmienna>0) zmienna -= 1; //zmiana PWM (kork co 1) } OCR1A = zmienna; } } |
Opis działania programu:
W porównaniu do poprzedniej wersji programu: http://kodx.pl/projekty-avr/atmega8-dioda-microswitch/ . Od teraz mamy do dyspozycji dwa microswitche, z których jednym powodujemy zwiększenie, a drugim zmniejszenie w wybranej częstotliwości współczynnika wypełnienia wyprowadzenia stanem niskim i wysokim. W programie użyty został tryb FAST PWM. Tryb Fast PWM zapewnia generowanie fali PWM w dużych częstotliwościach. W tym trybie licznik odlicza od stanu niskiego do momentu wystąpienia stanu wysokiego i następuje jego restart, który powoduje ustawienie go w stan niski.
Film prezentujący działanie programu:
Poniżej film nagrany z prędkością 120 klatek na sekundę, na którym niemal bardzo dobrze widać jak działa PWM.