Table of Contents

Octavian-Mihai PELIN (78565) - MP3 Player

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul de faţă reprezintă un mp3 player ce poate reda formatele MP3/AAC/WMA/FLAC/Ogg Vorbis de pe un card MicroSD cu ajutorul decoder-ului VS1053 Adafruit. Acesta este coordonat de un display TFT de 2,8 inch cu touchscreen rezistiv ce foloseşte driverele ILI9341 pentru ecran şi XPT2046 pentru senzorii de atingere. Ieşirea audio se va face printr-o mufă Jack de 3,5mm.

În acest fel, dispozitivul va avea funcţionalităţi similare, dar cu mult simplificate, cu a unui iPod Touch, acesta fiind şi motivul alegerii proiectului.

Descriere generală

TFT RGB 2.8inch cu touchscreen ILI9341+XPT2046 - acesta comunică cu microcontroller-ul prin interfaţa SPI, având nevoie de 2 semnale separate pentru ecran şi pentru senzorii de atingere. Întrucât acesta şi decodorul pot opera şi la 3.3V (touchscreen-ul operează DOAR la 3.3V), placa de PM va fi alimentată la această tensiune şi nu va mai fi nevoie de convertor logic.

Adafruit VS1053 - încorporează un modul de MicroSD şi un microfon in breakout. Vom avea nevoie doar de modului MicroSD şi puterea de decodare a lui VS1053. Acesta comunică prin SPI cu microcontroller-ul.

Hardware Design

Schema electronică

Componente

Software Design

Mediu de dezvoltare:

Librarii:

Pentru că nu am găsit varianta AVR a bibliotecilor de VS1053, touch XPT2046 şi a ecranului ILI9341, am ales să caut portarea bibliotecilor standard Arduino (Arduino Core) pentru ATmega324A. Astfel, pornind de la implementarile separate si standard ale decodorului VS1053 şi al touchscreen-ului ILI9341+XPT2046 pentru Arduino Uno, am identificat pinii necesari in placa de PM si, combinat cu MightyCore, am portat codul pe aceasta, urmând apoi folosirea acestor biblioteci în proiectul final. De-asemenea, dat fiind accesul obţinut astfel la bibliotecile Arduino, am scris codul in varianta C++ Arduino şi am trecut la Arduino IDE. Din nefericire, n-am avut suficient timp cât să trec codul la variantă mai AVR-friendly.

Codul folosit este varianta extinsă a laboratorului 4, in care se foloseşte pe SPI şi un decodor audio dedicat, adică VS1053 de la Adafruit, precum şi un ecran TFT cu touchscreen.

Rezultate Obţinute

Proiectul rezultat a avut mai multe probleme cu sincronizarea SPI şi întreruperile: biblioteca de desenare Ucglib şi cea de touchscreen XPT2046 au avut conflicte cu modul de redare în background (apel nonblocant) al VS1053, iar pentru un timp prea lung de desenare pe ecran de către Ucglib (adică blocarea magistralei SPI prea mult timp), placa se bloca complet (ecran alb, redarea oprită). Ca modificare neterminată, am evitat orice funcţie de desenare prea complexă şi am implementat verificarea spaţiului de atingere de pe ecran: treimea din stânga este Rewind, adică ia melodia de la început, treimea din mijloc este Play/Pause, iar cea din dreapta este Next. Pixeli şi linii albe vor apărea pe ecran în locul atins.

În rest, plăcuţa funcţionează decent cu un set de căşti cu mufă 3.5mm Jack, redând muzică prin acestea în mod de loop hardcodat. Deşi se poate auzi un foarte slab bâzâit pe fundal, se poate corecta acest lucru cu două condensatoare de filtrare, unul pentru fiecare canal.

Concluzii

Acest proiect m-a învăţat ceva lucruri despre managementul şi setback-urile pe care le poate avea un proiect, precum şi metode inedite de-a le depăşi. Debugging-ul poate fi destul de anevoios, mai ales pe resurse limitate şi modalităţi de detecţie slabe. Totuşi, nu-i nimic nou sub soare şi poate intra uşor în categoria “frustrant” dacă nu se ocupă cineva deja foarte pasionat de asemenea proiecte. În rest, a fost un adaos de experienţă pe timp şi bani proprii.

Download

Sursa MP3 Player (Arduino)

Jurnal

- Unificarea pe aceeaşi platformă a celor două componente multi-SPI, după testarea lor separată cu propriul Arduino Uno şi, apoi, pe placa de PM. Câteodată trebuie să-i dau Reset de mai multe ori pentru ca SPI să pornească decodorul şi ecranul în ordinea corectă. De-asemenea, draw-ul de LCD tinde să acapareze magistrala SPI, rezultând crash-uri. Controalele de redare necesită implementare minimală.

Bibliografie/Resurse