Differences

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

Link to this comparison view

cn2:laboratoare:07:exercitii [2022/12/05 20:20]
george_mircea.grosu
— (current)
Line 1: Line 1:
-<note tip> 
-**Ce trebuie modificat?​**\\ 
-Pentru rezolvarea exercițiilor 1 - 3 trebuie să modificați următoarele fișiere: 
-  * ''​timer_unit.v''​ 
-</​note>​ 
- 
-**Task 1 (2p)** Construiți logica de prescaling pentru ceasul timer-ului 0. 
- 
-**Task 2 (3p)** Decodificați biții din registrele de control ''​TCCR0A''​ și ''​TCCR0B''​. Implementați logica de selecție a modului de operare și a valorii maxime de numărare (TOP). Implementați logica de incrementare a contorului. 
- 
-<​note>​ 
-În cadrul acestui laborator vom adresa doar modurile de funcționare corespunzătoare valorilor 0, 2, 3 și 7 din WGM0. 
-</​note>​ 
- 
-**Task 3 (3p)** Implementați logica ieșirilor ''​OC0A''​ și ''​OC0B''​. 
- 
-**Task 4 (2p)** Scrieți și simulați un program în {{:​cn2:​laboratoare:​avrasm.zip|avrasm}} care: 
-  * Configurează timer-ul 0 in modul ''​fast PWM, TOP == OCR0A''​ 
-    * HINT: Ce biți controlează modul de operare al timer-ului? Ce valoare trebuie să aibă acei biți? În ce registre se află acei biți? 
-  * Setează ceasul timer-ului 0 la ''​clkI/​O / 8 (From prescaler)''​ 
-    * HINT: Ce biți controlează sursa de ceas a timer-ului? Ce valoare trebuie să aibă acei biți? În ce registru se află acei biți? 
-  * Configurează timer-ul 0 să schimbe starea pinului OC0A astfel: ''​Toggle OC0A on Compare Match''​ 
-    * HINT: Ce biți controlează pinul OC0A? Ce valoare trebuie să aibă acei biți? În ce registru se află acei biți? 
-  * Configurează timer-ul 0 să schimbe starea pinului OC0B astfel: ''​Clear OC0B on Compare Match, set OC0B at BOTTOM 
-(non-inverting mode)''​ 
-  * Setează valoarea lui OCR0A și OCR0B la 5 
-  * Simulați pentru a vedea semnalul PWM 
- 
-  - De ce nu sunt egale cele 2 semnale? 
-  - Ce se întâmplă dacă setați valoarea registrului OCR0B la 10? Explicați comportamentul observat. 
- 
-<​hidden>​ 
-  * Urcați pe plăcuță 
-  * HINT: Un LED a fost legat la ieșirea 0C0A, iar celelalte 7 LEDuri au fost legate la 1-logic (Uitați-vă in ''​nexys_top.v''​ pentru a vedea care este LEDul legat la OC0A) 
-</​hidden>​ 
- 
-<​note>​ 
-Puteți consulta din nou sectiunea 3 și datasheet-ul la capitolul 11 pentru mai multe detalii. 
-Adresele registrelor I/O noi (''​TCCR0A'',​ ''​TCCR0B'',​ ''​TCNT0'',​ ''​OCR0A'',​ ''​OCR0B''​) au fost deja trecute În ''​defines.vh'',​ însa pot fi găsite și în [[http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-8235-8-bit-AVR-Microcontroller-ATtiny20_Datasheet.pdf| datasheet]] la pagina 203 dacă este nevoie de ele. 
-</​note>​ 
-<​hidden>​ 
- 
-<note important>​ 
-Pentru a aplica un prescaler suplimentar (exterior time_unit.v),​ `SW[4:0]` (switches) au fost configurate pentru a selecta valoarea acestui prescaler. (`CTRL + SHIFT + F`  dupa `HOW_TO_USE_PRESCALER` pentru detalii de implementare. Aceasta logica este facuta deja! 
-</​note>​ 
- 
-<​note>​ 
-Pentru a usura lucrul cu adresele din IO (pentru a evita repetarea adreselor in cod), avrasm poate lucra cu aliasuri. Putem sa ne definim: 
- 
-<​code>​ 
-TCCR0A equ 0x19 
-TCCR0B equ 0x18 
-TCNT0  equ 0x17 
-OCR0A  equ 0x16 
-OCR0B  equ 0x15 
-PORTA  equ 0x02 
-DDRA   equ 0x01 
-</​code>​ 
- 
-Apoi in fisierul de input pentru avrasm putem folosi DDRA, inloc de 0x01. 
- 
- 
-Exemplu de fisier de intrare pentru avrasm: 
-<​code>​ 
- 
-TCCR0A equ 0x19 
-TCCR0B equ 0x18 
-TCNT0  equ 0x17 
-OCR0A  equ 0x16 
-OCR0B  equ 0x15 
-PORTA  equ 0x02 
-DDRA   equ 0x01 
- 
- 
-ldi r16, 0b01111111 
-out DDRA, r16       ; DDRA = 0b01111111 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
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