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:07]
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:montaj_lab3.png?​direct&​700|}}+{{: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).
Line 349: 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:montaj_lab3.png?​direct&​700|}}+{{: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.
Line 364: Line 357:
   * 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 375: 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 383: 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.1648400843.txt.gz · Last modified: 2022/03/27 20:07 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