Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 09:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 15 cze 2018, o 12:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

Chciałbym was zapytać o poradę/sugestie no jakieś naprowadzenie jak poradzić sobie pewnie z banalnym problemem związanym z obsługą "menu" wygenerowanego
za pomocą programu MkMenuGen i przeportowaną na mikrokontroler STM32.

Samo "menu" przeportowałem i uruchomiłem na STM32 bez większych problemów i jeżeli chodzi np. o jego obsługę za pomocą klawiszy to działa to bezbłędnie.
Czyli włączanie menu, tzw. chodzenie po nim góra dół, wyjście itd.

ObrazekObrazek

Problem pojawia się natomiast kiedy chcę się poruszać po "menu" za pomocą enkodera. Sam przycisk enkodera jak on sam jak najbardziej działa i zlicza góra/dół w momencie jego pokręcania,
jednakże kursor leci momentalnie na sam dół do "exit" bądź na 1-wszą pozycję "menu" co jest jak najbardziej zrozumiałe bo wiadomo program wykonuje się w pętli i pamięta ostatnie położenie enkodera.

To zjawisko oczywiście nie występuje na mikrokontrolerze AVR gdzie używam biblioteki do obsługi enkodera napisanej zgodnie z poradnikiem Mirka, w której to występuje flaga powodująca wywołanie przerwania od enkodera tylko wówczas kiedy nim pokręcamy.
Także podobną funkcjonalność zapewne musiałbym osiągnąć na mikrokotrolerze STM32 jeśli chciałbym korzystać z "menu" generowanego przez MkMenuGen (przy okazji powiem że rewelacyjnego, duże słowa uznania za kod jaki Mirek napisał jak i sam program do jego generowania :) jak dla mnie to po prostu rewelacja :D :D )

Program piszę z wykorzystaniem bibliotek HAL i programu CubeMX.
Enkoder na STM32 obsługuje w sposób sprzętowy wykorzystując do obsługi przerwanie od Timer`a w trybie "Encoder Mode" :

Obrazek
Obrazek

By nie przytaczać całego obszernego programu przedstawienie obsługę samego enkodera

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


Jak widać w powyższym kodzie powołuje sobie zmienne do odczytu stanu enkodera pochodzącego z przerwania od Timer`a, a potem to przeliczam dzieląc przez 4 by mieć zakres od 0-100.
Ten sposób wykorzystuje sobie zwykle do tworzony własnych "menu" wykorzystujących "switch/case" no i to działa bez większych problemów.
No ale wiadomo nie da się zrobić w ten sposób i tak prosto takiego wielopoziomowego fajnego menu z propertisami jak to generowane przez program Mirka :)
Samo uruchomienie pracy enkodera w przerwaniu następuje za pomocą funkcji "HAL_TIM_Encoder_Start_IT(&htim3, TIM_CHANNEL_ALL);" i działa to cały czas w tle.
Zmienna "dir" określa kierunek zliczania Timera góra lub dół za pomocą makra "__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);"
Cały proces przeliczania Timera mogę oczywiście sobie zatrzymać korzystając z funkcji "HAL_TIM_Encoder_Stop_IT(&htim3, TIM_CHANNEL_ALL);"
Jestem też wstanie wpisać do rejestru Timera wartość od której ma on przeliczać "TIM3->ARR = 4;"

Piszę o tych dodatkowych funkcjach i makrach które znam by pokazać jakie są możliwości, ponieważ myślę iż ten mój problem niekoniecznie może rozwiązać osoba obeznana z zagadnieniami biblioteki HAL i STM32 sądzę iż każdy kto jest biegły w pisaniu w języku C.
Ja oczywiście robiłem już różne "kombinacje", z kodem z dodatkowymi taimerami, zmiennymi itp, by to okiełznać ale póki co mi się to nie udało.
Albo może ktoś już też przeportował tą bibliotekę z MkMenuGen na STM32 i ma sposób na obsługę jego za pomocą enkodera? Może wystarczy inaczej go skonfigurować?
A może rozwiązanie jest banalne jakaś prostą fajną funkcją napisaną w C?
No tak jak pisałem we wstępie chodzi mi oto by osiągnąć taki efekt jak na AVR, iż pokręca się w lewo lub prawo i zmieniamy wartość menu góra/dół o 1.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 12:36 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

ale wiesz co? Obsługa enkodera - co niejednokrotnie powtarzałem - nie ma ABSOLUTNIE nic wspólnego z MkMENU. Sam zresztą piszesz że na przyciskach działa prawda ? ;) ...

zatem problemu nie masz z MkMenu (i nie chodzi mi tu broń BOŻE) o jakąś obronę MkMenu czy coś takiego - piszę to, żebyś dobrze zrozumiał istotę działania MkMenu - bo bez tego będą pewnie takie problemy częściej również przy innych elementach sterujących... Bo przecież pokazywałem nawet, że MkMenu da się sterować przez najzwyklejszy terminal za pomocą RS232 ;) zobacz:



to pokazuje już dobitnie, że obsługa MENU jest (nie chwaląc się) prześlicznie odizolowana od sprzętu i dlatego tak łatwo po pierwsze implementować je na inne procki, a po drugie i chyba najważniejsze - można do sterowania menu wykorzystywać co się komu żywnie spodoba, od przycisków, poprzez podczerwień enkodery aż po terminal czy nawet potencjometr jeśli się uprzeć ;)

I teraz mając tę świadomość - warto zrozumieć działanie TRZECH ... tylko trzech funkcji (bo do tylu tylko udało się sprowadzić obsługę MENU) ... Przecież jak wywołujesz je w przyciskach zwykłych mikrosłiczach - to masz podpowiedź jak to działa ...

ot KAŻDE pojedyncze wywołanie funkcji DOWN czy UP czy CLICK powoduje TYLKO JEDNĄ akcję w MENU

ty piszesz że na STM źle działa bo wciąż sam jeździ kursor - o ile dobrze zrozumiałem

ale poniekąd już sam sobie odpowiedziałeś w tekście gdzie leży problem ... no właśnie w tym, że ty masz tak napisaną obsługę enkodera, że on wciąż napiernicza zapewne te funkcje ;) no to jak ? ... no to jak oczekiwać innej sytuacji niż opisana przez ciebie.

--------------------------

Moim zdaniem to w ogóle nie ma co się koncentrować na zatrzymywaniu tam jakichś timerów czy nie wiadomo czego - niech sobie wszystko działa "w tle" to ma swoje zalety na takim procu jak STM

ty zaś wprowadź sobie jakieś zmienne, które utworzą ci prostą maszynę stanów do wykrywania zmian w pozycji enkodera, tzn czy został on pokręcony czy nie (obojętnie w którą stronę) bo tylko z tym masz problem zapewne a nie z przyciskiem enkodera

ja nie wiem tam o szczegółach kodu w STM ale do stworzenia prostej maszyny stanów, jej algorytmu to nawet w ogóle nie jest istotne

Toż najprostsza metoda mogłaby wyglądać mniej więcej tak:

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


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 16:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

:D :lol: :D

Jak to człowiek cały czas mało wie i się uczy :)

Mirku bardzo Ci serdecznie dziękuję za poradę, działa to idealnie, "menu" śmiga aż miło :)

Tak to finalnie wprowadziłem:

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



I nawet przez myśl mi nie przeszło że coś jest nie tak z kodem od MkMenuGen.
Wiedziałem nie umiem wymyślić jak to zrobić żeby działał enkoder tylko przy pokręcaniu :) A tu taka prostota że nie wiem :D
Tak to jest że czasem proste rzeczy są najtrudniejsze do wymyślenia.
Teraz zrobię sobie z tego ładnie funkcje i biorę się za tworzenie "menu z proprtisami" pod swoje urządzono.

Także jeszcze raz Bardzo Dziękuję z Pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 16:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Nie ma za co ;) na zdrowie! ... za to podpowiedz nieraz ludziom, że warto ten mój generatorek używać

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 18:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

Myślę że jak ktoś, kto nie robił jeszcze żadnego urządzenia gdzie trzeba było stworzyć jakikolwiek interfejs komunikacji użytkownikiem, w którym trzeba nastawić wiele zmiennych, a także jest wiele zależności od nich to chyba nie do końca rozumie poco by mu był potrzebny taki MkMenuGen.

Ja już robię któreś tam w życiu urządzenie i zawsze mi zabiera dużo czasu zaprojektowanie, wymyślenie organizacji całej struktury i tego jak ma działać interfejs/menu.
Katastrofą totalną jest również jak w trakcie realizacji projektu wymyślimy np. zmianę wyświetlacza na inny, bo się projekt rozrasta czy po prostu chcemy by coś lepiej/inaczej wyglądało to w zasadzie trzeba wszystko pisać od nowa, albo np. chcemy coś dodać/zmienić to również czeka nas rzeźba w kodzie i pół wieczoru w plecy.

Oczywiście istnieją tzw. framework`i z generowaniem menu/interfejsu na podobnej zasadzie jak MkMenuGen dla mikrokontrolerów ARM jak np. TouchGFX oczywiście to jest potężne narzędzie generujące oprócz samego menu jeszcze cudną grafikę ale w wersji Evaluation posiadającej pewne ograniczenia i z tego jak się kiedyś tym bawiłem wpisująca wszędzie DEMO i już pomijam fakt że bez płatnych szkoleń by zrozumieć zasadę działania raczej się tym nie pobawimy, również do napędzania takiego silnika potrzeba już najdroższych wersji mikrokontrolerów, na takich 8-bit to nie ma mowy by to uruchomić. Czarę goryczy przelewa finalnie cena takiego oprogramowania, która kształtuje się w zależności od licencji od 5 tys -15 tys euro. No cóż zapewne jakiś hobbysta sobie to nabędzie :lol: :D

I mając na uwadze powyższe zbawienny jest własnie wymyślony przez Ciebie MkMenuGen, którego cena wg mnie jest nie wielka nawet ta do zastosowań komercyjnych, a potrafiący generować menu na czym kolwiek - jak już wspominałem wcześniej rewelacja :D
Obecnie myślę już że tworząc jakiekolwiek nowe urządzenie z wyświetlaczem LCD, TFT, OLED itp to w zasadzie będę korzystał z tego generatora menu.

Ja to ogolenie mogę zaapelować do każdego użytkownika co przeczyta te nasze dzisiejsze posty że kupujcie to oprogramowanie zanim Mirek się połapie co stworzył i jakie takie coś jest cenne.
Nawet jak to wam na obecnym poziomie waszej wiedzy wydaje się ono nie potrzebne. To w przyszłości jak będziecie programować mikrokontrolery to się będziecie gryźć w przysłowiowy Y :D Tym bardziej jak Mirek zrobi cenę w tys. euro :D :lol:
Z własnego doświadczenia myślę, iż to naprawdę warto i traktujcie to jako inwestycje ona się wam zwróci chociażby w samym czasie siedzenia nad urządzeniem, czyli to o czym pisałem na początku. Oczywiście trzeba zrozumieć zasadę działania tego wygenerowanego menu i implementacji w kodzie poświęcając czas na obejrzenie Mirka poradników, zrobieniu ćwiczeń i wyjaśnieniu jakiś problemów takich np ja miałem. Ale potem to już do każdego urządzenia jakie będziecie tworzyć poleci od reki.

Pamiętam swoje początki z mirkokontrolerami dobre z 5 lat temu jak kupiłem tzw. Greenbooka otrzymałem z nim program PixelFactory i się długi czas zastanawiałem poco mi on jak ja tu tylko chce se migać ledami czy tam włączyć wentylator, długo ten program se leżał na dysku, a dziś robiąc urządzenia z wyświetlaczem np. TFT to sobie nie wyobrażam tego by go nie mieć i nie móc zmieniać sobie czcionek dowolnie na te, które mi się akurat podobają czy też konwertować bitmap.

Także ja ze swojej strony gorąco namawiam na MkMenuGen i jak będę miał okazję to oczywiście każdemu go polecę.

P.S.
Obecnie konstruuje swoje nowe urządzenie, które jak skończę to opublikuje i własnie ono jako 1-wsze moje będzie oprogramowane tym "menu" z MkMenuGen, którego zajawkę widać w moim pierwszym poście w tym temacie, a co to jest i co będzie robiło no to się musicie uzbroić jeszcze trochę w cierpliwość, ale na pewno nakręcę film by pokazać jak ono działa, a co za tym idzie wygenerowane "menu" na nim :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 18:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

fajne porównanie z tym TouchGFX ;) dzięki i miło że się przydaje

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO