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

Syntezator wavetable na Arduino Uno

TechEkspert 30 Kwi 2015 00:05 5961 9
REKLAMA
  • Syntezator wavetable na Arduino Uno
    Mocno zoptymalizowany projekt syntezatora dźwięków oparty o ATmega328 taktowany zegarem 16MHz. Autor zastanawiał się, co uda się uzyskać przy pomocy Arduino Uno i kilku rezystorów - ostatecznie 8-bitowy symulator gitary przekształcił się w zaawansowany syntezator dysponujący sześcioma bankami dźwięków. Otwartoźródłowy projekt został napisany w czystym C, w pętli głównej procesor wykonuje 512 cykli zapewniając obsługę sześciu niezależnych 8-bitowych banków brzmień oraz produkcję sygnału wyjściowego.
    Utwory można odtwarzać z danych zapisanych do pamięci programu (flash) lub załadować do pamięci RAM i odtworzyć z użyciem syntezatora.

    Poniżej architektura rozwiązania:

    Syntezator wavetable na Arduino Uno

    Wyjściowy sygnał w audio generowany jest z wykorzystaniem PWM oraz filtra RC;
    sumowanie sygnałów zostało zrealizowane analogowo z wykorzystaniem rezystorów.

    Zależności czasowe:

    Syntezator wavetable na Arduino Uno

    Rygorystyczne cykle czasowe sterowane są z wykorzystaniem układu licznikowego mikrokontrolera.

    Schemat syntezatora:

    Syntezator wavetable na Arduino Uno





    Kompletny projekt autor zamieścił spakowany w jednym pliku dostępnym na stronie syntezatora.

    Brzmienie którego syntezatora podoba Wam się bardziej, FM czy wavetable?

    Źródło:
    http://www.erix.it/play-v6/

    Fajne? Ranking DIY
    O autorze
    TechEkspert
    Redaktor
    Offline 
    W moich materiałach znajdziecie testy i prezentacje sprzętu elektronicznego, modułów, sprzętu pomiarowego, eksperymenty. Interesuje mnie elektronika cyfrowa, cyfrowe przetwarzanie sygnałów, transmisje cyfrowe przewodowe i bezprzewodowe, kryptografia, IT a szczególnie LAN/WAN i systemy przechowywania i przetwarzania danych.
    Specjalizuje się w: mikrokontrolery, rozwiązania it
    TechEkspert napisał 5819 postów o ocenie 4623, pomógł 15 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • #2 14657635
    Paweł Es.
    VIP Zasłużony dla elektroda
    Fajny projekt, kto by pomyślał, że można tyle kanałów wycisnąć z jednego procesorka i jeszcze, żeby to całkiem strawnie brzmiało :)

    Melodie przywodzą na myśl katarynkę na rynku :)

    Tylko ten sumator kanałów chyba ma trochę za małe rezystory (470) ?
  • REKLAMA
  • #3 14657850
    axelus
    Poziom 11  
    " Tylko ten sumator kanałów chyba ma trochę za małe rezystory (470) ? "

    Taki układ był używany już w czasach commodore ;) i działał :D
  • REKLAMA
  • #4 14658331
    TechEkspert
    Redaktor
    @Paweł Es. projekt kojarzył mi się z czasami gdy ze względu na ograniczenia trzeba było wyciągnąć ze sprzętu maksymalne możliwości i mocno wszystko optymalizować. Obecnie często możemy pozwolić sobie na wybór "mocniejszego" sprzętu i korzystać z niekoniecznie optymalnych lecz szybkich w implementacji rozwiązań. Co do rezystorów, pewnie jest tam możliwość eksperymentów z ich doborem.

    @axelus faktycznie w pomyśle na sumowanie sygnałów można doszukiwać się pewnych podobieństw do SID.
  • #5 14660746
    freebsd
    Poziom 42  
    axelus napisał:
    Taki układ był używany już w czasach commodore i działał

    Czar dawnych wspomnień :-D
    Na PC z rezystorów podłaczonych do LPT robiło sie COVOX:





  • #6 14661071
    komatssu
    Poziom 29  
    freebsd napisał:
    Na PC z rezystorów podłaczonych do LPT robiło sie COVOX:

    Zgadza się, ale Covox był czymś więcej (prostym przetwornikiem D/A), zaś w przedstawionym tu projekcie rezystory są jedynie sumatorem sygnałów z 6 wyjść PWM.
  • REKLAMA
  • #7 14675918
    Konto nie istnieje
    Konto nie istnieje  
  • #8 14676696
    Samuraj
    Poziom 35  
    R-MIK napisał:
    Z PWM też się robi przetworniki CA i tak pewnie działają w tym rozwiązaniu. Kanały można sumować także cyfrowo, przed wysłaniem do CA, wtedy jeden PWM wystarczy.

    Możesz przybliżyć tę idee. Ostatnio przeglądałem projekt playera plików MOD i o ile rozumiałem cały projekt to nie mogłem dojść do tego w jaki sposób sumowane są cyfrowo sample z 4 różnych kanałów.
  • #9 14678267
    Konto nie istnieje
    Konto nie istnieje  
  • #10 14695814
    Paweł Es.
    VIP Zasłużony dla elektroda
    Przeważnie to się robi wg wzoru (dla próbek 8 bitowych i 8 bitowego przetwornika C/A)


    WY = 128 +(K1*A1+K2*A2+K3*A3+K4*A4)/1024

    K1..K4 - wyjścia kanałów (liczby ze znakiem) (-127 do +127)
    A1..A4 - amplitudy poszczególnych kanałów - głośność 0 do 255
    128 - offset dla przetwornika unipolarnego (składową stałą na wyjściu wycinamy kondensatorem)

    /1024 - normalizacja sumy do zakresu przetwornika (normalizację wykonujemy po
    sumowaniu

    Dodano po 3 [minuty]:

    axelus napisał:
    " Tylko ten sumator kanałów chyba ma trochę za małe rezystory (470) ? "

    Taki układ był używany już w czasach commodore ;) i działał :D


    Nie chodzi o układ tylko o wartości rezystorów dość mocno obciążające wyjścia procka.
    Na 4.7k też będzie działać a wyjścia PWM się będą mniej pocić przy pracy :)
REKLAMA