Mikrokontrolery AVR XMEGA w praktyce, część 13. PWM
// konfiguracja timera
TCE0.CTRLB = TC_WGMODE_DSBOTH_gc| // tryb normalny
TC0_CCAEN_bm|
TC0_CCBEN_bm|
TC0_CCCEN_bm|
TC0_CCDEN_bm;
TCE0.PER = 10000;
TCE0.CCA = 2000;
TCE0.CCB = 4000;
TCE0.CCC = 6000;
TCE0.CCD = 8000;
TCE0.CTRLA = TC_CLKSEL_DIV1024_gc; // ustawienie preskalera i uruchomienie timera
…i to wystarczy, aby timer zaczął generować sygnały PWM (oczywiście odpowiednie piny muszą być skonfigurowane w rejestrze DIR jako wyjście).
while(1) {
// wyświetlenie aktualnej wartości licznika CNT i PER
// CNT = ...
// PER = ...
LcdClear();
Lcd("CNT = ");
LcdDec(TCE0.CNT);
Lcd2;
Lcd("PER = ");
LcdDec(TCE0.PER);
_delay_ms(100);
if(!(PORTE.IN & PIN5_bm)) { // przycisk FLIP przyspiesza PWM
TCE0.PER = 1000;
TCE0.CCA = 10;
TCE0.CCB = 50;
TCE0.CCC = 200;
TCE0.CCD = 500;
TCE0.CTRLA = TC_CLKSEL_DIV1_gc;
}
}
Po uruchomieniu programu, świecą się wszystkie diody, a rejestr CNT licznika jest oczywiście wyzerowany. Zwróć uwagę na wskazania wyświetlacza. Kiedy licznik CNT przekroczy 2000 to zgaśnie dioda podłączona do pinu E0, bo steruje nią kanał A, którego rejestr CCA wynosi 2000. W ten sposób po kolei wszystkie diody mają zgasnąć, aż licznik osiągnie wartość 10000 i zacznie liczyć w dół. Diody będą się po kolei zapalać. Po wciśnięciu przycisku FLIP, preskaler timera zmienimy na 1 zamiast 1024 i ustawimy nieco inne wartości CCx. Dzięki temu będziemy mieć wrażenie, że diody świecą się z różną jasnością, choć rzeczywistości odbywa się podobny proces jaki oglądaliśmy przed chwilą, ale z dużo większą prędkością.
Działanie programu przedstawia poniższy filmik i zdjęcie.
Rys. 6. Diody świecą z różną jasnością
#define F_CPU 2000000UL #include#include #include #include "hd44780.h" int main(void) { // przycisk PORTE.DIRCLR = PIN5_bm; // pin E5 jako wejście (przycisk FLIP) PORTE.PIN5CTRL = PORT_OPC_PULLUP_gc; // podciągnięcie do zasilania // diody od PWM PORTE.DIRSET = 0b00001111; // piny 3..0 jako wyjście // wyświetlacz LcdInit(); // konfiguracja timera TCE0.CTRLB = TC_WGMODE_DSBOTH_gc| // tryb PWM dual-slope TC0_CCAEN_bm| TC0_CCBEN_bm| TC0_CCCEN_bm| TC0_CCDEN_bm; TCE0.PER = 10000; TCE0.CCA = 2000; TCE0.CCB = 4000; TCE0.CCC = 6000; TCE0.CCD = 8000; TCE0.CTRLA = TC_CLKSEL_DIV1024_gc; // ustawienie preskalera i uruchomienie timera while(1) { // wyświetlenie aktualnej wartości licznika CNT i PER // CNT = ... // PER = ... LcdClear(); Lcd("CNT = "); LcdDec(TCE0.CNT); Lcd2; Lcd("PER = "); LcdDec(TCE0.PER); _delay_ms(100); if(!(PORTE.IN & PIN5_bm)) { // przycisk FLIP przyspiesza PWM TCE0.PER = 1000; TCE0.CCA = 10; TCE0.CCB = 50; TCE0.CCC = 200; TCE0.CCD = 500; TCE0.CTRLA = TC_CLKSEL_DIV1_gc; } } }
|
|
Dominik Leon Bieczyński

Prof. Ryszard Tadeusiewicz: Droga rozwoju robotów humanoidalnych
Według Synektik za 4 lata roboty będą wykonywać co dziesiąty zabieg chirurgii ogólnej w Polsce
Dlaczego Edge AI odgrywa coraz większą rolę w inteligentnym transporcie? 


![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)
![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)

