Chciałbym przedstawić odtwarzacz audio plików WAV. Został on zrealizowany w oparciu o mikrokontroler ATmega32, pomimo to, że wielkość wsadu to zaledwie ok 8-9kB. Tak jednak miałem procesor pod ręką. Program napisany jest w całości w języku C bez żadnych wstawek asemblerowych. Player obsługuje dowolne karty pamięci MMC/SD w tym także MicroSD, które można włożyć w przejściówkę, tak jak to widać na filmikach poniżej. Używam tu zamiennie dwóch kart. Jednej o pojemności 32MB (tej dużej, białej) oraz MicroSD 2GB umieszczonej w niebieskim adapterze.
Playerek obsługuje wyświetlacz alfanumeryczny LCD 2x16, na którym wyświetlają się bieżące informacje takie jak: Stan pracy (play/stop), głośność (regulowana prosto w zakresie 1-4), dokładny czas trwania utworu minuty i sekundy a także nazwę odtwarzanego pliku WAV.
Całość zasilana jest napięciem +3,3V (dodam, że z przetwornic!). Układ obsługuje dodatkowo 3 klawisze oraz 8 diod LED stanowiących prosty wskaźnik wysterowania. Poniżej schemat:
Układ posiada dwa klawisze do zmiany poziomu głośności w prostych 4 zakresach od 1 do 4. Dodatkowo jest jeszcze jeden klawisz o nazwie NEXT, który służy po prostu do przełączania na kolejny utwór/plik dźwiękowy.
Samplerate - czyli prędkość samplowania dostępna w tym playerku to maksymalnie 22,050kHz. Jednak spokojnie odtwarza pliki WAV w których występuje dowolne mniejsze samplowanie .... Dodam także, że odtwarzane mogą być z powodzeniem pliki WAV zarówno STEREO jak i MONO. (wyjątkowo działają także pliki WAV z samplowaniem 44,100kHz ale tylko w trybie monofonicznym) (Bardzo fajnie słychać efekty stereofoniczne)
W załączniku dodaję także wsad do mikrokontrolera.
Do komunikacji z kartą SD korzystam ze sprzętowego SPI. Procesor taktowany jest kwarcem 16MHz. Odtwarzanie stereo obsługiwane jest za pomocą dwóch wyjść PWM od Timera1 czyli OC1A oraz OC1B. Na wyjściach pinów podłączyłem kondensatory 100uF.
Przy okazji na filmikach widać (jak dla mnie przynajmniej ciekawostkę) - taki mały sprytny głośniczek miniaturowy wsadzony w obudowę w postaci takiej hmmm jakby laleczki .... Proszę się nie śmiać, to jest gadżet mojej córki, który dostała w prezencie z zagranicy. Jakież było moje zdziwienie gdy okazało się, że to coś, posiada w sobie akumulatorek, który można ładować z USB, ale także co ważne!!! jakiś niesamowity procesor dźwięku poza samym małym wzmacniaczem. Dźwięk z tego wydobywa się niesamowity. Nawet z głośników z Laptopa nie ma takiego efektu jak z tego mikro-urządzonka. A jego głównym przeznaczeniem jest podłączanie do MP-tójek
Na filmiku słychać także dźwięki wydobywające się ze zwykłego wzmacniacza głośnikowego - aczkolwiek zdaję sobie sprawę, że po nagraniu takim jak to - i tak w pewnym sensie następuje utrata jakości.
Generalnie urządzenie PLAYEREK spisuje się świetnie, teraz dopieszczam soft. Nawet na początku filmu widać, że jeszcze nie było takich fiuczerów jak regulacja głośności klawiszami czy też przełączania utworów. Trzeba się było troszkę nagimnastykować żeby w trakcie odtwarzania dźwięków stereo przy 22kHz jeszcze płynnie obsługiwać klawisze, wyświetlanie na LCD itp.
Program działa w oparciu o PetitFAT. Inspiracją projektu był słynny już odtwarzacz WAV ze strony elm-chan
Jednak musiałem całkowicie zmienić ideę jego działania ponieważ autor tamtego projektu użył sporo wstawek asemblerowych i próba przystosowania tego do własnych potrzeb jest nieco uciążliwa. Koncepcja jest całkowicie inna ponieważ elm-chan korzysta z bufora FIFO i odczytu danych bezpośrednio z karty SD do strumienia. Ja tymczasem wykorzystałem wariant w którym mam dwa bufory i cyklicznie wczytuję ich zawartość z karty, przy czym gdy do jednego są wczytywane dane to odtwarzanie następuje z tego drugiego Sprawdza się to w praktyce. Próbowałem nawet samplowania maksymalnego czyli 44kHz jednak jakość przy takim odtwarzaniu za pomocą PWM 8-bitów praktycznie nie daje już nic w porównaniu do samplowania 22kHz. Dlatego nie męczyłem się z asemblerem żeby wyciągnąć te 44kHz.
W sumie i tak każdy plik dźwiękowy trzeba sobie przekonwertować na PC jakimś dowolnym programem (są ich setki - w tym chociażby NERO Wave Editor). Wystarczy wczytać dowolny plik MP3 i skonwertować go na: 22kHz, 16bitów, Stereo
Dla mnie najważniejsze jest to, że pięknie ale to przepięknie odtwarzana jest zwykła mowa ludzka a będę tego potrzebował do komunikatów. Zresztą zastosowań takiego prostego playerka są także tysiące.
Oczywiście ze względu na to, że zajętość FLASH po kompilacji to tylko ok 8kB to całość może zmieścić się spokojnie jak nie w ATmega88 to przynajmniej w ATmega168 jeśli chciałoby się zmniejszyć procesor.
Poniżej kilka fotek oraz FILM z akcji:
a tutaj film na którym słychać także mój głos nagrany w komputerze do pliku WAV:
aha - na filmiku - po tym jak słychać wyraźnie mój tekst, gdy coś tam mówię, następuje kolejny plik i taki dość szybki i mało wyraźny także mój tekst: "test majkrofonu" ... to też ja mówię, tyle że mówiłem chyba troszkę za szybko, a nagrywałem przez własny mikrofon i co ważne z samplowaniem tylko 6kHz - które także zostało ładnie odtworzone.
a tutaj poniżej prezentuję kolejny filmik zawierający efekty obróbki dźwięku w czasie rzeczywistym na takim samym procku ATmega32. Np zmiana głosu ;) Posłuchajcie sobie .... najpierw na początku filmu słychać ten sam tekst czytany przez 4 różne osoby a później różne efekty na żywo z ich głosem:
Czy zamierzasz napisać koleje wydanie swojej książki z nowymi opracowaniami? Ostatnio pojawiają się u Ciebie coraz to ciekawsze realizacje ale jako tzw. KITy, szkoda bo to trochę mało.
OdpowiedzUsuńNie zamierzam, już ją piszę ;)
OdpowiedzUsuńAle nie za bardzo rozumiem o co chodziło z tymi KIT'ami ???
Już tłumaczę. Pewnie jak większości chodzi o kody. Bez nich to mogę sobie polutować uruchomić i jedyny pożytek to podszkolić w lutowaniu a nie w programowaniu.
OdpowiedzUsuńA kiedy planujesz wydać? Tym razem podjadę i kupie u źródła a nie w księgarni z prośbą o autograf, jeśli nie będzie z tym kłopotu.
Dlatego warto poczekać na drugą część książki ;) tam będzie wiele ciekawych rzeczy w tym także to. Ale nie w postaci ot po prostu gotowych tylko kodów - tylko z wytłumaczeniem jeszcze zasady ich działania. To jest chyba lepsze prawda ?
OdpowiedzUsuńPewnie, że nie ma żadnego problemu z zakupem książek czy produktów u nas na miejscu. Zawsze serdecznie zapraszamy ;)
Gratuluję świetna robota,jestem pełen podziwu czytając Pana artykuły także te z forum chyba złapałem bakcyla:-)od dziecka interesowałem się elektroniką tyle że z programowaniem nie miałem praktycznie styczności,chyba pora zacząć wielką przygodę.Elektronika + programowanie mikrokontrolerów to potężne narzędzie.
OdpowiedzUsuńPozdrawiam
No no - ten bakcyl bywa złośliwy i później ciężko się z niego wyleczyć - więc trzeba uważać ;)
Usuńa niedługo wraz z nową książką także odsłona w pełni nowego WAV niesamowitego Playerka z użyciem DAC 16-bit w postaci TDA1543 oraz transmisją I2S - oj będzie się działo - ja to już ześwirowałem na punkcie pomysłów i zastosowań tego ;)
He he to trzeba trochę zwolnić bo jeszcze wyjdzie z tego śmigłowiec bojowy rodzimej produkcji,a tak na poważnie to mam mały kłopot z wybraniem jakiegoś zestawu do nauki programowania,pobawiłem się arduino w IDE ale już przestało mi to wystarczać mam zamiar kupić książkę to napewno może jakaś mała rada:-)
OdpowiedzUsuńNapisz może do mnie na maila to postaram się coś poradzić ok?
UsuńMam pytanie: gdzieś znalazłem podobny projekt tylko na ATMedze 8 i z kartą MMC. Czy można by ją zastąpić kartą microSD oczywiście zachowując poprawne podłączenie pinów (o ile są takie same lub bardzo podobne) ? Czy trzeba też zmieniać kod programu ?
OdpowiedzUsuńNa pewno można z powodzeniem zastąpić kartę SD karą microSD - zobacz sobie na ten fajny konwerterek ;)
OdpowiedzUsuńhttp://sklep.atnel.pl/pl/p/micro-SD-adapter/38
Bardzo fajna przejściówka ale pytałem o MMC na microSD a czy MMC to SD ?
UsuńMMC/SD - to to samo ;)
UsuńAha... Dziękuję za wyjaśnienie :)
Usuń"MMC/SD-to to samo" Sorki ale się czepne. Kolego, to nie jest to samo. Wprawdzie MMC jest kompatybilna programowo z SD ale nie na odwrót! Tak więc np. karta SD włożona do złącza MMC nie uruchomi się.
UsuńJak ja lubię takich "czepialskich". Pozwól zatem, że odpowiem tobie ale w twoim stylu OK?
UsuńJak się czyta takie poradniki jak "Expert Komputer Świat" to nie dziwne, że się tak czepia jak ty. Zresztą ty nawet nie wiesz za bardzo o czy mowa w tym temacie jak wynika z twojej wypowiedzi.
Ja mogę cię zapewnić panie "znawco", że niezależnie jaką kartę się włoży do mojego czytnika, tzn tego opisanego tutaj w tym artykule ale także wszystkich innych podobnych, które robię - to ZAWSZE ale to ZAWSZE nie będzie żadnej różnicy czy ktoś włoży kartę MMC czy SD ponieważ z punktu widzenia programowej obsługi, którą ja robię (nie wspomnę już o złączu) NIE MA ŻADNYCH RÓŻNIC. A nie obchodzi mnie to czy jakiś tam czytnik MMC ze starego urządzenia nie rozpozna komuś karty SD!!! bo nie to jest tematem. Tutaj mówimy o programowym dostępie do takich kart z poziomu mikrokontrolera ;)
Więc panie kochany - jeszcze raz podkreślam nie ma ŻADNEJ różnicy pomiędzy kartą SD lub MMC. Możesz użyć dowolnej a ja i tak ją obsłużę zawsze w ten sam sposób. Powiem więcej. Tak samo będą obsłużone zarówno zwykłe starsze karty SD jak i najnowsze SDHC nawet te typu CLASS 10 i szybsze.
Więc na drugi raz zanim się "przyczepisz" pomyśl ok? taka moja prośba.
Panowie znawcy.... karta SD ma wbudowane opcje Secure Digital moza tym co oferuje MMC. Oczywiście współpraca w zwykłym obszarze pamięci jest praktycznie identyczna.
UsuńCzy kod źródłowy tego cuda powinien być gdzieś tutaj dostępny?
OdpowiedzUsuńA dlaczego tak sądzisz ? że tutaj powinien być dostępny ?
UsuńBo napisałeś "W załączniku dodaję także wsad do mikrokontrolera." :D
OdpowiedzUsuńaaaaaaaaaaa no tak - ale to stary artykuł, tamten wsad miał pewien błąd - jednak już DAAAAAWNO go poprawiłem a wsad hmmm nawet nie wsad a cały kod źródłowy wraz z super dokładnym opisem znajdziesz w książce:
Usuńhttp://atnel.pl/jezyk-c-pasja-programowania.html
polecam ;)
Mam pytanie :
OdpowiedzUsuńOtóż chciałem zrobić turreta(Taki mini robot z gry Portal 2)i przyszło mi do głowy że fotorezystor nadałby się do wykrywania czy coś jest przed "Turret".
np. jak człowiek przeszedł przed "Turret'tem" to "Turret" miałby powiedzieć "I See You" lub "Entity Detected" ale był 1 mały problem : czy kondensatory się przydadzą na wyjściu dzwięku lub są wymagane czy nie bo jakość dzwięku nie jest istotna.
oczywiście że muszą być
UsuńA do czego służą ?
OdpowiedzUsuńMam atmege zasilaną 5V i chciałbym zapytać czy te kondensatory 100uF na wyjściu audio muszę zmienić na inne czy mogą być te same?
OdpowiedzUsuńNie chce uszkodzić sobie wzmacniacza, dlatego pytam.
Ale na jakie inne ? niezbyt rozumiem o czym piszesz i jak może to uszkodzić wzmacniacz ? :(
UsuńNo nie wiem ogólnie jeszcze bardzo słabo znam się na elektronice :D
UsuńZrobiłem sobie układ na Atmega328 zasilany 5V (karta SD zasilana 3.3V przez LM1117) i chciałbym to podłączyć do wzmacniacza (głośniki komputerowe) i nie wiem czy sygnał z wyjścia PD4 i PD5 nie będzie zbyt mocny przez to że zasilam układ 5V.
No to właśnie te kondensatory ci separują wzmacniacz od układu więc nie kombinuj tylko podłączaj tak jak jest. Bo co to znaczy "czy nie będzie zbyt mocny" ...
UsuńDzień dobry, ja mam pewnie banalne pytanie ale jakie to są wyprowadzenia do głośnika L oraz R i oczywiście masa, jeżeli głośniki są na dwóch przewodach? Jak to podłączyć i czy można tu posłużyć się jakimś przetwornikiem piezoelektrycznym dla wzmocnienia głosu?
OdpowiedzUsuńPanie Mirku mozna prosic o odpowiedz na ost komentarz?
OdpowiedzUsuńGłośnik jest najlepszy ale podłączyć go przez kondensatory
UsuńCzyli do obu nózek procesora podłączamy głośnik? a Mase?
UsuńJak kontrolować poziom głośności ? W kodzie z greenbooka jest jedynie informacja o efektach dzwiękowych :(
OdpowiedzUsuńPoziom głośności panie kochany - żeby robić programowo płynnie w całym zakresie i to najlepiej w skali logarytmicznej, to już musiałbyś to robić na jakimś 32-bitowym procku. Tutaj pozostaje ci sprzętowa regulacja głośności za pomocą potencjometru
UsuńDziękuję za odpowiedź, czyli ( jak to napisał Pan na początku artykułu) 4-poziomowej zmiany głośności, nie uzyskał Pan programowo ?
UsuńNo 4 poziomową na zasadzie prostego bezczelnego że tak powiem przesunięcia zawartości WAVE da się to zrobić - ale czy można to nazwać regulacją głośności ? ;) wątpię
Usuń