ATNEL tech-forum https://forum.atnel.pl/ |
|
Prosty sposób na encoder https://forum.atnel.pl/topic3241.html |
Strona 1 z 2 |
Autor: | Wielki [ 1 cze 2013, o 14:44 ] |
Tytuł: | Re: Prosty sposób na encoder |
Super sprawa, no i oczywiście lib napisany w profesjonalny sposób Gratuluje i podziwiam mistrzu |
Autor: | mirekk36 [ 1 cze 2013, o 14:56 ] |
Tytuł: | Re: Prosty sposób na encoder |
Anty jeśli chodzi o podział projektu na pliki doszedł do krańca ludzkich możliwości, tzn robi to idealnie przejrzyście - coś pięknego czytać takie projekty jeśli zaś chodzi o sam sposób obsługi enkodera to wcale ci się nie oberwie - ja po prostu korzystam ze sprawdzonych metod w tym przypadku i obsługi kodu Greya ... (jako i Sun to robi) .... a tutaj ... hmm jeśli działa to ok .... ciężko mi się wypowiedzieć bo sam od niedawna enkodery obrabiam a już wiem że jest ich sporo odmian i często trzeba kod dostosowywać. Tutaj o ile się nie mylę wszystko zależy od: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. czyli od jednego wyjścia ??? ... albo coś za szybko rzuciłem okiem albo to może okazać się zawodne w wielu sytuacjach |
Autor: | mirekk36 [ 1 cze 2013, o 15:14 ] |
Tytuł: | Re: Prosty sposób na encoder |
jak znajdę czas to się pobawię - ale zwróć uwagę że wątpliwości wyraziłem TYLKO do istoty samej obsługi ... anie callbacków - bo to rozgrywasz po mistrzowsku |
Autor: | SunRiver [ 1 cze 2013, o 15:18 ] |
Tytuł: | Re: Prosty sposób na encoder |
No Anty nas zostawił daleko w tyle .... trzeba się poduczyć mirku ... nie mamy wyjścia oby tak dalej Mistrzuniu ANTY |
Autor: | xbary [ 1 cze 2013, o 15:22 ] |
Tytuł: | Re: Prosty sposób na encoder |
No podoba mi się, pewnie skorzystam jak rozbebesze jakąś mikrofale... ale coś chyba na schemacie jest nie tak z kondziorami... obywa do jednej lini ? |
Autor: | Paul Dirac [ 1 cze 2013, o 19:22 ] |
Tytuł: | Re: Prosty sposób na encoder |
Nic tylko pozazdrościć umiejętności. Oby kolejne projekty były tylko lepsze. |
Autor: | Sonix [ 1 cze 2013, o 21:16 ] |
Tytuł: | Re: Prosty sposób na encoder |
Antystatyczny napisał(a): Umiejętności z czasem nadejdą. Na razie usiłuję raczkować Anty... jeżeli Ty raczkujesz to mnie jeszcze w planach nie ma..... |
Autor: | Paul Dirac [ 3 lip 2013, o 18:49 ] |
Tytuł: | Re: Prosty sposób na encoder |
No anty fajny program. Mi udało się dziś zasymulować cos na wzór list dwukierunkowych włąsnie z wykorzystaiem enkodera i lcd 4x16. Szybko łapiesz to co przekazuje mirek - szacun. Ja tam zawsze musze przespać sie atakując coś nowego. |
Autor: | mirekk36 [ 4 lip 2013, o 15:21 ] |
Tytuł: | Re: Prosty sposób na encoder |
Antystatyczny napisał(a): Sam sie dziwię, że to działa, bo na logike nie powinno. Powinno powinno Antystatyczny napisał(a): Tzn. powinno działać poprawnie w jedną stronę. Nie nie - na pewno w dwie strony. Antystatyczny napisał(a): Mirku, Może po prostu przetestuj to u siebie w wolnej chwili na dowolnym encoderze i z proponowaną przeze mnie aplikacją. Właśnie przetestowałem Antystatyczny napisał(a): Czy mechanizm flag zastosowany jest słusznie? pewnie, że tak - korzystanie z callbacków jest proste jak drut a takie przykłady pomagają ludziom to zrozumieć - potem nikt nie będzie się ich bał jak jeża. Pewnie że można bez nich .... ale co z tego ? .... można i w ogóle bez mikrokontrolera jak się uprzeć gdyby iść tym tropem a teraz wyjaśnienie - bo bo moja uwaga oczywiście była niesłuszna a wniosek wyciągnięty tylko po rzuceniu okiem : mirekk36 napisał(a): Tutaj o ile się nie mylę wszystko zależy od: mirekk36 napisał(a): czyli od jednego wyjścia ??? ... albo coś za szybko rzuciłem okiem albo to może okazać się zawodne w wielu sytuacjach oczywiście, że nie zależy od jednego wyjścia enkodera bez DWÓCH się nie obędzie i nie mogłoby to działać. Po prostu jedno zgłasza przerwanie a w przerwaniu badamy stan drugiego i jeśli jest 1 to kerunek X a jeśli jest 0 to kierunek Y najprostsza z możliwych implementacji i sam choć zapomniałem - to jak zaczynałem walkę z enkoderem też ją przeszedłem no ale przeskakiwały wartości okrutnie ... tylko że wtedy zapomniałem kondensatorów dać ..... Tymczasem ta metoda którą kiedyś jako pierwszy podał nasz Sun a ja potem jeszcze troszkę ją pozmieniałem i zaprezentowałem jako że uwzględnia kodowanie greya to może się obejść nawet bez kondków i działa precyzyjnie - choć jest coś za coś - tracimy jeden timer niestety. Reasumując po dodaniu kondków rzeczywiście tą metodę można spokojnie wykorzystywać - tylko skoro już jesteśmy przy zdarzeniach , callbackach itp to warto zwrócić uwagę na fakt że jeśli w przerwaniu mielibyśmy TYLKO ustawiać jakąś jedną flagę i nic innego nie robić albo tak jak w przerwaniu INT2 tylko badać stan jednego pinu to jednak kod można ZNACZNIE uprościć tak aby był bez przerwań tzn tfuuu bez procedur obsługi przerwań no bo przecież można korzystać ze sprzętowych flag przerwania. Tak więc np to co jest w INT2 przenieść wprost do ENCODER_EVENT() .... zrezygnować z flag opatrzonych volatile ... zresztą proszę jak niżej ... ta uproszczona wersja kodu choć nadal zawiera pełną funkcjonalność callbacków to jednak zabiera mniej i RAM i FLASH .... warto to podejrzeć ... i dokładnie na takiej samej zasadzie zmodyfikować sobie twój LCD_EVENT() ... identycznie: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
specjalnie zakomentowałem to co zostało uproszczone i wywalone z kodu. REASUMUJĄC - w zależności od potrzeb projektu i potrzebnej precyzji a tym bardziej gdy mamy leżące odłogiem timery można korzystać z tej metody z kodem greya i timerem http://mirekk36.blogspot.com/2013/04/en ... y-cz2.html a w innych przypadkach - chyba nawet w większości przypadków, można korzystać z tej metody - opisanej w tym wątku Myślę że tym sposobem wyjaśniliśmy na naszym forum chyba WSZYSTKIE ważne aspekty obsługi popularnych enkoderków. |
Autor: | aaadamw [ 10 lip 2013, o 14:41 ] |
Tytuł: | Re: Prosty sposób na encoder |
Działa to bardzo fajnie |
Autor: | ursmar [ 19 sty 2014, o 04:21 ] |
Tytuł: | Re: Prosty sposób na encoder |
Witam, mam takie pytania, 1) która zmienna odpowiada za wyświetlanie wartości impulsów na ekranie LCD? Mój enkoder musi zliczyć ponad 33000 impulsów i niestety wartości przeskakują po 32276 na -32768. Próbowałem zmieniać typ zmiennych w plikach enkodera i nic to nie zmieniało zawsze po przejściu 32276 przeskok na -32768. Być może jest to kwestia funkcji wyświetlania na LCD? język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. ale tutaj też próbowałem zmieniać na int32_t i dalej to samo z zakresem kończącym się na 32276. w main.c jest lcd_event() język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. jedyne co mi przychodzi do głowy to tylko: volume, i funkcja lcd_int. Niestety nie wiem czemu się tak dzieje, dlatego proszę o wskazanie, której zmiennej typ ogranicza tą wyświetlaną wartość na LCD 2x16? 2) Niepojęta dla mnie sytuacja :0 dlaczego gdy dołożę te dwa kondensatory jak na schemacie enkoder zachowuje się tak jakby nie rozpoznawał kierunku. tzn. w obie strony zlicza impulsy np. zwiększając wartości, albo w obie zmniejszając. Gdy wyciągnę jeden kondensator, a drugi pozostawię wsadzony jest ok, kierunki są rozpoznane i zlicza zwiększając wartości w jedną ze stron, a w drugą przeciwnie tzn. zmniejszając. Bez obu kondensatorów, też jest poprawnie wykonywana operacja zliczania ale chyba jedynie pod względem kierunku, bo dokładniej jest z tymi kondensatorami. Tylko co to za zjawisko, że kondensator taką zmianę wprowadza? -------------------------- Sam enkoder to taki model: MOZ 30 500 5 BZ K Nota 1. PL Nota 2. ENG |
Autor: | ursmar [ 20 sty 2014, o 20:20 ] |
Tytuł: | Re: Prosty sposób na encoder |
Ad 1. Pomogła zmiana w w funkcji bliblioteki LCD odpowiedzialnej za wyświetlanie liczby dziesiętnej z słowa itoa na ltoa język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Ad 2. dalej nie wiem... wiec na razie dzialam bez tych kondensatorków 100 nF |
Autor: | jumar000 [ 17 sie 2015, o 20:20 ] |
Tytuł: | Re: Prosty sposób na encoder |
Witam! Mam mały problem z encoderem, mam podłączonego tak jak na schemacie plus klawisz na PINB0, jak przekręcam encoderem to wtedy uruchamia mi funkcje klawisza. Na PINB3 to samo, dopiero na PINB4 niema tego zjawiska, z góry dziękuje za pomoc. |
Autor: | mirekk36 [ 17 sie 2015, o 20:23 ] |
Tytuł: | Re: Prosty sposób na encoder |
jumar000 napisał(a): Witam! Mam mały problem z encoderem, mam podłączonego tak jak na schemacie plus klawisz na PINB0, jak przekręcam encoderem to wtedy uruchamia mi funkcje klawisza. Na PINB3 to samo, dopiero na PINB4 niema tego zjawiska, z góry dziękuje za pomoc. No to coś źle podłączasz - czyli nie masz tak jak na schemacie |
Autor: | jumar000 [ 18 sie 2015, o 22:09 ] |
Tytuł: | Re: Prosty sposób na encoder |
Problem rozwiązany, dodałem dwa rezystory [img] [/img] |
Autor: | maniocek [ 18 gru 2015, o 21:41 ] |
Tytuł: | Re: Prosty sposób na encoder |
Dobry wieczór, Szukam biblioteki, która pomoże mi obsłużyć mój enkoder, może ktoś już testował dla tak dużych wartości i podpowie, czy może poleci inną bibliotekę. Mam silnik: https://www.pololu.com/product/2288 Który na wyjściu, przez jeden obrót wału daje aż 8246 impulsów. Na wyjściu wału mam rolkę fi 31 mm co daje nam prędkość około 54mm/s Daje nam to około 1 i 2/3 obrotu rolki przez sekundę, czyli jakieś 13743 impulsów na sekundę. Dotychczas co znalazłem, to przerwania realizowane są co 1ms, czyli o 14 razy za rzadko... Macie może jakieś rady/propozycję? |
Autor: | electro [ 21 lut 2016, o 19:35 ] |
Tytuł: | Re: Prosty sposób na encoder |
Witam Mam pewien problem. Kod działa bez problemu lecz przy kręceniu encoderem to zlicza co 2 tyknięcia - raz nie ma reakcji a przy następnym dopiero zlicza o 1, i znowu bez reakcji i.t.d. Może to wina enkodera ale porównywałem charakterystyki i sa identyczne nie wiem gdzie może leżeć problem. Pozdrawiam Konrad |
Autor: | mirekk36 [ 21 lut 2016, o 20:33 ] |
Tytuł: | Re: Prosty sposób na encoder |
electro napisał(a): Witam Mam pewien problem. Kod działa bez problemu lecz przy kręceniu encoderem to zlicza co 2 tyknięcia - raz nie ma reakcji a przy następnym dopiero zlicza o 1, i znowu bez reakcji i.t.d. Może to wina enkodera ale porównywałem charakterystyki i sa identyczne nie wiem gdzie może leżeć problem. Pozdrawiam Konrad Trzeba wiedzieć, że są różne typy enkoderów. Czyli są tzw z pół-krokiem i z pełnym krokiem. Są enkodery które mają różne ilości skoków na pełen obrót np 24 albo 30 albo jeszcze inne ... W różnych przypadkach trzeba nieco różnie podejść do obsługi enkodera jeśli chodzi o te pół- albo pełne kroki istotny też jest sposób podłączenia - ale wkrótce ukaże się dość spory poradnik, w którym rozprawimy się z różnymi typami enkoderów tak aby obsługiwać je wszystkie tą samą funkcją i w różnych konfiguracjach. Opowiem też o tak ważnym zagadnieniu jak połączenia elektryczne bo wcześniej sam sobie z tego sprawy nie zdawałem a musiałem w końcu tematem zająć się od PODSTAW w mojej aplikacji enkoder po prostu nie mógł gubić kroków na ileś tam obrotów ... myślę, że ten poradnik zainteresuje wiele osób - polecam chwilę poczekać |
Autor: | mirekk36 [ 21 lut 2016, o 20:43 ] |
Tytuł: | Re: Prosty sposób na encoder |
Już wkrótce ... kończę zaraz jeden duży rozdział i na małą chwilę wrócę do poradników (no może do poradnika) bo do tego aż mnie ciągnie - a pisanie książki to taaaak mozolna praca że szok |
Autor: | zoom [ 23 lut 2016, o 10:54 ] |
Tytuł: | Re: Prosty sposób na encoder |
mirekk36 napisał(a): wkrótce ukaże się dość spory poradnik, w którym rozprawimy się z różnymi typami enkoderów tak aby obsługiwać je wszystkie tą samą funkcją i w różnych konfiguracjach. Opowiem też o tak ważnym zagadnieniu jak połączenia elektryczne No to czekam z niecierpliwością, bo akurat chcę zrobić prosty projekt z encoderem Niby temat oklepany i prosty, ale każda informacja, czy ciekawe rozwiązanie się przyda. A znając Pańską pomysłowość, to może to nieźle urozmaicić i uprościć pracę (zabawę )! |
Autor: | maxus [ 30 sie 2016, o 19:33 ] |
Tytuł: | Re: Prosty sposób na encoder |
Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ? Gdzie sie podziała ta biblioteka? |
Autor: | SunRiver [ 30 sie 2016, o 19:39 ] |
Tytuł: | Re: Prosty sposób na encoder |
maxus napisał(a): Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ? Gdzie sie podziała ta biblioteka? dlatego Że szanowny kolega postanowił skasować swoje posty ... i ma pretensje że został za robienie śmietnika odpowiednio potraktowany ... |
Autor: | mirekk36 [ 30 sie 2016, o 19:56 ] |
Tytuł: | Re: Prosty sposób na encoder |
maxus napisał(a): Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ? Gdzie sie podziała ta biblioteka? Dokładnie jak pisze SunRiver wyżej - a ja podpowiem - pobierz sobie zupełnie darmowy program AVPlayer http://atnel.pl/atnel-video-player.html wpisz w niego enkoder i obejrzyj te poradniki: to będziesz miał komplet informacji bez łaski tych co to chodzili i kasowali swoje posty na naszym forum |
Autor: | maxus [ 30 sie 2016, o 20:07 ] |
Tytuł: | Re: Prosty sposób na encoder |
Widziałem już te poradniki, ale z tego co pamiętam nie było tam gotowej biblioteki do pobrania. Oglądać jeszcze raz to wszystko to z 5 godzin chyba. Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał? |
Autor: | SunRiver [ 30 sie 2016, o 20:09 ] |
Tytuł: | Re: Prosty sposób na encoder |
maxus napisał(a): żeby każdy sobie taką bibliotekę sam napisał? w ten sposób ... wiele się uczy i nie potrzebuje potem takich skasowanych szukać |
Autor: | mirekk36 [ 30 sie 2016, o 20:30 ] |
Tytuł: | Re: Prosty sposób na encoder |
maxus napisał(a): Oglądać jeszcze raz to wszystko to z 5 godzin chyba. A rzeczywiście - to przepraszam nie było sugestii w takim razie doradzę inaczej - nawet ich nie oglądaj bo mogą okazać się szkodliwe. maxus napisał(a): Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał? Nie bzdury piszesz - zamysł był aby pobudzić do myślenia, zainspirować ... Ci którzy poświęcili czas teraz gdy potrzebują na szybko to dosłownie w kilku linijkach kodu napiszą najprostszą obsługę enkodera - bo zrozumieli zasadę działania, a inni pokuszą się o napisanie sobie biblioteki własnej na podstawie poradnika ... A jeszcze inni spędzą grubo więcej niż 5 godzin na szukaniu po necie po czym i tak się poddadzą i dobrze. Każdy robi to co lubi |
Autor: | ryba84 [ 31 sie 2016, o 21:40 ] |
Tytuł: | Re: Prosty sposób na encoder |
maxus napisał(a): Widziałem już te poradniki, ale z tego co pamiętam nie było tam gotowej biblioteki do pobrania. Oglądać jeszcze raz to wszystko to z 5 godzin chyba. Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał? Masz na forum inne biblioteki: http://forum.atnel.pl/topic11570.html http://forum.atnel.pl/topic13864.html |
Autor: | Tomek1955 [ 2 sty 2017, o 20:06 ] |
Tytuł: | Re: Prosty sposób na encoder |
Na początek życzenia wszelkiej pomyślności w Nowym Roku dla wszystkich forumowiczów. Jestem mocno początkującym adeptem programowania AVRów, może rzucam się na zbyt głęboką wodę, ale lubię ambitniejsze zadania. WAŻNA UWAGA!!! Dzięki pomocy kolegi anshar błąd w bibliotece został wykryty! Wobec tego pozwolę sobie poprawić go w zamieszczonym poniżej kodzie. Jeśli ktoś zechciałby skorzystać z tej biblioteki, to stwierdzam, że została ona sprawdzona i w tej chwili już działa w pełnym, założonym zakresie i nie zawiera błędów! A teraz przechodzę do problemu. Do projektów, które mam zamiar zrealizować bardzo przyda się enkoder. Próbowałem obsługiwać go na różne sposoby, ale ilość przekłamań była nie do przyjęcia. Nie pomagały też różne metody układowej filtracji zakłóceń. Zabrałem się więc do porządnego przygotowania jego obsługi. Obejrzałem wszystkie 9 odcinków poradników Pana Mirka i częściowo ściągając z ekranu napisałem bibliotekę. Jest nieco mniej uniwersalna od tej z poradnika, świadomie zrezygnowałem z niektórych opcji, np. obsługi enkodera półkrokowego, pracy w poolingu. Ma pracować na przerwaniach INT0, INT1 lub na PCINT. Na tych pierwszych śmiga jak szalona. Z pośpiechu podłączyłem byle jaki, kupiony za 2,50 zł enkoder bez żadnych układów filtrujących, tak "na żywca" i przekłamań jest bardzo niewiele. Ale z PCINT zaczyna się kłopot. Po prostu nie działają wcale. Umieściłem na próbę w procedurze przerwania włączenie diody i dioda się nie zaświeciła, czyli wygląda, że przerwanie nie następuje. Tylko dlaczego? Napisałem prościutki programik do migania diodą z PCINTa wg 3 części wykładu P. Mirka o przerwaniach dla początkujących (czyli akurat dla mnie) i wszystko działa, jak trzeba. Załączam teraz pliki enco.h i enco.c mojej biblioteki: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A teraz testowy program obsługi enkodera z wykorzystaniem tej biblioteki: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Biblioteka obsługi LCD wzięta została z Bluebooka. Wszystko razem chodzi na Atmedze 88PA taktowanej 8Mhz z wewnętrznego generatora.Enkoder i przycisk podłączone, jak widać w pliku enco.h. Błagam mądrzejszych kolegów o pomoc. Przesiedziałem już prawie 2 noce (w tym część sylwestrowej) gapiąc się w kod, jak sroka w gnat i błędu nie widzę. Wydaje mi się, że i inicjalizacja przerwań w funkcji enco_init, i funkcja obsługi przerwania są OK. Więc dlaczego nie działa??? |
Autor: | anshar [ 2 sty 2017, o 20:51 ] |
Tytuł: | Re: Prosty sposób na encoder |
W pliku enco.h powinno być: |
Strona 1 z 2 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |