logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

wav player na atmega8 lub atmega16

aftp25 30 Maj 2009 17:44 7676 20
REKLAMA
  • #1 6594892
    aftp25
    Poziom 11  
    Witam,
    chciałbym zrobić prościutki odtwarzacz wav na Atmega8 lub Atmega16, trzy krótkie pliki 300kb wav, przyporządkowane do trzech przycisków i żeby dało się jeden z nich zapętlić. Pomocy koledzy jak to ugryźć ?? Dodam że zaczynam dopiero swoją przygodę z programowaniem.
    pozdrawiam wszystkich i z góry dziękuje za pomoc, najlepiej jakby wszystko było zasilane 3-5V i miało jak najmniejsze rozmiary (potrzebuje to upchnąć w zabawce.
  • REKLAMA
  • #2 6595421
    djbpm
    Poziom 23  
    Jak na początek to nie jest to taka prosta sprawa. 300kB będzie wymagało zastosowania zewnętrznej pamięci i jej oprogramowania. Ewentualnie może upchniesz to wszystko w ATMEGA256 w 256kB pamięci wraz z programem. Odtwarzanie to np przerwanie z timera z częstotliwością np 8KHz i wystawianie nowej próbki do przetwornika C/A.
    W twoim przypadku lepiej będzie zastosować jakiś układ dedykowany do takich rozwiązań. Są takie z serii ISD.
    Pozdrawiam
  • REKLAMA
  • #3 6596123
    aftp25
    Poziom 11  
    No tak tylko ISD to drogo wychodzi a mnie zależy żeby się zmieścić w 30 PLN i ma to być proste jak drut np:
    1 przycisk pierwszy - odtwarza wav 1
    2 przycisk drugi - odtwarza wav 2
    3 przycisk trzeci - odtwarza wav 3, aż do momentu powtórnego naciśnięcia przycisku 3, to wszystko.
    pliki mają po 50 - 60 Kb
    nie muszą to być wavy jeśli będzie łatwiej skonwertować to na jakiś inny format żeby łatwiej to upchać do uC to nie ma sprawy.
    jakość dźwięku nie jest aż tak istotna.
  • REKLAMA
  • #4 6596371
    szeryf.rm
    Poziom 22  
    Najprościej moim zdaniem to zaprogramowana pamięć flash z serii AT45DB* oraz przetwornik (najprostszy to drabinka R-2R lub coś scalonego). Na koniec oczywiście końcówka mocy. Koszt całości nie przekracza wtedy 30zł, procesor atmega8.
  • #5 6601659
    AlphaX
    Poziom 12  
    Polecam rozwiązanie AVR + karta SD + jakiś przetwornik audio np TDA1543. Jeżeli to ma być tylko odtwarzanie próbek to ATMega8 spokojnie się nada. Przetwornik kosztuje poniżej 10PLN. Można odtwarzać na takiej konfiguracji próbki WAV 44.1kHz stereo.
    Tylko czy warto oprogramowywać SD dla 3 krótkich plików...
  • #6 6601864
    aftp25
    Poziom 11  
    Warto, koszty muszą być minimalne !!! dzięki za podpowiedź a czy mógłbyś mi sklecić schemat podłączenia tych urządzeń oczywiście nie za darmo !
    bardzo mi na tym zależy bo muszę skończyć projekt do końca tego tygodnia.
    Z góry dziękuje
  • #7 6601917
    AlphaX
    Poziom 12  
    Tu masz link do podobnego projektu.

    http://elektronika.kvalitne.cz/ATMEL/MODplayer/MODplayer2_eng.html

    W projekcie jest uzyta karta CF. Karte SD moze pracowac w trybie SPI. Mozna to zrobic programowo lub sprzetowo. Przetwornik tez mozna podlaczyc do SPI. Przy podlaczeniu SD i TDA do sprzetowego SPI moze byc potrzebne wiecej ramu zeby odczytac caly sektor 512B z karty. Takze bedzie potrzebny ATMega 16. Jesli jedno z urządzen bedzie korzystalo z programowego SPI to mozna probowac na ATMega8 i bajt po bajcie przesylac na przetwornik. Podlaczenie SD znajdziesz w nocie do karty.
  • #8 6602327
    serum
    Poziom 16  
    Witam, robiłem projekt odtwarzacza wav na mikrokontrolerze LPC2141 i używałem przetwornika TDA1543, odczyt z karty pamięci SD/MMC z uproszczoną obsługą plików. Tworząc ten projekt napotkałem się na następujący problem: TDA1543 ma interfejs I2S i w żaden sposób nie udało mi się go zaemulować przy użyciu SPI, udało mi się najwyżej wysyłać próbki o rozdzielczości 8bit dopełniając pozostałe zerami. Grało to nawet fajnie, ale rozdzielczość 8 bit robi różnicę jednak. Jeśli komuś udało się rozwiązać ten problem to niech da znać. Natomiast mój kolega wziął jakiś tani przetwornik DAC 12bit z TME, niededykowany do rozwiązań audio, z wejściem SPI i naprawdę brzmiało to bardzo dobrze.
  • #9 6602394
    AlphaX
    Poziom 12  
    Uzywalem TDA 1543 z ATMega 32 (sprzetowe SPI) i dzialalo ok. Probki byly wysylane 44.1kHz, stereo 16 bit.
  • #10 6602747
    aftp25
    Poziom 11  
    Koledzy mnie wystarczy dźwięk monofoniczny, tak jak pisałem na początku
    próbki mają jakieś 50-60kB, wydawało mi się że będzie to proste do zrobienia a tu tyle problemów. Trzy przyciski trzy dźwięki i mase główkowania, może jest jakiś złoty środek ?
    mam starą mp3 256MB może to się da przerobić do tego projektu ??
  • #11 6602818
    serum
    Poziom 16  
    @AlphaX piszesz w C? podzieliłbyś się kodem? bo mnie się nie udało zasymulować tej przesuniętej o 1 bit linii WS w SPI

    @aftp25 to kup tani przetwornik DAC 12bit z SPI, do przechowywania muzyki użyj jakiegoś scalaczka z pamięcią flash np AT45DB041D i do tego jakiś scalony wzmacniacz audio no i tyle, wyjdzie Cię to w granicach 20 zl nie licząc przesyłki z tme.
  • #12 6605223
    rafał
    Poziom 22  
    Więc nie jest to takie banalne i proste jak myślisz że tylko 3 przyciski i koszt 30 PLN. Tak jak koledzy piszą użyj ATMEGA8 lub dla niższego napięcia ATMEGA8L jest będzie on bardziej odpowiedni dla pamięci AT45DB* swoją drogą są one rewelacyjne. Druga sprawa zasilanie 3-5 V owszem ale głośność dźwięku ? U mnie logika czyli ATMEGA8L i AT45DB pracują na 3,3V a wzmacniacz na 6V słychać ładnie. Nie stosowałem też przetwornika Tylko puściłem dźwięk przez PWM. Koszt mojego układu to jakieś 12 PLN za elementy.
  • REKLAMA
  • #13 6605846
    AlphaX
    Poziom 12  
    @serum
    Jesli chodzi o linie WS to sterowalem nia programowo. Z SPI wykorzystalem sygnaly SCK i MOSI. Nie bardzo rozumiem o co Ci chodzi z tym przesunieciem sygnalu WS o 1 bit?? Jezeli chodzi o kod to pisze w C, ale nie mam go przy sobie :(. Napisz czym u Ciebie objawiala sie proba przeslania probki 16 bitowej, bo jak rozumiem wystepowaly jakies bledy. Jaka wersje ukladu uzywasz i ile bajtow przesylasz do przetwornika w jednej ramce??
  • #14 6605882
    aftp25
    Poziom 11  
    @rafał, super sprawa a możesz podesłać jakiś schemat tego cudu, podaruje Ci punkty albo zrewanżuje się jakoś inaczej, mam sporo elektroniki więc w drodze wymiany może coś Ci się przyda np. procesor Z80 nówka sztuka albo uC Atmega8 ?? a w ogóle to mam płytę sterującą do automatu "poker master" wraz z zasilaczem sprzedam tanio lub wymienię za taki gotowy układ do odtwarzania próbek, może kogos to zainteresuje moge wrzucić zdjęcie płyty jak będą chętni
    pozdrawiam
  • #15 6607534
    serum
    Poziom 16  
    @AlphaX chodzi mi o to:
    wav player na atmega8 lub atmega16

    Jak widać w załączonym obrazku linia WS jest przesunięta względem danych o 1 bit. W rezultacie (nie wiem czy to jest jedyna przyczyna) dźwięk jaki uzyskuję jest tak zniekształcony że słychać jeden wielki szum. Zastanawiam się jak to zrobiłeś że Tobie działa.
  • #16 6610744
    AlphaX
    Poziom 12  
    Jezeli chodzi o linie WS to nie robilem zadnego przesuniecia o jeden bit.
    odczytywalem dane z karty dla jednego kanalu i wysylalem na przetwornik. Pozniej zmiana stanu na WS, odczyt drugiego kanalu i wyslanie na przetwornik. U mnie szum wystepowal wtedy gdy zamienilem kolejnosc bajtow w kanale. Z tego co pamietam mialem wersje ukladu TDA1543A i trzeba bylo wyslac 3 bajty na kanal, dodatkowy bajt byl bez znaczenia ale trzeba go bylo wyslac, bo bez tego slychac bylo trzaski jak ze starego winyla.
  • #17 6611215
    d.d
    Poziom 20  
    serum napisał:
    @AlphaX chodzi mi o to:
    wav player na atmega8 lub atmega16

    Jak widać w załączonym obrazku linia WS jest przesunięta względem danych o 1 bit. W rezultacie (nie wiem czy to jest jedyna przyczyna) dźwięk jaki uzyskuję jest tak zniekształcony że słychać jeden wielki szum. Zastanawiam się jak to zrobiłeś że Tobie działa.


    Na tym obrazku widać też że najpierw wysyła się mniej znaczący bajt a później najbardziej znaczący bajt , aby poprawnie to robić należy zapisać wav 16bit jako Little endian jeśli będzie Big endian trzeba odczytywać z np. karty SD dwa bajty i wysyłać najpierw ten drugi a później pierwszy .

    Kiedyś też uruchamiałem DAC 16 bit ale równoległy linia danych miała 8 bit i zatrzaskiwało się dane w dwóch taktach no i też miałem taki problem że było ledwo słychać dźwięk i masę trzasków jak zmieniłem kolejność bajtów to od razu zaczęło ładnie grać.

    Co do tematu to tak jak rafał napisał wystarczy ATmega8 i wbudowany PWM najlepszy nośnik to będzie mała karta sd 16mb można taką kupić za grosze i o wiele wygodniej na nią coś wgrać niż na pamięć flash .
    Jak co to mogę wrzucić jakiś kod do obsługi karty i odtwarzania wav .
  • #18 6612189
    serum
    Poziom 16  
    @AlphaX No dobra - tutaj mnie zaskoczyłeś, gdzie w dokumentacji pisze aby wysyłać 3 bajty? Może masz lepszą dokumentację, ja nie mogę nic znaleźć o tym, w ogóle nie znalazłem czym się różni TDA1543A od TDA1543 oprócz ceny. Na necie mogę znaleźć tylko tę dokumentację http://www.alldatasheet.com/datasheet-pdf/pdf/19214/PHILIPS/TDA1543.html
    Może wysyłanie 3 bajtów rzeczywiście pomoże...

    @d.d Nie, na tym obrazku nie ma nic o kolejności wysyłania BAJTÓW, tylko o kolejności wysyłania BITÓW w bajcie. Jest napisane że jako piewszy bit po zmianie linii WS jest wysyłany najmniej znaczący bit danych z poprzedniego kanału, tak więc linia WS jest przesunięta względem danych o 1 bit. btw mój problem nie leży w kolejności wysyłania bajtów bo już to sprawdzałem.
  • #19 6612442
    d.d
    Poziom 20  
    serum napisał:
    Nie, na tym obrazku nie ma nic o kolejności wysyłania BAJTÓW, tylko o kolejności wysyłania BITÓW w bajcie.


    No tak to jest jak się nie zagląda do datasheet-u teraz zerknąłem i faktycznie masz racje .
    Nie wiem czy to widziałeś ale znalazłem kilka stronek z kodami w Asm i C
    LINK
    LINK
    LINK
    LINK
  • #20 6612639
    AlphaX
    Poziom 12  
    TDA1543 to wersja gdzie dane wejsciowe sa w formacie I2S, TDA1543A to tzw wersja z japonskim formatem EIAJ. Stad sa te roznice w przesylaniu danych.
REKLAMA