Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Odtwarzacz muzyki Atmega S65 SD WAV3

Tomcio7 10 Jun 2009 21:12 35132 85
phoenixcontact
  • Odtwarzacz muzyki Atmega S65 SD WAV3

    Odtwarzacz plików dźwiękowych wav 32 [kHz] stereo zapisanych w systemie plików FAT 32.

    Wykaz elementów:

    Mikroprocesor ATMEGA8 oscylator wewnętrzny 8Mhz
    Wyświetlacz graficzny 176x132 65536 kolorów
    Karta pamięci Micro-SD 1GB
    Stabilizator napięcia +5V oraz 3,3V
    Rezystory – stanowiące dzielnik napięcia
    Przyciski – umożliwiają komunikację z użytkownikiem
    Kondensatory pojemnościowe – filtracja sygnałów
    Prostownik – „wymusza” prawidłową polaryzację

    Komunikacja z użytkownikiem odbywa się przy pomocy wyświetlacza graficznego. Po włączeniu odtwarzacza dźwiękowego wyświetlana jest zapisana na karcie pamięci tapeta. Po 3 sekundach od tego momentu pokazuje się lista dostępnych plików dźwiękowych, które są zapisane na karcie SD w formacie FAT32. Obsługa systemu FAT jest niepodważalną zaletą gdyż przy pomocy komputera możemy nagrać pliki, a potem w dowolnym momencie je odtwarzać. Dźwięk jest nagrany w formacie WAV 32 tysiące próbek na sekundą dla jednego kanału, a więc dla stereo potrzebne są 64 tysiące próbki (8-bitowe) na sekundę do odtwarzania dźwięków.
    Mikroprocesor obsługę systemu FAT rozpoczyna w sektorze startowym, w którym są umieszczone informacje m.in. gdzie w pamięci znajduje się katalog główny. Po odnalezieniu katalogu głównego (głównego którym są zapisane m.in. nazwy plików) uP przeszukuje całą pamięć w poszukiwaniu muzyki. Zazwyczaj swoje poszukiwania kończy na 1 klastrze gdyż ilość plików jest stosunkowo mała. Po znalezieniu wszystkich plików zapamiętuje nazwy tylko tych które są nam aktualnie potrzebne do wyświetlenia (ograniczenia pamięciowe).
    Zazwyczaj nazwy plików są dłuższe niż 8-znaków + 3 znaki rozszerzenia, więc aby FAT32 był zgodny ze wcześniejszymi systemami plików np. FAT zastosowano specjalny sposób zapisu nazwy pliku. Odpowiedni algorytm odczytuje nazwę pliku, adres w pamięci gdzie znajduje się pierwszy sektor tego pliku oraz rozmiar. Gdy już znamy adres pliku który chcemy włączyć, kierujemy się pod to miejsce w pamięci. Program jest uproszczony ze względu na ograniczone ilości pamięci i szybkość uP więc zakładam iż kolejne klastry pliku występują kolejno po sobie – i tak w rzeczywistości jest po sformatowaniu karty.
    Próbki danych z pamięci odczytuję blokami po 256 bajtów. Do odczytywania danych zarezerwowana jest tablica 512 bajtowa, którą programowo podzieliłem na dwa bloki po 256 bajtów. Jeżeli odtwarzam daną z dolnej części tablicy to wczytuję dane z karty do starszej i vice-versa. Chroni to odtwarzacz przed niekorzystnym czekaniem na dane – gdyż odtwarzamy w czasie rzeczywistym.
    Odtwarzanie dźwięku zrealizowane jest za pomocą przerwania które jest wykonywane 32.000 razy na sekundę. Podczas każdego przerwania dane próbki dźwięku (lewy i prawy kanał) wysyłane są do wyjść PWM uP. Odtwarzanie dźwięku zrealizowane jest przy użyciu modulacji szerokości impulsów PWM. Bardzo dobrze spełnia swoją rolę – co doskonale słychać. Niedoskonałości dźwięku (praktycznie nie słyszalne spowodowane są znaczną stratną kompresją dźwięku). Zaletą tej kompresji (a raczej dekompresji – bo plik zajmuje sporo miejsca) jest to iż uP nie musi obliczać amplitudy dźwięku gdyż bitowa wartość odczytywana z pamięci nią jest. Nie tylko słyszymy, ale również w czasie rzeczywistym widzimy. Podczas wybierania muzyki lista utworów jest widoczna na wyświetlaczu, a gdy odtwarzamy to wyświetlany jest pasek postępu wraz z upływającym czasem.
    Celem tego projektu było zrealizowanie go:) oraz pokazanie jak za pomocą uP kosztującego ok. 4zł można obsłużyć jednocześnie duży kolorowy wyświetlacz graficzny, pojemną kartę pamięci z systemem plików FAT32 a przy tym posłuchać muzyki stereo.

    I film - jakość dźwięku nagranego przez kamerę(aparat) jest fatalna i proszę się tym nie sugerować. Dźwięk oczywiście odbiega od jakości mp3 - ale jak na modulację PWM jest znakomity, płynny i barwny. Niedoskonałości w odtwarzaniu dotyczą jedynie formatu zapisu.



    Odtwarzacz muzyki Atmega S65 SD WAV3 Odtwarzacz muzyki Atmega S65 SD WAV3 Odtwarzacz muzyki Atmega S65 SD WAV3 Odtwarzacz muzyki Atmega S65 SD WAV3 Odtwarzacz muzyki Atmega S65 SD WAV3

    </object>


    Kod programu zajmuje ok 20.000 znaków :D i od razu mówię iż nie udostępniam swoich prac:) natomiast służę radą i małym jak na razie doświadczeniem


    Tomek

    Cool? Ranking DIY
    About Author
    Tomcio7
    Level 17  
    Offline 
    Tomcio7 wrote 297 posts with rating 19, helped 8 times. Live in city Warszawa. Been with us since 2005 year.
  • phoenixcontact
  • #2
    vcppp_p
    Level 12  
    Muszę przyznać że robi wrażenie :) Mogę spytać w jakim języku pisane?
    Jako proof-of-concept świetne, ale do rzeczywistej użyteczności brakuje tu obsługi MP3 oraz fakt że po zmianach w strukturze plików bez defragmentacji się nie obejdzie (jeśli dobrze zrozumiałem? )
    Myślałeś o podłączeniu zewnętrznego układu do obsługi MP3?

    Pozdrawiam
  • #3
    lechoo
    Level 39  
    Czemu nie podłączysz zewnętrznego 16-bitowego DAC-a, np. TDA1543? Te 8 bitów to profanacja dźwięku...
  • #4
    Spacewalker
    Level 33  
    Bardzo fajne, jak widze częsci z telefonów zaczynaja miec coraz szersze zastosowanie. A moze pokus sie o scroll wheel od jakiegos starego Ipoda ?
  • #5
    tomcio922
    Level 17  
    Bardzo fajny projekt, który pokazuje "nieograniczone" możliwości Atmegi.
    Szkoda tylko, że nie zastosowałeś gniazda na kartę SD bo tak przylutowane na stałe...:cry:
  • #6
    Matejkos
    Level 20  
    Z tego co wyczytalem to jest to gniazdo ale karty micro sd zrobione z bardzo sprytny sposób z adaptera projekt wygląda świetnie podziwiam
  • phoenixcontact
  • #8
    maniek1818
    Level 22  
    Rówierz jak ktoś wcześniej wspomniał, ten algorytm systemu plików FAT jest niekompletny, brak algorytmu odczytu danych z tablicy FAT, a z doświadczenia wiem, że pliki bardzo łatwo i szybko się fragmentują, a każdorazowe wgrywanie utworów do SD po jej formatowaniu jest trochę irytujące :? . Ale naprawdę jestem pod wrażeniem. Przydałoby się zamieszczenie tutaj nagrania dokonanego przez np. wejście karty muzycznej :D
  • #9
    tomcio922
    Level 17  
    Faktycznie widać to na 1 i 2 zdjęciu, mój błąd nie zauważyłem. Choć było można zastosować gniazdo na micro SD, lecz pomysł z adapterem też jest bardzo dobrym i zarazem pomysłowym rozwiązaniem.
    Pozdrawiam
  • #10
    kamilelektryk
    Level 12  
    Jaki konkretnie jest to wyświetlacz? Od jakiegoś telefonu? Ile taki kosztuje?
  • #11
    tomcio922
    Level 17  
    Jest to wyświetlacz od Siemensa S65 a dokładniej LS020 kupisz go na Alledrogo...
  • #12
    vcppp_p
    Level 12  
    bodzio667 wrote:

    w takim razie czy byśmy mogli zboczyć kod źródłowy dla uP ? czy to jest jakaś tajemnica albo przynajmniej fragment ukazujący sposób sterowania wyświetlaczem przez uP.
    pozdro


    przecież Tomcio napisał
    Quote:
    Kod programu zajmuje ok 20.000 znaków Very Happy i od razu mówię iż nie udostępniam swoich prac:)


    Na otarcie łez, link do biblioteki obsługującej wyświetlacze od S65 dla AVR
    http://www.superkranz.de/christian/S65_Display/DisplayIndex.html

    może to przypadek że ekran jest obrócony o 90 stopni (wygoda? :) ) a może autor korzystał z tej właśnie biblioteki? ;) ...
  • #13
    elmo3000
    Level 12  
    bardzo fajny projekt :]

    Tylko szkoda ,że autor nie udostępnił kodu programu :( początkujący elektronik który w pełni nie opanował programowania nie ma szans tego napisac :( .Z drugiej strony włożyłeś w to mase pracy .Ile chciał byś za udostępnienie kodu ?
  • #14
    parafka
    Level 20  
    Sorry, że się wtrące ale ja chciałem 1pkt za kod źródłowy w jednym z moich projektów to prowizję ustawiono mi na 0 więc plik *.bas skasowałem.
    Myślę, że autor m.in. dlatego nic nie udostępni bo nawet 0.1 symbolicznego punkta nie zarobi a stracą wszyscy.
    Ja sam chciałbym looknąć "Jak to jest zrobione?" a nie mam możliwości bo regulamin blokuje postęp i wszyscy musimy wywarzać otwarte drzwi marnując czas.
    Osobiście polecam autorowi na następny projekt FLAC_player z kart SD na porządnym przetworniku D/A.
    Nawet takie coś bym mógł kupić bo te eMPe trójki fabryczne to porażka dla dźwięku.
  • #15
    Tomcio7
    Level 17  
    Nie obsługuję FATu z tablicy alokacji gdyż uP nie wyrobiłby się - w tym momencie wykorzystuję ok 80% mocy obliczeniowej, a odwołania się do pamięci Tablicy alokacji zajęłoby dodatkowe ok 40% więc pozostaje podłączenie zewnętrznego kwarcu:), ale z drugiej strony RAM jest wykorzystane w 3/4 a tu jeszcze stos itp itd.. Właśnie tutaj pojawiają się ograniczenia ATMEGI8

    Kod napisany w C - a biblioteki przezemnie:)
    Na otarcie łez niektórym - próbujących wyciągnąć odemnie kod zasłaniając się niewiedzą programistyczną... mnie nikt tego nie uczył, nikt nie dawał gotowych bibliotek. Własna praca i efekty widać elmo3000 :)

    Heh - nie potrzebne jest formatowanie dysku po wgraniu nowych wav'ów. Format przydałby się po usunięciu muzyki.

    Adapter karty nie jest przylutowany:D lecz przyklejony, a kartę można bez problemu wyjąć

    tridio: czytanie ze zrozumieniem to podstawa w tej branży ;)
  • #16
    vcppp_p
    Level 12  
    Tomcio7 wrote:
    Właśnie tutaj pojawiają się ograniczenia ATMEGI8

    to może pomyśl o jakiejś większej, projekt jest chyba tego wart :)

    Quote:

    Kod napisany w C - a biblioteki przezemnie:)

    Mógłbyś powiedzieć na czym bazowałeś pisząc własną bibliotekę do obsługi wyświetlacza? :)
  • #17
    Tomcio7
    Level 17  
    dir3ctor wrote:
    Jak juz ktos zauwazyl - dlaczego nie zewnetrzny przetwornik D/A? Skoro wlorzyles tyle pracy w sam program, to podejrzewam ze mogles usiasc te kilka godzin wiecej przed komputerem i zrobic ladna plytke PCB. Ta przejsciowka SD->uSD wiszaca w powietrzu wola o pomste do nieba - gniazdo na karte SD kosztuje 3zl!


    Wkońcu sensowna krytyka:) Koszty nie są ograniczeniem - ale poczta i czekanie na elementy jak najbardziej, a jak sobie można poradzić z tym co jest to czemu tego nie zrobić:) Moim celem było również max ograniczenie kosztów jak i elementów. Teraz zrobiłbym jeszcze inaczej - jedno napięcie 3,3V i praktycznie nie potrzebne byłyby mi elementy bierne, tylko jak lutowałem to okazało się że nie mam ATMEGI8 na 3,3V więc trochę się rozrosło.. Odtwarzanie przez PWM jest bardzo dobrym w/g mnie rozwiązaniem gdyż jakość dźwięku jest naprawdę dobra:)

    Jak dekodować mp3? - bo programowo napewno nie uda się. Są gotowe układy dekodujące - i jak je obsługiwać?

    Korzystałem tylko z elektrody i materiałów na niej zamieszczonych - to dla tych którzy pytają się jak programować. W/g mnie najlepiej zacząć programowanie od prostych wyświetlaczy alfanumeryczych ze zdefiniowanymi znakami - bo ten wyświetlacz jest kompletnie 'goły' tzn. każdy piksel obsługuje się osobno:) a jest ich 176 * 132 =ponad 20.000
  • #18
    maniek1818
    Level 22  
    Tomcio7 wrote:

    Jak dekodować mp3? - bo programowo napewno nie uda się. Są gotowe układy dekodujące - i jak je obsługiwać?

    Oczywiście i to bardzo proste w obsłudze:
    STA015-niegdyś dostępne jako sample, lecz w tej chwili wszyscy rozsamplili :cry: (czasem widzę na eBay)
    VS1001 - składnik serii odtwarzaczy YAMPP
    Więcej układów nie pamiętam, ale na ARMie śmiało można zdekodować. :D
  • #19
    kamilelektryk
    Level 12  
    Tomcio7, to że nie chcesz publikować na elektrodzie kodu programu specjalnie mnie to nie dziwi. Ale z drugiej strony mógłbyś pokusić się o opublikowanie tego projektu na łamach jakiegoś czasopisma (EP albo EdW) z tym, że napewno taka estetyka wykonania na pewno tam nie przejdzie. musiałbyś zaprojektowac płytkę drukowaną, którą potem możesz otrzymać od redakcji za darmo jeśli spodoba im się projekt. Wtedy myślę, że wszyscy byliby zadowoleni. Ty dostałbyś kase za publikacje dokładnego opisu i kodu programu (takie są wymagania), a zainteresowane osoby miały by możliwość bardzo dokładnego poznania tego urządzenia.
  • #20
    Jacek31
    Conditionally unlocked
    A po co publikować kod programu jak ma 20 000 znaków? Kto to jest sensownie w stanie przeanalizować i coś na tym skorzystać ?
    I tak od razu został by zalany setką pytań co to jest, co to robi i po co? To bez sensu, ja już raz się tak wkopałem, a i tak pożytku z tego nie ma. Miałem w tym niby cel edukacyjny, myślałem, może ktoś się czegoś nauczy, ale i tak to nic nie dało bo wszyscy rzucili się na gotowca, zamiast próbować się czegoś nauczyć to zaczęło się kopiowanie żywcem fragmentów, a potem seria pytań czemu mi to nie działa tak jak powinno. Bo taka osoba i tak nie rozumiała podstaw programowania, a od razu chciała stworzyć nie wiadomo co.
    Co do samego projektu to fajny, nawet bardzo. Pewnie autor wykorzystał wewnętrzną pamięć wyświetlacza jako RAM dla grafiki, aby zaoszczędzić ten w procu. Jednak przydał by ci się przynajmniej ten 12MHz kwarc, no i możesz sobie wstawić ATMEGA 168 która jest właściwie Megą8 tylko ma 16KB pamięci FLASH.
  • #21
    Krzysiek16
    Level 24  
    Nie podoba mi się zasilacz. Niezablokowane stabilizatory i, o zgrozo, brak kondensatora filtrującego za prostownikiem.
    Jak chcesz tylko zabezpieczyć układ przed odwrotnym podłączeniem zasilania, to się daje 1 diodę 1N4007 za 10 groszy zamiast mostka za złotówkę. Dodatkowo, na mostku jest dwukrotnie większa strata napięcia niż na pojedynczej diodzie.
    A przy zasilaniu prądem zmiennym bez kondensatora za prostownikiem to cacko nawet Ci nie ruszy.
  • #22
    elektronik000
    Level 19  
    Projekt ciekawy. A tak swoją drogą ile znaków (z tych 20 tys.) zajmuje startowa tapeta i pozostałe grafiki?
  • #23
    Tomcio7
    Level 17  
    0 znaków :) czytam z karty
    grafiki realizowane są programowo np wyświetlanie paska postępu
    Oczywiście zdefiniowana jest tablica znaków która zajmuje ok 5% tej wartości. A nazwy zmiennych funkcji... nie są jednoliterowe więc stąd ta liczba - program zajmuje ok 5kB FLASH

    Krzysiek16 - mam ponad 100 prostowników więc nie będę 'rozbierał go' by diodę wyciągnąć ;) Zasilam oczywiście z zasilacza który odpowiednie filtry posiada - tak mi się przynajmniej wydaje:)
  • #24
    kamilelektryk
    Level 12  
    Kolego Tomcio7, mógłbyś napisać na jakim sterowniku jest oparty ten wyświetlacz od S65, żebym mógł sobie datasheeta poszukać? A może mógłbyś się podzielić takowym datasheetem jeśli posiadasz?
  • #25
    Krzysiek16
    Level 24  
    Tomcio7 - jeżeli zastosowałeś mostek, bo masz ich dużo, to ok. Ale kondensatory do każdego stabilizatora by się przydały. Zajmiesz się więcej techniką analogową, to je docenisz :) Powodzenia przy następnych konstrukcjach!
  • #26
    Jacek31
    Conditionally unlocked
    Oj czepiacie się szczegółów, projekt pewnie będzie jeszcze rozwijany przez autora i dopiero jak uzna że jest OK to zrobi sobie odpowiednią płytka i obudowę. Nie wiem czy zauważył ktoś ale układ jest zrobiony na uniwersalce więc to raczej wersja testowa.
  • #27
    Piquś
    Level 18  
    Witam!

    Kapitalna sprawa - naprawdę ciekawy projekt. Idąc tokiem rozumowania autora - wykorzystanie PWM - mega8 posiada także 16 bitowy PWM (timer1). Stąd można by się pokusić o stworzenie podobnego urządzenia, odtwarzającego monofoniczne próbki 16-sto bitowe, przy np. 22kHz. Jakość byłaby z pewnością lepsza, szczególnie zakładając odtwarzanie tylko mowy ludzkiej. Można by to później zastosować jako nieskomplikowany moduł "komunikacji" czy sygnalizacji głosowej w większych projektach. A dodając jeszcze możliwość nagrywania dźwięku poprzez wewnętrzny ADC (niestety max. 10 bitów) byłby to już prawdziwy wypas. :D
    Tak czy inaczej, gratuluję pomysłu i wykonania (szczególnie soft zasługuje na uwagę), chociaż przyznam szczerze, że dedykowane PCB było by miłym akcentem. :)

    -Pozdrawiam
    -Piqus.
  • #28
    lechoo
    Level 39  
    Piquś wrote:
    (...) mega8 posiada także 16 bitowy PWM (timer1). Stąd można by się pokusić o stworzenie podobnego urządzenia, odtwarzającego monofoniczne próbki 16-sto bitowe, przy np. 22kHz.

    Nie ma takiej możliwości - częstotliwość taktująca taki 16-bitowy PWM musiałaby grubo przekroczyć 1GHz! Jeśli już to można pokombinować z wagowym (1:256) sumowaniem sygnałów z dwóch przetworników PWM 8-bitowych - kiedyś w ten sposób na Amidze emulowało się przetwornik 14-bitowy.
    Ale czy jest sens się tak bawić, skoro za kilka zł można kupić przyzwoity 16-bitowy przetwornik audio?
  • #29
    Tomcio7
    Level 17  
    Co z tego że byłby nawet tryb 16-bitowy PWM (chociaż o ile dobrze pamiętam max jest 10bitowy.. może się mylę)
    F zegara to 8 000 000 podzielona przez 65536 to ok 122 - czyli max 122 próbki na sekundę - to dopiero profanacja dźwięku. Pozatym nie oszukujmy się to jest tryb PWM - i 16 czy 24 bity tutaj nic nie pomogą - chociaż jakość dźwięku jest jak dla mnie na 5+ :)
  • #30
    marf41
    Level 11  
    Nie mogę powiedzieć, że czegoś takiego jeszcze nie było, ale gratuluje koledze chęci - pisania wszystkiego "od zera".
    A jeśli chodzi o poprawę jakości - jak nie gotowe IC to może chociaż drabinka R-2R?