Witam,
To już ostatni odcinek cyklu poradników na temat przetworników ADC w mikrokontrolerach AVR, a jednocześnie można śmiało powiedzieć - trzeci odcinek na temat AVR dla początkujących. Jest to jakby nie patrzeć trzecie podejście do sposobów uśredniania wyników ADC podczas pomiarów. Myślę, że omawiany tutaj sposób może się przydać każdemu a przy okazji, cały cykl, wskaże drogę do odkrywania nowych własnych jeszcze inny i pewnie jeszcze lepszych metod w tym zakresie. Omawiane przeze mnie sposoby mają być po prostu inspiracją ale ten odcinek jest o tyle szczególny, że może być potraktowany jakby całkowicie niezależnie poza serią i przysłużyć się początkującym, którzy chcieliby szybko okiełznać pomiary napięć w prockach AVR. Gorąco polecam ;)
zapraszam na film:
;)
Krzyczałem przecież, że sondy ;-)
OdpowiedzUsuńeeeeś ... no to ja muszę do laryngologa iść ;) bo nie dosłyszałem już ;)
UsuńDziękuję Mirku za kolejny malutki poradnik. Zawsze kiedy pojawiają się Twoje nowe poradniki liczę cicho na to iż pojawi się poradnik o sieci CAN z zastosowaniem jednego z procesorów z tym protokołem. Mirku powiedz mi czy kiedykolwiek się doczekam? Naprawdę, uwierz mi to będzie krótki poradnik, nie zabierze Ci wiele czasu :) Pozdrawiam i dziękuję za Twój wkład w edukację społeczeństwa.
OdpowiedzUsuńCAN ... hmmm CAN ... może i kiedyś będzie - nie mogę obiecać, przykro mi ... tym bardziej, że na co dzień jakoś nie używam CAN'a .... Nie mniej jednak temat ten mnie również bardzo interesuje - i z tego powodu myślę, że kiedyś będzie i o tym mowa ;)
UsuńPanie Mirku Pan ma chyba jakieś USB z KOSMOSU. Ja gdy mierzyłem napięcie bez uśredniania z USB z filtracją i dławikiem to mi około o 20 skakało. Przyda mi się taki JODA:).
UsuńA u mnie ile skakało ? no też tak chyba ze 20 ... ;) to na samym początku jak odpaliłem program - to proszę zauważyć że skakało dużo więcej bo nie podłączyłem NIC przez nieuwagę do PC3 - dopiero później podłączyłem tam suwak potencjometru i wspomniałem o tym ;)
UsuńCiekawe zakończenie filmiku ;)
OdpowiedzUsuńTo jest tak naprawdę intro pewnego innego całkiem filmu - hmmm może i on się kiedyś ukaże w całości ;) ?
UsuńJeszcze z ADC to MSGEQ7, co Pan na to?
OdpowiedzUsuńPewnie że będzie o MSGEQ7 .... pewnie - ale przy nieco innej okazji. Na 1000% będzie ;) musi być i będzie to mam nadzieję bardzo miodny poradnik ;)
UsuńPrzy MAGIC LED-ach?
UsuńW tych okolicach ... ale czy na pewno od razu w kolejnym odcinku po ostatnim o magic ledach ? tego nie wiem ;)
UsuńSesja zakończona, wolny czas, a zajrzę sobie na Atnel i proszę piękny poradnik. Dziękuje bardzo za kolejną porcję wiedzy, pora przesiąść się ze stykówki na ATB. Pozdawiam
OdpowiedzUsuńDziękuję Panie Mirku za kolejny sympatyczny poradnik. I tu przy okazji wątku dotyczącego programatora USB i moich doświadczeń z tanimi chińskimi wyrobami z ebaya które można kupić u nas na allegro o 200 % drożej :) Jeśli chodzi o programator USB to nawet nie śmiałem się rozglądać za tanimi chińczykami bo tu trzeba mieć solidny produkt czyli taki jak Pański :) Ale po krótce opowiem moją mini przygodę z chińskimi produktami z których zbudowałem zegar . Do budowy wykorzystałem chińską płytkę z Atmegą mini pro i chińską płytkę -z zegarem DS1307 i eepromem dodatkowo na pokładzie . Przepłaciłem za to na allegro 200 % (w stosunku do ebaya) ale i tak się cieszyłem że tanio :) Po złożeniu i uruchomieniu zegarka okazało się , że w ciągu tygodnia opóźnił się o 10 minut :) Dla porównania złożyłem na płytce uniwersalnej zegar z niechińskiego źródła efektem był dokładnie odmierzony czas i w ciągu tygodnia brak odchyłek . Ale morałem z tej bajki będzie co innego :) czy ktoś się zastanowił przez chwilę ile ołowiu i metali ciężkich a nawet promieniotwórczych może być ukryte w chińskich płytkach, jeśli nie to proponuje taki wyrób poddać testom na obecność w/w :) .
OdpowiedzUsuńWłaśnie czegoś takiego szukałem do dwukanałowego termometru opartego na LM335.
OdpowiedzUsuńWcześniej robiłem tak, że zbierałem po kilka próbek i liczyłem z nich średnią, ale taki "filtr" jest lepszy bo działa na bieżąco, jest jednak pewne ALE...
OdpowiedzUsuńTrochę się przyjrzałem tematowi i algorytm zaprezentowany przez Pana(średnia krocząca: http://en.wikipedia.org/wiki/Moving_average) nie daje dokładnego rezultatu- tzn. dawałby, gdybyśmy działali na float'ach, jednak gdy używamy int'ów pojawia się problem zaokrąglania, i dlatego np. dla napięcia odpowiadającego pełnemu zakresowi przetwornika(1023) mamy wynik po filtrze o dt mniejszy- jak sobie rozpiszecie na kartce, to wam wyjdzie mnożenie przez jakiś ułamek mniejszy niż 1- jest on zaokrąglony do 0, dlatego nasz wynik nie "doskoczy" do poprawnej wartości.
Na wikipedii znalazłem też taki algorytm:
http://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter
ale jest problem- także z ułamkami(alpha pomiedzy 0 a 1), poradziłem sobie tak:
#define FRAC_1of32(_x) ((_x >> 5)+1) //1/32 z x // +1 zaokraglenie w gore
#define FRAC_Nof32(_n, _x) (_n*FRAC_1of32(_x)) //ulamek: n/32 z x
/// Lowpass: out=alph*input + (1-alph)*last_out
output=FRAC_Nof32(_n_of32,_new_val) + (last_output-FRAC_Nof32(_n_of32, last_output));
Niestety także nie dociera do poprawnej wartości.
Nie poddając się szukałem dalej, i .... jest! takie coś- super szybki i prosty filtr DP:
static uint16_t adc_lowpass_filt(uint16_t _new_val, uint8_t _filter_pow)
{
static uint16_t filt_val;
static uint32_t sum;
sum = sum - filt_val + _new_val;
filt_val = (sum >> _filter_pow);
return filt_val;
}
Polecam wypróbować- działa tak samo jak Pański, z tym, że dociera do tych 1023, opóźnienie regulujemy zmienną _filter_pow. Pomysł pochodzi z forum AVR_freaks, autor(dpaulsen) zaleca też dla większej dokładności zamienić przedostatnia linijkę na:
filt_val = (Sum +(1<<(_filter_pow - 1))) >> _filter_pow;
pozdrawiam Qba
Ale jest sposób aby działać z dokładnością o której piszesz nawet na liczbach całkowitych ;)
Usuńjeśli masz np działanie na liczbach całkowitych
wynik = A / B
to wystarczy że zrobisz
wynik = ( A + B/2 ) / B
i pozbywasz się tej niedokładności w sporym zakresie ;) ... opisuję to np dokładniej tutaj:
http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html
chociaż w innym aspekcie/zastosowaniu
Popróbuj - zobaczysz że działa ;)
Mirku! Powiem tak: ostatnio zasnąłem oglądając MATRIXA. Od wczoraj oglądnąłem cały Twój cykl dotyczący przetwornika ADC, wstęp do Eclipse i kilka Twoich innych filmików, a nie zmrużyłem oka. Wciągnęło mnie na całego. Kiedyś już zabierałem się za mikrokontrolery, ale dostęp do wiedzy był żaden. Z największą przyjemnością zamówiłem Niebieską Książkę. Przez te dwa dni nauczyłem się więcej niż poprzednio przez kilkanaście tygodni. Mam nadzieję zacząć zabawę na nowo i na poważnie. Przeraża mnie tylko ilość linków po prawej stronie. Nie wiem jak to zniesie moja żona :-) Dziękuję za Twój ogromny wkład pracy. Pozdrawiam serdecznie!
OdpowiedzUsuń;) cieszę się, że udało mi się "zarazić" tym jakże przyjemnym bakcylem kolejną osobę czyli ciebie ;) .... hmmm wiesz - odnośnie twojej małżonki - to może spróbuj ją lekko zarazić z kolei tym co robi moja żoniczność:
Usuńhttps://www.youtube.com/channel/UCa9VDKSL8DBVj9NbbVHS_1Q
a nóż się uda i wtedy będziemy mieli razem troszkę spokoju i wyrozumiałości ? ;)
Przeczytałem w bluebook'u rozdział o ADC wykonując przy tym zamieszczone przykłady.I wszystko działa. Ale dotarłem do podrozdziału o pomiarach różnicowych i "boom", przepaść! Oczywiście rozumiem poszczególne informację ale brak mi w tym wyjaśnień dlaczego właściwie stosujemy to wzmocnienie i jak podłączamy to do układu wspomnianego silnika DC, przydał by się przykład właśnie z pomiarem gdzie mamy silnik pracujący pod napięciem 24 VDC. Bardzo zależy mi na 100% zrozumieniu tego tematu bo uważam to za ciekawy wstęp do sterowania silnikiem DC. Czy można liczyć na filmiki z tym tematem?
OdpowiedzUsuń