Differences

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

Link to this comparison view

pm:lab:lab2 [2020/03/08 10:23]
alexandru.predescu [3. Exerciții]
pm:lab:lab2 [2020/03/08 11:01] (current)
alexandru.predescu
Line 487: Line 487:
 </​hidden>​ </​hidden>​
  
 +  - **(1p)**. Rulați exemplul din scheletul de laborator. Ce mod de funcționare folosește timer-ul? Dar prescaler?
 +    *Pe ecranul LCD-ului se pot vizualiza valorile ''​TCNT1''​ și ''​OCR1A''​.
 +    *Limita din dreapta ecranului reprezintă 0xFFFF.
   - **(2p)**. Activați întreruperea externă ''​PCINTn''​ necesară pentru butoanele legate la ''​PB2''​ și ''​PD6''​. În handler-ul de întrerupere,​ aprindeți LED-ul legat la ''​PB3''​ la apăsarea lui ''​PB2''​ și stingeți-l la apăsarea lui ''​PD6''​.   - **(2p)**. Activați întreruperea externă ''​PCINTn''​ necesară pentru butoanele legate la ''​PB2''​ și ''​PD6''​. În handler-ul de întrerupere,​ aprindeți LED-ul legat la ''​PB3''​ la apăsarea lui ''​PB2''​ și stingeți-l la apăsarea lui ''​PD6''​.
     * Hint: butonul este de tip normal deschis, cu rezistență de tip pull-up     * Hint: butonul este de tip normal deschis, cu rezistență de tip pull-up
Line 496: Line 499:
     * La expirarea timpului se va stinge LED-ul legat la ''​PB3'' ​     * La expirarea timpului se va stinge LED-ul legat la ''​PB3'' ​
     *  La apăsarea butonului ''​PD6'',​ cronometrul va fi oprit și va fi reactivat doar la apăsarea lui ''​PB2''​     *  La apăsarea butonului ''​PD6'',​ cronometrul va fi oprit și va fi reactivat doar la apăsarea lui ''​PB2''​
-    * Hint: Configurați Timer1 în mod //CTC// cu top la ''​OCR1A''​. Calculați prescaler-ul și valoarea lui ''​OCR1A''​ pentru a genera întreruperi cu perioada de o secundă. +    * Hint: Configurați Timer1 în mod //CTC cu top la OCR1A//. Calculați prescaler-ul și valoarea lui ''​OCR1A''​ pentru a genera întreruperi cu perioada de o secundă. 
-    * <​hidden>​Nu este prea clara cerinta in ceea ce priveste butonul PD6. Cronometrul isi reia executia la apasarea lui PB2 si nu mai fuctioneaza la apasarea PD6? R: Da</​hidden>​ +    * <​hidden>​Nu este prea clara cerinta in ceea ce priveste butonul PD6. Cronometrul isi reia executia la apasarea lui PB2 si nu mai fuctioneaza la apasarea PD6? R: Da (actualizat)</​hidden>​ 
-  - **(2p)**. Dorim ca led-ul conectat la ''​PB2''​ să funcționeze după următoarea regulă: dintr-o perioadă de o secundă, LED-ul va sta aprins 200 ms. Pentru a implementa acest comportament,​ vom avea nevoie de al doilea registru de comparație al Timer1, OCR1B. Calculați valorile care ar trebui scrise în registrele ''​OCR1A''​ și ''​OCR1B''​ și implementați/​modificați rutinele de tratare a întreruperilor astfel încat să obținem acest comportament. +  - **(2p)**. Dorim ca LED-ul conectat la ''​PB2''​ să funcționeze după următoarea regulă: dintr-o perioadă de o secundă, LED-ul va sta aprins 200 ms. Pentru a implementa acest comportament,​ vom avea nevoie de al doilea registru de comparație al Timer1, ​''​OCR1B''​. Calculați valorile care ar trebui scrise în registrele ''​OCR1A''​ și ''​OCR1B''​ și implementați/​modificați rutinele de tratare a întreruperilor astfel încat să obținem acest comportament. 
-  - **(2p)**. Realizați o alarmă pentru cronometrul de la exercițiul anterior  +  - **(3p)**. Realizați o alarmă pentru cronometrul de la exercițiul anterior  
-    * Configurați Timer2 în mod //CTC// și activați întreruperea corespunzătoare pentru a genera un sunet cu frecvența de 625Hz folosind speaker-ul de pe placă (folosiți ISR-ul pentru a comuta pinul ''​PD4''​). +    * Configurați Timer2 în mod //CTC cu top la OCR2A// și activați întreruperea corespunzătoare pentru a genera un sunet cu frecvența de 625Hz folosind speaker-ul de pe placă (folosiți ISR-ul pentru a comuta pinul ''​PD4''​). 
-    * La expirarea timpului se va emite o alarmă folosind speaker-ul conectat la pinul ''​PD4'' ​+    * La expirarea timpului se va emite o alarmă folosind speaker-ul conectat la pinul ''​PD4''​, cu o durată de 2 secunde ​
     * La apăsarea butonului ''​PD6'',​ cronometrul și alarma vor fi dezactivate     * La apăsarea butonului ''​PD6'',​ cronometrul și alarma vor fi dezactivate
-    * <​hidden>​Nu inteleg de unde a rezultat valoarea de 186 pentru OCR2A din solutii. Din ce am calculat eu, frecventa intreruperii ar fi de 1250Hz (jumatate din perioada) si pentru aceasta valoare obtin OCR2A = 149. R: Asa este, am schimbat frecventa ca sa dea exact si nu am actualizat solutia </​hidden>​ +    * <​hidden>​Nu inteleg de unde a rezultat valoarea de 186 pentru OCR2A din solutii. Din ce am calculat eu, frecventa intreruperii ar fi de 1250Hz (jumatate din perioada) si pentru aceasta valoare obtin OCR2A = 149. R: Asa este, am schimbat frecventa ca sa dea exact. Am actualizat solutia</​hidden>​ 
-  - **(1p)**. Afișați pe LCD starea cronometrului (timp rămas, activat/​dezactivat)+  - **(1p)** ​Bonus. Afișați pe LCD starea cronometrului (timp rămas, activat/​dezactivat)
     * Afișarea pe LCD se va realiza în bucla principală,​ la fel ca în [[pm:​lab:​lab1|laboratorul 1]]     * Afișarea pe LCD se va realiza în bucla principală,​ la fel ca în [[pm:​lab:​lab1|laboratorul 1]]
     * Obs. Afișarea pe LCD este "​independentă"​ și nu afectează redarea sunetului sau precizia cronometrului.     * Obs. Afișarea pe LCD este "​independentă"​ și nu afectează redarea sunetului sau precizia cronometrului.
-  - **(2p)** Bonus Timer. ​+
  
 <​hidden>​ <​hidden>​
Line 530: Line 533:
     * Ce observați că se întampla cu LED-ul? De ce?     * Ce observați că se întampla cu LED-ul? De ce?
     * Ce valoarea trebuie sa îi atribuim lui ''​ICR1''​ pentru a obține comportamentul dorit în enunț?     * Ce valoarea trebuie sa îi atribuim lui ''​ICR1''​ pentru a obține comportamentul dorit în enunț?
 +    * [AP] este gresit enuntul sau este "​misleading",​ deoarece nu poate genera overflow cu ICR1 = 50000
   - **(1p + bragging rights)**. În directorul scheletului se generează fișierul ''​lab2.lss'',​ reprezentând codul ASM asociat laboratorului. Numărați ciclii de procesor necesari rulării codului din handler-ul întreruperii de overflow a timer-ului 1. Modificați codul sursă C și folosiți ''​ISR_NAKED''​ pentru a reduce durata handler-ului.   - **(1p + bragging rights)**. În directorul scheletului se generează fișierul ''​lab2.lss'',​ reprezentând codul ASM asociat laboratorului. Numărați ciclii de procesor necesari rulării codului din handler-ul întreruperii de overflow a timer-ului 1. Modificați codul sursă C și folosiți ''​ISR_NAKED''​ pentru a reduce durata handler-ului.
 </​hidden>​ </​hidden>​
pm/lab/lab2.txt · Last modified: 2020/03/08 11:01 by alexandru.predescu
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