Differences

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

Link to this comparison view

pm:lab:lab1 [2020/02/28 15:41]
ana.constantinescu [USART]
pm:lab:lab1 [2020/03/03 14:31] (current)
daniel.berbece [5. Resurse]
Line 26: Line 26:
 Transmisia asincronă de date se face la nivel de **cadre**(frames),​ fiecare cadru fiind format din mai mulți biți, având formatul descris în figură. Transmisia asincronă de date se face la nivel de **cadre**(frames),​ fiecare cadru fiind format din mai mulți biți, având formatul descris în figură.
  
- {{ .:lab1:seriala.png | Transmisia serială }} + {{ .:lab1:uart_ctranca.png | Transmisia serială }} 
  
  
Line 101: Line 101:
 ''​UBRRn''​ este registrul care selectează **baud rate**-ul. Are 12 biți. Primii 4 se află în ''​UBRRnH'',​ ceilalți 8 în ''​UBRRnL''​. Valoarea pe care o scriem în ''​UBRRn''​ depinde de frecvența procesorului și de baud rate-ul dorit. În tabelul următor găsiți valorile pentru frecvența de 16 Mhz. ''​UBRRn''​ este registrul care selectează **baud rate**-ul. Are 12 biți. Primii 4 se află în ''​UBRRnH'',​ ceilalți 8 în ''​UBRRnL''​. Valoarea pe care o scriem în ''​UBRRn''​ depinde de frecvența procesorului și de baud rate-ul dorit. În tabelul următor găsiți valorile pentru frecvența de 16 Mhz.
  
-{{ .:lab1:baud_rate.png?nolink |}}+<note tip> 
 +Pentru valorile UBRR pentru 12MHz cautati valorile in acest {{https://​cache.amobbs.com/​bbs_upload782111/​files_22/​ourdev_508497.html | link}} 
 +</​note>​ 
 +{{ pm:lab:lab1:pm-lab01-baudrate.png?nolink |}}
  
 ==== 2.2 Exemplu de utilizare ==== ==== 2.2 Exemplu de utilizare ====
Line 107: Line 110:
 void USART0_init(unsigned int baud) { void USART0_init(unsigned int baud) {
     /* setează baud rate */     /* setează baud rate */
-    ​UBRR0H ​(unsigned char)(baud>>​8);​ +    ​UBRR0 = baud; 
-    UBRR0L = (unsigned char)baud; +    /* UBRR0 este un registru pe 16 biți, la nivel de compilator se vor face doua scrieri de 8 biti */
-    /* UBRR0 este un registru pe 16 biți +
-    Alternativ se poate scrie UBRR0 = baudpentru că la nivel de compilator ​ +
-    ​se vor face două scrieri de 8 biți */+
  
     /* pornește transmițătorul */     /* pornește transmițătorul */
Line 342: Line 342:
       * secțiunea 19.11 este referința pentru registrele I/O       * secțiunea 19.11 este referința pentru registrele I/O
  
-==== USART ==== +** Task 0  **(1p)
-** Task 0  **(1.5p)+
 Rulați exemplul pentru USART. Pentru configurările serialei, vedeți fisierul usart.c din schelet. Rulați exemplul pentru USART. Pentru configurările serialei, vedeți fisierul usart.c din schelet.
  
 **Task 1 **(3p) **Task 1 **(3p)
-Configurați USART0 cu următorii parametri: baud rate 19200, 8 biți de date, bit de stop, paritate ​pară. Transmiteți către PC câte un mesaj pentru fiecare eveniment de apăsare/​lăsare a unui buton (ex: se apasă PD6, se transmite “PD6 apăsat”, se lasă PD6, se transmite “PD6 lăsat”, câte o singură dată pe apăsare).+Configurați USART0 cu următorii parametri: baud rate 19200, 8 biți de date, bit de stop, fara paritate. Transmiteți către PC câte un mesaj pentru fiecare eveniment de apăsare/​lăsare a unui buton (ex: se apasă PD6, se transmite “PD6 apăsat”, se lasă PD6, se transmite “PD6 lăsat”, câte o singură dată pe apăsare).
  
-**Task 2 **(2.5p)+**Task 2 **(2p)
 Comandați prin serială generarea in cod Morse a numelui vostru, folosind buzzer-ul. ​ Comandați prin serială generarea in cod Morse a numelui vostru, folosind buzzer-ul. ​
 <​note>​ <​note>​
Line 355: Line 354:
 </​note>​ </​note>​
  
-**Task 3: **Bonus USART (1p)+**Task 3 **(1p)  
 +Rulați exemplul pentru LCD. 
 + 
 +**Task 4** (3p)  
 +Implementați funcțiile din bibliotecă:​ 
 +  * LCD_putCharAt  
 +  * LCD_printAt  
 +Puteți folosi funcțiile LCD_writeInstr și LCD_writeData. 
 +  - Utilizați funcțiile implementate pentru a afișa un mesaj pe prima linie a LCD-ului.  
 +  - Folositi implementarea anterioara pentru a afisa un mesaj trimis pe USART. 
 +<note > 
 +Mesajul trebuie să poată fi deplasat la stânga cu butonul PB2 și la dreapta cu butonul PD6. Limitați deplasarea mesajului astfel încât acesta să nu iasă de pe ecran. 
 +</​note>​ 
 + 
 +<note tip> 
 + ​Trebuie să folosiți o instrucțiune a LCD-ului (apelată cu ''​LCD_writeInstr''​) pentru a poziționa cursorul la poziția dorită, apoi să scrieți datele către LCD (cu ''​LCD_writeData''​). Codul instrucțiunilor LCD le puteți vedea fie în <tabref instructiuni_lcd>,​ fie în fișierul ''​lcd.h''​ prezent în scheletul de laborator. 
 +</​note>​ 
 + 
 + 
 +**Task 5: **Bonus USART (1p)
 Configurați printf astfel încât să printeze direct pe USART0. Refaceți exercițiul 1 folosind printf. Configurați printf astfel încât să printeze direct pe USART0. Refaceți exercițiul 1 folosind printf.
  
Line 390: Line 408:
 </​note>​ </​note>​
 </​spoiler>​ </​spoiler>​
- 
- 
- 
- 
-==== LCD ==== 
- 
-**Task 0 **(1.5p) ​ 
-Rulați exemplul pentru LCD. 
- 
-**Task 1** (2.5p) ​ 
-Implementați funcțiile LCD_putCharAt și LCD_printAt din bibliotecă. Puteți folosi funcțiile LCD_writeInstr și LCD_writeData. Utilizați funcțiile implementate pentru a afișa un mesaj pe prima linie a LCD-ului. Mesajul trebuie să poată fi deplasat la stânga cu butonul PB2 și la dreapta cu butonul PD6. Limitați deplasarea mesajului astfel încât acesta să nu iasă de pe ecran. 
- 
-<note tip> 
- ​Trebuie să folosiți o instrucțiune a LCD-ului (apelată cu ''​LCD_writeInstr''​) pentru a poziționa cursorul la poziția dorită, apoi să scrieți datele către LCD (cu ''​LCD_writeData''​). Codul instrucțiunilor LCD le puteți vedea fie în <tabref instructiuni_lcd>,​ fie în fișierul ''​lcd.h''​ prezent în scheletul de laborator. 
-</​note>​ 
  
  
Line 410: Line 413:
 ===== 5. Resurse ===== ===== 5. Resurse =====
  
-  * {{.:lab1:lab1_skel.zip | Schelet laborator}}+  * {{:pm:lab:​lab1_skel2020.zip | Schelet laborator}}
 <​hidden> ​ * {{.:​lab1:​lcd_schema.zip| Schemă simulare}} ({{.:​lab1:​lcd_schema_2012.zip| varianta 2012}}, cu ATmega16, pentru versiunile de Proteus vechi)</​hidden>​ <​hidden> ​ * {{.:​lab1:​lcd_schema.zip| Schemă simulare}} ({{.:​lab1:​lcd_schema_2012.zip| varianta 2012}}, cu ATmega16, pentru versiunile de Proteus vechi)</​hidden>​
   * {{.:​lab1:​hd44780_datasheet.pdf| Datasheet Hitachi 44780}}   * {{.:​lab1:​hd44780_datasheet.pdf| Datasheet Hitachi 44780}}
   * {{:​pm:​doc8272.pdf | Datasheet ATmega324}}   * {{:​pm:​doc8272.pdf | Datasheet ATmega324}}
 +  * {{https://​cache.amobbs.com/​bbs_upload782111/​files_22/​ourdev_508497.html | AVR Baud Rate Tables}}
 <​hidden> ​ * <​html><​a class="​media mediafile mf_pdf"​ href="/​wiki/​pm/​lab/​lab1?​do=export_pdf">​PDF laborator</​a></​html></​hidden>​ <​hidden> ​ * <​html><​a class="​media mediafile mf_pdf"​ href="/​wiki/​pm/​lab/​lab1?​do=export_pdf">​PDF laborator</​a></​html></​hidden>​
   * Responsabili:​ [[dorin_marian.ionita@cs.pub.ro | Dorin Ionita]] [[ Ana Dragan ]]   * Responsabili:​ [[dorin_marian.ionita@cs.pub.ro | Dorin Ionita]] [[ Ana Dragan ]]
  
pm/lab/lab1.1582897303.txt.gz · Last modified: 2020/02/28 15:41 by ana.constantinescu
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