Differences

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

Link to this comparison view

pm:lab:lab3-2022 [2022/03/27 20:01]
dragos_mihai.ene [4. Exerciții]
pm:lab:lab3-2022 [2023/03/19 14:41] (current)
alexandru.predescu
Line 1: Line 1:
-====== Laboratorul 3: Întreruperi externe. PWM ======+/** 
 + * uncomment this to publish the solution: 
 + * ~~SHOWSOLUTION~~ 
 + */ 
 +~~SHOWSOLUTION~~ 
 + 
 +====== Laboratorul 3: Întreruperi externe. PWM (old) ======
  
 Acest laborator are ca scop familiarizarea voastră cu lucrul cu întreruperile externe și cu modul de generare a semnalelor PWM folosind timer-ele prezente în microcontroller-ul Atmega328p. Vom folosi întreruperi externe pentru a detecta apăsarea unui buton, independent de programul principal. Folosind semnale PWM vom controla un LED RGB și poziția unui servomotor. Acest laborator are ca scop familiarizarea voastră cu lucrul cu întreruperile externe și cu modul de generare a semnalelor PWM folosind timer-ele prezente în microcontroller-ul Atmega328p. Vom folosi întreruperi externe pentru a detecta apăsarea unui buton, independent de programul principal. Folosind semnale PWM vom controla un LED RGB și poziția unui servomotor.
Line 271: Line 277:
 } }
 </​file>​ </​file>​
- 
  
  
Line 277: Line 282:
  
 === Task 0 (întreruperi / butoane) ===  === Task 0 (întreruperi / butoane) === 
-Folosiți întreruperea externă INT0 (consultați schema PINOUT) pentru a detecta apăsarea unui buton. Modificați starea LED-urilor RGB la fiecare apăsare de buton.+Folosiți întreruperea externă INT0 (consultați schema PINOUT) pentru a detecta apăsarea unui buton. Modificați starea LED-urilor RGB (ON / OFF )la fiecare apăsare de buton.
  
-  * Configurați întreruperea externă (INT) pe front descrescător (falling edge) sau PCINT-ul corespunzător pinului folosit+  * Configurați întreruperea externă (INT) pe front descrescător (falling edge)
   * La apăsarea butonului, LED-ul își schimbă starea o singură dată? Adăugați o metodă de [[https://​www.arduino.cc/​en/​Tutorial/​BuiltInExamples/​Debounce|debouncing]] pentru a detecta o singură apăsare pe buton   * La apăsarea butonului, LED-ul își schimbă starea o singură dată? Adăugați o metodă de [[https://​www.arduino.cc/​en/​Tutorial/​BuiltInExamples/​Debounce|debouncing]] pentru a detecta o singură apăsare pe buton
   * NU este recomandat să folosiți delay în ISR.    * NU este recomandat să folosiți delay în ISR. 
   * Se poate folosi funcția //​millis()//​ pentru a verifica intervalul de timp de la ultima apăsare (100 ms ar trebui să fie suficient pentru un pushbutton/​microswitch,​ dar ajustați după caz)   * Se poate folosi funcția //​millis()//​ pentru a verifica intervalul de timp de la ultima apăsare (100 ms ar trebui să fie suficient pentru un pushbutton/​microswitch,​ dar ajustați după caz)
  
-{{:pm:lab:montaj_lab3.png?​direct&​700|}} +{{:pm:lab:lab3_task0.png?​direct&​600|}}
- +
-<​hidden>​ +
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​cVPb9x8NUbX|Tinkercad Button Led Interrupts]] +
-</​hidden>​+
  
 === Task 1 (LED RGB) === === Task 1 (LED RGB) ===
-{{:pm:lab:montaj_lab3.png?​direct&​700|}}+{{:pm:lab:lab3_task1.png?​direct&​600|}}
  
 Observați ceva special în montajul de mai sus modul de conectare al led-ului RGB ? (Hint: diagrama PINOUT, PWM) Observați ceva special în montajul de mai sus modul de conectare al led-ului RGB ? (Hint: diagrama PINOUT, PWM)
Line 305: Line 306:
   * Pentru a urmări corespondența dintre cele 2 reprezentări (RGB și HSV) există selectoare de culori precum [[https://​colorpicker.me/#​3237b9|Online Color Picker]]   * Pentru a urmări corespondența dintre cele 2 reprezentări (RGB și HSV) există selectoare de culori precum [[https://​colorpicker.me/#​3237b9|Online Color Picker]]
 {{ :​pm:​lab:​hue-wheel.png?​direct&​400 |}} {{ :​pm:​lab:​hue-wheel.png?​direct&​400 |}}
- 
-<​hidden>​ 
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​2MYGBAcxapa|Tinkercad Auto RGB]] 
-</​hidden>​ 
  
 === Task 2 (Servo / sweep) === === Task 2 (Servo / sweep) ===
 +{{:​pm:​lab:​lab3_task2.png?​direct&​600|}}
  
 Rulați exemplul standard din Arduino de mai jos, prin care se modifică în mod “continuu” poziția (0-180). Rulați exemplul standard din Arduino de mai jos, prin care se modifică în mod “continuu” poziția (0-180).
  
 Modificați programul astfel încât servomotorul să se oprească atunci când ajunge în oricare din capete. Cu ajutorul interfeței seriale, se va modifica sensul de rotație.  ​ Modificați programul astfel încât servomotorul să se oprească atunci când ajunge în oricare din capete. Cu ajutorul interfeței seriale, se va modifica sensul de rotație.  ​
 +
 +<note warning>​Atenție la limitele de unghi. Depășirea acestora poate avaria servomotorul</​note>​
  
   * Se pot controla până la 12 servomotoare folosind un singur timer   * Se pot controla până la 12 servomotoare folosind un singur timer
Line 346: Line 346:
 } }
 </​file>​ </​file>​
- 
-<​hidden>​ 
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​kLxC5nzUW7L|Tinkercad Auto Servo]] 
-</​hidden>​ 
  
 === Task 3 (Servo / buton) === === Task 3 (Servo / buton) ===
 +{{:​pm:​lab:​lab3_task3.png?​direct&​600|}}
  
 Folosind o întrerupere de tip PCINT (Pin Change INTerrupt), modificați incremental poziția servomotorului (0-180 și 180-0) cu ajutorul butonului. Folosind o întrerupere de tip PCINT (Pin Change INTerrupt), modificați incremental poziția servomotorului (0-180 și 180-0) cu ajutorul butonului.
   ​   ​
-{{:​pm:​lab:​montaj_lab3.png?​direct&​700|}} +<note warning>Atenție la limitele de unghi. Depășirea acestora poate avaria servomotorul</​note>​ 
-  * Atenție la limite (min, max). Depășirea acestora poate avaria servomotorul.+
   * Folosiți debouncing pentru a obține o funcționare corectă (o apăsare va incrementa o singură dată poziția)   * Folosiți debouncing pentru a obține o funcționare corectă (o apăsare va incrementa o singură dată poziția)
   * Există și servomotoare care folosesc un alt interval de comenzi (ex. 0.7ms-2.3ms),​ se poate folosi funcția //​writeMicroseconds//​ pentru a controla direct durata pulsului. [[https://​www.arduino.cc/​en/​Reference/​ServoWriteMicroseconds|Servo.writeMicroseconds]]   * Există și servomotoare care folosesc un alt interval de comenzi (ex. 0.7ms-2.3ms),​ se poate folosi funcția //​writeMicroseconds//​ pentru a controla direct durata pulsului. [[https://​www.arduino.cc/​en/​Reference/​ServoWriteMicroseconds|Servo.writeMicroseconds]]
  
-<​hidden>​ +===== 5. Resurse =====
-**Soluția** se găsește pe [[https://​www.tinkercad.com/​things/​23y5RXDFFVl|Tinkercad Button Servo]] +
-</​hidden>​ +
- +
- +
-===== 4. Resurse =====+
  
   * {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}}   * {{:​pm:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}}
Line 371: Line 363:
 {{:​pm:​lab:​uno.jpg?​direct&​200|pinout Arduino UNO}} {{:​pm:​lab:​uno.jpg?​direct&​200|pinout Arduino UNO}}
   * Responsabili:​ [[dragos_mihai.ene@stud.acs.upb.ro | Dragoș Ene ]] | [[sebastian.gherman99@stud.acs.upb.ro | Sebastian Gherman ]]   * Responsabili:​ [[dragos_mihai.ene@stud.acs.upb.ro | Dragoș Ene ]] | [[sebastian.gherman99@stud.acs.upb.ro | Sebastian Gherman ]]
-===== 5. Linkuri utile =====+ 
 +<​solution>​ 
 +<​hidden>​Arhiva cu soluțiile o puteți descărca de aici: {{:​pm:​lab:​lab3_2021:​lab3-solved.zip}}</​hidden>​ 
 +</​solution>​ 
 + 
 +===== 6. Linkuri utile =====
  
   * [[http://​www.nongnu.org/​avr-libc/​user-manual/​group__avr__interrupts.html|AVR Libc - interrupt.h]]   * [[http://​www.nongnu.org/​avr-libc/​user-manual/​group__avr__interrupts.html|AVR Libc - interrupt.h]]
Line 379: Line 376:
   * [[https://​en.wikipedia.org/​wiki/​Comma-separated_values|CSV]]   * [[https://​en.wikipedia.org/​wiki/​Comma-separated_values|CSV]]
   * [[https://​www.arduino.cc/​en/​Reference/​ServoWriteMicroseconds|Servo.writeMicroseconds]]   * [[https://​www.arduino.cc/​en/​Reference/​ServoWriteMicroseconds|Servo.writeMicroseconds]]
 +
pm/lab/lab3-2022.1648400486.txt.gz · Last modified: 2022/03/27 20:01 by dragos_mihai.ene
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