Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:lab:lab2-2023 [2024/03/18 09:08]
florin.stancu add #include <avr/interrupt.h> to timer ISR example
pm:lab:lab2-2023 [2025/03/16 22:36] (current)
andrei.batasev [3. Exerciții]
Line 419: Line 419:
 ===== 3. Exerciții ===== ===== 3. Exerciții =====
  
-**Task 1.1**+**Task 1. (2p)**
  
-  * Implementați o funcție asemănătoare cu ''​millis()''​ din biblioteca Arduino. Aceasta ar trebui să returneze intervalul de timp trecut de la pornirea (sau ultimul reset) al uC-ului. Configurați interfața USART0 cu aceeași parametri folosiți în laboratorul trecut și transmiteți către PC un mesaj ales de voi la intervale de 1 secundă.+  * Implementați o funcție asemănătoare cu ''​delay(int ms)''​ din biblioteca Arduino. Aceasta ar trebui să oprească execuția programului pentru numărul de milisecunde dat. Implementarea se va face folosind întreruperi.
  
-HINTS:+<note tip>
   * Frecvența de ceas a uC-ului este de 12MHz. Folosiți formulele prezentate anterior pentru a obține valorile potrivite pentru prescaler și registrul de comparație ale timer-ului ales astfel încât întreruperile generate de acesta să se declanșeze la intervalul de timp dorit.   * Frecvența de ceas a uC-ului este de 12MHz. Folosiți formulele prezentate anterior pentru a obține valorile potrivite pentru prescaler și registrul de comparație ale timer-ului ales astfel încât întreruperile generate de acesta să se declanșeze la intervalul de timp dorit.
   * Timer2 poate fi utilizat cu un număr mai mare de valori ale prescaler-ului.   * Timer2 poate fi utilizat cu un număr mai mare de valori ale prescaler-ului.
 +</​note>​
  
-**Task 1.2** 
-  * Pentru a putea citi în mod corect apăsări scurte ale butoanelor este necesară o metodă de debouncing. Cum ar putea fi rezolvată problema citirilor eronate cu ajutorul funcției ''​millis()''?​ Concepeți o funcție (în pseudocod) care să ilustreze soluția găsită. 
  
-**Task 2.**+**Task 2. (2p)**
  
-  * Reluați exercițiul 3 din primul laborator ​și implementați-l folosind timer-e și întreruperi pentru citirea butoanelor și efectul de clipire al LED-urilor.+  * Citiți ''​PD6''​ folosind întreruperi ​și trimiteți un mesaj prin ''​USART0''​ (configurată ca la laboratorul anterior).
  
-<​spoiler ​**Reminder Ex. 3, lab 0**> +**Task 3. (3p)** 
-  * La apăsarea succesivă a BTN1, LED-ul RGB trebuie să îșschimbe culoarea ​(Red -> Green -> Blue -> Red) +  * Folosind buzzer-ul, transmitețun cuvânt cu literele codificate in alfabetul Morse astfel: 
-  * BTN2 trebuie să controleze efectul de clipire al LED-ului aprins +    * Un simbol ​(''​.''​ sau ''​-''​va dura 500 ms, iar durata dintre simboluri va fi tot 500 msPentru a diferenția între ​''​.''​ și ''​-''​, alterați ​frecvența buzzer-ului (de exemplu500 Hz versus 1500 Hz). 
-</​spoiler>​ +    * La fiecare ​apăsare butonului ''​PB2''​ transmiteți următoarea literă.
- +
-**Task 3.** +
-  * Folosiți butoanele ​''​PD6''​ și ''​PB2'' ​pentru a controla buzzer-ul:​ +
-    * Unul dintre butoane selectează ​frecvența ​sunetului generat de buzzer (dintre 3 valori, ​de ex. 100Hz200Hz, 300Hz+
-    * Buzzer-ul funcționează doar când mențineți al doilea buton apăsat +
-    * Puteți folosi LED-ul RGB pentru ​indica frecvența aleasă +
- +
-**Task 4. (BONUS)** +
- +
-  * Funcția implementată la primul exercițiu va acumula o anumită eroare din cauza faptului că frecvența de ceas nu poate fi divizată perfect. +
-    * Încercați să calculați după câte cicluri de funcționare a timer-ului eroarea devine semnificativă (peste 1 ms). +
-    * Propuneți o metodă prin care se poate reduce această eroare +
-    * Încercați implementarea metodei propuse+
  
  
 +**Task 4. (3p)**
  
 +  * Implementați pentru exercițiile anterioare debouncing la buton folosind întreruperi.
  
pm/lab/lab2-2023.1710745695.txt.gz · Last modified: 2024/03/18 09:08 by florin.stancu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0