This shows you the differences between two versions of the page.
pm:lab:lab1-2021 [2021/03/15 10:08] alexandru.predescu [1. Întreruperi] |
pm:lab:lab1-2021 [2021/03/18 14:39] (current) alexandru.predescu [4. Resurse] |
||
---|---|---|---|
Line 67: | Line 67: | ||
<file c> | <file c> | ||
// exemplu de configurare pentru Timer 1 în mod CTC, care va genera întreruperi cu frecvența de 2Hz | // exemplu de configurare pentru Timer 1 în mod CTC, care va genera întreruperi cu frecvența de 2Hz | ||
- | OCR1A = 31250; // compare match register 16MHz/256/2Hz | + | OCR1A = 31249; // compare match register 16MHz/256/2Hz-1 |
TCCR1B |= (1 << WGM12); // CTC mode | TCCR1B |= (1 << WGM12); // CTC mode | ||
TCCR1B |= (1 << CS12); // 256 prescaler | TCCR1B |= (1 << CS12); // 256 prescaler | ||
- | TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt | ||
</file> | </file> | ||
| | ||
Line 218: | Line 217: | ||
void configure_timer1() { | void configure_timer1() { | ||
- | // exemplu de configurare pentru Timer 1 în mod CTC, care va genera întreruperi cu frecvența de 2Hz | + | // exemplu de configurare pentru Timer 1 în mod CTC |
- | OCR1A = 31250; // compare match register 16MHz/256/2Hz | + | // care va genera întreruperi cu frecvența de 2Hz |
+ | OCR1A = 31249; // compare match register 16MHz/256/2Hz-1 | ||
TCCR1B |= (1 << WGM12); // CTC mode | TCCR1B |= (1 << WGM12); // CTC mode | ||
TCCR1B |= (1 << CS12); // 256 prescaler | TCCR1B |= (1 << CS12); // 256 prescaler | ||
- | TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt | ||
} | } | ||
void init_timer1() { | void init_timer1() { | ||
- | TIMSK1 |= (1 << OCIE1A); | + | TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt |
} | } | ||
Line 287: | Line 286: | ||
TCNT1 = 0; | TCNT1 = 0; | ||
| | ||
- | OCR1A = 31250; // compare match register 16MHz/256/2Hz | + | OCR1A = 31249; // compare match register 16MHz/256/2Hz-1 |
TCCR1B |= (1 << WGM12); // CTC mode | TCCR1B |= (1 << WGM12); // CTC mode | ||
TCCR1B |= (1 << CS12); // 256 prescaler | TCCR1B |= (1 << CS12); // 256 prescaler | ||
Line 299: | Line 298: | ||
</file> | </file> | ||
+ | |||
+ | <hidden> | ||
+ | **Soluția** se găsește pe [[https://www.tinkercad.com/things/8ak1bNqH8kY-pm-lab1-timer-blink-led-with-interrupt/editel?sharecode=FHxu1dKVgJKS8jqUdFraMA_e-XKvoqEGVlG-9UfQmuw|Tinkercad Tinkercad blink led with interrupt]] | ||
+ | </hidden> | ||
**Task 1** Configurați Timer 1 folosind registre și întreruperea ''TIMER1_COMPA'' pentru a comanda un buzzer la o frecvență audibilă (e.g. un ton/notă muzicală între 440 și 880 Hz). Consultați acest [[https://www.intmath.com/trigonometric-graphs/music.php|link]] pentru frecvența notelor muzicale. | **Task 1** Configurați Timer 1 folosind registre și întreruperea ''TIMER1_COMPA'' pentru a comanda un buzzer la o frecvență audibilă (e.g. un ton/notă muzicală între 440 și 880 Hz). Consultați acest [[https://www.intmath.com/trigonometric-graphs/music.php|link]] pentru frecvența notelor muzicale. | ||
+ | <hidden> | ||
+ | **Soluția** se găsește pe [[https://www.tinkercad.com/things/h7t1IaSSFY2-pm-lab1-classic-tone-generator-with-interrupts/editel?sharecode=zRz6oXdPYDDqn7lZJ8836eovx3LYHD8B1TSjABJicz8|Tinkercad tone generator with interrupts]] | ||
+ | </hidden> | ||
**Task 2** Rulați programul de mai jos care configurează Timer 0 pentru a aprinde LED-ul periodic fără a folosi întreruperi: | **Task 2** Rulați programul de mai jos care configurează Timer 0 pentru a aprinde LED-ul periodic fără a folosi întreruperi: | ||
Line 330: | Line 336: | ||
</file> | </file> | ||
+ | <hidden> | ||
+ | **Soluția** se găsește pe | ||
+ | [[https://www.tinkercad.com/things/9zfCKNmXUCB-pm-lab1-timer-blink-led-no-interrupt/editel?sharecode=ByNv2zVUZcBmfh4ZMb4cDt3GjZeddiVvLR4IZsaOK0E|Tinkercad blink led without interrupt]] respectiv [[https://www.tinkercad.com/things/7FnyoP7uCT9-pm-lab1-arduino-tone-exemple/editel?sharecode=YajfkI_9Ui2nnsDfV4SdsKJyPDudPymnvPHjro8O-DM|Tinkercad tone generator without interrupts]] | ||
+ | </hidden> | ||
==== 3.2. Exerciții Arduino ==== | ==== 3.2. Exerciții Arduino ==== | ||
Line 335: | Line 345: | ||
{{:pm:lab:lab1:manage_libraries.jpeg?300|}} | {{:pm:lab:lab1:manage_libraries.jpeg?300|}} | ||
- | **Task 3** Configurați un Timer folosind biblioteca Arduino [[http://example.com|TimerOne]] astfel încât să aprindeți un LED o dată pe secundă | + | **Task 3** Configurați un Timer folosind biblioteca Arduino [[https://www.arduino.cc/reference/en/libraries/timerone/|TimerOne]] astfel încât să aprindeți un LED o dată pe secundă |
<note important>Biblioteca ''TimerOne'' nu vine preinstalată cu Arduino. Urmăriți modul de instalare a bibliotecilor externe.</note> | <note important>Biblioteca ''TimerOne'' nu vine preinstalată cu Arduino. Urmăriți modul de instalare a bibliotecilor externe.</note> | ||
Line 372: | Line 382: | ||
* {{: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 | ||
+ | * {{:pm:lab:uno.jpg?200|pinout Arduino UNO}} | ||
* Responsabili: [[Adrian.Mocanu@gmail.com | Adrian Mocanu]] | * Responsabili: [[Adrian.Mocanu@gmail.com | Adrian Mocanu]] | ||
===== 5. Linkuri utile ===== | ===== 5. Linkuri utile ===== |