Differences

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

Link to this comparison view

pm:lab:lab1-2022 [2022/03/13 13:13]
alexandru.predescu [3.1 Registre]
pm:lab:lab1-2022 [2022/05/01 14:26] (current)
florin.stancu
Line 1: Line 1:
-====== Laboratorul 2USART. Digital Debugging ======+/** 
 + * uncomment this to publish the solution: 
 + * ~~SHOWSOLUTION~~ 
 + */ 
 +~~SHOWSOLUTION~~
  
 +====== Laboratorul 1: USART. Digital Debugging ======
  
 Ca în toate lucrările de inginerie, bug-uri pot și vor apărea si în sisteme incorporate. În condiții de funcționare,​ este important să avem o modalitate de comunicare cu dispozitivul integrat. Pentru o imagine de ansamblu asupra metodelor de depanare posibile, vom face o scurtă introducere,​ apoi vom studia în detaliu interfața serială USART, folosită în mod uzual pentru comunicația serială dintre două dispozitive. Ca în toate lucrările de inginerie, bug-uri pot și vor apărea si în sisteme incorporate. În condiții de funcționare,​ este important să avem o modalitate de comunicare cu dispozitivul integrat. Pentru o imagine de ansamblu asupra metodelor de depanare posibile, vom face o scurtă introducere,​ apoi vom studia în detaliu interfața serială USART, folosită în mod uzual pentru comunicația serială dintre două dispozitive.
Line 38: Line 43:
 {{:​pm:​lab:​lab2_2021:​1.jpg?​400|}} {{:​pm:​lab:​lab2_2021:​1.jpg?​400|}}
  
-  * Osciloscoape ​(pentru valori dinamice - Electroboom explică mai bine decât noi) +  * Osciloscoape
-{{url>​https://​www.youtube.com/​embed/​DgYGRtkd9Vs}}+
   * Analizoare logice (pentru semnale digitale)   * Analizoare logice (pentru semnale digitale)
   * Analizoare de protocol (pentru protocoale încorporate,​ ar fi I2C, SPI, etc)   * Analizoare de protocol (pentru protocoale încorporate,​ ar fi I2C, SPI, etc)
Line 73: Line 77:
 Se transmite un **bit de start**, apoi un cuvânt de date. Urmează un **bit de partitate**,​ opțional, cu rolul de a face o verificare simplă a corectitudinii datelor, și **unul sau doi biți de stop**. ​ Se transmite un **bit de start**, apoi un cuvânt de date. Urmează un **bit de partitate**,​ opțional, cu rolul de a face o verificare simplă a corectitudinii datelor, și **unul sau doi biți de stop**. ​
  
-Microcontroller-ul ​Atmega328p ​include un periferic **USART** (Universal Synchronous-Asynchronous Receiver/​Transmitter) pentru interfața serială. În partea de inițializare a acestui periferic trebuie efectuați următorii pași:+Microcontroller-ul ​ATmega328p ​include un periferic **USART** (Universal Synchronous-Asynchronous Receiver/​Transmitter) pentru interfața serială. În partea de inițializare a acestui periferic trebuie efectuați următorii pași:
   * alegerea vitezei pentru transmisia de date - baud rate-ul (valori uzuale: 9600, 19200, 38400, 57600, 115200)   * alegerea vitezei pentru transmisia de date - baud rate-ul (valori uzuale: 9600, 19200, 38400, 57600, 115200)
   * alegerea formatului cadrului (câți biți de date, de stop, dacă va conține sau nu bit de partitate)   * alegerea formatului cadrului (câți biți de date, de stop, dacă va conține sau nu bit de partitate)
Line 149: Line 153:
 <note important>​Este de dorit alegerea unui baud rate care să poată fi obținut exact din frecvența de ceas. În caz contrar se definește o toleranță (eroarea maximă a baud rate-ului) pentru care comunicația se poate realiza în condiții acceptabile. Dacă doriți să aprofundați subiectul, găsiți multe informații [[https://​www.allaboutcircuits.com/​technical-articles/​the-uart-baud-rate-clock-how-accurate-does-it-need-to-be/​|aici]]</​note>​ <note important>​Este de dorit alegerea unui baud rate care să poată fi obținut exact din frecvența de ceas. În caz contrar se definește o toleranță (eroarea maximă a baud rate-ului) pentru care comunicația se poate realiza în condiții acceptabile. Dacă doriți să aprofundați subiectul, găsiți multe informații [[https://​www.allaboutcircuits.com/​technical-articles/​the-uart-baud-rate-clock-how-accurate-does-it-need-to-be/​|aici]]</​note>​
  
-==== 2.2 Exemplu de utilizare ====+==== 3.2 Exemplu de utilizare ====
 <file c> <file c>
 void USART0_init() void USART0_init()
Line 185: Line 189:
  
  
-==== Utilizarea interfetei seriale de pe Arduino UNO ====+==== 3.3 Utilizarea interfetei seriale de pe Arduino UNO ====
    
-Arduino UNO se conecteaza la PC prin intermediul interfetei seriale, dar utilizeaza un convertor USB-UART integrat pe placa. Prin intermediul acestei interfete si utilizand IDE-ul dedicat Arduino se poate programa ​microprocesorul, dar se poate asigura si un canal de debug. Astfel, prin mesaje simple, se poate afla starea sistemului, se pot afisa valorile variabilelor,​ sau chiar se pot trimite comenzi, interfata functionand bidirectional. Mai multe detalii se pot gasi [[https://​www.arduino.cc/​reference/​en/​language/​functions/​communication/​serial/​|aici]]+Arduino UNO se conecteaza la PC prin intermediul interfetei seriale, dar utilizeaza un convertor USB-UART integrat pe placa. Prin intermediul acestei interfete si utilizand IDE-ul dedicat Arduino se poate programa ​microcontrollerul, dar se poate asigura si un canal de debug. Astfel, prin mesaje simple, se poate afla starea sistemului, se pot afisa valorile variabilelor,​ sau chiar se pot trimite comenzi, interfata functionand bidirectional. Mai multe detalii se pot gasi [[https://​www.arduino.cc/​reference/​en/​language/​functions/​communication/​serial/​|aici]]
  
 <​note>​Configurația implicită pentru interfața serială USART folosește 8 biți de date, un bit de stop, fără paritate (8N1).</​note>​ <​note>​Configurația implicită pentru interfața serială USART folosește 8 biți de date, un bit de stop, fără paritate (8N1).</​note>​
Line 264: Line 268:
 {{:​pm:​lab:​lab1_2022:​task1.png?​600|Schema Task 1}} {{:​pm:​lab:​lab1_2022:​task1.png?​600|Schema Task 1}}
  
-<hidden+<solution>
  
-[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab2/​task1 | Solutie task1]]+Arhiva cu soluțiile o puteți descărca aici: {{:pm:​lab:​lab1_2022:​lab1-solved.zip}}
  
-</hidden>+</solution>
  
 **Task 2** (3p) **Task 2** (3p)
Line 294: Line 298:
 <note important>​Terminalul serial din Arduino este configurat implicit în mod 8N1, doar baud rate-ul fiind configurabil. Pentru a avea control mai precis asupra formatului se poate folosi un terminal serial dedicat, precum [[https://​www.putty.org/​|Putty]].</​note>​ <note important>​Terminalul serial din Arduino este configurat implicit în mod 8N1, doar baud rate-ul fiind configurabil. Pentru a avea control mai precis asupra formatului se poate folosi un terminal serial dedicat, precum [[https://​www.putty.org/​|Putty]].</​note>​
  
-<hidden +<solution>  
- +[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/task2 | Solutie task2]] 
-[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab2/task2 | Solutie task2]] +</solution>
- +
-</hidden>+
  
 **Task 3** (4p) **Task 3** (4p)
Line 305: Line 307:
   * Mesajele trimise de primul Arduino vor fi afisate în terminalul Serial conectat la cel de-al doilea Arduino, și invers.   * Mesajele trimise de primul Arduino vor fi afisate în terminalul Serial conectat la cel de-al doilea Arduino, și invers.
   * Aprindeți led-ul (PB5) pentru 500 ms atunci când este recepționat un mesaj. Pentru a nu bloca programul (și implicit recepționarea mesajelor), nu folosiți funcția delay.   * Aprindeți led-ul (PB5) pentru 500 ms atunci când este recepționat un mesaj. Pentru a nu bloca programul (și implicit recepționarea mesajelor), nu folosiți funcția delay.
-  * Atenție la realizarea conexiunilor (RX1 la TX2, TX1 la RX2și GND1 la GND2)+  * Atenție la realizarea conexiunilor ​RX/TX (RX1 la TX2, TX1 la RX2și GND (GND1 la GND2, dacă plăcile Arduino sunt conectate la PC-uri diferite) 
 +  * În caz că firele nu sunt suficient de lungi pentru a conecta direct cele două Arduino (legate în același timp la 2 PC-uri prin cabluri USB), folosiți breadboard-urile și realizați conexiunile prin mai multe fire.
  
 {{:​pm:​lab:​lab1_2022:​task3.png?​800|Schema Task 3}} {{:​pm:​lab:​lab1_2022:​task3.png?​800|Schema Task 3}}
Line 311: Line 314:
 <note tip>​Până acum am folosit interfața serială pentru a realiza comunicația dintre Arduino și PC, prin intermediul adaptorului USB-UART disponibil pe placă. Există însă situații în care se dorește conectarea unui dispozitiv extern la Arduino (de ex. un modul de comunicație radio, bluetooth, GPS, sau la modul general un alt microcontroller). <note tip>​Până acum am folosit interfața serială pentru a realiza comunicația dintre Arduino și PC, prin intermediul adaptorului USB-UART disponibil pe placă. Există însă situații în care se dorește conectarea unui dispozitiv extern la Arduino (de ex. un modul de comunicație radio, bluetooth, GPS, sau la modul general un alt microcontroller).
  
-În cazul în care nu avem nevoie de conexiunea la PC, putem conecta un al doilea dispozitiv pe liniile RX și TX. Dacă am vrea să facem debug sau să trimitem mesaje de la PC, conexiunea nu mai funcționează corect, deoarece interfața serială nu permite conectarea a mai mult de 2 dispozitive (cel puțin pe linia TX).+În cazul în care nu avem nevoie de conexiunea la PC, putem conecta un al doilea dispozitiv pe liniile RX și TX. Dacă însă am vrea să facem debug sau să trimitem mesaje de la PC, conexiunea nu mai funcționează corect, deoarece interfața serială nu permite conectarea a mai mult de 2 dispozitive (cel puțin pe linia TX).
  
-O altă constrângere este că avem o singură interfață USART pe ATmega328P, fapt pentru care vom avea nevoie de simularea unei a doua interfețe seriale în software.+O altă constrângere este că avem o singură interfață USART pe ATmega328p, fapt pentru care vom avea nevoie de simularea unei a doua interfețe seriale în software.
  
 **Găsiți un exemplu în Arduino IDE: Files > Examples > SoftwareSerial > SoftwareSerialExample** **Găsiți un exemplu în Arduino IDE: Files > Examples > SoftwareSerial > SoftwareSerialExample**
  
 </​note>​ </​note>​
- 
-<​hidden> ​ 
- 
-[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab2/​task3 | Solutie task3]] 
- 
-</​hidden>​ 
  
 **Bonus** (2p) **Bonus** (2p)
Line 331: Line 328:
  
   * {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}}   * {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}}
-  * Arduino UNO pinout +  * Arduino UNO pinout  
-  ​* ​{{:​pm:​lab:​uno.jpg?​800|pinout Arduino UNO}}+{{:​pm:​lab:​uno.jpg?​600|pinout Arduino UNO}}
   * Responsabil:​ [[alexandru.predescu@upb.ro | Alexandru Predescu]]   * Responsabil:​ [[alexandru.predescu@upb.ro | Alexandru Predescu]]
 +
 +<​solution> ​
 +[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/​task3 | Solutie task3]]
 +</​solution>​
  
pm/lab/lab1-2022.1647170027.txt.gz · Last modified: 2022/03/13 13:13 by alexandru.predescu
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