This shows you the differences between two versions of the page.
|
pm:lab:lab1-2023 [2024/03/11 18:48] dan.tudose [3.1 Registre] |
pm:lab:lab1-2023 [2026/03/02 07:55] (current) andrei.batasev [4. Exerciții] |
||
|---|---|---|---|
| Line 77: | Line 77: | ||
| <note warning>Pentru ca două dispozitive, în cazul nostru PC-ul și placa de laborator, să poată comunica între ele prin USART în mod asincron, trebuie configurate **identic**. Dacă placa este configurată cu baud rate 115200, 9 biți de date, 1 bit de stop și fără paritate atunci PC-ul trebuie configurat **exact la fel** pentru a comunica.</note> | <note warning>Pentru ca două dispozitive, în cazul nostru PC-ul și placa de laborator, să poată comunica între ele prin USART în mod asincron, trebuie configurate **identic**. Dacă placa este configurată cu baud rate 115200, 9 biți de date, 1 bit de stop și fără paritate atunci PC-ul trebuie configurat **exact la fel** pentru a comunica.</note> | ||
| + | |||
| + | <note tip> **Video explicativ** (~10 min): [[https://www.ti.com/video/6313217959112|UART protocol and error overview]] </note> | ||
| ==== 3.1 Registre ==== | ==== 3.1 Registre ==== | ||
| Line 141: | Line 143: | ||
| ''UBRRn'' este registrul care selectează **baud rate**-ul și 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. | ''UBRRn'' este registrul care selectează **baud rate**-ul și 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. | ||
| - | Tabelul de mai jos este folosit pentru ceasuri de 8Mhz, 11.0592MHz și 14.7456MHz. În cazul plăcii noastre, ceasul este de 12MHz și putem căuta valoarea pentru baud rate [[https://cache.amobbs.com/bbs_upload782111/files_22/ourdev_508497.html|aici]], sau o putem calcula folosind formula: **(F_CPU/(UART_BAUD_RATE*16)-1)** | + | Tabelul de mai jos este folosit pentru ceasuri de 8Mhz, 11.0592MHz și 14.7456MHz. În cazul plăcii noastre, ceasul este de 12MHz și putem căuta valoarea pentru baud rate [[https://cache.amobbs.com/bbs_upload782111/files_22/ourdev_508497.html|aici]], sau o putem calcula folosind formula: **(F_CPU/(UART_BAUD_RATE*16)-1)**, unde F_CPU este frecvența de ceas iar UART_BAUD_RATE este ales de noi (ex. 4800, 9600, 14400). |
| - | Unde F_CPU este frecvența de ceas iar UART_BAUD_RATE este ales de noi (ex. 4800, 9600, 14400). | + | |
| {{ pm:lab:brate324.png?nolink |Tabel baud rate}} | {{ pm:lab:brate324.png?nolink |Tabel baud rate}} | ||
| Line 195: | Line 196: | ||
| ===== 4. Exerciții ===== | ===== 4. Exerciții ===== | ||
| - | {{:pm:lab:lab1-usart.zip|Schelet}} | + | {{:pm:lab:lab1-usart-2026.zip|Schelet}} |
| - | **Task 1** | + | **Task 1 (3p)** |
| - | Folosind scheletul de laborator configurează USART0 cu următorii parametri : baud rate 28800, 8 biți de date, 2 bit de stop, fără paritate. Transmiteți către PC mesajul “Butonul 1 a fost apasat” dacă butonul 1 (PB2) este apăsat. | + | Folosind scheletul de laborator configurează USART0 cu următorii parametri: baud rate 38400, 8 biți de date, 1 bit de stop, cu verificare de paritate pară. Transmiteți către PC mesajul “Butonul 1 a fost apasat” dacă butonul 1 (PB2) este apăsat. |
| <note warning> | <note warning> | ||
| Line 210: | Line 211: | ||
| <note> | <note> | ||
| - | Pentru a preciza baud rate-ul consolei seriale din VSCode cu PlatformIO, folosiți următoarea variabilă din ''platformio.ini'': | + | Pentru a preciza baud rate-ul și paritatea consolei seriale din VSCode cu PlatformIO, folosiți următoarea variabilă din ''platformio.ini'': |
| + | <code> | ||
| + | monitor_speed = 38400 | ||
| + | monitor_parity = E | ||
| + | </code> | ||
| + | |||
| + | Pentru a vedea mesajul scris de la tastatura in serial monitor puteti adauga: | ||
| <code> | <code> | ||
| - | monitor_speed = 28800 | + | monitor_echo = true |
| </code> | </code> | ||
| </note> | </note> | ||
| - | **Task 2** | + | **Task 2 (3p)** |
| Folosind scheletul de laborator, implementează o nouă funcție USART_exec(unsigned char command) care să accepte următoarele comenzi venite pe USART: | Folosind scheletul de laborator, implementează o nouă funcție USART_exec(unsigned char command) care să accepte următoarele comenzi venite pe USART: | ||
| Line 223: | Line 230: | ||
| * “off” – stinge legul rgb | * “off” – stinge legul rgb | ||
| * “red”, “green” sau “blue” – setează culoarea led-ului indicată de text | * “red”, “green” sau “blue” – setează culoarea led-ului indicată de text | ||
| + | * "blink" - aprinde si stinge ledul rgb in un mod in care se păstrează culoarea selectată mai sus (sau culoarea albă daca nu a fost nimic selectat precedent) | ||
| Pentru a controla ledul RGB aveți următorii pini: | Pentru a controla ledul RGB aveți următorii pini: | ||
| Line 229: | Line 237: | ||
| * Blue – PB3 | * Blue – PB3 | ||
| - | **Task 3** | + | **Task 3 (4p)** |
| - | Trimiteți numele vostru prin interfața serială. Folosind “morse_alphabet” din scheletul de laborator și buzzerul, generati codul Morse aferent acestuia. | + | Trimiteți numele senzorului preferat prin interfața serială. Folosind “morse_alphabet” din scheletul de laborator și buzzerul, generați codul Morse aferent acestuia. |
| **Bonus** | **Bonus** | ||
| Implementează un semafor controlat pe USART. Folosește ledul RGB de la Task-ul 1. Culoarea led-ului va fi în permanență roșie, până când mesajul "pieton" va fi primit pe USART. Când mesajul este primit, se va seta culoarea galbenă pentru 2 secunde, după aceasta culoarea verde pentru 5 secunde, revenindu-se la culoarea roșie până la primirea unui mesaj nou. În cazul în care se va primi un mesaj diferit de "pieton", se va trimite pe USART mesajul "cerere incorecta". În timpul execuției comenzii de schimbare a culorilor, mesajele pe USART vor fi ignorate. | Implementează un semafor controlat pe USART. Folosește ledul RGB de la Task-ul 1. Culoarea led-ului va fi în permanență roșie, până când mesajul "pieton" va fi primit pe USART. Când mesajul este primit, se va seta culoarea galbenă pentru 2 secunde, după aceasta culoarea verde pentru 5 secunde, revenindu-se la culoarea roșie până la primirea unui mesaj nou. În cazul în care se va primi un mesaj diferit de "pieton", se va trimite pe USART mesajul "cerere incorecta". În timpul execuției comenzii de schimbare a culorilor, mesajele pe USART vor fi ignorate. | ||