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

[ATTINY2313][Bascom] Odtwarzanie dźwięków...

MacFis 24 Sie 2008 20:09 4617 11
  • #1 5470605
    MacFis
    Poziom 17  
    Witam!

    Niedawno zacząłem się bawić ATTINY2313...
    I mam pytanie... Czy za pomocą ATTINY2313 dałoby się generować muzykę? Chodzi mi nie o midi tylko o pełny dźwięk...

    Dziękuję
    Pozdrawiam.
  • Pomocny post
    #2 5470818
    Zaquadnik
    Poziom 27  
    Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora PWM. 8 kHz da się wykrzesać, ale ja stosowałem próbki 8-mio bitowe. Nie pamiętam czy da się odpalić PWM w trybie 16to bitowym, ale chyba nie. Więc jeśli chcesz słuchać na tym muzyki to raczej odpuść sobie. Chyba, że dasz zewnętrzny DAC. Jeśli chcesz odtwarzać proste dźwięki i mowę to nie ma problemów.
  • #4 5471031
    Zaquadnik
    Poziom 27  
    Spoko, tylko to jest na ATmega128. Co do kart pamięci to musiałbyś napisać obsługę sam. Generalnie poczytaj notę katalogową.



    
    //inicjalizacja Timera 0 jako generatora PWM
    
    void Timer0_PWM_mode()
    {
    	DDRB |= (1<<4);
    	TCCR0 |= (1<<WGM00) | (1<<WGM01) | (1<<COM01) | (1<<CS00);
    }
    
    
    //inicjalizacja Timera 3 do odmierzania okresu probkowania
    
    void Timer3_timer_mode()
    {
    	TCCR3A = 0x00;
    	TCCR3C = 0x00;
    	OCR3A = 2999;
    	ETIMSK |= (1<<OCIE3A);
    	TCCR3B = 0x09;
    }
    
    
    
    //Tablica ze spróbkowanym sinusem
    
    char SineTable[8] PROGMEM = {128,219,255,219,128,37,0,37};
    
    
    //zmiana probki sygnalu w przerwaniu Timera 3
    
    SIGNAL(SIG_OUTPUT_COMPARE3A)
    {
    	OCR0 = (pgm_read_byte(&SineTable[SineInd]));
    	SineInd++;
    	if (SineInd == 8) SineInd = 0;
    }
    


    Jakoś tak. Ale musisz uwzględnić inny sprzęt w ATtiny i próbki pobierać z karty, a nie z pamięci programu. U mnie kwarc był 16 MHz, czyli tutaj częstotliwość próbkowania wynosiła akurat 4kHz, o ile pamiętam. Decyduje o tym wartość OCR3A.

    Edit: Najmocniej przepraszam, przeoczyłem, że to BASCOM. Ale może kod w C się komuś przyda.
  • #5 5471109
    11111olo
    Poziom 42  
    Użyj polecenia SOUND x,y
  • #6 5472035
    Tomcio7
    Poziom 17  
    Jeżeli masz dwa pwm'y to oba podepnij do głośnika przy czym do jednego wpisz 'wartość syg' a do drugiego '255-wartość syg" przy 8bitowych próbkach :) Tak działa o wiele głośniej. Co więcej - działa bardzo dobrze bez filtru dolnoprzepustowego.
  • #8 5472621
    Tomcio7
    Poziom 17  
    To po co od razu bierzesz się za dźwięk? Najpierw pomrugaj diodą ;P
  • #10 5472855
    d.d
    Poziom 20  
    Samo odtwarzanie dźwięku jest banalnie proste ale próbki dźwięku zajmują sporo miejsca więc musisz je trzymać albo na jakiejś pamięci flash np ( SD /MMC ) albo wysyłać przez UART .
    Powiedzmy że chcesz puszczać dźwięk 8bit 8kHz .
    W ciągu jeden sekundy musisz 8000 razy załadować próbki to PWM
    1s=1000ms 1000ms/8000=0.125ms czyli co 125us musisz ładować próbki do PWM .

    Zrób sobie najpierw obsługę PWM potem SD || MMC || UART a potem to połączysz .

    Dostać gotowe rozwiązanie nie daje takiej satysfakcji jak zrobić samemu .
    Czasem trzeba długo szukać i dużo czytać ale naprawdę warto.
  • #11 5472960
    MacFis
    Poziom 17  
    Dzięki... będę czytał i się uczył....

    Mam jeszcze jedno pytanie czy można zrobić z ATTINY2313 taki prosty mikser dj? Chodzi mi o podłączenie do uC wejścia (dźwięk z mp3) i wyjścia (głośnik i wzmacniacz) i kilku przełączników do generowania efektów..

    MP3->ATTINY2313+przycisk->Głośnik->Dźwięk z efektem
  • #12 5472977
    d.d
    Poziom 20  
    Przy ośmiu bitach chyba nie da się mixować muzy .
    Co do przepuszczania przez AVR to da się , mp3 możesz podpiąć pod ADC odczytujesz próbki ADC i przepisujesz je do PWM ale jakość będzie bardzo słaba .
REKLAMA