Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generator dźwięku 2-tonowego - niezgodność z "oryginałem"

m.biruta 05 Kwi 2017 22:56 957 22
  • #1 05 Kwi 2017 22:56
    m.biruta
    Poziom 16  

    Cześć,
    Chcę wygenerować dźwięk który można spotkać w radiowozach/karetkach jest to tzw poganiacz - 400Hz/1200Hz naprzemiennie po 13ms (wartości dobrałem na ucho metodą prób i błędów, ale nie ważne). Dźwięk generowałem sobie w komputerze programem właśnie do generowania dźwięków. Przeniosłem to do atmegi, użyłem funkcji tone oraz biblioteki timers do sprawdzania czy 13ms upłynęło. Jeśli upłynęło to zmieniamy ton. I tak w kółko. Na wyjściu analogowym którego użyłem podłączyłem głośniczek poprzez rezystor. Problem w tym, że generowany dźwięk nijak nie przypomina tego który generowałem w komputerze. Jest oczywiście 2-tonowy, ale zupełnie inny. Pytanie do was, dlaczego tak jest? Czy zegar w atmedze jest tak niedokładny? A może to "wina" podłączonego głośnika?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Myślałem, że być może problem leży w bibliotece Timers (że "kobyłka" i czasy się przez to rozjeżdżają), więc przepisałem bez Timersa, tylko przy użyciu millis() ale nadal jest identycznie.

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #3 06 Kwi 2017 16:30
    m.biruta
    Poziom 16  

    Jestem przekonany. W programie na komputerze ustawiam sobie sygnał prostokątny, pierwszy 400Hz, drugi 1200Hz, zmiana co 13ms.

    Generator dźwięku 2-tonowego - niezgodność z "oryginałem"

  • Pomocny post
    #4 06 Kwi 2017 17:00
    Piotrus_999
    Poziom 39  

    To zobacz na oscyloskopie czy naprawdę to tyle :)

  • #5 06 Kwi 2017 20:30
    m.biruta
    Poziom 16  

    Fakt, oscyloskop to jest jakieś rozwiązanie :-)

  • #6 12 Kwi 2017 21:26
    m.biruta
    Poziom 16  

    Kurcze, nie wiem gdzie leży problem. Wygenerowałem na uC 500Hz, włączyłem w komputerze 500Hz i jest identycznie. Wygenerowałem następnie 1100Hz na uC i w komputerze i tu na słuch również się pokrywają dźwięki. Kolejnym krokiem było uruchomienie powyższego programu generującego naprzemiennie 500Hz i 1100Hz (zmieniłem częstotliwości z 400/1200) i biblioteką timers zmieniam częstotliwość co 13ms i totalnie są inne dźwięki. Mam przy sobie oscyloskop, mierzę częstotliwość, są lekkie odchylenia +/- 10Hz które wg programu są niesłyszalne, czasy również się zgadzają (13ms). Gdzie może leżeć problem?

  • #9 14 Kwi 2017 22:31
    m.biruta
    Poziom 16  

    Tutaj jest nagranie dźwięku z AVRa (pierwsza i trzecia próbka) oraz z komputera (druga): https://vid.me/AZnA

  • #11 15 Kwi 2017 10:18
    m.biruta
    Poziom 16  

    To jest dźwięk zbliżony do tzw poganiacza z karetek i radiowozów policyjnych. Dźwięk z komputera jest poprawny, to samo (te same częstotliwości i czas zmian sygnałów) generuję na avr ale dźwięk nie jest taki sam. Jest jak słychać... dziwny

  • #13 15 Kwi 2017 15:51
    m.biruta
    Poziom 16  

    W tej chwili nie ma tam wzmacniacza, to glosnik podlaczony przez rezystor do wyjscia avr. Gdy generuje jeden ton to jest on identyczny z tym z komputera. Dopiero przy tej modulacji sie kaszani

  • #14 18 Kwi 2017 12:30
    JacekCz
    Poziom 31  

    Nie widzi mi się pętla. Zależnie od realizacji 'tone' piny mogą być resetowane co jedną falę , ale nie znam szczegółów.

    Po drugie zmienna globalHornTime nie ma skutków w widocznym kodzie.

  • #15 18 Kwi 2017 14:41
    m.biruta
    Poziom 16  

    JacekCz napisał:
    Nie widzi mi się pętla. Zależnie od realizacji 'tone' piny mogą być resetowane co jedną falę , ale nie znam szczegółów.

    Nie rozumiem co masz na myśli. Mógłbyś rozwinąć lub napisać bardziej jasno?

    JacekCz napisał:
    Po drugie zmienna globalHornTime nie ma skutków w widocznym kodzie.

    No jak nie ma skutków? Po pierwszy wykonaniu pętli, czyli po 13 ms pobierana jest do niej wartość millis() i dodawane kolejne 13 ms jako czas kiedy ma nastąpić kolejna zmiana tonu.

  • #16 18 Kwi 2017 15:32
    drobok
    Poziom 20  

    Zacznij od napisania tego po bożemu, tzn generator na pinie ocr + drugi timer co 13ms w którym zmieniasz icr timera1 zgodnie z datasheetowym wzorem.

    Ogólnie nie podoba mi się to hornrestart. Jednak nie patrzyłem co tam jest pod spodem. Zmienna millis się przekręca z tego co wiem (co będzie śmieciło). Ogólnie arduino jest bee ;)

  • #17 19 Kwi 2017 10:28
    JacekCz
    Poziom 31  

    drobok napisał:
    Ogólnie arduino jest bee ;)


    przestraszyłeś kolegę, poszedł do innego wątku robić to na 555.

    Arduino nie jest bee. Ale jest bee powszechny w tym kręgu zwyczaj programowania bez przeczytania niczego, przez kopiowanie przypadkowych "kodów" (tak, właśnie liczba mnoga jest charakterystyczna).
    Sensowna platforma, wiele, wiele złych nawyków, to sięga aż do tworców tzw bibliotek.

    Może być bee zwyczaj sekwencyjnego programowania przez loop, bez użycia przerwań, schedulera i podobnych elementów (statystyczny programista ma problem jak trzeba zrobić dwa klawisze z ambitniejszą zależnością). Tu mogę "przypiąć łatkę" rdzeniowi idei arduino (a nie użytkownikom). Platforma w swej głównej idei jest edukacyjna, a nie przemysłowa, nawiasem mówiąc tak to wyszło, że podając wszystko na talerzyku, użytkownikowi nie chce się nawet sięgnąć na ten talerzyk. Moim zdaniem nawet w tzw edukacji pereł nie należy rzucać między ...

    Temat jest pięknie do zrobienia na arduino na przerwaniach i PWM, co więcej, tylko na przerwaniach można uzyskać czystość dźwięku bez chrypki

    Wobec ewakuacji założyciela wątku, proponuję zamknąć.

  • #18 19 Kwi 2017 11:13
    BlueDraco
    Specjalista - Mikrokontrolery

    Moim skromnym zdaniem platforma Arduino jest zabawkowa i antyedukacyjna, a nie "edukacyjna". Bawić to się tym można, ale nauczyć można wyłącznie tego, jak nie należy programować.

  • #19 19 Kwi 2017 11:33
    Piotrus_999
    Poziom 39  

    BlueDraco napisał:
    platforma Arduino jest zabawkowa i antyedukacyjna,
    Arduino to (abstrahując od modeli z innymi prockami) atmega + usart/usb + pinheader. Co z nią zrobisz to sprawa użytkownika. Na Cortex-ach też mamy dużo przykładów "arduinowych" zachowań - przykłady na tym forum z ostatniego tygodnia są.

  • #20 19 Kwi 2017 11:42
    drobok
    Poziom 20  

    Nie przestraszyłem go, przyszedłem tutaj z tamtego wątku ;P
    Poza tym popieram BlueDraco ;)

  • #21 19 Kwi 2017 14:52
    m.biruta
    Poziom 16  

    JacekCz napisał:
    przestraszyłeś kolegę, poszedł do innego wątku robić to na 555.

    Ja raczej nie z tych bojących się opinii.

    JacekCz napisał:
    Temat jest pięknie do zrobienia na arduino na przerwaniach i PWM, co więcej, tylko na przerwaniach można uzyskać czystość dźwięku bez chrypki

    Dlaczego wg Ciebie tutaj dźwięk jest zniekształcony? Przez użycie millis jako zmianę tonu co 13ms?

  • #22 20 Kwi 2017 12:24
    JacekCz
    Poziom 31  

    m.biruta napisał:

    JacekCz napisał:
    Temat jest pięknie do zrobienia na arduino na przerwaniach i PWM, co więcej, tylko na przerwaniach można uzyskać czystość dźwięku bez chrypki

    Dlaczego wg Ciebie tutaj dźwięk jest zniekształcony? Przez użycie millis jako zmianę tonu co 13ms?


    Robiłem generator maksymalnie miłego dla ucha modulowanego dźwięku (jak najbardziej sinusoidalny) na Atmega 8 12MHz
    Każde odejście w sąsiednich cyklach od matematycznie doskonałego interwału zbiera się na pewien chropowaty, nie komfortowy dźwięk. Nawet jeśli to ma wymiar kilkunastu taktów zegarowych. Zadowoliło mnie dopiero na początku przerwania (od timera) ustawianie PWN, bez żadnych if'ów (czyli stałą ilość cyklów) wcześniej wyliczoną wartością, a potem mając trochę czasu obliczanie wartości na następny cykl (skanowanie przycisków itd)

    W kodzie 'sekwencyjnym' ciągle było nie tak. Nawet obliczenia na integerach. Jakaś chrypka, pierdzenie (nie wiem czy wspólczesna moderacja nie da mi bana), stukanie od zewnętrznego przebiegu.

    Po drugie coś co popularnie się nazywa 'przejście przez zero', przebieg modulowany należy przerywać / włączać w rytm modulującego wtedy, jak najbliżej tego kiedy modulujący by chciał, ale kiedy modulowany 'da przyzwolenie'

    Po trzecie modulowanie przebiegu 0..255 przez drugi da strzały od składowej stałej, trzeba zaplanować -127..127 Mówię o modelu matematycznym, nie realizacji na nóżkach, gdzie minus oczywiście nie występuje. Inaczej mówiąc trzeba przesunąć umowne zerowe napięcie.

  • #23 21 Kwi 2017 00:34
    R-MIK
    Poziom 35  

    [quote="m.biruta"Mam przy sobie oscyloskop, mierzę częstotliwość, są lekkie odchylenia +/- 10Hz [/quote]
    Dokładność 10Hz wyliczona z przebiegu? No to super dokładność. Jaki to oscyloskop i jak mierzy ową częstotliwość?

Szybka odpowiedź lub zadaj pytanie
Dziękuję Ci. Ta wiadomość oczekuje na moderatora.
 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME