This shows you the differences between two versions of the page.
|
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 = baud, pentru 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, 1 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, 2 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 ]] | ||