Cześć,
Jest sobie płytka z układem jak w temacie zasilana 5V. Do układu podpięte są m.in. wyświetlacz HD44780 oraz 1 przycisk. Wejście z gitary jest przesuwane na poziom 2,5V i kilkanaście razy wzmacniane, żeby przetwornik ADC na mikroprocku o zakresie 0-5V dostał sensowny sygnał. Celem jest oczywiście ustalanie częstotliwośći sygnału z gitary i porównanie jej z pożądanymi. Obiecane pytania:
- nie da się zastosować fft (tylko 1kB ramu), zatem jakim sposobem najlepiej to zrobić ?
- jeśli za pomocą zliczania ilości odczytów między przecięciami sygnału i osi 2,5V to jak wstępnie obrobić sygnał żeby się do tego nadawał ?
- czy potrzeba wyodrębniać do tego jedną z harmonicznych ?
- jaki filtr ewentualnie zastosować ?
- czy wystarczą odczyty o rozdzielczości 8 bitów i częstotliwości ~10kHz żeby uzyskać dokładność pomiaru około 2-3 Hz ?
- a może to wszystko da się zrobić prościej ?
Dzięki z góry i jeśli podobne tematy były to bardzo proszę o wyrozumiałość (i ewentualnie zarzucenie linkami ).
A czy czasem nie powinno byc tak jak powiedzial shannon-kotielnikow, ze probkowanie powinno byc z co najmniej dwukrotna czestotliwoscia sygnalu? Wtedy chyba 10kHz to zdecydowanie za malo.
A czy czasem nie powinno byc tak jak powiedzial shannon-kotielnikow, ze probkowanie powinno byc z co najmniej dwukrotna czestotliwoscia sygnalu?
1. Chyba raczej powiedzieli shannon-kotielnikow
2. Niekoniecznie! Twierdzenie S-K traktuje o częstotliwości próbkowania, koniecznej do całkowitego, wiernego odtworzenia sygnału próbkowanego. W danym przypadku chodzi tylko o pomiar częstotliwości podstawowej harmonicznej, czyli o uzyskanie informacji o wiele uboższej, niż pełna treść sygnału. Do pełnej analizy harmonicznej spełnienie twierdzenia o próbkowaniu byłoby oczywiście obowiązkowe. Przypuszczam jednak, że w przypadku tego problemu możliwe jest zastosowanie jakiejś metody, pozwalającej na większe ograniczenie częstotliwości próbkowania.
PS:
Wydaje mi się, że pomiar odstępów czasowych pomiędzy ekstremalnymi lub innymi określonymi (np ."zerowymi") wartościami jest poprawną i prostą metodą na wyznaczenie częstotliwości podstawowej harmonicznej. To tylko taka intuicja, bo nie mam w tym konkretnego doświadczenia.
Pozdrawiam
Dodano po 34 [minuty]:
Swoją drogą, to ciekawe urządzenie. Zapewne dobrze już opanowane w amatorskich konstrukcjach, tylko jakoś nikt nie chce się wypowiedzieć ... Sygnał dźwięku pojedynczej struny powinien być bardzo prosty, okresowy, z wyraźną dominacją podstawowej harmonicznej (trzeba by sprawdzić na oscyloskopie). Sądzę, że po odpowiednim niezbyt skomplikowanym przetworzeniu analogowym, trzeba po prostu zmierzyć częstotliwość takiego sygnału. Problem części cyfrowej powinien sprowadzić się więc do stworzenia miernika częstotliwości na niezbyt szeroki zakres częstotliwości (generalnie sprawa niezbyt trudna) i ewentualnie uzupełnienia go o mechanizm wskazywania odstępstwa od ustalonego tonu, ale to juz sprawa czysto algorytmiczna.
Quote:
- czy wystarczą odczyty o rozdzielczości 8 bitów i częstotliwości ~10kHz żeby uzyskać dokładność pomiaru około 2-3 Hz ?
- prawdopodobnie w ogóle nie będzie potrzebne przetwarzanie AC sygnału
- pamiętaj, że o jakości dostrojenia tonu muzycznego decyduje względna dokładność częstotliwości. Dla wysokich tonów odstępstwa rzędu kilkudziesięciu Hz będą prawdopodobnie niezauważalne, natomiast dla tonów niskich odstrojenie nawet o ułamek Hz, może dużo znaczyć. Trzeba będzie zapewne zadbać o porządny pomiar niskich częstotliwości i zastosować dla nich metodę bezpośredniego pomiaru okresu.
czy wystarczą odczyty o rozdzielczości 8 bitów i częstotliwości ~10kHz żeby uzyskać dokładność pomiaru około 2-3 Hz ?
Wystarczą 2 bity. Co do 10kHz to wprawdzie gdybyśmy mierzyli jeden okres błąd byłby za duży ale mierząc w określonym czasie, powiedzmy 1s błąd (statystyczny) będzie dużo mniejszy - niemniej:
Quote:
- a może to wszystko da się zrobić prościej ?
Zdecydowanie da się prościej. Można użyć do pomiaru częstotliwości nie ADC 10kHz ale komparatora (czyli właśnie 2 bity) i osiągnąć próbkowanie 1Mhz (lub nawet więcej). Układ do pomiaru wyglądałby tak:
[mic]->[przesterowany wzmacniacz]->[komparator w AVR]->program
Przesterowany, bo zależy nam na przeniesieniu czestotliwości a nie na wiernym brzmieniu na wejściu komparatora. Z resztą, w przypadku gitary może być to dowolny wzmacniacz mikrofonowy. Manewrując przerwaniami od komparatora, licznikami można uzyskać naprawdę wielką dokładność.
Quote:
o jakości dostrojenia tonu muzycznego decyduje względna dokładność częstotliwości.
Nie. Jeżeli instrument ma być prawdziwie nastrojony to istotna jest także bezwzględna wartość częstotliwości (220Hz,440Hz,880Hz dla A w kolejnych oktawach). Oczywiście zgadzam się, że do przygrywania przy ognisku używa się względnego strojenia.
Nie. Jeżeli instrument ma być prawdziwie nastrojony to istotna jest także bezwzględna wartość częstotliwości (220Hz,440Hz,880Hz dla A w kolejnych oktawach). Oczywiście zgadzam się, że do przygrywania przy ognisku używa się względnego strojenia.
ktrot - czy rozumiesz co znaczy metrologiczne pojęcie dokładności względnej?
Jest to względna (np. wyrażona procentowo) odchyłka od określonej wartości poprawnej lub wartości zadanej. W przypadku stroju instrumentu jest to więc odchyłka względna od wartości dokładnej częstotliwości tonu, określonej według danej zasady teoretycznej, np. wg zasady stroju równomiernie temperowanego. Tymi wartościami dokładnymi (zadanymi, teoretycznymi), są np. tak jak podajesz dla dźwięku A częstotliwości 220*2^k Hz. O jakości dostrojenia decyduje właśnie dokładność względna częstotliwości! Odstrojenie o 2Hz dla dźwięku o częstotliwości 220Hz daje takie samo wrażenie słuchowe jak odstrojenie 4Hz dla częstotliwości 440Hz i o 8Hz dla częstotliwości 880Hz, bo w każdym przypadku przesuwamy się o taką samą odległość (w skali geometrycznej, która występuje dla częstotliwości kolejnych dźwięków) względem kolejnego, wyższego lub niższego półtonu chromatycznego.
Stąd przy realizacji pomiaru częstotliwości istotna jest dokładność względna tego pomiaru. "Nie ma większego sensu" mówienie od dokładności bezwzględnej np. 2Hz, bo odchyłka o taką wartość dla A-2 (27,5Hz) może być znacząca, a dla A4 (1760Hz) niezauważalna. Użyłem wcześniej cudzysłowa, gdyż na upartego dokładność bezwzględna jest istotna, ale w tym sensie, że (o ile jest stała w całym zakresie pomiarowym) wyznacza najgorszy przypadek dokładności względnej, dla najniższej wartości mierzonej z zakresu. Bezpośrednią istotą jakości dostrojenia jest jednak dokładność względna.
Z wymienionych powodów napisałem poprzednio o potrzebie zadbania od dobrą dokładność (bezwzględną ) pomiaru dla niskich częstotliwości (bezpośredni pomiar okresu), gdyż ona rzutuje na zachowanie przyzwoitej minimalnej dokładności względnej w całym zakresie i przez to na ogólną "klasę" przyrządu strojącego.
Panowie, operujecie częstotliwością, procentami a w skali muzycznej operuje się przy określaniu odstrojenia pojęciem centa, czyli 1/100 póltonu.Jest to miara jak najbardziej względna.Trzeba to liczyć tak : półton jest odległy od sąsiedniego o √ 12 stopnia z liczby 2.Dlatego taki pierwiastek a nie inny bo w oktawie jest 12 półtonów.Nawet odstęp między progami liczy się wg. tego wzoru.Od tego trzeba liczyć dopiero setne czyli centy.Jasno z tego wynika że dla niskich tonów ten cent będzie mniejszą wartością a dla wysokich większą.Oczywiście dla stroju temperowanego trzeba przyjąć bezwzględną podstawę którą określa się jako 440Hz dla podstawowego tonu A w skali muzycznej.I taką miarą operują tunery.Pozwalają dostroić instrument z dokładnością 1 centa, ani mniej ani więcej.Radzę wziąć jakikolwiek tuner, może być programowy, choćby ten http://programy.internetstandard.pl/pc/13609/AP.Guitar.Tuner.3.06.html żeby zobaczyć jak to działa.Polecam starsze wersje, jakoś mi bardziej odpowiadały i chyba są w sieci.
To ciekawe... Znam zasadę stroju równomiernie temperowanego, ale nie wiedziałem o interwale centa i jego związku z parametrami tunerów. Chociaż zauważyłem, że np. keyboardy można standardowo dostrajać w centach, nigdy nie zastanawiałem się co to jest ten cent właściwie
A więc to 1/100 półtonu chromatycznego, czyli 1/1200 oktawy. Ze względu na postęp geometryczny w stroju równomiernie temperowanym, stosunek częstotliwości kolejnych centów wyrażony jest przez wartość, którą możemy zobaczyć np. tutaj:
co jest równoważne ze stwierdzeniem, że dokładność dostrojenia co do centa, to dokładność względna częstotliwości ok. 0,000578. Wartość wydaje się niebagatelna.
Np. dla a1 (440Hz) odstrojenie o cent to 0,25Hz !!! I jak to zmierzyć odpowiednio dokładnie? Przy normalnym zliczaniu impulsów czas bramkowania musiałby wynieść ok. 10s dla uzyskania sensownej dokładności. W praktyce takie rozwiązanie raczej odpada. Dopiero dla częstotliwości a3 (1760Hz) i wyższych odstrojenie o cent wynosi powyżej 1Hz i można myśleć o bezpośrednim pomiarze częstotliwości. Dla niższych dźwięków trzeba zastosować bezpośredni pomiar okresu, jednak aby zagwarantować odpowiednią rozdzielczość pomiaru, częstotliwość wzorcowa będzie musiała być niemała.
Ogólnie nie wydaje się to takie banalne, jeżeli chodzi o realizację na mikrokontrolerze, gdy idzie o osiągnięcie dokładności centa.
A może stosuje się inne metody, np. badanie dudnień, powstałych przez nałożenie tonu strojonego na ton wzorcowy ... ?
Jeżeli popełniłem błąd w swoich rozważaniach, to poprawcie mnie
Kiedyś bawiłem się w coś takiego na starej poczciwej 51.
Nie było żadnego ADC!
Pomiar częstotliwości z dokładnością ułamka Hz to prosta sprawa.
Wystarczy zliczyć ilość cykli(n) w ustalonym czasie (dla uproszczenia 1s) i poczekać do końca następnego cyklu i zakończyć zliczanie czasu (1,xxx s)
Teraz dzielimy (n+1)/1,xxx i mamy częstotliwość z ułamkową dokładnością. Ta zależy od dokładności pomiaru czasu i algorytmu dzielenia (od tego jaką daje część ułamkową).
Porównanie z wzorcem tonów wystarczy zrobić dla jednej oktawy (załóżmy najniższej). Zmierzoną częstotliwość, jeśli jest większa niż najwyższa w przyjętej oktawie, dzielimy przez 2 i ponownie sprawdzamy. Jeśli trzeba podział powtarzamy. Tak ustalamy oktawę.
Teraz porównanie z tabelką i mamy dźwięk, a różnica to błąd dostrojenia.
Ja w szczegóły muzyczne nie wnikałem, 1Hz to jednostka podstawowa w SI - wolę temperaturę w st.C niż w F. Obie odczuwane są jednak tak samo Pozdrawiam
P.
P.S.
ktrot: 2 bity z komparatora? Ja wiem o jednym bicie dostępnym na wyjściu komparatora! Możesz coś bliżej?
Wystarczy zliczyć ilość cykli(n) w ustalonym czasie (dla uproszczenia 1s) i poczekać do końca następnego cyklu i zakończyć zliczanie czasu (1,xxx s)
Teraz dzielimy (n+1)/1,xxx i mamy częstotliwość z ułamkową dokładnością. Ta zależy od dokładności pomiaru czasu i algorytmu dzielenia (od tego jaką daje część ułamkową).
Więc w istocie lekko zmodyfikowana metoda bezpośredniego pomiaru okresu. Mierzymy czas wielu okresów (dla uśrednienia), tylu ile zmieści się w danym przedziale czasu i obliczamy wartość średnią okresu i częstotliwość jako jego odwrotność.
GaPaTech wrote:
Teraz porównanie z tabelką i mamy dźwięk, a różnica to błąd dostrojenia.
To tylko kwestia "zabawy", aby zrealizować to programowo i mamy wskazanie odstrojenia pokazywane na LCD, np w centach
Oczywiście 1 bit, 2 stany - pomyłka, po prostu nie zastanowiłem się.
Co do mozliwej do osiągnięcia dokładności pomiaru:
Ustawiamy licznik na 1MHz (bez problemu dla kwarcu 16Mhz) czyli mamy zegar odliczający 1us. Wyzwalamy ten zegar komparatorem i odliczamy powiedzmy 10 okresów. Np dla 100Hz otrzymujemy teoretyczną dokładność 0,0001Hz, czas pomiaru 0,1s. Praktycznie będą dwie główne przyczyny błędu:
1. Kwarc,
2. Komparator może przerzucać niedokładnie w tych samych miejscach okresu.
Jeżeli chodzi chodzi o kwarc to oznaczenie 16,000Mhz mówi o tym jak dokładna będzie ta nasza mikrosekunda natomiast stabilność kwarcu w określonej temperaturze jest znacznie wyższa (zależy oczywiście od użytego kwarcu).
Drugi błąd zmniejszamy licząc wiele okresów, Błąd maleje wtedy proporcjonalnie do ich ilości.
Ustawiamy licznik na 1MHz (bez problemu dla kwarcu 16Mhz) czyli mamy zegar odliczający 1us. Wyzwalamy ten zegar komparatorem i odliczamy powiedzmy 10 okresów. Np dla 100Hz otrzymujemy teoretyczną dokładność 0,0001Hz, czas pomiaru 0,1s.
Jak uzyskałeś taką dokładność, bo mnie wychodzi 0,001Hz? (liczyłem na szybko, mogłem i ja się pomylić)
Metoda zaproponowana przez ktrot (pomiar czasu trwania określonej liczby okresów) posiada wadę, polegającą na spadku dokładności względnej wraz z częstotliwością mierzoną. Pomiar czasu obarczony jest błędem, związanym z jego dyskretyzacją, np. przyjmijmy owe 1us dla 1MHz. Jeżeli mierzymy 10 okresów, to wyliczonemu stąd okresowi średniemu przysługuje stały bezwzględny błąd pomiaru czasu 0,1us. Jednak ze wzrostem częstotliwości okres maleje, więc błąd względny okresu (błąd 0,1us odniesiony do wartości zmierzonej) rośnie. Błąd względny wielkości odwrotnej jest (jak wiadomo z podstaw teorii błędów) proporcjonalny do błędu względnego wartości wyjściowej - tzn. błąd względny pomiaru okresu i częstotliwości są proporcjonalne (dokładniej: równe). Zatem, ze wzrostem częstotliwości mierzonej wzrasta (proporcjonalnie) błąd względny.
Wymienionej wady nie posiada metoda zaproponowana przez GaPaTech (bezpośredni pomiar okresu poprzez uśrednienie liczby okresów w mniej więcej jednakowym przedziale czasu). Jeżeli np. w ciągu sekundy zostanie zmierzone 10 okresów, to wartość okresu 100ms, a błąd bezwzględny 0,1us; jeżeli zostanie zmierzone 100 okresów, to wartość okresu 10ms, a błąd bezwzględny 0,01us. Zatem błąd względny (stosunek błędu bezwzględnego do wartości zmierzonej) pozostaje stały. I to jest dla nas pożądana sytuacja. Dodatkowo, cykl pomiarowy będzie stały, niezależnie od wartości mierzonej, a to też bardzo wygodne.
Przyjmując metodę pomiaru określoną przez GaPaTech, biorąc częstotliwość zliczania zaproponowaną przez ktrot 1MHz i zakładając czas cyklu pomiarowego 1s, otrzymujemy dokładność względną, związaną z błędem metodycznym pomiaru o wartości 10^(-6), a więc w pełni wystarczającą dla uzyskania dokładności centa. Wydaje się, że przy zachowaniu częstotliwości 1MHz, można zejść z czasem cyklu nawet jeszcze nieco niżej.
Podzielam zdanie ktrot, iż należy zastanowić się nad dokładnością elementów sprzętowych układu, gdyż mogą wprowadzić błąd większy, niż sama metoda pomiaru. Generalnie nie powinno jednak chyba być większych problemów.
Co do dokładności generatora(jego wartości bezwzględnej) to myślę, że można to przeskoczyć skalowaniem naszego pomiaru.
Jeżeli dysponujemy jakimkolwiek wzorcem częstotliwości(choćby z W-wy 1) to musimy go pomierzyć i ustalić współczynnik do skalowania(przemnożenia) tak aby uzyskany przez nas wynik był zgodny z wzorcem.
Myślę, że nie powinno to stanowić problemu bo i tak mamy już konieczny kawałek matematyki i to najtrudniejszy z działań podstawowych(dzielenie). Ponieważ dysponujemy EEPROM'em to realizacja kalibracji programowej to już tylko "kawałek rzemiosła". Bardziej istotna w tym wypadku będzie stabilność generatora, ale kwarcowy w tym wypadku chyba nadmiernie nie będzie pływał.
P.
Jak uzyskałeś taką dokładność, bo mnie wychodzi 0,001Hz?
f=100Hz przy zegarze tykającym co 1us jeden okres bedzie trwał 10000us stąd z taką rozdzielczością wyznaczamy czas trwania jednego okresu 1/10000. To dokładność teoretyczna. Dokładność praktyczna przy założeniu stałości częstotliwości kwarca na poziomie 100ppm (asekuracyjne założenie) dostaniemy dokładność 0,01Hz. Wpływ drugiego czynnika (komparatora) trudniej oszacować dlatego pisałem o przesterowanym wzmacniaczu aby komparator przerzucał na 'ostrym' zboczu.
Quote:
Metoda zaproponowana przez ktrot (pomiar czasu trwania określonej liczby okresów
Nigdzie nie zaproponowalem takiej metody - próbowalem tylko określić dokładność pomiaru oraz źródła błędu dla najgorszego przypadku czyli dla niskiej częstotliwości. Dla wyższych częstotliwości dokładność pomiaru(względna) wzrasta. W czasie 0,1s - 0,2s potrzebnym aby ktoś strojący instrument, w czasie rzeczywistym otrzymywał informacje o jakości stroju, możemy zbadać kilka czy kilkanaście okresów. Na błąd 1 - wynikającym z niedokładności zegara nie wpływa ani częstotliwość mierzona ani liczba mierzonych okresów (tzn ze wzrostem czestotliwości minimalnie wzrasta dokładność ale możemy to pominąć). Oczywiście ta dokładność bedzie wynosić np 0,01Hz dla 100Hz lub 1Hz dla 10kHz - błąd względny pozostaje ten sam. Błąd komparatora zależy od ilości mierzonych okresów - stąd przy wyższych czestotliwościach bedzie on mniejszy bo w czasie 0,1s bedziemy ich mieć więcej.
Jest to metoda podobna do tej zaproponowanej przez GaPaTech z tym, że nie operuję stałym czasem a ustalam stałą liczbę okresów tak aby trwały przez czas 0,1s - 0,2s i ten czas dokładnie mierzę. Dzieląc otrzymany czas w [us] przez liczbę okresów dostaję czas trwania jednego okresu...Jak ustalić tę liczbę okresów? Po prostu możemy zmierzyć wstępnie czas jednego okresu z dokładnością np 10%
Ktrot chyba coś źle rozumujesz, chociaż nie do końca łapię treść Twojej ostatniej wypowiedzi, może mówimy to samo, tylko w inny sposób. Jeszcze raz podkreślę jak jest z tą niepewnością metodyczną:
1. Istotą niepewności metodycznej rozważanego pomiaru jest (niepewność) błąd dyskretyzacji czasu, np. przy zegarze 1MHz jest to ±1us.
2. Przyjmując, że źródło niepewności jest tylko takie jak w pkt. 1 (pomijamy sprzętowe i inne źródła niepewności), analiza niepewności, taka jak omówiłem wcześniej, prowadzi do wniosków, które podałem, tzn:
- dla pomiarów o mniej więcej stałym czasie trwania, dokładność względna jest stała, niezależnie od częstotliwości
- dla pomiaru stałej liczby okresów, dokładność względna maleje odwrotnie proporcjonalnie z częstotliwością (jest po prostu proporcjonalna do czasu pomiaru)
ktrot wrote:
f=100Hz przy zegarze tykającym co 1us jeden okres bedzie trwał 10000us stąd z taką rozdzielczością wyznaczamy czas trwania jednego okresu 1/10000
Co oznacza "rozdzielczość" 1/10000? Rozumiem, że masz na myśli rozdzielczość względną 1us dla 10000us. W sensie niepewności, błąd rozdzielczości cyfrowej (dyskretyzacji) ma charakter addytywny i wygodniej przedstawiać go w postaci bezwzględnej. W każdym razie rozumiem, iż stwierdzasz, że "rozdzielczość" (tj. niepewność dyskretyzacji - fundamentalne źródło błędu metodycznego) wynosi 1us dla jednego okresu". Jeżeli tak, to jest to błąd! Rozdzielczość jest lepsza, gdyż wynosi 0,1us - ogólnie wynosi ona 1us/n, gdzie n: liczba zmierzonych okresów.
Dzięki wszystkim bardzo za wypowiedzi, teraz mam chwilę czasu i pozwólcie że odpowiem zbiorczo.
Quote:
Wydaje mi się, że pomiar odstępów czasowych pomiędzy ekstremalnymi lub innymi określonymi (np ."zerowymi") wartościami jest poprawną i prostą metodą na wyznaczenie częstotliwości podstawowej harmonicznej. To tylko taka intuicja, bo nie mam w tym konkretnego doświadczenia.
Owszem, tylko mi się z kolei wydaje, że bez wstępnego wyodrębnienia kontretnej harmonicznej sygnał będzie na tyle chaotyczny, że zmierzone wartości będą zbyt odbiegały od siebie. Tak niestety się działo już podczas eksperymentowania (z tym, że mierzona była wiele razy ilość taktów w jednym okresie, ale na jedno wychodzi).
Quote:
- prawdopodobnie w ogóle nie będzie potrzebne przetwarzanie AC sygnału
- pamiętaj, że o jakości dostrojenia tonu muzycznego decyduje względna dokładność częstotliwości. Dla wysokich tonów odstępstwa rzędu kilkudziesięciu Hz będą prawdopodobnie niezauważalne, natomiast dla tonów niskich odstrojenie nawet o ułamek Hz, może dużo znaczyć. Trzeba będzie zapewne zadbać o porządny pomiar niskich częstotliwości i zastosować dla nich metodę bezpośredniego pomiaru okresu.
Zgadza się, tylko nie ma to od strony technicznej wielkiego znaczenia. Mikrokontrolerowi wszystko jedny czy mierzy częstotliwość niskiego czy wysokiego E, a dwóch osobnych algorytmów nie ma specjalnie sensu pisać .
Quote:
Zdecydowanie da się prościej. Można użyć do pomiaru częstotliwości nie ADC 10kHz ale komparatora (czyli właśnie 2 bity) i osiągnąć próbkowanie 1Mhz (lub nawet więcej). Układ do pomiaru wyglądałby tak:
[mic]->[przesterowany wzmacniacz]->[komparator w AVR]->program
Przesterowany, bo zależy nam na przeniesieniu czestotliwości a nie na wiernym brzmieniu na wejściu komparatora. Z resztą, w przypadku gitary może być to dowolny wzmacniacz mikrofonowy. Manewrując przerwaniami od komparatora, licznikami można uzyskać naprawdę wielką dokładność.
Podoba mi się ten pomysł, jednakże problem pozostaje taki jak wyżej - nie trzeba przypadkiem przynajmniej częściowo (np. za pomocą filtrów) wyodrębnić jednej z harmonicznych ? Powiedzmy, że mam sygnał z zakresu 0,5 - 4V (ze względu na wzmacniacz operacyjny). Rozumiem że mam użyć tego komparatora w ten sposób, że sygnał wejściowy będzie jednym z wejść, a drugim odniesienie, czyli 2,5 V ?
Quote:
Stąd przy realizacji pomiaru częstotliwości istotna jest dokładność względna tego pomiaru.[...]
Quote:
Panowie, operujecie częstotliwością, procentami a w skali muzycznej operuje się przy określaniu odstrojenia pojęciem centa, czyli 1/100 póltonu.[...]
Pisałem już trochę o tym wyżej. Owszem, to będzie przydatne przy wyznaczaniu "odległości" od wzorcowego dzwięku aby ją odpowiednio wyświetlić, jednak przy samym pomiarze nie ma to znaczania, gdyż mimo wszystko pomiar napięcia jest liniowy a nie logarytmiczny .
Quote:
Metoda zaproponowana przez ktrot (pomiar czasu trwania określonej liczby okresów) posiada wadę, polegającą na spadku dokładności względnej wraz z częstotliwością mierzoną. Pomiar czasu obarczony jest błędem, związanym z jego dyskretyzacją, np. przyjmijmy owe 1us dla 1MHz. Jeżeli mierzymy 10 okresów, to wyliczonemu stąd okresowi średniemu przysługuje stały bezwzględny błąd pomiaru czasu 0,1us. Jednak ze wzrostem częstotliwości okres maleje, więc błąd względny okresu (błąd 0,1us odniesiony do wartości zmierzonej) rośnie. Błąd względny wielkości odwrotnej jest (jak wiadomo z podstaw teorii błędów) proporcjonalny do błędu względnego wartości wyjściowej - tzn. błąd względny pomiaru okresu i częstotliwości są proporcjonalne (dokładniej: równe). Zatem, ze wzrostem częstotliwości mierzonej wzrasta (proporcjonalnie) błąd względny.
Wymienionej wady nie posiada metoda zaproponowana przez GaPaTech (bezpośredni pomiar okresu poprzez uśrednienie liczby okresów w mniej więcej jednakowym przedziale czasu). Jeżeli np. w ciągu sekundy zostanie zmierzone 10 okresów, to wartość okresu 100ms, a błąd bezwzględny 0,1us; jeżeli zostanie zmierzone 100 okresów, to wartość okresu 10ms, a błąd bezwzględny 0,01us. Zatem błąd względny (stosunek błędu bezwzględnego do wartości zmierzonej) pozostaje stały. I to jest dla nas pożądana sytuacja. Dodatkowo, cykl pomiarowy będzie stały, niezależnie od wartości mierzonej, a to też bardzo wygodne.
Obie metody de facto są bardzo zbliżone, rozsądniejsza z użytkowego punktu widzenia jest druga - stały czas pomiędzy kolejnymi wyświetleniami wyniku pomiaru jest istotny. W pierwszej metodzie trzeba by było dla każdej struny ustawiać inną ilość okresów.
Quote:
Błąd komparatora zależy od ilości mierzonych okresów - stąd przy wyższych czestotliwościach bedzie on mniejszy bo w czasie 0,1s bedziemy ich mieć więcej.
Sam błąd komparatora będzie być może i mniejszy, ale pomiar napięcia będzie mniej dokładny (ze względu na jego szybsze zmiany). Nie jestem zatem przekonany czy ustalanie ilości okresów będzie miało przewagę nad po prostu ustaleniem kwantu czasu. Wyporwadźcie mnie z błędu jeśli się mylę
nie trzeba przypadkiem przynajmniej częściowo (np. za pomocą filtrów) wyodrębnić jednej z harmonicznych ? Powiedzmy, że mam sygnał z zakresu 0,5 - 4V (ze względu na wzmacniacz operacyjny). Rozumiem że mam użyć tego komparatora w ten sposób, że sygnał wejściowy będzie jednym z wejść, a drugim odniesienie, czyli 2,5 V ?
Mam nadzieję, że bedzie możliwość uniknięcia użycia filtrów bo nie bardzo sobie wyobrażam taki filtr. Musiałby być jakiś środkowoprzepustowy (bo chyba wystąpią też podharmoniczne) i to regulowany...Cała nadzieja w tym, że częstotliwość podstawowa ma najwyzszą ampitudę - spójrz na wykres, który ktoś zrobił rejestratorem, w bliźniaczym temacie(link w jednym z powyższych postów). Komarator nie musimy ustawiać na 2,5V - może to być np 3,9V (dla sygnału 0,5V do 4V). Pozostaje wtedy normalizacja sygnału aby szarpnięcie struny z różną siłą nie powodowało kłopotów z pomiarem. Jakiś układ ARW? A moze dodatkowy układ, który by przepuścił tylko to co powyżej 3,5V?.
Odnośnie komparatora w AVR to ma on minimalny ofset w zakresie 1V-4V (dla napięcia uC 5V). Czas propagacji 500ns czyli jest przetwornikiem 1 bitowym 2Mhz.
Quote:
stały czas pomiędzy kolejnymi wyświetleniami wyniku pomiaru jest istotny. W pierwszej metodzie trzeba by było dla każdej struny ustawiać inną ilość okresów.
Moze być. Wyobrażałem sobie po prostu programowanie i chciałem uzyskać całkowitą liczbę okresów nawet kosztem dodatkowej komplikacji z wstępnym pomiarem. Przy stałym czasie, najcześciej dostaniemy ułamek okresu, który trzeba jakoś zaproksymować. Po namysle stwierdzam, że rzeczywiście możemy zapamiętywać stan licznika przy każdej sygnalizacji komparatora i jak minie zadany czas (stały!) to odrzucić ten ułamek okresu - mamy całkowitą liczbę okresów i ich sumaryczny czas trwania.
Quote:
Sam błąd komparatora będzie być może i mniejszy, ale pomiar napięcia będzie mniej dokładny (ze względu na jego szybsze zmiany). Nie jestem zatem przekonany czy ustalanie ilości okresów będzie miało przewagę nad po prostu ustaleniem kwantu czasu. Wyporwadźcie mnie z błędu jeśli się mylę
Owszem, zmiany bedą szybsze ale odległości półtonów (czy też centów) wyrażone w hercach bedą większe. Z resztą rozważania o dokładności są o tyle nieistotne, że teoretyczna dokładność metody przewyższa o 3 rzędy wymaganą (t.j. 1 centa). Lepiej skupić się na prawdziwym problemie - tym co na początku: jak uformować sygnał aby komparator reagował tylko na częstotliwość podstawową.
... mi się z kolei wydaje, że bez wstępnego wyodrębnienia kontretnej harmonicznej sygnał będzie na tyle chaotyczny, że zmierzone wartości będą zbyt odbiegały od siebie. Tak niestety się działo już podczas eksperymentowania (z tym, że mierzona była wiele razy ilość taktów w jednym okresie, ale na jedno wychodzi).
Zupełnie nie wychodzi na jedno! Jest oczywiste, że dla pomiaru pojedynczego okresu otrzymujesz bardzo duże rozrzuty, dające wrażenie chaotycznych. Poszczególne okresy obarczone są jakimiś odstępstwami od wartości średniej, wynikającymi z szumu nałożonego na sygnał. Poza tym, krótki czas pomiaru, występujący w takim przypadku, daje Ci małą dokładność metodyczną, niepozwalającą myśleć o dokładności centa.
niras wrote:
Zgadza się, tylko nie ma to od strony technicznej wielkiego znaczenia. Mikrokontrolerowi wszystko jedny czy mierzy częstotliwość niskiego czy wysokiego E, a dwóch osobnych algorytmów nie ma specjalnie sensu pisać
Ogólnie ma to właśnie od technicznej strony wielkie znaczenie. Jeżeli nie zastosuje się odpowiedniej metody pomiaru, nie uzyska się określonej dokładności. W Twoim przypadku faktycznie "mikrokontrolerowi wszystko jedny czy mierzy częstotliwość niskiego czy wysokiego E", ale wynika to tylko z tego szczęśliwego faktu, że cały zakres mierzonych częstotliwości odpowiada okresom o wiele dłuższym niż możliwy do uzyskania na mikrokontrolerze kwant czasu (np. 1us).
Jeżeli potrzebny jest taki zakres pomiaru, aby objąć częstotliwości i większe i mniejsze od częstotliwości wzorcowej, jaką dysponuje miernik i uzyskać w całym zakresie sensowną dokładność, muszą zostać zaimplementowane "dwa osobne algorytmy" (bezpośredni pomiar okresu i bezpośredni pomiar częstotliwości), przełączane automatycznie lub ręcznie przy określonej częstotliwości progowej - jest to jedyne "od technicznej strony" poprawne rozwiązanie.
W profesjonalnych częstościomierzach, których zakresy pomiarowe sięgają setek MHz, dominuje metoda bezpośredniego pomiaru częstotliwości. W rozwiązaniach amatorskich, z wykorzystaniem liczników w mikrontrolerach, wygodniej zastosować bezpośredni pomiar okresu, gdyż są to z reguły liczniki synchroniczne, które i tak nie są w stanie zliczać impulsów o częstotliwości większej niż częstotliwość wewnętrznego zegara. Aby zmierzyć częstotliwości większe, trzeba albo zastosować licznik zewnętrzny (i przechodzimy na bezpośredni pomiar częstotliwości), albo stosujemy preskaler (i zostajemy przy poprzedniej metodzie pomiaru, ale wtedy nieodwracalnie tracimy dokładność).
W ogólnym przypadku nie da się nic wyczarować właśnie bez połączenia "dwóch algorytmów". Proponuję zapoznać się z teoretycznymi, metrologicznymi podstawami techniki pomiaru częstotliwości.
niras wrote:
Podoba mi się ten pomysł, jednakże problem pozostaje taki jak wyżej - nie trzeba przypadkiem przynajmniej częściowo (np. za pomocą filtrów) wyodrębnić jednej z harmonicznych ?
ktrot wrote:
Mam nadzieję, że bedzie możliwość uniknięcia użycia filtrów bo nie bardzo sobie wyobrażam taki filtr. Musiałby być jakiś środkowoprzepustowy (bo chyba wystąpią też podharmoniczne) i to regulowany...Cała nadzieja w tym, że częstotliwość podstawowa ma najwyzszą amplitudę
Chodzi o to, aby wybrać taki poziom sygnału, jako próg przełączania komparatora, żeby przełączanie następowało tylko 2 razy na okres. Wydaje się, że najlepszy byłby do tego poziom średni sygnału (stałoprądowy punkt pracy wzmacniacza), gdyż sinusoida (składowa podstawowa) z nałożonymi harmonicznymi posiada kształt "zafalowany" i im bardziej odbiegamy od wartości średniej, tym bardziej możliwe, że konkretny poziom zostanie "przecięty" wielokrotnie. "Cała nadzieja w tym, że częstotliwość podstawowa ma najwyższą ampitudę" - dokładnie tak, ale myślę, że właśnie tak będzie - inaczej mógłby w ogóle nie istnieć poziom sygnału (bez odpowiedniego odfiltrowania), który byłby osiągany tylko 2 razy na okres podstawowy.
Być może zastosowanie ARW i detekcja wartości szczytowych, tak jak zaproponował niras, byłaby jeszcze skuteczniejszym rozwiązaniem, ale przy tym nieco trudniejszym do realizacji - chociaż, kto wie ..
Zastosowanie przesterowania jest standardowym sposobem wyodrębniania częstotliwości dominującej sygnału złożonego. Klasyczne zastosowanie to np. wyodrębnianie nośnej w kwadraturowych demodulatorach AM. Po odpowiednio silnym przesterowaniu otrzymujemy w praktyce sygnał prostokątny, można więc je uznać w praktyce jako rozwiązanie alternatywne względem wykorzystania komparatora (raczej nie potrzeba jednego i drugiego). Zastosowanie komparatora pozwala z kolei na regulację progu przełączania.
Być może prosty filtr dolnoprzepustowy, który odetnie wysokie składowe, z pewnością niepotrzebne w sygnale, nie zaszkodziłby.
niras wrote:
Pisałem już trochę o tym wyżej. Owszem, to będzie przydatne przy wyznaczaniu "odległości" od wzorcowego dzwięku aby ją odpowiednio wyświetlić, jednak przy samym pomiarze nie ma to znaczania, gdyż mimo wszystko pomiar napięcia jest liniowy a nie logarytmiczny
...
Obie metody de facto są bardzo zbliżone, rozsądniejsza z użytkowego punktu widzenia jest druga - stały czas pomiędzy kolejnymi wyświetleniami wyniku pomiaru jest istotny. W pierwszej metodzie trzeba by było dla każdej struny ustawiać inną ilość okresów.
wrrrr... Tu to się nigdy nie dogadamy! Otóż to wszystko ma właśnie duże znaczenie! Odległość w skali geometrycznej (inaczej logarytmicznej), takiej jaka odpowiada wrażeniu słuchowemu interwałów muzycznych, to odległość względna: zmiana o 1 dla 10, to to samo co zmiana o 10 dla 100, to samo co zmiana o 100 dla 1000 itd. "mimo wszystko pomiar napięcia jest liniowy a nie logarytmiczny" - chyba pomiar częstotliwości?, ale co to znaczy liniowy? - o liniowości/nieliniowości pomiaru mówimy, gdy wielkość mierzona ulega przetwarzaniu fizycznemu, wtedy przetworniki wprowadzają nieliniowość. Częstotliwość mierzona jest natomiast "bezpośrednio", jedynie możemy mówić o błędzie tego pomiaru. I właśnie o to nam chodzi, aby błąd ten (niepewność) był nieliniowy w sposób geometryczny (proporcjonalny do wartości zmierzonej), czyli aby stała była niepewność względna, bo to odpowiada stałej dokładności (półtonu, 1/10 półtonu, cent, itp.) w skali muzycznej. Wymienioną własność zapewnia metoda ze stałym czasem pomiaru i dlatego niezupełnie prawda, że "obie metody de facto są bardzo zbliżone". Praktyczna korzyść, związana ze stałym czasem pomiaru jest drugorzędna w stosunku do własności metrologicznej tej metody!
ktrot wrote:
Wyobrażałem sobie po prostu programowanie i chciałem uzyskać całkowitą liczbę okresów nawet kosztem dodatkowej komplikacji z wstępnym pomiarem. Przy stałym czasie, najcześciej dostaniemy ułamek okresu, który trzeba jakoś zaproksymować. Po namysle stwierdzam, że rzeczywiście możemy zapamiętywać stan licznika przy każdej sygnalizacji komparatora i jak minie zadany czas (stały!) to odrzucić ten ułamek okresu - mamy całkowitą liczbę okresów i ich sumaryczny czas trwania.
Dokładnie o to chodzi! Można zrealizować to algorytmicznie np. tak jak piszesz. Przeczytaj jednak dokładnie jak zaproponował GaPaTech. Ty proponujesz liczenie z niedomiarem. Można jednak przeczekać cały ustalony czas i dopiero potem policzyć liczbę dodatkowych impulsów do końca ostatniego okresu - wtedy nie konieczne jest zapamiętywanie kolejnych stanów licznika. W każdym razie z taką metodą mamy potrzebną nam stałą dokładność względną metody pomiaru, co do wartości "ustaloną" przez kwant zdyskretyzowania czasu i długość pomiaru. Bez problemu może to być na poziomie pomijalnym z innymi źródłami błędu i można zająć się innymi problemami, głównie wstępnym analogowym przetworzeniem sygnału.
Koniec kruszenia kopii obiecuję, że to moja ostatnia wypowiedź w tym temacie ...
Pozdrawiam głównie Autora postu, życzę sukcesów w realizacji urządzenia i zachęcam do podzielenia się informacjami o rezultatach.
Jeszcze jedna uwaga co do samej części analogowej. Filtr jest raczej konieczny, ale na 100% konieczne jest ograniczenie pasma od dołu!
Jeżeli zastosujemy wzmacniacz o dobrych parametrach (np. na operacyjnym) i sygnał pochodzi z przetwornika gitary lub mikrofonu dynamicznego to problemu raczej nie zaobserwujemy.
Inaczej sprawa wygląda z prostym wzmacniaczem na kilku tranzystorkach i/lub mikrofonem elektretowym/pojemnościowym.
Tu przy odpowiednio dużym wzmocnieniu dla b.małych f możemy uzyskać przesterowania wzmacniacza nie sygnałem użytecznym a czymś co chyba należałoby określić jako jego obwiednię.
Przy okazji b.poważny opis z:
http://rab.ict.pwr.wroc.pl/dydaktyka/supwa/projects/icek/html/idea.html jak na moją znajomość WO w schemacie zawiera kilka "knotów", ale sam pomysł przełączania wzmocnienia jest jak najbardziej do realizacji na AVR.
Pozdrawiam
P.
Dodano po 10 [minuty]:
P.S.
Opinia oparta tylko na "rzucie okiem"(mam nadzieję, że rzut celny ).
Jak będę miał więcej czasu to dokładnie oglądnę i poczytam.
Moja koncepcja:
- Mikrofon.
- Wzmacniacz.
- Filtr antyaliasingowy w okolicy 660Hz (struna e) np. MAX29x.
- ADC, próbkowanie 2kHz (więcej nie trzeba, a i liczenia mniej będzie).
- Mieszacz kwadraturowy (programowy), sinus i cosinus generowane na zasadzie DDS.
- Filtr dolnoprzepustowy na wyjściach I i Q mieszacza, pasmo przenoszenia małe, może z 10Hz, bo bardziej odstrojoną gitarę to można czym innym, ot choćby na słuch stroić.
- obliczenie argumentu otrzymanego w ten sposób fazora (przefiltrowane sygnały I/Q)
- Wyświetlenie argumentu na kółku złożonym z diód LED.
Schemat:
Te filtry LC to filtry Butterwortha czwartego rzędu, fc = 10Hz.
Argument liczony jest za pomocą funkcji atan2(), nie kojarzę czy jest w standardowych bibliotekach, a jak nie, to przeszukać internet (albo moje posty, kiedyś pisałem, jak ona wygląda).
Fazor można też wizualizować na matrycy dwuwymiarowej, za współrzędną X wziąść sygnał I, a za Y sygnał Q, ale nie wygląda to najlepiej (szybko wraca do punktu 0,0, przez co kierunek wirowania może się okazać trudny do określenia).
Postępując w ten sposób otrzymuje się fazor, którego prędkość wirowania wynosi 1 obrót / s na 1Hz odstrojenia od częstotliwości lokalnego oscylatora (LO). Kierunek wirowania fazora określa kierunek odstrojenia. Wirowanie w lewo (matematyczne lewo, faza rośnie) oznacza zbyt dużą częstotliwość sygnału wejściowego (większą od LO). Wirowanie w prawo oznacza częstotliwość mniejszą. Dla potrzeb wizualizacji można przyjąć odwrotną konwencję, bardziej intuicyjną (bo kojarzącą się z zegarem).
Wartość fazy można zróżniczkować (ale najpierw trzeba zrobić phase unwrapping), w wyniku czego otrzyma się wartość odstrojenia w postaci bezpośredniej. Różniczkowanie można też przeprowadzić bezpośrednio z sygnałów I/Q, dzięki czemu pozbywamy się operacji atan2(), nie chce mi się tego teraz liczyć, ale wygląda to mniej więcej tak: delta_f = (dQ/dt * I - dI/dt * Q) / (I^2 + Q^2), pochodna arcusa tangensa w każdym bądź razie. Z doświadczenia - różniczkowanie sygnałów w systemach cyfrowych = kłopoty, a ten atan2() to przecież i tak wcale nie za często liczyć trzeba.
Mimo tego, moim zdaniem, wirujący fazor był by jednak lepszy (taki fajerwerk, inny od innych). Gwoli ścisłości, dostrojenie oznacza zatrzymanie fazora w miejscu.
Oscylator lokalny ustawia się na częstotliwość taką, jaką powinna mieć nastrojona struna.
Filtry na wyjściach muszą mieć dokładnie taką samą charakterystykę, co przy przetwarzaniu cyfrowym nie stanowi na szczęście najmniejszego problemu. Powinny one ponadto charakteryzować się dużym tłumieniem w pasmie zaporowym i w miarę stromym zboczem. Oczywiście sygnału nie trzeba filtrować w czasie rzeczywistym, a tylko w momencie uaktualniania "wyświetlacza", czyli z 15 - 20 razy na sekundę starczy. Filtr uśredniający chyba raczej odpada, może jakiś CIC, albo nawet FIR, w symulatorze najłatwiej było mi zaimplementować LC. Warunkiem otrzymania dobrych rezultatów jest mała zawartość szumu w przefiltrowanych sygnałach (ważne zwłaszcza gdy amplituda sygnału wejściowego staje się bardzo mała), z filtrem RC była tragedia w porównaniu z tym co jest z LC. Przez to niewskazane jest "obcinanie" bitów z wyniku filtracji, lepiej zostawić tak jak jest, z przesunięciem (po operacjach MAC).
Spostrzeżenia:
W zależności od sposobu szarpnięcia, zawartość poszczególnych składowych ulega dość drastycznym zmianom. Miałem nawet taki przypadek, że w strunie A dominował ton 330Hz, a poza tym 110, 220 i 440, wyższe harmoniczne mają już dość małe amplitudy.
Drugi ton znajdujący się bardzo blisko pożądanego (tak, że przejdzie przez filtr za mieszaczem) będzie modulował fazę, na szczęście w warunkach bojowych takowy występować raczej nie powinien, a przynajmniej nie będzie miał zbyt dużej amplitudy. Źródłem jego mogą być na przykład inne struny drgające wraz ze struną strojoną. Rozwiązanie - stłumić pozostałe struny za pomocą dowolnej z kończyn lub innym urządzeniem.
Wyniki symulacji przy użyciu rzeczywistych zarejestrowanych dźwięków. Częstotliwości niekoniecznie się pięknie zgadzają, nie pamiętam kiedy stroiłem, zresztą nie ma to tu najmniejszego znaczenia.
Wykresy przedstawiają zmiany argumentu fazora w czasie przy różnych częstotliwościach oscylatora lokalnego. Te nagłe skoki to efekt "zawinięcia" się fazy z +/- PI rad na -/+ PI rad.
Struna e (wybrałem dominujący ton):
Struna e po około 0.6s od szarpnięcia podkręcona na wyższą częstotliwość, o chyba 2 z kawałkiem Hz. Dokładną wartość można sobie policzyć z nachylenia zbocza. Warto zwrócić uwagę na praktycznie natychmiastową reakcję.
Struna A:
Struna A odstrojona w górę po około 1.5s:
Częstotliwości dla tej samej struny na obu wykresach niekoniecznie się zgadzają, bo raz, że nagrania dokonane były w różnym czasie, a dwa - struna mogła zostać szarpnięta w inny sposób.
Metoda pozwala również na dostrojenie się do dowolnej harmonicznej, można się bawić w flażolety na dwunastym progu, będzie dokładniej, bo fazor będzie wirował dwa razy szybciej.
Nagranie struny A wykonane zostało w niesprzyjających warunkach - mikrofon i prawie cała długość kabla znajdowały się w bezpośrednim sąsiedztwie otwartej szafy z serwerem, co zresztą na nagraniu doskonale słychać. Nagrania struny e wykonane zostały z przygrywającą w tle muzyką (względnie cichą, słychać głównie wysokie tony odbite od pudła gitary).
W załączniku powyższe obrazki, użyte próbki dźwiękowe, plik projektu z LTspice dla tych, którzy chcieli by poeksperymentować we własnym zakresie.
Z braku czasu nie mogę sprawdzić tego w praktyce, może za kilka dni dopiero.
Koncepcja okazała się poprawna.
Układ zmontowany na szybko z "klocków", program wygląda jak po przeoraniu granatem, ale ogólnie mówiąc - działa.
W załączniku multimedium, bo na razie tylko tyle nadaje się do pokazania. Struna D najpierw nastrojona, potem przestrojona w dół, a potem w górę. Jako "wyświetlacz" służy linijka 8 LED, a powinno być kółko i najlepiej z większej ilości LEDów.
Filtr FIR, pasmo przepustowe 5Hz, pasmo zaporowe 10Hz, tłumienie w pasmie zaporowym 60dB, 439 tapów, było 878 i liniowa faza, ale połowę obciąłem, jest szybsza reakcja i szybsze odświeżanie (40 razy na sekundę), liniowa faza jest tu niepotrzebna.
Trochę problemów jest jeszcze ze struną E, pozostałe działają bez zarzutu.
Częstotliwość podstawową (struna A) wybrałem 110Hz. Z taką wartością działa najlepiej, no ale to kwestia też samej gitary, strun, sposobu szarpania itd.
Tylko, psia kość, zapomniałem zdjęcie zrobić, zresztą ładnie to to nie wygląda.
Jak się więcej czasu znajdzie, to kod, schemat itd. wylądują w DIY.