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.

Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem

polprzewodnikowy 22 Sty 2012 19:33 34234 46
  • Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem

    Witam.
    W Internecie można znaleźć dużo przykładów, jak odtwarzać przez mikrokontroler dźwięk takimi sposobami, jak PWM czy DAC na interfejsie I²S. Niestety, ale jakość dźwięku PWM-a mnie nie zadowala, a zewnętrzny DAC nie wchodził w grę, ponieważ mój mikrokontroler nie ma wspomnianego wyżej interfejsu. Nagle mnie olśniło, gdzieś mam starą kartę Sound Blaster 16!
    W Internecie nie ma żadnego przykładu, jak oprogramować taki sprzęt przez µC. Zatem zabrałem się za pisanie kodu, założyłem na elektrodzie ten temat, lecz spotkał się raczej z małym zainteresowaniem. Od ostatniego postu wiele się zmieniło i teraz mam obsługę DMA oraz 16-bitową jakość przy maksymalnym próbkowaniu. Jako nośnik danych wykorzystuję kartę SD, obsługuje ją biblioteka FatFs. Do odtwarzania wykorzystałem dwa bufory, które zmieniam w przerwaniu od karty.

    Schemat połączeń:

    Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem

    Na schemacie ominąłem takie oczywiste rzeczy, jak kondensatory czy rezystory podciągające. Jak widać - zostały mi tylko cztery wolne piny, nie licząc jeszcze tych od interfejsu JTAG. PA9 i PA10 zamierzam wykorzystać do UARTu, a przyciski zrobić na pinie PB0, gdzie mam przetwornik ADC.
    Program na razie wyszukuje kolejne pliki na karcie pamięci i odtwarza je w takiej kolejności, jak są zapisane w tablicy plików. Pozostało tylko napisanie obsługi układu OPL3 (układ do syntezy FM). Kodem się oczywiście podzielę, liczę na wszelkie uwagi dotyczące zarówno kodu, jak i połączeń z kartą. Dziękuję za uwagę.
    Do moderatorów: Temat jest przedstawieniem kodu, a nie prezentacją prototypu (który zresztą działa).

    Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem






    Link

    Załączniki:

    Fajne!
  • #2 22 Sty 2012 22:56
    polprzewodnikowy
    Poziom 26  

    Ten projekt tak naprawdę powstał dla zabawy. Choć jeszcze dużo potencjału ma ta karta, złącze IDE, układ syntezy FM...

  • #3 22 Sty 2012 23:13
    eXcLiFe
    Poziom 14  

    Witam Mam takie pytanie czy to będzie działać na STM32F100RBT6B na płytce discovery? Mowa była o braku kondensatorów i rezystorów chodzi tylko te z karty SD czy są jeszcze jakieś na ISA? Jeszcze jedno pytanie czy to będzie działać z każdym SB16? Pytam o to wszystko bo jestem ciekaw czy udało by mi się to odpalić u siebie w domu :)
    Ps. Czekam na film :)

  • #4 22 Sty 2012 23:16
    polprzewodnikowy
    Poziom 26  

    Powinno działać z każdym SB16. Ogólnie to wszystkie piny złącza ISA podpinałem bezpośrednio. A jaką maksymalną częstotliwość taktowania ma ten twój µC? Schemat mojej płytki w załączniku.

  • #5 22 Sty 2012 23:23
    eXcLiFe
    Poziom 14  

    STM32F100RBT6B Ma max 24Mhz, W zasadzie są podobne tylko u mnie PB1 i PB2 są wykorzystane do przycisków, i nie mam JTAG jako takiego

  • #6 22 Sty 2012 23:28
    polprzewodnikowy
    Poziom 26  

    W swoim projekcie mam częstotliwość 72MHz, niestety po zjechaniu do 24 program się nie odpala. Zawsze możesz spróbować przetaktować swój układ. Mój przy kwarcu 8MHz osiąga maksymalnie 128MHz.

  • #7 22 Sty 2012 23:31
    eXcLiFe
    Poziom 14  

    Hmmm to nie fajnie, a jaka może być teoretyczna minimalna częstotliwość? W razie czego znów trzeba będzie starać się o sample tym razem STM32F103 :)

  • #8 22 Sty 2012 23:36
    polprzewodnikowy
    Poziom 26  

    Przy 56 słychać zniekształcenia, cyklicznie co 0.5s słychać przerywanie dźwięku. Musi być minimum 64MHz.

  • #9 22 Sty 2012 23:42
    eXcLiFe
    Poziom 14  

    Ok dzięki za informacje, wątpię aby mi się udało przetaktować uP 3 razy. Nie pozostaje mi nic innego jak inny, ale to mnie nie powstrzyma bo to się wydaje naprawdę bardzo interesujące :)

  • #10 22 Sty 2012 23:45
    polprzewodnikowy
    Poziom 26  

    W pierwszym poście wstawiłem film.

  • #11 23 Sty 2012 09:39
    michal.fita
    Poziom 14  

    Hmm... Twój projekt może sprawić, że ceny SB16 na Allegro skoczą :-)

    Bardzo fajne wykorzystanie dla wysokiej jakości dźwięku.

  • #12 23 Sty 2012 12:12
    arti4-92
    Poziom 16  

    michal.fita napisał:
    Hmm... Twój projekt może sprawić, że ceny SB16 na Allegro skoczą :-)

    Bardzo fajne wykorzystanie dla wysokiej jakości dźwięku.


    myślę ze lepszą jakość dzwięku dało by się uzyskać z pomocą jakiegoś taniego daca burrbrown :)

  • #13 23 Sty 2012 12:40
    MarcinBukat
    Poziom 9  

    Pomysł fajny. Magistrala ISA jest do ogarnięcia i można uzyskać w ten sposób tanim kosztem ciekawe peryferia. Co do DACa podłączanego po I2S to można kreatywnie użyć spi i w przerwaniu odwracać stan linii mówiącej który kanał jest przesyłany. Takie rozwiązanie ma taką zaletę, że jest szeroki wybór scalaków (same dac, dac + wyjściowy amp słuchawkowy itd.) a pinów zużywa nieporównywalnie mniej.

  • #14 23 Sty 2012 13:48
    thereminator
    Warunkowo odblokowany

    Interesujący i niestereotypowy projekt. Nie znam się na tym kompletnie i może moje pytanie zabrzmi głupio, ale czy dałoby się wykorzystać takiego starego SB16 jako zewnętrzną kartę dźwiekową USB do laptopa (czyli jak sądzę trzeba by było zrobić odpowiedni układ konwertera USB na ISA)? Oczywiscie też byłaby to tylko sztuka dla sztuki.

  • #15 23 Sty 2012 16:13
    KJ
    Poziom 31  

    Ja to bym chciał konwerter USB<->ISA albo jeszcze lepiej USB<->PCI .... bardzo by się przydało coś takiego czasem ;) Projekt równie wartościowy z naukowego punktu widzenia co szalony - kawał dobrej roboty ! Dawno nie widziałem niczego ciekawego na tej elektrodzie a tu proszę :) Do wszystkich tych co chcieliby napisać bez sensu, sztuka dla sztuki, można prościej. Pewnie ze można. Można w ogóle nie robić nic tylko kupić w markecie odtwarzacz mp3 za 10zł i też będzie grało ale nie na tym to polega.

  • #16 23 Sty 2012 17:19
    ghost666
    Tłumacz Redaktor

    Czy jesteś w ten sposób w stanie obsługiwać i inne karty na ISA? Może używając większego procesora byś był w stanie obsłużyć np. kartę VGA, sieciową itp tak żeby docelowo stworzyć sobie mały komputerek ;).

  • #17 23 Sty 2012 19:23
    polprzewodnikowy
    Poziom 26  

    ghost666 napisał:
    Może używając większego procesora byś był w stanie obsłużyć np. kartę VGA, sieciową itp tak żeby docelowo stworzyć sobie mały komputerek


    Takie rzeczy można obsłużyć na AVR, więc?

    thereminator napisał:
    czy dałoby się wykorzystać takiego starego SB16 jako zewnętrzną kartę dźwiekową USB do laptopa


    Jest to możliwe do wykonania, ba, nawet na tym samym uC. Problemem będzie tylko napisanie sterownika pod PC. Wystarczy przesyłać do karty np. 1024 próbek. Karta po ich odtworzeniu wyśle dane do PC by ten ponownie wysłał próbki - i tak w kółko.

    MarcinBukat napisał:
    Co do DACa podłączanego po I2S to można kreatywnie użyć spi i w przerwaniu odwracać stan linii mówiącej który kanał jest przesyłany.


    Prawdę mówiąc wiedziałem o tym rozwiązaniu lecz w moim sklepie dostanie takich układów graniczy z cudem a przez internet nie chciało mi się kupować. Można wybebeszyć kartę z układu YAC516 ale po co skoro karta sprawna?

    ghost666 napisał:
    Czy jesteś w ten sposób w stanie obsługiwać i inne karty na ISA?


    Jeśli znajdę datasheet układu zawartego na karcie to w sumie tak. Jak programować SB znalazłem w tym dokumencie: http://pdos.csail.mit.edu/6.828/2006/readings/hardware/SoundBlaster.pdf
    Do programowania przydała się również ta strona: http://pinouts.ru/Slots/ISA_pinout.shtml

  • #18 23 Sty 2012 20:45
    Lazer
    Poziom 23  

    KJ napisał:
    Ja to bym chciał konwerter USB<->ISA albo jeszcze lepiej USB<->PCI .... bardzo by się przydało coś takiego czasem ;)

    Przecie są :)
    Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem
    usb2isa <<<-- KLIK
    Sound Blaster 16 + STM32, czyli co nuda robi z człowiekiem
    usb2pci <<<-- KLIK

    Kupujesz i masz :) nawet jak chcesz USB <->PCMCIA jak i inne...

    Pozdro

  • #19 23 Sty 2012 21:21
    KJ
    Poziom 31  

    Ja już dawno takie widziałem tylko są 2 problemy: Cena i dostępność w Polsce.

  • #21 24 Sty 2012 09:31
    Sebas9k
    Poziom 16  

    Bardzo ciekawe wykorzystanie starej karty dźwiękowej :-)

    Przez długi czas interesowało mnie, czy trzeba dużo sobie komplikować życia, by zainicjować kartę (czy wszystko de facto ogranicza się do wysłania komend np. ustawienia głośności, barwy dźwięku)
    Jak pamiętam z ery PCtów z non-PnP BIOS, karty te trzeba było inicjować przez narzędzie intel PnP Manager lub CTCM/CTCU, ale to już poza tematem...

    Z układem yamahy będziesz miał troszkę więcej trudu. Popatrz sobie mniej-więcej na kody źródłowe trackerów np. EdLib 1.05 czy też Adlib Tracker II.. Sztuką dla sztuki byłoby wykorzystanie właśnie tego małego scalaka jako syntezatora 9/18 kanałowego...

  • #22 24 Sty 2012 09:45
    arti4-92
    Poziom 16  

    Sebas9k napisał:
    Sztuką dla sztuki byłoby wykorzystanie właśnie tego małego scalaka jako syntezatora 9/18 kanałowego...

    Jeszcze użyć midi które jest na karcie i mamy prawdziwy instrument muzyczny :)

  • #23 24 Sty 2012 10:10
    RSP
    Poziom 27  

    Kiedyś w poszukiwaniu taniego źródła przetworników AD i DA zawędrowałem na płytę główną PC-ta. Można na niej znaleźć zintegrowaną kartę dźwiękową zamkniętą w jednym układzie scalonym, całość ma jedną zasadniczą zaletę, w internecie można znaleźć PDF-a z dokładnym opisem tych scalaków.

    Takim doskonałym przykładem jest ALC202:

    --Single chip audio CODEC with high S/N ratio (>90 dB).
    20-bit DAC, 18-bit ADC.
    Stereo full-duplex CODEC with independent and variable sampling rate.
    4 analog line-level stereo input with 5-bit volume control : LINE_IN,CD,VIDEO,AUX
    2 analog line-level mono input : PC_BEEP,PHONE_IN.
    Mono output with 5-bit volume control.
    Stereo output with 6-bit volume control.
    2 MIC inputs: Software selectable.
    Power management and enhanced power saving.
    3D Stereo Enhancement
    External Amplifier power down capability.
    Multiple CODEC extension.
    Compliant with AC’97 2.2 specification
    50mW/8W amplifier at LINE/ Headphone output
    Jack-detect function to mute LINE/MONO/HP output, to control S/PDIF output.
    Supports S/PDIF out is compliant with AC’97 rev2.2.
    2 GPIO pins.
    14.318MHzà24.576MHz digital PLL.
    Supports double sampling rate (96KHz) of DVD audio playback.
    +30dB boost preamplifier for MIC input.
    Power support: Digital: 3.3V Analog: 3.3V/5V
    Standard 48-Pin LQFP Package

  • #24 24 Sty 2012 21:06
    polprzewodnikowy
    Poziom 26  

    RSP, zainteresowałeś mnie tymi układami. U siebie znalazłem takie jak CMI9739A, AD1980, AD1881A i ALC260. Z tego co czytałem wychodzi na to, że wszystkie obsługuje się przez coś podobnego do SPI czy I2S, niejaki AC-Link. Wygląda na prosty lecz martwi mnie jak z mikrokontrolera uzyskać ciągły sygnał 12.288MHz. W dodatku trzeba przesyłać próbki 20 bitowe.

  • #25 25 Sty 2012 00:33
    sTERYDZIOCH
    Poziom 12  

    Ciekawy temat, może jak będę się nudził to odkopię któregoś soundblastera w pracy... a może z jakąś inną kartą się spróbuję pobawić 8-)
    @KJ taki konwerter usb<-> isa jak pokazał Lazer mogę udostępnić (jak chcesz to pisz na @). Używałem go kiedyś do swoich celów a od paru lat leży i się kurzy. Swego czasu myślałem nawet, żeby spróbować na jego podstawie zmontować drugi, ale przestał być potrzebny i temat się sam zamknął

  • #26 27 Sty 2012 13:40
    marti_944
    Poziom 28  

    Witam!

    Projekt ciekawy... bo nietypowy ;). W sumie nie wiele mi mówi cały ten pomysł, ale mam pytanie: po co w tej karcie (jak i w kilku innych z jakimi się spotkałem) jest złącze IDE ? Zawsze się zastanawiałem, ale nie mam bladego pojęcia...

    Pozdrawiam! \m/

  • #27 27 Sty 2012 17:41
    pgoral
    Poziom 25  

    często było potrzebne by podpiąć CD-ROM co czyniło z komputera komputer multimedialny - dźwięk, CD-rom, etc. Taka potrzeba rynku w pewnym okresie.

  • #28 27 Sty 2012 18:01
    236759
    Użytkownik usunął konto  
  • #29 27 Sty 2012 19:26
    marti_944
    Poziom 28  

    No tak, to nie moje czasy, jednak bardzo interesujące. Wtedy kształtowały się znane dziś standardy. Jeśli dobrze rozumiem - to złącze pełniło funkcję zwykłego złącza IDE ? Na takiej karcie był jakiś kontroler ?

  • #30 27 Sty 2012 19:29
    popaw1
    Poziom 19  

    pandy napisał:
    posiadanie przez karte dodatkowego portu dla podlaczenia CD-ROM bylo czesto jedynym sposobem korzystania z CD-ROM zwlaszcza ze w poczatkowym okresie CD-ROM korzystaly z niestandardowych rozwiazan i wymagaly specjalnych portow/kart - czesto na kracie bylo kilka roznych portow - w roznym standardzie - np CD-ROM Mitsumi zdaje sie 1x i 2x uzywaly wlasnego interfejsu a tych interfejsow bylo 2 albo 3 rodzaje plus wlasnie ATA/IDE.


    W sumie nie spotkałem się z napędami CD, które miały by jakieś problemy na kartach rozszerzeń ale CD-ROM najczęściej podłączałem pod kartę dźwiękową, która posiadała odpowiedni kontroler.

    marti_944 napisał:
    W sumie nie wiele mi mówi cały ten pomysł, ale mam pytanie: po co w tej karcie (jak i w kilku innych z jakimi się spotkałem) jest złącze IDE ?

    Karta rozszerzeń w czasach "ISA" posiadała tylko jeden port IDE. Karta dźwiękowa nie była zintegrowana z płytą główną:). Faktem jest, że w tych czasach dyski twarde były strasznie drogie, ale jeśli ktoś chciał podłączyć dwa dyski twarde to nie mógł podłączyć CD-ROM-u. Druga sprawa, że dysk twardy trzeba było konfigurować w BIOS-ie (tj. wpisywać jego parametry w BIOS-ie). Podejrzewam, że producenci kart dźwiękowych zauważyli problem tylko dwóch urządzeń IDE i dzięki temu teraz możemy podłączyć co najmniej 4 urządzenia IDE/SATA:).

    Bardzo przepraszam za OFF-TOPIC. Temat bardzo mnie zainteresował i śledzę wypowiedzi w tym temacie. Posiadam wiele płyt głównych z różnymi zintegrowanymi układami "dźwiękowymi" różnych firm oraz karty ISA i bardzo chętnie poczytałbym jakie zastosowania autor w ramach "nudy" ma dla podobnych układów.