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

ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .

adambehnke 25 Jan 2012 00:51 95151 328
Computer Controls
  • #301
    slawko_k
    Level 34  
    Hej
    Zamierzam zrobić coś takiego i mam pytanko.
    Czy możliwa jest zmiana plików przy zachowaniu ciągłości grania?
    Czy otwarcie nowego pliku i odczyt z niego e trwa na tyle długo że da się o usłyszeć?
  • Computer Controls
  • #304
    danielpoland
    Level 13  
    Witam.

    Jak będę miał chwilę to zmienię program i sprawdzę.
    Dam znać potem co i jak.

    Pozdrawiam.
  • #305
    trcolin
    Level 11  
    WOBI dzięki, wszystko działa na 100% Atmega128 + 16MHz + SD 2GB + RAW na WAV + źródła z strony 7 :), jakość bardzo dobra...
  • #306
    FastProject
    Level 28  
    trcolin wrote:
    WOBI dzięki, wszystko działa na 100% Atmega128 + 16MHz + SD 2GB + RAW na WAV + źródła z strony 7 :), jakość bardzo dobra...


    Czy po zamknięciu pliku i zakończeniu odtwarzania występuje u kolegów trzask w głośniku?
  • #307
    trcolin
    Level 11  
    U mnie nie było żadnych trzasków, Można było składać całe zdania z nagranych słów.
  • Computer Controls
  • #308
    adambehnke
    Level 24  
    trcolin wrote:
    U mnie nie było żadnych trzasków, Można było składać całe zdania z nagranych słów.


    Ja mam w ten sposób zrobiony budzik dla mojej córki. Co godzinę (oczywiście nie w nocy) odtwarza komunikat o aktualnej godzinie , dodatkowo można sobie kliknąć i sprawdzić aktualny czas i datę. Bez problemu można składać całe zdania itp.
  • #309
    aklosek
    Level 13  
    A czy ktoś próbował dorzucić zewnętrzny DAC sterowany po SPI ??

    Dodano po 1 [godziny] 8 [minuty]:

    Zamiast robić to na PWM procesora??
  • #310
    werewolf15
    Level 14  
    Mam mały problem z odtwarzaniem plików na at128.

    Mam taki program:
    Code: basic4gl
    Log in, to see the code

    do tego moje biblioteki:
    1.Card_init_v2.bas
    Code: basic4gl
    Log in, to see the code

    2.Config_MMC.bas
    Code: basic4gl
    Log in, to see the code

    3.CONFIG_AVR-DOS.bas
    Code: basic4gl
    Log in, to see the code


    Tutaj schemat (procesor współpracuje z gotowym modułem SD arduino):
    ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .
    i fusebity:
    ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .
    Głośnik w obu procesorach podpinam bezpośrednio do pwm i masy.
    Powyższy program działa doskonale na at32 ale na at128 wogule.

    Dodam jeszcze że próbowałem z gotowym programem na at128 ze strony 7. Testując na at32 działa odtwarzając w spowolnionym tępie a na at 128 wogóle.
    Plik muzyczny do testów też mam ze strony 7.

    Proszę o pomoc jak przerobić mój program aby działał na at128. A może to błąd w połączeniu?
  • #311
    atom1477
    Level 43  
    Poustawiaj w różnych miejscach kodu zapalanie LEDów, to zobaczymy gdzie się kod wykrzacza.
    Bo tak to będziemy do świąt zgadywać co tam może być źle.
  • #312
    werewolf15
    Level 14  
    No i jest dziwna sprawa ...

    Dioda testowa świeci najpierw informując o dojściu do podprogramu "odtwarzacz" potem informuje o utworzeniu pliku testowego "plik13.txt" na karcie, potem informuje że procek zabiera się do odtwarzania pliku .wav i cały cykl się powtarza w kółko.

    Napisałem że dziwna sprawa bo wygląda na to że prawidłowo inicjalizuje kartę potem na niej zapisuje plik tekstowy (sprawdzałem na kompie i jest ok) a pliku .wav nie chce ruszyć.

    Czasami zdarza się że w układzie nic się nie dzieje tzn. podłączam do zasil. i zero reakcji, a czasami muszę formatować kartę po odłączeniu od układu bo komputer zgłasza taką konieczność.

    I co o tym sądzicie?
    Code: basic4gl
    Log in, to see the code
  • #313
    atom1477
    Level 43  
    Może po prostu głośnik robi zwarcie. Nie powinien być połączony bezpośrednio do pinu. I nie chodzi nawet o możliwość uszkodzenia pinu czy jakość dźwięku (choć o to też), lecz o robienie zwarcia dla prądu stałego. Powinien tam więc być przynajmniej szeregowy kondensator. Być może ATMega32 jest na jego brak bardziej odporna i dlatego na niej działa. Na próbę w ogóle odłącz głośnik i podłącz tam np. drugiego LEDa. A jak masz to i oscyloskop.
    Możesz też tam dać filtr RC np. 10k i 10nF żeby nie widzieć sieczki tylko mniej więcej dźwięk. Jak już dasz filtr RC to i bez oscyloskopu możesz sprawdzić co się tam dzieje podłączając jakiś wzmacniacz.
  • #314
    werewolf15
    Level 14  
    Zrobiłem filtr RC z zaproponowanymi elementami i podłączyłem to wyjście do wzmacniacza do głośników komputerowych i przetestowałem na pliku . wav z 7 strony. Efekt taki że teraz wszystko działa!
    Mam jednak jeszcze mały problem z konwertowaniem plików muzycznych. Do tej pory używałem winampa i takich oto konfiguracji:
    ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .
    Na at32 działało, na at128 albo odtworzy kawałek ale przeważnie to wogule nic.

    Na samym głośniku z filtrem też działa ale bardzo cicho. Czy wartości elementów filtra RC do mojego układu należy dobrać doświadczalnie czy te 10k i 10nf będzie już ok?
  • #315
    spazz4
    Level 16  
    Witam, a ja mam z tym układem dziwny problem, nie chce współpracować. Dopisałem sobie do dwóch wersji zamieszczonego przez Was programu wysyłanie informacji zwrotnej błędu po rs i tak podłączając kartę MMC 16Mb kod błędu 0 jednak nic nie odtwarza, po wymianie karty na SD 4Gb otrzymuje błąd 227. Karta zasilana 3.3, procek 5, karta podłączona przez dzielnik z schematu w wątku. Karty formatowałem, plik który próbuje odpalić w załączniku jak i obydwie testowane wersje programu. Przyciśnięcie przycisku testowego w drugiej wersji nie powoduje nic poza cyklicznym stukiem w głośniku jeśli trzymam go dość długo. Gdzie mogę popełniać błąd ? Układ mam wykonany na płytce testowej Atmel-ATB oraz na uniwersalnej na obydwu ten sam problem.

    Procesor Mega32A, testowane na kilku sztukach dla pewności
    -
    Dopisałem jeszcze zwracanie błędu bErrorCode , dla 16Mb zwraca wartość 20 - za mały rozmiar sektora karty, przy 4Gb zwraca równie 227
    -
    Według tego co wyczytałem problem leży w kartach pamięci, mam pod ręką 5 sztuk SD 4Gb HC - i to właśnie podobno w typie leży problem, jest jakiś sposób na to ?
  • #316
    adambehnke
    Level 24  
    werewolf15 wrote:
    Do tej pory używałem winampa i takich oto konfiguracji:


    A dlaczego nie wymusisz pliku wyjściowego w formacie RAW ? Pozbawiony będzie nagłówka i będzie zawierał same dane gotowe do odtworzenia.

    Nigdy nie należy też podłączać głośnika bezpośrednio do pinów procesora. Bo zakładam że Podłączasz głośnik 16-32R ... Użyj elektrolit >100uF.


    Quote:
    Według tego co wyczytałem problem leży w kartach pamięci, mam pod ręką 5 sztuk SD 4Gb HC - i to właśnie podobno w typie leży problem, jest jakiś sposób na to ?


    Rozwiązaniem jest przejście z Bascoma na C i odpowiednie biblioteki.
    W tym momencie używam dowolnych kart pamięci łącznie z SDHC o pojemności >8GB.
  • #317
    M. S.
    Level 34  
    Chciałem się dowiedzieć jakie częstotliwość próbkowania osiągacie przy stabilnym odtwarzaniu *.wav bez zakłóceń wynikających z obsługi karty.

    Śledzę temat od dawna. Ostatnio z potrzeby chwili zacząłem eksperymenty. Oprogramowanie jest napisane w Bascom/Asm. Kiedyś napotkałem PDF'a kolegi Saabotaz dotyczącego obsługi karty SD / MMC. Uruchomiłem na podanym tam podprogramie rejestrację temperatur. Teraz uruchomiłem odtwarzacz plików *.wav. Mimo, że obsługa karty jest napisana jako wstawka asm do Bascoma, a M32 popędzam kwarcem 16MHz to wszystko gra stabilnie do częstotliwości próbkowania 8kHz. Powyżej tego także gra, lecz dźwięk faluje pomiędzy odczytem jednego i kolejnego sektora danych. PWM ładowany jest w czasie rzeczywistym danymi z karty, a odczyt kolejnego bajtu z karty synchronizowany jest w czasie za pomocą przerwania od Timera0. Wspomnę jeszcze, że odczyt kolejnego sektora realizuje dopisany przeze mnie fragment programu w asm. Do Bascoma program wraca po odczytaniu określonej liczby sektorów licząc od zadanego adresu, czyli po odtworzeniu tego co trzeba.
    Karta odczytywana jest "niskopoziomowo" poprzez podanie sektora początkowego i ilości sektorów do odczytania. Zapis karty tworzę z użyciem programu DMDE.

    I jeszcze robocza wersja programu (jeszcze nie do końca zoptymalizowana).

    Code: basic4gl
    Log in, to see the code


    P. S. Dzięki ładowaniu PWM'a w czasie rzeczywistym nie potrzeba zmiennej tablicowej przechowującej cały sektor karty. Program obecnie ma poniżej 2 kB zatem po rozbudowie ATMega8A go bez problemu uciągnie. Na razie nie stosuję odczytu multisektorowego, jeszcze do tego nie doszedłem.
  • #318
    atom1477
    Level 43  
    M. S. wrote:
    PWM ładowany jest w czasie rzeczywistym danymi z karty, a odczyt kolejnego bajtu z karty synchronizowany jest w czasie za pomocą przerwania od Timera0. Wspomnę jeszcze, że odczyt kolejnego sektora realizuje dopisany przeze mnie fragment programu w asm. Do Bascoma program wraca po odczytaniu określonej liczby sektorów licząc od zadanego adresu, czyli po odtworzeniu tego co trzeba.
    Karta odczytywana jest "niskopoziomowo" poprzez podanie sektora początkowego i ilości sektorów do odczytania. Zapis karty tworzę z użyciem programu DMDE.
    ...
    P. S. Dzięki ładowaniu PWM'a w czasie rzeczywistym nie potrzeba zmiennej tablicowej przechowującej cały sektor karty. Program obecnie ma poniżej 2 kB zatem po rozbudowie ATMega8A go bez problemu uciągnie. Na razie nie stosuję odczytu multisektorowego, jeszcze do tego nie doszedłem.

    No w zasadzie w tej wersji powinno to działać.
    Jednak u mnie kod z buforem i na kodzie odczytu z BASCOMa działał chyba nawet dla 44100Hz.
  • #319
    M. S.
    Level 34  
    Zauważyłem, że u mnie zakłócenia pojawiają się podczas "dużyzn" wysokich tonów. Jeśli odtwarza się niskie tony lub tony zmieniają się szybko to utwór (ten sam) idzie gładko. Zakłócenia przy próbkowaniu 8kHz przypominają trzepotanie skrzydłami przez gołębia.
    Być może problem pojawia się przy konwertowaniu pliku mp3 -> wav. Na PC tego jednak nie słychać.
  • #320
    atom1477
    Level 43  
    Może to nagraj w wrzuć. I oryginał też.
  • #321
    M. S.
    Level 34  
    Problem się chyba rozwiązał. Polegał on prawdopodobnie na zmniejszeniu częstotliwości próbkowania bez zmiany górnej częstotliwości pasma przenoszenia. Używałem do konwersji Nero Wave Editor. Teraz mp3 przerobiłem za pomocą Free Audio Editor przy użyciu filtru dolnoprzepustowego. Po konwersji próbkowania na 22,05 kHz i ograniczeniu pasma do 9kHz (z zapasem) gra bez zbytnich sensacji. Musiałem się w pas pokłonić Panom: Whittaker'owi, Nyquist'owi Kotielnikov'owi i Shannon'owi.

    Teraz mogę zrobić krok do przodu - w kierunku mówiącego termometru do auta (żeby nie doklejać do deski rozdzielczej jakichś wyświetlaczy psujących design).

    Na 44,1 kHz chyba jednak nie pójdzie bo odtwarzanie było zwolnione tak jakby gubił taktowanie z Timera0.

    Podziękował.
  • #322
    tomastom
    Level 11  
    Czy ma ktoś sprawdzony schemat wyrysowany w EAGLE z jakaś fajną wykonaną płytką?
  • #324
    tomastom
    Level 11  
    No właśnie na ranie jeszcze słabo u mnie z EAGLE i chciałem się trochę wspomóc tym projektem i przystosować go pod swoje potrzeby, dlatego był bym wdzięczny za pomoc.
  • #325
    krystian08
    Level 16  
    Witam,

    Zaciekawił mnie temat odtwarzacza, wykonałem układ z mikrokontrolerem AtMega128A. Korzystam z plików zamieszczonych przez Kolegę WOBI, i niestety mam problemy z uruchomieniem obsługi karty pamięci. Program wiesza się na procedurze inicjalizacji, podglądnąłem co się dzieje na SPI za pomocą analizatora. Na linii MOSI pojawia się ciąg 0x40 0x00 0x00 0x00 0x00 0x95. Na MISO pojawia się odpowiedź 0x7F 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x01, i tak w koło co ok. 0,5 s. Stosowałem różne karty SD o pojemnościach 256MB, 1GB, 2GB, w każdym wypadku sytuacja jest identyczna. Ktoś spotkał sie z podobnym problemem lub może podpowiedzieć gdzie szukać rozwiązania?
  • #326
    krystian08
    Level 16  
    Koledzy, czy ktoś może podpowiedzieć gdzie szukać przyczyny?
  • #328
    krystian08
    Level 16  
    Dobierałem wszystkie dostępne prędkości SPI, bez różnicy. Fusebity zaprogramowane prawidłowo, wszystko zgodnie z projektem, żadna karta nie rusza...
  • #329
    fysiek
    Level 24  
    Witam. Pozwolę sobie odgrzać temat. Potrzebowałem czego właśnie w tym stylu, tylko że w u mnie nie potrzeba sterowania przez UART, czy regulacji głośności - będzie raz na zawsze potencjometrem. Układ ma odtwarzać w kółko kilka...w tym przypadku 10 utworów w kółko. Układ okroiłem po swojemu i działa to pięknie! Prosze autora tematu, lub osoby którę sa mocne w tym temacie o opinię czy czegoś po drodze nie sknociłem, bo być może są jakieś delikatne błędy których w teraz nie widać a dadzą znać o sobie w czasie eksploatacji.

    Code: vbnet
    Log in, to see the code


    Jeszcze CONFIG_AVR-DOS.bas

    Code: vbnet
    Log in, to see the code