This shows you the differences between two versions of the page.
|
pm:prj2026:tarik_ilhan.omer:mihai_roland.groza [2026/05/03 04:21] mihai_roland.groza |
pm:prj2026:tarik_ilhan.omer:mihai_roland.groza [2026/05/03 05:16] (current) mihai_roland.groza |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| <note> | <note> | ||
| - | Boxa Smart Spectrum este o boxa inteligenta ce poate stoca si reda piesele tale favorite. | + | Spectrum este o boxa inteligenta ce poate stoca si reda piesele tale favorite. |
| Este un dispozitiv portabil cu o interfata prietenoasa ce poate fi folosit in timp ce iti faci temele, in timpul unui antrenament sportiv | Este un dispozitiv portabil cu o interfata prietenoasa ce poate fi folosit in timp ce iti faci temele, in timpul unui antrenament sportiv | ||
| sau pur si simplu cand ai chef sa asculti muzica. | sau pur si simplu cand ai chef sa asculti muzica. | ||
| Line 19: | Line 19: | ||
| <note> | <note> | ||
| Lista pieselor folosite: | Lista pieselor folosite: | ||
| - | * Unordered List Item | ||
| * Placa Atmega328p Xplained | * Placa Atmega328p Xplained | ||
| * Difuzor 2W 8 Ohm Reciclat | * Difuzor 2W 8 Ohm Reciclat | ||
| * Amplificator PAM8403 | * Amplificator PAM8403 | ||
| - | * Acumulator 2200mAh Galaxy Core 2 | + | * Acumulator 2200mAh Galaxy Core 2 Reciclat |
| * Modul TP4056 incarcare Acumulator Li-Ion | * Modul TP4056 incarcare Acumulator Li-Ion | ||
| * Modul KY-040 Encoder | * Modul KY-040 Encoder | ||
| Line 38: | Line 37: | ||
| {{:pm:prj2026:groza_mihai.roland:schema_electrica.png?nolink&650|}} | {{:pm:prj2026:groza_mihai.roland:schema_electrica.png?nolink&650|}} | ||
| - | Deoarece microcontroller-ul Atmega328p nu prezinta periferice cu iesiri analogice, sunetul este generat folosind un semnal modulat PWM. Frecventa este de 65kHz pentru a putea include banda sonora (20Hz - 22kHz). Semnalul este trecut printr-un filtru trece jos pentru a pastra doar componenta continua. Alegem frecventa de taiere ~ 7 kHz si punem un filtru de ordin 2 pentru a obtine o rejectie mai buna a armonicelor. | + | Bateria trebuie incarcata folosind un IC special TP4056 pentru a putea fi utilizata. Tensiunea este ridicata la 5V folosind un regulator in comutatie de tip boost, folosind chip-ul MT3608. Un comutator este folosit pentru a porni/opri alimentarea la boxa. |
| + | |||
| + | Deoarece microcontroller-ul Atmega328p nu prezinta iesiri analogice, sunetul este generat folosind un semnal modulat PWM. Frecventa este de 65kHz pentru a putea include intreaga banda sonora (20Hz - 22kHz). Semnalul este trecut printr-un filtru trece jos pentru a pastra doar componenta continua. Alegem frecventa de taiere ~ 7 kHz si punem un filtru de ordin 2 pentru a obtine o rejectie mai buna a armonicelor. In serie cu acesta se adauga un condensator pentru a recentra semnalul in jurul 0V. | ||
| + | |||
| + | ---- | ||
| {{:pm:prj2026:groza_mihai.roland:simulare_filtru_trece_jos.png?nolink&450| }} | {{:pm:prj2026:groza_mihai.roland:simulare_filtru_trece_jos.png?nolink&450| }} | ||
| - | Simulare unde se alterneaza duty-cycle-ul PWM pentru a genera un semnal alternativ la iesire. Se poate observa ca | + | Simulare in [[https://www.falstad.com/circuit/|Falstad]] unde se alterneaza duty-cycle-ul PWM pentru a genera un semnal analogic la iesire. Se poate observa ca |
| filtrarea nu elimina zgomotul in totalitate insa difuzorul in sine functioneaza ca un filtru trece jos, deci rezultatul este acceptabil. | filtrarea nu elimina zgomotul in totalitate insa difuzorul in sine functioneaza ca un filtru trece jos, deci rezultatul este acceptabil. | ||
| </note> | </note> | ||
| + | |||
| ===== Software Design ===== | ===== Software Design ===== | ||
| Line 50: | Line 54: | ||
| <note> | <note> | ||
| Pentru proiect am propus realizarea intregului cod bare-metal, fara sa utilizez librarii externe. Codul este realizat in Microchip Studio si Python pentru incarcarea pieselor pe cardul SD. | Pentru proiect am propus realizarea intregului cod bare-metal, fara sa utilizez librarii externe. Codul este realizat in Microchip Studio si Python pentru incarcarea pieselor pe cardul SD. | ||
| - | + | ||
| Incepand cu interfata hardware, am programat comunicarea prin I2C (i2c.h) cu display-ul cu controller SSD1306 (ssd1306.h), si am implementat o functii pentru afisarea liniilor text. Am creat propriul font, cu caractere de 6x8 pixeli, pentru a putea afisa text si imagini pe ecran. Fontul este realizat in excel si tradus ulterior in octeti. | Incepand cu interfata hardware, am programat comunicarea prin I2C (i2c.h) cu display-ul cu controller SSD1306 (ssd1306.h), si am implementat o functii pentru afisarea liniilor text. Am creat propriul font, cu caractere de 6x8 pixeli, pentru a putea afisa text si imagini pe ecran. Fontul este realizat in excel si tradus ulterior in octeti. | ||
| {{ :pm:prj2026:groza_mihai.roland:font_custom.png?nolink&200|}} | {{ :pm:prj2026:groza_mihai.roland:font_custom.png?nolink&200|}} | ||
| - | Pentru a stoca piesele, am programat o interfata SPI (spi.h), precum si instructiunile necesare comunicarii cu cardul SD (sd.h), conform SD Card Physical Specification. Fiecare fisier stocat are un header ce contine nr. total de esantioane si titlul piesei, urmat de esantioanele cantecului. Acestea sunt codificate la o rezolutie de 8 biti, 20k sample-uri pe secunda. Fiecare fisier este localizat la o locatie specifica in memorie, pentru a putea fi gasit usor. | + | Pentru a stoca piesele, am programat o interfata SPI (spi.h), precum si instructiunile necesare comunicarii cu cardul SD (sd.h), conform SD Card Physical Specification. Fiecare fisier stocat are un header ce contine nr. total de esantioane si titlul piesei, urmat de esantioanele cantecului. Acestea sunt codificate la o rezolutie de 8 biti, 20k sample-uri pe secunda, pe un singur canal. Fiecare fisier este localizat la o locatie specifica in memorie, pentru a putea fi gasit usor. |
| Utilizatorul are nevoie de o metoda de a interactiona cu dispozitivul, iar aceasta este facilitata folosind encoderul KY040. Acesta are un buton ce se poate apasa si roti pentru a realiza 3 comenzi diferite. Directia de rotatie este determinata folosind intreruperi si un automat pe stari finite (encoder.h). | Utilizatorul are nevoie de o metoda de a interactiona cu dispozitivul, iar aceasta este facilitata folosind encoderul KY040. Acesta are un buton ce se poate apasa si roti pentru a realiza 3 comenzi diferite. Directia de rotatie este determinata folosind intreruperi si un automat pe stari finite (encoder.h). | ||
| Line 61: | Line 65: | ||
| Pentru a genera sunetul, folosim 2 timere. Primul genereaza semnalul PWM si este setat la 65kHz. Al doilea provoaca executarea unei intreruperi ce modifica duty-cycle-ul pentru semnalul PWM (0 - 255). Acesta este configurat sa ruleze la 20kHz. Cu aceste 2 timere putem genera un semnal sonor plecand de la o lista de esantioane. | Pentru a genera sunetul, folosim 2 timere. Primul genereaza semnalul PWM si este setat la 65kHz. Al doilea provoaca executarea unei intreruperi ce modifica duty-cycle-ul pentru semnalul PWM (0 - 255). Acesta este configurat sa ruleze la 20kHz. Cu aceste 2 timere putem genera un semnal sonor plecand de la o lista de esantioane. | ||
| - | O alta limitare a microcontroller-ului este faptul ca contine doar 2KB de memorie RAM, insa fisierele contin milioane de esantioane. Pentru a putea reda sunetul trebuie sa citim sunetul in timp ce il difuzam. Folosim 2 buffere de 512B. La fiecare moment de timp, intr-unul citim esantioanele de pe cardul SD si din celalalt extragem valoarea necesara setarii duty-cycle-ului pentru timer-ul PWM. Odata ce buffer-ul de citire devine gol, acesta este interschimbat cu buffer-ul de scrie si programul continua. | + | O alta limitare a microcontroller-ului este ca desi acesta este dotat cu 2KB de memorie RAM, fisierele contin milioane de esantioane. Pentru a putea reda sunetul trebuie sa citim sunetul in timp ce il difuzam. Folosim 2 buffere de 512B. La fiecare moment de timp, intr-unul citim esantioanele de pe cardul SD si din celalalt extragem valoarea necesara setarii duty-cycle-ului pentru timer-ul PWM. Odata ce buffer-ul de citire devine gol, acesta este interschimbat cu buffer-ul de scrie si programul continua. |
| * (etapa 3) surse şi funcţii implementate | * (etapa 3) surse şi funcţii implementate | ||
| + | </note> | ||
| + | |||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 84: | Line 90: | ||
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 10 Aprilie - Am comandat piesele necesare |
| + | * 16 Aprilie - Am realizat toate conexiunile electrice conform schemei | ||
| + | * 25 Aprilie - Am finalizat testarea pentru fiecare component (Display, Sunet, Card SD, Encoder) | ||
| + | * 3 Mai - Inceput etapa de documentare a proiectului | ||
| </note> | </note> | ||