Differences

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

Link to this comparison view

pm:lab:lab1-2023 [2024/03/11 18:35]
dan.tudose [2. Instrumente necesare]
pm:lab:lab1-2023 [2026/03/02 07:55] (current)
andrei.batasev [4. Exerciții]
Line 47: Line 47:
  
 Un exemplu de flux de depanare ar putea fi următorul: Un exemplu de flux de depanare ar putea fi următorul:
-  * Verificați de două ori datasheet-ul și schema. Verificati daca accesati ​registrele potrivite. O alta probleme ​poate fi conectarea ​gresita ​dintre periferice ​si pini. +  * Verificați de două ori datasheet-ul și schema. Verificati daca accesați ​registrele potrivite. O altă problemă ​poate fi conectarea ​greșită ​dintre periferice ​și pini. 
-  * In prima faza verificam daca este posibila ​depanarea folosind mesaje de debug. +  * În primă fază verificăm dacă este posibilă ​depanarea folosind mesaje de debug și/sau mesaje pe interfața serială
-  * Daca ai stiva ethernet ​poti lua in considerare folosirea SSH, NFS, etc pentru a folosi depanarea prin mesaje. +  * Dacă există ​stivă ​ethernet ​funcțională pe dispozitiv, poți lua în considerare folosirea SSH, NFS, etc pentru a folosi depanarea prin mesaje. 
-  * In cazul in care avem o stiva de reteaverificam daca avem acces la protocoale mai simple precum UART. Testam conectand ​prin UART un periferic de exemplu un PC, modul Bluetooth, LCD, etc. +  * În cazul în care nu avem o stivă ​de rețeaverificăm dacă avem acces la protocoale mai simple precum UART. Testăm conectând ​prin UART un perifericde exemplu un PC, modul Bluetooth, LCD, etc. 
-  * De asemenea in anumite ​cazuri ​de probleme hardware, putem folosi ​si depanarea prin LED-uri.+  * În cazuri ​extreme sau pentru programe foarte simple, atunci când nu avem la dispoziție nimic din ce este enumerat mai sus, putem folosi ​și depanarea prin LED-uri.
   * Izolați problema folosind instrumente de măsura: multimetre, osciloscoape,​ analizoare logice.   * Izolați problema folosind instrumente de măsura: multimetre, osciloscoape,​ analizoare logice.
-  * In cazul in care stim ca dispozitivul nostru este compatibil cu debuggere hardware (JTAG, Lauterbach, etc.) folosirea lor este de multe ori cea mai eficienta metoda ​de debug.+  * În cazul în care știm că dispozitivul nostru este compatibil cu debuggere hardware (JTAG, Lauterbach, etc.) folosirea lor este de multe ori cea mai eficientă metodă ​de debug.
  
 ===== 3. Interfața serială USART ===== ===== 3. Interfața serială USART =====
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 139: Line 141:
 {{ .:​lab1:​ubrr.png?​nolink |Registrul UBRRn}} {{ .:​lab1:​ubrr.png?​nolink |Registrul UBRRn}}
  
-''​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. Tabelul de mai jos este folosit pentru ​clock-uri ​de 8Mhz, 11.0592MHz ​si 14.7456MHz, in cazul placii ​noastre, ​clock-ul ​este de 12MHz putem cauta 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) +''​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. ​ 
-Unde F_Cpu este frecventa clock-ului, UART_BAUD_RATE este ales de noi (ex. 4800, 9600, 14400).+ 
 +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).
  
 {{ pm:​lab:​brate324.png?​nolink |Tabel baud rate}} {{ pm:​lab:​brate324.png?​nolink |Tabel baud rate}}
Line 193: 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, 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, 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 208: 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 221: 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 227: 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.
pm/lab/lab1-2023.1710174959.txt.gz · Last modified: 2024/03/11 18:35 by dan.tudose
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