Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Odtwarzanie dźwięku przez procka

06 Mar 2005 19:32 1817 5
  • #1 06 Mar 2005 19:32
    30402
    Użytkownik usunął konto  
  • #3 08 Mar 2005 16:32
    pitlab
    Poziom 12  

    Saabotaz napisał:
    Szukałem czegoś na necie na temat upchnięcia w procku lub zewnętrznym EEPromie jakiegoś dźwięku.


    Ja w swoim urządzeniu, (też opartym na 51) zapisuję 8 bitowe pliki vawe (mono, 8kHz) i odtwarzam jest przez wbudowany DAC. Patrz http://www.pitlab.pl/down/wario_doc107.zip
    Zamiast DACa można spróbować zrobić przetwornik a'la covox na drabince rezystorów. Wadą jest to że zajmuje cały port, natomiast łatwo zarzadza się dźwiękami, bo wystarczy obciać nagłówek vawe'a.

    Saabotaz napisał:
    Wziąłem plik z dźwiękiem, przepuściłem przez program który jest na tamtej stronce, plik sound.bit przepuściłem przez swój prog który wygenerował mi coś w stylu data xx,xx,xx,xx... czyli gotowe dane do wklejenia do Bascoma. Napisałem w Bascomie prosty programik który to odgrywa (ta część jest w asm żeby było szybciej) no i jedyne co słychać to szum.

    Podejrzewam że pies jest pogrzebany w niewłaściwej częstotliwości odtwarzania. Spróbuj wygenerować plik np 10 zer a potem 10 jedynek i powielić to kilkukrotnie a potem oglądaj na oscyloskopie, lub mierz w jakikolwiek sposób co wychodzi z kontrolera.
    Inna możliwa przyczyna:
    Zdarzyło mi się że niektóre sample szumiały zamiast grać. Długo szukałem błędu a w końcu okazało się że sample były 16 bitowe i to co było słychać to całkowita sieczka nie przypominajaca właściwego dźwięku.

    0
  • #4 08 Mar 2005 20:25
    30402
    Użytkownik usunął konto  
  • #5 08 Mar 2005 22:57
    pitlab
    Poziom 12  

    Saabotaz napisał:
    Mam taki sprzęcik, a na wyjściu coś covoxopodobne. Problem w tym że wavy zajmują makabrycznie dużo pamięci. Stosując tamtą metodę można w pamięci upchnąć znacznie więcej dźwięku.

    Nic nie ma za darmo. Mniej miejsca to gorsza jakość dźwięku. W tym przypadku całkowanie napiecia na kondensatorze pozwala uzyskać pseudo przetwornik, jednak aby uzyskać daną częstotliwość trzeba dużo szybciej wyrzucać próbki, tak więc podejrzewm że to na jedno wychodzi.
    Chociaż do generowania pewnych rodzajów dźwieków może być wystarczające...

    Saabotaz napisał:
    pitlab napisał:
    Podejrzewam że pies jest pogrzebany w niewłaściwej częstotliwości odtwarzania.

    A jak to jest z tą szybkością odtwarzania? Bo ja myslałem że jeśli będzie z aduża lub za mała to dźwięk odtworzy szybciej albo wolniej (coś jak w gramofonie czy magnetofonie). Czyżby tutaj było zupełnie inaczej?

    Jeżeli zmienisz częstotliwość trochę (nie wiem ile, ale niedużo - rząd kilkudziesięciu procent) to uzyskasz taki efekt. Ale jeżeli wypuścisz kilkukrotnie szybciej to będzie szum zamiast dźwięku.


    Saabotaz napisał:
    Znacz może jakiś wzór żeby wyliczyć co ile występuje przerwanie? Mam procek AT89C4051 z kwarcem 12MHz. Mogę ustawić timer na 8 bitowy z generowaniem przerwania gdy osiągnie jakąś wartość. Tylko jak wyliczyć tą wartość żeby osiągnąć częstotliwość np. 11,2kHz?

    To podstawa :-)
    U siebie tak definiuję oba timery (T0 - 16 bit, T1 - 8 bit):
    ;===============================================
    ; częstotliwość zegara kontrolera
    fCLK EQU 16777216 ;Hz
    CDiv EQU 1 ;CD^2
    fCORE EQU fCLK / CDiv ;zegar CPU w Hz
    FCOREkHz EQU (fCORE / 1000) ;zegar CPU w kHz

    ;timer T0 uzywany do odmierzania timeoutów
    TIME_QUANT EQU 5 ; jednostka czasu w ms
    TMR0_TICKS EQU (TIME_QUANT * FCOREkHz / 12) ;cykniecia timera
    TMR0_RELOAD EQU 65536-TMR0_TICKS ;na TIME_QUANT

    ;timer T1 uzywany do odtwarzania sampli
    TIM1_BRATE EQU 8000 ;okres próbkowania sampla w Hz
    TMR1_TICKS EQU ((2*fCORE / (12 * TIM1_BRATE))+1)/2 ;zaokrąglanie od 0,5 w górę
    TMR1_RELOAD8kHz EQU 256-TMR1_TICKS
    ;===============================================

    W przykładzie wykrzaczyły się tabulatory i wygląda trochę mało czytelnie.
    Mój kontroler ma PLL stąd takie dziwne wyliczanie wartości fCORE. Dla 4051 podajesz od razu częstotliwość kwarca.

    0
  • #6 09 Mar 2005 20:03
    30402
    Użytkownik usunął konto  
  Szukaj w 5mln produktów