tag:blogger.com,1999:blog-3960927205450249158.post3294823081253104352..comments2024-03-28T09:15:15.977+01:00Comments on mikrokontrolery avr język c, poradniki, kursy video - eagle: Przetwornik ADC w AVR - część 04mirekk36http://www.blogger.com/profile/11690797724225993397noreply@blogger.comBlogger44125tag:blogger.com,1999:blog-3960927205450249158.post-56718384810999431112016-01-30T13:24:41.286+01:002016-01-30T13:24:41.286+01:00Algorytm "zlecenia" pomiaru ADC
1. Zleć...Algorytm "zlecenia" pomiaru ADC<br /><br />1. Zleć wykonanie pomiaru<br />2. Czekaj na sygnał zakończenia pomiaru<br />3. Odczytaj wynik pomiaru (i zapisz do ringbuffera)<br /><br />Inna możliwość:<br /><br />1. Czekaj na sygnał zakończenia pomiaru (not busy)<br />2. Odczytaj pomiar (i zapisz do ringbuffera) (oczywiście zapisz wielkość odchyłki)<br />[...]<br />3. Zleć wykonanie pomiaru<br /><br />Bufor cykliczny -> Ringbuffer<br /><br />Druga opcja algorytmu pomiaru nie pozostawia procesora w waitloop. Wówczas pomiędzy punktem 2 i 3 można zliczyć średnią z odchyłek. Optymalnym rozwiązaniem długości ringbuffer'a jest żeby była ona potęgą liczby 2. W przypadku długości 16 obliczenie sprowadzi się do 16 krotnego dodawania, natomiast dzieleniem będzie ignorowanie w wyniku najmłodszych 4 bitów, czyli przesunięcie w prawo o 4 bity otrzymanego wyniku. Pojedyncza odchyłka jest w wielkości bajtu, a ich suma powinna być "zbierana" do wielkości 16 bitowej. Obliczenie wyniku średniej wartości w ringbufferz'e będzie (dzielenie przez 16) prostą sekwencją rozkazów SWAP AND i OR, albo 4 krotnym przesunięciem bitów (w prawo) w słowie (Word) 16 bitowym.<br /><br />Jeszcze prościej wyglądałoby zwiększenie reprezentatywności otrzymywanych próbek przy ringbufforz'e o wielkości 256. Wówczas średnia byłaby sumą 256ciu dodawań bajtów do wielkości 16 bitowej, a sam wynik znajdowałby się w starszym bajcie słowa (HI byte in Word). 256 krotne dodawanie bajtu do wartości 16 bitowej będzie de facto 512 krotnym dodawaniem dla kontroli przeniesienia (LO/HI byte). Pomimo, że wydawać się to może zawrotną liczbą, cały ciąg dodawań będzie i tak wielokrotnie krótszy niż oczekiwanie na wynik pomiaru - po prostu zajmiemy procesor do wydajnej pracy zamiast bezczynnego oczekiwania na zmianę bitu zajętości.<br /><br />Odchyłkę możemy obliczać poprzez odjęcie wyniku pomiaru od wartości najmniejszego pomiaru po uprzednim sprawdzeniu, czy nasz pomiar nie jest aby tą wartością minimalną. Jeżeli okaże się że jest on wartością minimalną powinniśmy skorygować o to całą zawartość ringbuffera (o różnicę pomiędzy "starą" wartością minimalną i "nową"). <br /><br />Można również przeprowadzać obliczenia w kodzie U2 tym razem na wartości 24 bitowej (wówczas będzie to 768 dodawań) dla bezpieczeństwa, wówczas można określić jakie są tętnienia. (seria dodawań wówczas będzie nie od wartości minimalnej, tylko od wartości ostatniej średniej).Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-64343582853574269342014-01-20T22:10:23.185+01:002014-01-20T22:10:23.185+01:00Jak ja lubię TAKIE SMACZKI ;) wielkie dzięki za tą...Jak ja lubię TAKIE SMACZKI ;) wielkie dzięki za tą podpowiedź - oby mi się utrwaliła w pamięci ... działa świetnie...mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-29003587850090326282014-01-20T21:44:35.553+01:002014-01-20T21:44:35.553+01:00Panie Mirku taka mała podpowiedź. W eclipsie aby p...Panie Mirku taka mała podpowiedź. W eclipsie aby przenieść linijkę kodu (nawet blok kodu) wystarczy ustawić kursor w danej linii (zaznaczyć blok) i wcisnąć alt + up/down :)gkhttps://www.blogger.com/profile/06321535023703346462noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-78382874920050173112014-01-01T02:00:34.586+01:002014-01-01T02:00:34.586+01:00Zapraszam bo dobre piwko się znajdzie więc będzie ...Zapraszam bo dobre piwko się znajdzie więc będzie można pogadać ;)mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-20683380442045162062014-01-01T01:02:37.347+01:002014-01-01T01:02:37.347+01:00Heh nie sądziłem że nawet tutaj przyda się proporc...Heh nie sądziłem że nawet tutaj przyda się proporcja. :D Chyba się przeprowadzę do Szczecina, bo chętnie na te kursy bym przychodził, a nawet czasem przy piwie pożartował, bo humor to mi się ciągle poprawia a czas leci nieunikniony ;)Mateo193noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-64046660386276044272013-11-06T23:35:32.835+01:002013-11-06T23:35:32.835+01:00albo druga mega przydatna:
int constrain( int val...albo druga mega przydatna:<br /><br />int constrain( int val, int min, int max ) {<br /> if(val < min) return min;<br /> else if(val > max) return max;<br /> return val;<br />}mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-23435880776999029972013-11-06T23:34:59.730+01:002013-11-06T23:34:59.730+01:00Dokładnie jak mówisz - warto sobie nawet podejrzeć...Dokładnie jak mówisz - warto sobie nawet podejrzeć w arduino takie fajne ala polecenie funkcję o nazwie map() ... zresztą pisałem sobie kiedyś implementację tego w C .... bardzo fajnie się w takim przypadku przydaje ponieważ podajemy zakres w jakim ma ograniczać np od wartości x do y z zakresy 0 - 1024 i mamy co trzeba ;) ... zresztą zobacz poniżej (chociaż nie wiem czy tu będzie dobrze formatowanie widać:<br /><br />int map( int x, int in_min, int in_max, int out_min, int out_max ) {<br /> int a = (x-in_min)*(out_max-out_min);<br /> int b = (in_max-in_min);<br /> return ( a + (b/2)) / b + out_min;<br />}mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-18259451727785584132013-11-06T15:29:03.695+01:002013-11-06T15:29:03.695+01:00Mam jeszcze pytanie odnośnie metody skalowania nap...Mam jeszcze pytanie odnośnie metody skalowania napięcia.<br />Na przykładach jest zrobione to metodą proporcji dla jednego odczytu<br />w filmie dla 6V accu1_vol.ref_adc ustawione jest na 494 i tutaj wszystko jasne. Było też wspomniane o tym, żeby pomierzyć dla jeszcze innych wartości napięcia i wtedy dokładność się zwiększy (chociaż dokładność 0,01V i tak jest świetna). Ale co w przypadkach gdy mamy np odczyty z amperomierza np ACS715 (wersja 30A), który ma dokładność 133mV/A ale w temp. 25oC startuje na wartości 503mV. Czyli dla 0A = 503mV.<br />Mój pomysł to odjąć wartość 503mV od odczytu przed proporcją tak żeby matematycznie się zgadzało i ustawić wg tego pomysłu z filmu, ale może spotkał się Pan już z takim przypadkiem i zna jakieś dokładniejsze rozwiązanie.Anonymoushttps://www.blogger.com/profile/01860518874829742673noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-12535414976834638682013-10-16T11:41:22.623+02:002013-10-16T11:41:22.623+02:00thx,
Pozdrawiam
Eaglethx,<br /><br />Pozdrawiam<br /><br />EagleAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-12246953510981615912013-10-16T09:05:53.205+02:002013-10-16T09:05:53.205+02:00No widzisz jak sam wspomniałeś sam algorytm liczen...No widzisz jak sam wspomniałeś sam algorytm liczenia średniej za pomocą mediany jest ciut bardziej wymagający czasowo niż takiej średniej kroczącej ... To zwykle determinuje zastosowania w projektach. Z tego co ty opisujesz i SZCZEGÓLNIE przy padaniu tak wolno zmiennych przebiegów nie dość że można to nawet warto pokusić się o medianę ... chociaż z drugiej strony pomyśl - robisz załóżmy średnią kroczącą w takiej sytuacji jak twoja. Załóżmy że zdarzy się w jednym z pomiarów SZPILA ... no bo akurat tak coś trafiło ... rzeczywiście przy wolnozmiennym przebiegu dość znacznie odbije się ona na ciągłości pomiarów ale ...<br /><br />no ale zawsze można zamiast jednego pomiaru np 1 na sekundę dokonać ich np 20 i uśrednić zwykłą średnią arytmetyczną co jest bardzo szybkie a pozwoli znacznie zminimalizować szpilę z jednego czy dwóch takich chwilowych pomiarów a dopiero średnia z tego pójdzie do średniej kroczącej ...<br /><br />Tyle że jeśli nie zależy nam zbytnio na czasie to co za problem właśnie w takim przypadku użyć mediany ... ? <br /><br />Jak widzisz - problem z uśrednianiem nie jest wydumany , bardzo często jest potrzebny choć nie zawsze przecież ;) np przy próbkowaniu sygnału audio z tak wolnym przetwornikiem jaki jest w prockach AVR to wręcz niemożliwe ;)<br /><br />reasumując i odpowiadając na twoje pytania<br /><br />1. mediana ma te zalety o których wspomniałeś na początku swojej wypowiedzi i jeśli mamy czas, siłę i chęci to pewnie warto tą metodę wykorzystać. Nie wskażę tutaj wyraźnych zalet bo jak zwykle - wszystko zależy od konkretnego projektu.<br /><br />2. no przy tak wolno zmiennych przebiegach ustawienie prędkości ADC na minimum wcale nie zaszkodzimirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-10927700857474397122013-10-16T07:17:28.508+02:002013-10-16T07:17:28.508+02:00upps.. w sumie nie przeglądnąłem całego artykułu n...upps.. w sumie nie przeglądnąłem całego artykułu na temat ADC, trafiłem tu bo szukałem info na temat ustawienia preskalera dla ADC. Posłuchałem Twojego poradnika i trafiłem na fragment o średniej kroczącej( tam gdzie pokazujesz wskazania na metexie i konsoli). Zresztą przeszukując pozostałą część netu, natrafiam niemal wyłącznie na uśrednianie wyniku. Fakt jest to proste w realizacji w porównaniu do mediany. Pomiary, które robię nie są jakieś nadzwyczaj wymagające 2-5 pomiarów/sek. Zastanawiam się co się stanie gdy ADC będzie taktowany najwolniejszym zegarem. Sygnał wejściowy zmienia się liniowo max 1V/1h, aspekty oszczędnościowe też odpadają bo jest zasilane z sieci. Więc pytania mam następujące: <br />1) Jest jakaś zaleta w filtracji poprzez średnią kroczącą vs mediany. <br />2) Jaki negatywny efekt będzie ustawienie najniższej prędkości ADC.<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-30383966201603853722013-10-15T13:33:53.601+02:002013-10-15T13:33:53.601+02:00A powiedz mi proszę - skąd to pytanie ? gdzie jest...A powiedz mi proszę - skąd to pytanie ? gdzie jest powiedziane że JA używam zawsze średniej kroczącej ? ;) Może nie do końca zrozumiałeś cel poradnika hmmm ?mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-15957396962298359922013-10-15T13:08:51.925+02:002013-10-15T13:08:51.925+02:00Cześć,
Jest jakaś konkretna przyczyna, że używasz...Cześć, <br />Jest jakaś konkretna przyczyna, że używasz średniej kroczącej ? W/g mnie do "uśredniania" wyników lepsza jest mediana, gdy pojawi się jakieś zakłócenie, np szpilka o 2x wartości mierzonej da to od razu przełożenie na wynik, przy medianie wartość ta zostanie odrzucona. <br /><br />Pozdrawiam<br /><br />Eagle Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-84821305977962289812013-07-16T11:20:02.938+02:002013-07-16T11:20:02.938+02:00Mirek kawał dobrej roboty, wszystko jest wytłumacz...Mirek kawał dobrej roboty, wszystko jest wytłumaczone jak chłop krowie na miedzy, już chyba prościej się nie da, szacuneczek Panie kolego... nie dawaj się malkontentom zawsze znajdzie się parę zakalców co potrafią humor zepsuć, "jeszcze się taki nie narodził co by wszystkim dogodził"Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-59315269981720074152013-07-13T06:52:57.917+02:002013-07-13T06:52:57.917+02:00Nie rozumiem za bardzo o co chodzi? :( proponuję p...Nie rozumiem za bardzo o co chodzi? :( proponuję pokazać dokładny schemat jak kolega to podłącza i skąd zasila .. ale to już na naszym forum <br /><br />www.forum.atnel.pl<br /><br />bo tam łatwiej takie rzeczy przedstawićmirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-12274304316532414892013-07-13T01:26:13.953+02:002013-07-13T01:26:13.953+02:00*FT232 jest działające biorąc pod uwagę to że coś ...*FT232 jest działające biorąc pod uwagę to że coś się pokazuje.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-50256016967665379592013-07-13T01:24:31.469+02:002013-07-13T01:24:31.469+02:00Bez poprawek kodu od razu zabrałem się za wgrywani...Bez poprawek kodu od razu zabrałem się za wgrywanie kodu, zaprogramowałem uC poprzez usbasp a TXD oraz RXD podłączyłęm do FT232. Odpaliłem puTTY aby sprawdzić czy moja przejściówka FT232 wgl jest sprawna (prędkość 9200). Przy odłączaniu i podłączaniu programatora UsbAsp wyskakują jakieś krzaczki. Nie chodzi mi teraz o pomoc w rozwiązaniu krzaczków lecz pytanie brzmi czy FT232 jest działające? Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-73340536190335667062013-07-13T00:45:55.948+02:002013-07-13T00:45:55.948+02:00No to będziesz zawsze w szoku, tak jak ja do dzisi...No to będziesz zawsze w szoku, tak jak ja do dzisiaj - że w Eclipse zawsze pięknie działa Import ;) w ten sposób można nawet naprawiać uszkodzone workspace'sy ;)<br /><br />cieszę się, że ruszyło - powodzenia teraz z ADC.mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-48006915906944222322013-07-13T00:43:28.983+02:002013-07-13T00:43:28.983+02:00Szok działa :) Dzięki Mirku
Ja robiłem tak że work...Szok działa :) Dzięki Mirku<br />Ja robiłem tak że workspace'm był folder ADC. Robiłem kompletnie inaczej :) Jeszcze raz dzięki :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-7233313066637033192013-07-13T00:29:36.167+02:002013-07-13T00:29:36.167+02:00A powiedz mi w ogóle jak ty otwierasz ten projekt ...A powiedz mi w ogóle jak ty otwierasz ten projekt - bo coś czuję że zupełnie źle się zabierasz :(<br /><br />ja to robię tak:<br /><br />1. pobieram projekt<br />2. rozpakowuję gdzieś na dysku<br />3. odpalam Eclipse z normalnym założonym wcześniej przeze mnie dobrze działającym workspace (a ty tu robisz jakiegoś ZONKA)<br />4. wybieram opcję "IMPORT EXISTING PROJECT" i wskazuję folder do którego rozpakowałem pobrany projekt<br />5. zaznaczam ptaka "copy project to my workspace"<br />6. klikam ok i się cieszęmirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-71690658562697664762013-07-13T00:11:17.931+02:002013-07-13T00:11:17.931+02:00Niestety nawet Indigo nie pomógł. Jedyne co się zm...Niestety nawet Indigo nie pomógł. Jedyne co się zmieniło to to że nie pokazał się ekran startowy Eclipse. Przeszło od razu do projektu który nie został wyświetlony. Project explorer jest pusty i nic więcej się nie dzieje. Eclipse jakby nie widzi projektu lub ma problemy z jego otworzeniem, choć wtedy by mnie poinformował.<br />Spróbowałem otworzyć sam folder MYUART jednak wtedy działo się to co na Juno. Dodam że to już nie pierwszy raz gdy mam taki problem, ale gdy takie błędy miałem to wystarczało zmienić folder który ma otworzyć Eclipse. Niestety tutaj nie mogę już nic zmienićAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-1288239756827972292013-07-12T23:54:19.816+02:002013-07-12T23:54:19.816+02:00A tyle razy wszędzie powtarzam i w poradnikach też...A tyle razy wszędzie powtarzam i w poradnikach też - INDIGO, Eclipse Indigo i od razu będzie lepiej. Sam używam Indigo.mirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-64212018891970241992013-07-12T23:34:13.342+02:002013-07-12T23:34:13.342+02:00Mirku mam pewien problem z otworzeniem projektu. O...Mirku mam pewien problem z otworzeniem projektu. Odpalam eclipse juno classic. Zaznaczam to co chcę odpalić (Twój projekt) z tego folderu : E:\ Eclipse \ Gotowe Projekty \ ADC \ ADC.<br />Gdy eclipse się otwiera pokazuje mi się ekran startowy Eclipse (ten który się odpalał przy pierwszym uruchomieniu Eclipse, jak na czystej instalce). Dla zobrazowania sytuacji mam do wyboru opcje: Tutorials, Overview, Samples, What's new, i w prawym górnym rogu Workbench.<br />Gdy przechodzę do Workbench'a mam perspektywę bez plugina. Muszę wtedy wchodzić i zmieniać ją na C/C++.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-48398498306260305552013-07-11T21:01:29.743+02:002013-07-11T21:01:29.743+02:00Tak warto to zapisać sobie w EEPROMIE, żeby po res...Tak warto to zapisać sobie w EEPROMIE, żeby po restarcie mikrokontrolera działało cały czasmirekk36https://www.blogger.com/profile/11690797724225993397noreply@blogger.comtag:blogger.com,1999:blog-3960927205450249158.post-87127560038507347302013-07-11T18:16:50.804+02:002013-07-11T18:16:50.804+02:00Witam, czy mógłby mi Pan napisać czy robię jakiś b...Witam, czy mógłby mi Pan napisać czy robię jakiś błąd w następującym toku myślenia odnośnie tych wartości dotyczących proporcji i zmieniania ich poprzez UART - mianowicie, gdybym przygotował układ i okazało się, że te wartości by się jakoś rozkalibrowały (np byłyby wyznaczone dla płytki stykowej, a chciałbym je wyregulować w układzie na PCB, ale bez programowania całości) to gdybym zrobił funkcję, która poprzez UART odbiera 2 bity, gdzie pierwszy bit określałby o którą zmienną chodzi, a drugi jej nową wartość to w przypadku resetu mikrokontrolera te zmiany by się nie zapisały, ponieważ inicjowałyby się tymi podanymi w programie, ale gdyby te zmienne przechowywane byłyby w pamięci EEPROM taka zmiana zostałaby na zawsze tak ?Dambohttps://www.blogger.com/profile/14014558193511317540noreply@blogger.com