Thứ Ba, 18 tháng 12, 2018

Chương trình phát âm thanh bằng PWM

  • Odtwarzanie dźwięku przez mikrokontroler

    PIC CCS C

    Cele

    Celem projektu jest opracowanie procedury odtwarzania dźwięku z pamięci mikrokotrolera PIC18F25K80 firmy Microchip. Dźwięki pochodzące z plików WAV  zostaną podłączane do kodu programu jako pliki nagłówkowe w języku C. Odtworzenie dźwięków będzie realizowane przez PWM. Należy opracować program konwertujący pliki WAV na pliki nagłówkowe w języku C.

    Konwerter plików WAV 

    Program został oparty na kodzie opublikowanym w sierpniu 2007 roku przez João Figueiredo. Oryginalny kod pobierał próbki z plików dźwiękowych w formacie PCM i zapisywał je w zmiennej tablicowej generując kod w języku C++.
    Program został zmodyfikowany by automatycznie z dowolnego pliku Wav generował kod w języku C++ zawierający zmienną tablicową z próbkami dźwięku.
    W pierwszej kolejności następuje konwersja piku Wav do rozdzielczości 8 bitów na próbkę i częstotliwości próbkowania 8 kHz. Ma to na celu zmniejszenie wielkości danych tak by jedna sekunda zajmowała 7,81 kB i mogła zostać umieszczona w pamięci mikrokontrolera. Działanie to wykonywane jest poprzez automatyczne wykonanie programu SOX z parametrami:
    sox inputfile.wav -r 8000 -b8 temp.wav
    W ten sposób przygotowany plik jest następnie automatycznie konwertowany na format PCM poprzez wywołanie programu mplayer:
    mplayer temp.wav -ao pcm:nowaveheader:file=temp.pcm
    Plik PCM może zostać "przepisany" do postaci tablicy zawierającej poszczególne próbki. Fragment programu za to odpowiedzialny:
    fprintf(headerFile, "const char ");
    printSafeName(argv[1], headerFile);
    fprintf(headerFile, "[%u]={", (unsigned int) statData.st_size);
    c = fgetc(pcmFile);
    fprintf(headerFile, "0x%02X", c);
    while( (c=fgetc(pcmFile)) != EOF )
    {
       fprintf(headerFile, ",%s 0x%02X", ((++colBreak % 16) == 0?"\n":""), c);
    }
    fprintf(headerFile, "};\n\n");
    Program jest dostępny w formie gotowego do zainstalowania pakietu DEB w systemie operacyjnym Linux Debian lub Ubuntu. Zarówno źródło programu jak i pakiet DEB jest dostępny w rozdziale "Pliki".
    Program instaluje się poprzez wydanie polecenia z uprawnieniami administratora
    dpkg -i --force-depends wav2h.deb

    Zostanie on zainstalowany w systemie wraz z programami zależnymi (SOX i Mplayer).

    Wywołanie programu:
    wav2h file.wav file.h
    Wygenerowany przez program plik ma postać:
    #ifndef REDALERT_H
    #define REDALERT_H
    const char redalert[6]={0x80, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x80};
    #endif
    Zmienna tablicowa redalert zawiera poszczególne próbki dźwięku. W powyższym przykładzie jest to tylko sześć próbek - nagranie o długości około sekundy zawiera kilka tysięcy próbek.

    Kod programu mikrokontrolera

    Przykład ustawienia fusebitów mikrokontrolera PIC18F25K80 i definicji ustawień:
    #include 
    #fuses INTRC_IO, NOPROTECT, PUT, BROWNOUT, NOWDT
    #use delay(clock=8000000)
    #define T2_FREQ (8000) // from 8000Hz to 11025Hz
    #define K_TMR2 (8000000/4)/(T2_FREQ) 

    Następnie podłączony jest wygenerowany plik z próbkami dźwięku:
    #include "redalert.h"
    Kod funkcji wysyłającej próbki dźwięku ze zmiennej tablicowej na port PWM mikrokontrolera:
    void play() 

    int16 i; 
    for(i=0; i<7794; i++) 
       { 
         set_pwm2_duty(redalert[i]);
         delay_us(45);
       } 


    Kod głównej funkcji programu:
    void main(void)
    {
     setup_timer_2(T2_DIV_BY_1, K_TMR2, 1);
     setup_ccp2(CCP_PWM);
     set_pwm2_duty(0L);
     while(1)
     {
       play();
       set_pwm2_duty(0L);
       delay_ms(1000);
     }
    }


    Układ elektroniczny 

    W celach testowych bezpośrednio do układu może zostać podłączony głośnik, jednak jakość dźwięku może nie być wystarczająca. Należy układ rozbudować o wzmacniacz oraz filtry.
     
    Rys. Schemat połączeń

    Pliki

    WAV2H - Program generujący z dowolnego pliku WAV kod w języku C++ zawierający zmienną tablicową z próbkami dźwięku.
    Program mikrokontrolera

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

Valdes Fernando - Microcontrollers Applications With Pic

Bài đăng phổ biến