Documente Academic
Documente Profesional
Documente Cultură
OBIECTIV
În acest laborator, se va proiecta un player audio folosind numărătorul (timer), semnale PWM și întreruperi.
Playerul audio va reda o simplă piesă muzicală folosind difuzorul și va reprezenta de asemenea, melodia muzicii cu
ajutorul LED-urilor. Două potențiometre sunt utilizate pentru reglarea vitezei muzicii și, respectiv, a volumului.
Potențiometre 1 și 2 Speaker
DETALII DE IMPLEMENTARE
HARDWARE
FREEDOM KL25Z
Modulul Timer
Indiferent de capacitate sa, modulul TIMER poate funcționa în două moduri: ca numărător (counter) sau ca
temporizator (timer). Un timer monitorizează semnale care au o distribuție în timp constantă și uniformă (semnale
de tact). Un counter monitorizează semnale care au o distribuție aleatoare în timp (semnale de la dispozitive
externe).
Pulse Width Modulation (PWM) este un termen utilizat pentru descrierea unui tip de semnal digital. Modularea
lățimii pulsului este utilizată într-o varietate de aplicații, inclusiv circuite de control sofisticate. Un exemplu de
utilizare constă în controlul intensității luminoase a LED-uri RGB sau pentru a controla direcția unui servomotor.
Modularea lățimii pulsului permite variația cât timpului în care semnalul este activ într-un mod analog. În timp ce
semnalul poate fi doar high (de obicei 5V) sau low (0V) în orice moment, se poate schimba proporția de timp în
care semnalul este High.
Un semnal periodic este definit de frecvență (f) și perioadă (T): x(t) = x(t+T).
Frecvența reprezintă numărul de apariții ale unui eveniment în cadrul unei unități de timp (Hertz sau cicluri/sec).
Perioada este inversul frecvenței f = 1/T.
Un alt concept important este reprezentat de factorul de umplere – duty-cycle (procentele dintr-o perioadă când
semnal este activ).
FUNCȚII SOFTWARE
Pentru a reda muzică, este necesar să se definească o listă de note care pot fi utilizate pentru redare, inclusiv
notele muzicale (frecvența sunetului, de exemplu, do, re, mi, fa, sol, la, si) și lungimea pauzelor (beat-ului). Pentru
a face acest lucru, trebuie să se ajustaze perioada PWM, astfel încât să poată produce o frecvență corectă pentru
fiecare notă muzicală și perioada de beat pentru a produce ritmul dorit. După definirea notei muzicale și a lungimii
pentru pauze, se poate utiliza o melodie cunoscută, de exemplu Jingle Bells.
CODUL APLICAȚIEI
# define Do 0.5
# define Re 0.45
# define Mi 0.4
# define Fa 0.36
…
# define No 0
• Realizare melodie
• Scriere ISR pentru time ticker ISR, care va fi apelată periodic, după fiecare notă muzicală.
o Actualizare lungime pauză pentru următoarea notă muzicală (reconfigurare timp de întrerupere)
o Intrările celor două potențiometre vor fi utilizate pentru reglarea volumului și a vitezei.
• În programul principal
#include "mbed.h"
//Static variable
static int k;
/*----------------------------------------------------------------------------
Interrupt Service Routine
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
MAIN
*----------------------------------------------------------------------------*/
int main() {
timer.attach(&timer_ISR, 1); //Initializare time ticker
while (1)
__WFI(); //sleep-on-exit
}
Teme: