Differences

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

Link to this comparison view

pm:lab:lab3-2021 [2021/03/28 22:05]
alexandru.predescu [4. Exerciții]
pm:lab:lab3-2021 [2021/04/02 10:55] (current)
alexandru.predescu [4. Exerciții]
Line 83: Line 83:
 Astfel, tensiunea medie care ajunge la dispozitiv este dată de relația: D * Vcc. Astfel, tensiunea medie care ajunge la dispozitiv este dată de relația: D * Vcc.
  
-{{.:​lab3:​avr_pwm_01.jpg?​600|Figura 8. Semnal PWM cu diferiți factori de umplere}}+{{.:​lab3:​avr_pwm_01.jpg?​700|Figura 8. Semnal PWM cu diferiți factori de umplere}}
  
 Modularea folosește variația factorului de umplere a unui semnal dreptunghiular pentru a genera la ieșire o tensiune analogică. Considerând o formă de undă dreptunghiulară //f(t)// cu o valoare minimă //ymin=0// și o valoare maximă //ymax// și factorul de umplere //D// (ca în figură) valoarea medie a formei de undă e dată de relația: Modularea folosește variația factorului de umplere a unui semnal dreptunghiular pentru a genera la ieșire o tensiune analogică. Considerând o formă de undă dreptunghiulară //f(t)// cu o valoare minimă //ymin=0// și o valoare maximă //ymax// și factorul de umplere //D// (ca în figură) valoarea medie a formei de undă e dată de relația:
Line 160: Line 160:
  
 <note important>​ <note important>​
-Frecvența semnalului PWM depinde de prescaler și de frecvența oscilatorului. Din secțiunea 15.9.3 (pag 102), formula de calcul a frecvenței în modul Fast PWM este: +Frecvența semnalului PWM depinde de prescaler și de frecvența oscilatorului. Din secțiunea 15.9.3 (pag 102), formula de calcul a frecvenței în modul Fast PWM 8-bit este: 
  
 \begin{equation} \begin{equation}
-f_{OCnX}=\frac{f_{clk}}{N \cdot 256}+f_{OCnX}=\frac{f_{clk}}{N \cdot (TOP + 1)}=\frac{f_{clk}}{N \cdot 256}
 \end{equation} </​note>​ \end{equation} </​note>​
  
Line 209: Line 209:
 ==== AnalogWrite ==== ==== AnalogWrite ====
  
-Funcția //​analogWrite//​ din Arduino, configurează de fapt un timer în modul Fast PWM pe 8 biți și poate genera semnal PWM (doar) pe pinii asociați unuia dintre timer-e. ''​analogWrite(pin_arduino,​ value_0_255)''​ De exemplu, pe Atmega328p avem următorii pini care pot genera semnal PWM folosind funcția //​analogWrite//:​+Funcția //​analogWrite//​ din Arduino, configurează de fapt un timer în modul Fast PWM pe 8 biți și poate genera semnal PWM (doar) pe pinii asociați unuia dintre timer-e. ''​analogWrite(pin_arduino,​ value_0_255)''​ De exemplu, pe Arduino/Atmega328p avem următorii pini care pot genera semnal PWM folosind funcția //​analogWrite//:​
  
 ^ Pin Arduino ^ Pin Atmega328p ^ Timer output ^ Frecvența PWM (default) ^ ^ Pin Arduino ^ Pin Atmega328p ^ Timer output ^ Frecvența PWM (default) ^
Line 300: Line 300:
 === Task 1a (LED RGB) === === Task 1a (LED RGB) ===
  
-Conectați un LED RGB la pinii 9, 10, 11 de pe Arduino folosind câte o rezistență de 330ohm și rulați programul de mai jos:+Conectați un LED RGB catod comun la pinii 9, 10, 11 de pe Arduino folosind câte o rezistență de 330ohm și rulați programul de mai jos:
  
   * Observați modificarea culorii LED-ului   * Observați modificarea culorii LED-ului
Line 350: Line 350:
  
   * Funcția //​setLedColorHSV//​ permite modificarea culorii folosind reprezentarea alternativă HSV (Hue Saturation Value), fiind mai ușor apoi de modificat culoarea, saturația și intensitatea luminoasă. {{:​pm:​lab:​lab3_2021:​hsv.txt|setLedColorHSV}}   * Funcția //​setLedColorHSV//​ permite modificarea culorii folosind reprezentarea alternativă HSV (Hue Saturation Value), fiind mai ușor apoi de modificat culoarea, saturația și intensitatea luminoasă. {{:​pm:​lab:​lab3_2021:​hsv.txt|setLedColorHSV}}
 +  * Setați valorile pentru saturație (s) și intensitate (v) pe 1 și modificați culoarea (h) în intervalul 0-360
  
 Pentru a urmări corespondența dintre cele 2 reprezentări (RGB și HSV) există selectoare de culori precum: Pentru a urmări corespondența dintre cele 2 reprezentări (RGB și HSV) există selectoare de culori precum:
Line 413: Line 414:
 void setup() { void setup() {
   myservo.attach(9); ​ // attaches the servo on pin 9 to the servo object   myservo.attach(9); ​ // attaches the servo on pin 9 to the servo object
-  setup_interrupts();​ 
   // test led   // test led
   DDRD |= (1 << PD7);   DDRD |= (1 << PD7);
Line 438: Line 438:
 === Task 4 (Servo / buton) === === Task 4 (Servo / buton) ===
  
-Folosind întreruperile de la **Task 0**, modificați incremental poziția servomotorului (0-180):+Folosind întreruperile de la **Task 0**, modificați incremental poziția servomotorului (0-180)
   ​   ​
 {{:​pm:​lab:​lab3_2021:​button_servo.png?​600|}} {{:​pm:​lab:​lab3_2021:​button_servo.png?​600|}}
Line 444: Line 444:
   * Atenție la limite (min, max). Depășirea acestora poate avaria servomotorul.   * Atenție la limite (min, max). Depășirea acestora poate avaria servomotorul.
   * Dacă lucrați pe placă, folosiți debouncing pentru a obține o funcționare corectă (o apăsare va incrementa o singură dată poziția)   * Dacă lucrați pe placă, 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. 700-2300), 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>​ <​hidden>​
pm/lab/lab3-2021.1616958304.txt.gz · Last modified: 2021/03/28 22:05 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