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 ===== | ||