This shows you the differences between two versions of the page.
|
pm:lab:lab2-2023 [2026/03/06 12:23] irina.bradu [3. Exerciții] |
pm:lab:lab2-2023 [2026/03/09 10:53] (current) jan.vaduva [2.4. Lucrul cu Timer-ul] |
||
|---|---|---|---|
| Line 371: | Line 371: | ||
| { | { | ||
| TIMSK1 |= (1 << OCIE1A); | TIMSK1 |= (1 << OCIE1A); | ||
| + | // ... | ||
| } | } | ||
| int main() | int main() | ||
| { | { | ||
| - | sei(); // activăm primirea întreruperilor | ||
| init_timer1(); // apelăm funcția de inițializare | init_timer1(); // apelăm funcția de inițializare | ||
| + | sei(); // activăm primirea întreruperilor | ||
| // ... | // ... | ||
| } | } | ||
| Line 450: | Line 451: | ||
| Configurați **pin change interrupt** pentru butonul BTN1 (PB2). | Configurați **pin change interrupt** pentru butonul BTN1 (PB2). | ||
| - | Implementați rutina de tratare a întreruperii ''ISR(PCINT0_vect)''. In ISR setați un flag atunci când butonul este apăsat. In ''main()'' detectați flag-ul și transmiteți pe USART mesajul: "**PRESS**". | + | Implementați rutina de tratare a întreruperii ''ISR(PCINT<n>_vect)''. In ISR setați un flag atunci când butonul este apăsat. In ''main()'' detectați flag-ul și transmiteți pe USART mesajul: "**PRESS**". |
| **Task 2.2 Debouncing (1p)** | **Task 2.2 Debouncing (1p)** | ||
| Line 472: | Line 473: | ||
| Folosiți funcția ''uptime_ms()'' pentru a implementa un mini-scheduler cooperativ care execută mai multe taskuri periodice. Implementați în bucla principală un mecanism care verifică periodic momentul curent (''now = uptime_ms()'') și execută următoarele taskuri: | Folosiți funcția ''uptime_ms()'' pentru a implementa un mini-scheduler cooperativ care execută mai multe taskuri periodice. Implementați în bucla principală un mecanism care verifică periodic momentul curent (''now = uptime_ms()'') și execută următoarele taskuri: | ||
| - | * T1 – Heartbeat (periodă 100 ms) - Comută starea LED-ului albastru. | + | * T1 – Heartbeat (periodă 1000 ms) - Comută starea LED-ului albastru. |
| * T2 – Logger (periodă 500 ms) - Transmite pe USART mesajul: **t=<uptime_ms> ms** | * T2 – Logger (periodă 500 ms) - Transmite pe USART mesajul: **t=<uptime_ms> ms** | ||
| - | * T3 – Status (periodă 1000 ms) - Comută starea LED-ului roșu. | + | * T3 – Status (periodă 3000 ms) - Comută starea LED-ului roșu. |