ATNEL tech-forum
https://forum.atnel.pl/

obsługa enkodera według kodu z internetu
https://forum.atnel.pl/topic21459.html
Strona 1 z 1

Autor:  wojciechgorzolka [ 21 paź 2018, o 19:16 ]
Tytuł:  obsługa enkodera według kodu z internetu

Cześć . zabrałem się za obsługę enkodera. Mam zakupioną bibliotekę od Pana Mirka, jednak postanowiłem stworzyć kod obsługujący enkoder według mojego pomysłu, oraz dostępnych kodów z internetu. Tak dla ćwiczeń i nauki. i znalazłem kod z arduino. Poprzerabiałem go i ogólnie działa, jednak kroki przeskakują. Ćwiczenie wykonuję na ATB i chcę sterować diodami tak aby przechodziła zapalona dioda od prawej do lewej i w drugą stronę - w zależności , w którą pokręcam enkoder.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Problem mam z samą funkcją uint8_t encoder_read(). ponieważ przy takiej obsłudze enkodera czyli :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


nie ma znaczenia jak kręcę enkoderem, to dioda przesuwa się tylko w jedną stronę (kroki nie są gubione). Przypuszczam,że kłopot jest z ifami i klamrami. Jednak gdy obsługę klawiszy zrobięna tym kodzie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to dioda poprawnie się przesuwa. W lewo i w praco, zależy jak pokręcę enkoderem. Jednak tutaj kroki się gubią.

Czy możecie mi podpowiedzieć co robię źle? siedzę przy tym od 11.00 rana :) . W końcu mamy wolną niedzielę :)

Autor:  mirekk36 [ 22 paź 2018, o 13:43 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

i nie ma co się dziwić, że kroki się gubią, nie dość, że sprawdzasz stany w poolingu, to jeszcze na dodatek nie stosujesz kodu gray'a ... i oczekujesz, że nie będą przeskakiwać kroki ? Troszkę dziwne podejście..... Tym bardziej że na ATB masz porządnie sprzętowo podłączony enkoder żeby poprawnie były impulsy formowane, a ludzie często podłączają na żywca enkoder do procka i próbują go obsługiwać tą najprostszą metodą którą pokazujesz - no i wiadomo "niby" działa ... ale jak? No teraz już chyba wiesz jak ... nie wiem tylko po co na to poświęcać dzień i noc i dzień ;) ... skoro w poradnikach wideo wyjaśniałem dlaczego TAKĄ a nie inną obsługę się stosuje do enkoderów - właśnie z uwagi na gubienie kroków ... a ty pomimo to próbujesz od nowa i zdziwienie ;)

To co zrobiłeś to nie jest żadna obsługa - tak to jest - w internecie każdy pisze, "a mi to działa" .... szczególnie na andruino ... to po jasny gwint ktoś kiedyś zastosował kodowanie Gray'a żeby zminimalizować do maximum zakłócenia pochodzące z drgań styków w enkoderze ? jak myślisz ? .... tak tak - tam też są drgania styków .... oczywiście w internecie zaraz znajdziesz, że wystarczy podłączyć dwa kondensatory 100nF do linii A i B i będzie po kłopocie ... bo znowu ktoś napisze "a mi tak działa" ... a ty znowu sam się przekonasz, jak to działa ...

Jak już chcesz ćwiczyć to lepiej postaraj się zrobić to w przerwaniu po pierwsze, pomyśl nad jakąś własną implementacją czy kodu Gray'a czy inną metodą filtracji drgań styków itp itd - to będzie dobra droga - zamiast łapać byle pierwszy kod z netu .... i tym bardziej, że masz pod ręką biblioteki, które pokazują ci, że może to działać o niebo lepiej

Na youtube na moim kanale masz DWA cykle poradników do obsługi enkodera - dwa RÓŻNE podejścia - warto prześledzić jeden i drugi kod i wtedy coś kombinować po swojemu. Na naszym forum też o ile pamiętam SylwekK kiedyś ogólnie opisywał, że tak powiem algorytm jego podejścia do obsługi enkodera - i to mogłaby też być fajna inspiracja dla ciebie aby np wg takiego - jeszcze innego opisu - samemu popróbować napisać kod.

Jeśli np masz problem na razie ze zrozumieniem jak się obsługuję tę moją bibliotekę do enkodera na bazie przykładowego pokazanego kodu to obejrzyj sobie poradniki o MkMenu gdzie też masz dodatkowe przy okazji przedstawione jak z tego korzystać we własnym kodzie. ....

a jak coś jest niezrozumiałe to wal tu jak w dym i dopytaj - zamiast wracać do najprostszego kodu z andruino

Autor:  wojciechgorzolka [ 22 paź 2018, o 17:17 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Dziękuję za wskazówki :):). Zaraz się zabieram za poradniki

Autor:  SylwekK [ 23 paź 2018, o 10:36 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

W uzupełnieniu do PW tu na forum napiszę...

1. Przede wszystkim popatrz na enkoder jak na licznik, a nie traktuj tylko jako ruch w lewo/prawo.
2. Utwórz zmienną, która będzie liczyła (dodawała lub odejmowała) kolejne kroki.
3. W twoim przypadku sprawa jest na tyle prosta, że przemiatając diodą led po 8-bitowym porcie możesz nawet zrezygnować z warunków krańcowych licznika i wykorzystać operację maskowania czyli to co wychodzi na port jest tylko 3-bitową (wartości 0 do 7) końcówką zmiennej, którą modyfikujesz enkoderem. (wynik=zmienna_enc & 0b00000111)
4. Pozostało tylko zaprezentować wynik na porcie. Do tego wystarczy jedna prosta funkcja, do której przekazujesz wynik, a która to zapala odpowiedni led w zależności od tego wyniku. Nad tym pomyśl już sam, bo to można zrobić co najmniej na kilka różnych sposobów ;-)

Autor:  wojciechgorzolka [ 23 paź 2018, o 17:51 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

kolejna cenna rada, dziękuję :). Myślałem też o dwóch tablicach jedna z wartościami 00,10,11,01, druga z wartościami 01,11,10,00 . Następnie kręcąc w jedną ze stron mógłbym porównywać do konkretnej tablicy wynik z enkodera, jeśli wynik zgadzał by się z pierwszą tablicą, to oznaczałoby to,że kręcę w lewo, porównując z drugą tablicą, oznaczało by ,że kręcę w przeciwną stronę. Czy takie rozwiązanie miało by sens?

Autor:  Daro69 [ 23 paź 2018, o 18:48 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

hejo Wojtek,
jeżeli już to trzeba by i tak zamaskować wynik (tak jak Sylwek napisał), i pozostawić aktualny wynik w formie: 0, 1, 2, 3 i podobnie poprzednio zapamiętany,
no chyba że napisałeś skrót myślowy w binarce używając do zanotowania dwóch najmłodszych bitów.
I bawić się - tak jak piszesz,
porównywaniem czy wynikła zmiana w kierunku dodatnim czy ujemnym, jednocześnie kontrolując czy nie nastąpiło "przeskoczenie" o 2, (ominięcie kolejnej pozycji). :P
można różnie rzeźbić. ;)

Autor:  wojciechgorzolka [ 23 paź 2018, o 19:06 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

a jak mam rozumieć aktualny wynik i poprzednio zapamiętany? z tym zagadnieniem mam kłopot. jak to rozróżnić w kodzie? :)

Autor:  SylwekK [ 23 paź 2018, o 20:10 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

W ogóle to o czym piszesz to miej więcej zasada działania mojej biblioteki enkodera :-D
Po co więc wyważać otwarte drzwi. Użyj biblioteki i zajmij się właściwym kodem przesuwania diod. No chyba, że własną chcesz pisać to oczywiście jak najbardziej kombinuj, a może coś z tego fajnego wyjdzie :)

Autor:  wojciechgorzolka [ 23 paź 2018, o 20:19 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

nie chcę przepisywać, bo jak tak będę robić, to będę przepisywaczem , a nie gościem,który sam potrafi coś napisać:). Mam bibliotekę Pana Mirka, jednak też jej nie używam:). Ja to chcę zrozumieć. :)) ale już mi Darek co nieco rozjaśnił przez telefon :) Oczywiście wszystkim wam jestem wdzięczny za podpowiedzi . Walczę dalej, bo następnym krokiem będzie podłączenie serwa pod enkoderek i pewnie znów będą schody :). Oczywiście jest poradnik Pana Mirka. :) ale ja chcę to wszystko zrozumieć :)

Autor:  SylwekK [ 23 paź 2018, o 20:44 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

No i za to szacunek :)

Autor:  rskup [ 23 paź 2018, o 23:08 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

wojciechgorzolka napisał(a):
Oczywiście jest poradnik Pana Mirka. :) ale ja chcę to wszystko zrozumieć :)
A nie próbowałeś takiej metody, że oglądasz poradniki Mirka i słuchasz wszystkiego co Mirek mówi i pokazuje. A potem siadasz i sam robisz bibliotekę? Masz wtedy już trochę ułożone w głowie przez Mirka i tylko musisz tę zdobytą wiedzę przełożyć na swój kod.
Takie coś to jest styl jak są uczeni studenci - Mirka poradnik to wykład a Twoje kodowanie to laborka :D.

--
Pozdrawiam,
Robert

Autor:  wojciechgorzolka [ 24 paź 2018, o 22:26 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

to zależy o którym poradniku piszesz. Bo jeśli chodzi o poradniki w których Pan Mirek używa wskaźników i colbacków, to jest to dla mnie jeszcze za trudne. tak więc nie mogę pójść Twoim tropem. :)

Autor:  Daro69 [ 25 paź 2018, o 08:05 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Najważniejsze wg mnie jest to że rozumiesz co się dzieje w programie, że systematycznie dodajesz kolejne elementy zagłębiając się w ich działanie i szukasz sposobów na napisanie działającego kodu. :)
Pomimo że Mirka biblioteki wymiatają i warto je przestudiować i używać,
to jednak nie raz natrafisz na elementy do których będziesz musiał kod napisać od podstaw.
Wtedy przyda się zarówno wiedza i sposoby które przekazuje Mirek, jak i logika którą właśnie trenujesz pisząc proste ale własne programy. ;)

Co do wskaźników wszelkiej maści, to sam z czasem odkryjesz ich niezastąpione właściwości i możliwości jakie dają. :)

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka

Autor:  wojciechgorzolka [ 26 paź 2018, o 10:26 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
no i kodzik jest. Darek napisał dla mnie kod i dokładnie wytłumaczył o co chodzi. JA dodałem if-y z modulo, ponieważ z kodem pierwotnym Darka zmienna "enkoder" była zliczana nie co tyrknięcie enkodera, tylko przy każdym przejściu blaszek enkodera. Co skutkowało tym,że co tyrknięcie enkodera, wynik zmiennej "enkoder" był większy co cztery :(.

Autor:  SylwekK [ 26 paź 2018, o 10:42 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

O, i fajny kodzik wyszedł :)

Autor:  wojciechgorzolka [ 26 paź 2018, o 10:48 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Też mi się podoba. Teraz korzystam z tego,że jestem dzisiaj w domu i prę z "kodzeniem" dalej ;)

Autor:  Daro69 [ 26 paź 2018, o 11:53 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

:)
Większość linijek jest Twoja,
Proponuję teraz przerobić kod na funkcję:
Albo zwracającą +1 lub 0 lub -1,
Albo z argumentem w formie wskaźnika na zmienną. :)
tak dla treningu.
delikatnie kuszę w kierunku wskaźników. :)

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka

Autor:  wojciechgorzolka [ 26 paź 2018, o 11:59 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

haha. Właśnie czytam w trzech książkach jednocześnie na temat wskaźników. ;)

------------------------ [ Dodano po: 55 minutach ]

Poczytałem trochę o wskaźnikach, ale jeszcze mi to nie wychodzi. Muszę poćwiczyć na bardziej prostym przykładzie.

Ale wzbogaciłem mój kod o funkcję, w której chcę wyświetlać zawartość tablicy.
Po uruchomieniu programu kręcę enkoderem, aby zapełnić tablicę wartościami właśnie z enkodera.
Następnie po naciśnięciu klawisza na ekranie LCD powinna wyświetlać się zawartość tablicy, co 500ms.
Oczywiście kod nie działa według moich założeń bo pewnie czegoś mi w nim brakuję. Czy mogę prosić o podpowiedź co powinienem zrobić aby tablica zapełniła się wartościami z enkodera i dlaczego nie wyświetla mi zawartości tablicy po naciśnięciu klawisza?
Z góry dziękuję :)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  wojciechgorzolka [ 26 paź 2018, o 14:18 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Przemyślałem sprawę i poprawiłem funkcję. Na taką, która zwraca wynik. A następnie ten wynik przypisuję do nowej tablicy TAB[10], do której przypisuję funkcję enkoderek(). ? Po naciśnięciu klawisza funkcją zwraca wynik , ale niestety nie zmienia się na ekranie ten wynik co pół sekundy.
Tutaj jest funkcja zwracająca :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a tutaj przypisuję wynik funkcji do nowej tablicy dziesięcio elementowej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  Daro69 [ 26 paź 2018, o 19:59 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

wojciechgorzolka napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
[/syntax]

nie jestem pewien czy o to chodzi. :roll:

Autor:  wojciechgorzolka [ 26 paź 2018, o 20:12 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

O to chodziło, ale nie działa, bo gdy przekręcam enkoderem kolejne pozycje czyli: 0,1,2,3,2,1,0,, to na ekranie mimo wszystko zlicza mi do 10 i kończy pracę :)

Autor:  Daro69 [ 26 paź 2018, o 21:01 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

w linijce 87-88, powinienem wpisać zliczanie indexu co 4, tak jak text++; co 4. if enkoder % 4 ....
tuż przed - "tab[index_tablicy] = text;
a na końcu wystarczy "return text;"
jakoś tak. :)

Autor:  wojciechgorzolka [ 27 paź 2018, o 20:25 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

hej ludziska. Wrzucam wstępnie działający kod. Co prawda znów poświęciłem na niego dłuższą część swojego wolnego dnia, ale nie żałuję. Po konsultacji z Darko69, kod zaczął działać. Teraz mogę enkoderem "wrzucić" w tablicę wartości liczbowe uint8_t.
Np mogę zapełnić tablicę tab[20]= {1,2,3,4,5,4,3,2,1} i po naciśnięciu klawisza na atb cyfry te zostaną wyświetlone co pół sekundy. w zależności jakiego delaja wrzucę. Oczywiście to nie koniec, ponieważ muszę dopracować kod tak, aby tablica była (ruchoma), tak aby nie wypełniała się zerami gdy ją całą nie zapełnię, oraz aby nie przepełnić jej zakresu, bo wtedy cuda się dzieją.:)
a oto kodzik :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  Daro69 [ 28 paź 2018, o 11:48 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

hejo,
widzę postępy. :)
ale żeby nie było za słodko, mam pytanie. :P
1. w jakim celu w linijce 60 uciekasz z pętli, skoro else i tak się nie wykona jeżeli jest spełniony if?
2. patrzę na zmienną uint8_t i ma kojarzącą się z char'em nazwę text. pomimo dowolności nazw, warto nadawać takie które ułatwiają analizowanie kodu. ;)
3. funkcja enkoderek zwraca uint8_t, póki co jeszcze kod z tego zwrotu wartości zmiennej 'text' nie korzysta.
(jakiś plan, czy to tak za namową, dla wprawy w ramach zabawy z funkcjami? )

Autor:  wojciechgorzolka [ 28 paź 2018, o 12:44 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

Dziękuję za wskazówki. Plan jest. Czekam na ramię robota z aliexpress, sterowane czterema serwami. W reklamie ramienia bylo wykorzystane arduino. Ja jednak nie znam sie na tamtej platformie, więc postanowiłem edukacyjnie podejść do tematu i napisać kod od podstaw , w miarę swoich skromnych umiejętności. W wszystko idzie w dobrą stronę:). Sterować serwami będę tylko jednym enkoderem z przyciskiem. Będę zmieniał wartość zmiennej. Do każdej wartości zmiennej będzie przypisane oddzielne serwo robota. Długa droga jeszcze przede mną do ukończenia projektu edukacyjnego. :)

Autor:  Daro69 [ 28 paź 2018, o 13:01 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

czyli będziesz potrzebował zmieniać wybiórczo przynajmniej cztery zmienne jednym enkoderem.
może niech funkcja enkoderek zwraca +1, 0, -1. i można by dodawać tę zwróconą wartość do wybranej zmiennej.?
a może wskaznik na zmienną jako argument funkcji, który będzie wskazywał na wybraną zmienną. ?
I znowu idziemy w kierunku wskaźników. ;)

Autor:  wojciechgorzolka [ 28 paź 2018, o 13:18 ]
Tytuł:  Re: obsługa enkodera według kodu z internetu

No dobra. Przekonałeś mnie . Dzisiaj biorę się za wskaźniki

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/