Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega128 - Prymitywny program Menu

trynitor 28 Wrz 2016 15:58 1149 19
  • #1 28 Wrz 2016 15:58
    trynitor
    Poziom 3  

    Cześć,

    Zdaję sobie sprawę, że zaraz odezwą się głosy "użyj wyszukiwarki", użyj "Google", ale być może odezwie się też ktoś kto pomoże.
    Boje z językiem C dopiero zaczynam. Chcę zaimplementować Menu użytkownika na wyświetlacz alfanumeryczny. Próbowałem robić to przez struktury i wskaźniki. Mam książkę Tomasza Francuza (nowsze wydanie), ale przepisu na Menu nie zdołałem zrozumieć. Postanowiłem więc pójść w stronę instrukcji switch/case.
    Nie mam pomysłu jak zaimplementować submenu. Menu główne jako takie jest i działa jednak submenu niestety nie.

    Kod na Menu główne, działa.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodanie submenu nie działa:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Były ktoś chętny do pomocy?

    pozdrawiam :)[/quote]

    0 19
  • #3 28 Wrz 2016 21:56
    tmf
    Moderator Mikrokontrolery Projektowanie

    @trynitor No i nie zadziała. Nie możesz mieć w programie dwóch pętli nieskończonych - jedna z nich się nie wykona, nie ma siły. A co w opisie w książce jest niejasne? Uwierz, to naprawdę prosta implementacja menu. Prościej, bez udziwnień się chyba nie da.

    1
  • #4 29 Wrz 2016 08:34
    trynitor
    Poziom 3  

    Co do książki to przerobiłem sobie około 60% treści (początkowe rozdziały na start, USART, I2C, kilka innych drobnych programów) i myślałem że nic mnie nie zaskoczy. Aż tu nagle znalazłem rozdział o implementacji Menu na wyświetlacz alfanumeryczny. Do wczoraj myślałem że znam nieco bardziej język C, a teraz nawet dokładnie nie wiem jakie pytanie odnośnie tego rozdziału zadać. Generalnie zastanawiam się jak wydobyć pliki dotyczące tylko Menu, bez użycia bibliotek na HD44780 i encoder (chcę użyć przycisków/joysticka i swojej biblioteki HD44780) tak żeby projekt się kompilował.
    Dziś spróbuję biblioteki tinymenu zaproponowanej przez @grko, musi mi się udać, inaczej zwątpię w swoje umiejętności.

    0
  • #5 29 Wrz 2016 09:01
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przecież pliki związane z implementacją menu masz w menu.c, menu.h i menudef.c. Jedyne co musisz zrobić to zaimplementować funkcje wykorzystywane do wyświetlania na LCD. Swoją drogą nie wiem po co chcesz wykorzystywać swoją bibliotekę obsługi LCD, skoro użyta w tym przykładzie jest doskonała (BTW< nie jest moja, lecz Joerga Wunscha).

    0
  • #6 29 Wrz 2016 09:57
    JacekCz
    Poziom 36  

    trynitor napisał:
    ... i myślałem że nic mnie nie zaskoczy. Aż tu nagle ... Do wczoraj myślałem że znam nieco bardziej język C, a teraz nawet dokładnie nie wiem jakie pytanie odnośnie tego rozdziału zadać.


    Głęboki szacunek mam do Ciebie Kolego. Większość tutaj zna C "perfekcyjnie" z samego powodu, że się urodzili, i nie musi niczego czytać ("przerabiać" tzn ćwiczyć).

    Na jakimś egzaminie dostawało się biedną tróję z opinią "pan przynajmniej wie, czego nie wie - bo poprzednik to nawet tego nie wiedział"

    trynitor napisał:

    Dziś spróbuję biblioteki tinymenu zaproponowanej przez @grko, musi mi się udać, inaczej zwątpię w swoje umiejętności.


    W sensie rozwojowym warto jakiś temat pogłębić "własnymi palcami" aż do skutku (a nie skakać z kwiatka na kwiatek) W sensie praktycznym zmiana biblioteki skoro jest dobrze oceniana, może mieć sens. Mam na myśli abyś pogłębił a nie skakał na trzecią, czwartą.

    0
  • #7 29 Wrz 2016 09:57
    trynitor
    Poziom 3  

    grko napisał:
    @trynitor Spróbuj użyć biblioteki tinymenu:
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=15683156#15683156


    Podpowiesz mi jak mogą wyglądać funkcje (na wyświetlacz) które będą definiować menu_set_inverse() i menu_set_normal()?

    Utknąłem w tym miejscu (plik tinymenu_hw.h:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Funkcje które wykorzystuję wyglądają tak (ze strony http://radzio.dxp.pl/hd44780/hd44780_avr_4-bit_rw_c.html):
    Kod: c
    Zaloguj się, aby zobaczyć kod


    z góry dziękuje za pomoc

    0
  • Pomocny post
    #8 29 Wrz 2016 10:45
    grko
    Poziom 33  

    @trynitor Makr menu_set_inverse oraz menu_set_normal nie będziesz na chwilę obecną potrzebował. Interfejs do Twojej biblioteki powinien wyglądać mniej więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #9 29 Wrz 2016 12:19
    trynitor
    Poziom 3  

    Dzięki.
    Projekt się kompiluje, ale nic nie wyświetla.
    Na początku wyświetliło w pierwszej linii wyświetlacza, od lewej tekst: 'x=='. Potem kilka rzeczy pozmieniałem według wskazówek zawartych tutaj: https://www.elektroda.pl/rtvforum/viewtopic.php?p=15683156#15683156

    Wydaje mi się że problem polega w linijce:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Może wykracza poza wyświetlacz?

    Kody wyglądają następująco:
    program.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    tinymenu_hw.h
    Kod: c
    Zaloguj się, aby zobaczyć kod


    W tinymenu.c oraz tinymenu.h nic nie zmieniałem. Z kolei funkcja LCD_GoTo() wygląda tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tak jak wspomnialem wyzej, błędów dopatrywałbym się w makrze definiującym pozycję kursora na wyświetlaczu, jednak nie potrafię powiedzieć jak powinna wygladać.

    z góry dziękuję, już i tak dużo pomocy otrzymałem :)

    0
  • #10 29 Wrz 2016 12:49
    2675900
    Użytkownik usunął konto  
  • #11 29 Wrz 2016 12:55
    trynitor
    Poziom 3  

    Nie wiem jak to jest możliwe, ale poszedłem sobie na przerwę, wracam, a tu program działa...

    0
  • #12 29 Wrz 2016 13:01
    grko
    Poziom 33  

    @Piotrus_999 Jasne. Najlepiej wynajdywać koło na nowo zamiast stosować to co jest już zrobione porządnie. Myślę, że któraś z kolei implementacja będzie miała dopiero zbliżony design do tego tinymenu. A realne porady typu "czytaj książkę" to sobie można wsadzić. Bo takie coś każdy wie i dobrze, że tego typu "porady" lądują w koszu.

    @trynitor Good work:) Ja używałem tej biblioteki (z lekkimi modyfikacjami) kilka razy i jestem z niej bardzo zadowolony.

    0
  • #13 29 Wrz 2016 13:07
    trynitor
    Poziom 3  

    Piotrus_999 napisał:

    (..) Nie da się programować bez znajomości i rozumienia języka programowania.


    Nie wystarczy znać i rozumieć język programowania, żeby programować. Trzeba jeszcze ćwiczyć, pisać, pisać, pisać, pisać...

    Piotrus_999 napisał:

    Proponuje poćwiczyć. Najpierw napisz samodzielnie program, który bedzie wyświetlał to co chcesz na ekraniku (stringi, liczby w róznych formatach, w róznych mejscach, przewijany itd). Jak już bedziesz rozumiał jak to działa przejdź do innych, bardziej złożonych zagadnień.


    Ten etap już przeszedłem i rozumiem. Jednak wejście na każdy kolejny poziom wiąże się z wagonem wątpliwości, który po rozładowaniu przyciąga kolejny wagon...
    Pewnie 20 lat temu siedziałbym tak długo z książką, aż bym problem samodzielnie rozwiązał (albo sobie odpuścił). Dziś jest wiele innych pomocy, w tym forum elektroda.pl gdzie jest wielu użytkowników o nietuzinkowych umiejętnościach - cześć z nich pomaga, a pozostali się cieszą że umieją więcej od początkujących.

    0
  • #14 29 Wrz 2016 13:13
    2675900
    Użytkownik usunął konto  
  • #15 29 Wrz 2016 13:17
    trynitor
    Poziom 3  

    grko napisał:

    @trynitor Good work:) Ja używałem tej biblioteki (z lekkimi modyfikacjami) kilka razy i jestem z niej bardzo zadowolony.


    Wielkie Dziękuję dla Ciebie!
    Przekopałem się przez wiele tematów na elektrodzie i szczerze mówiąc nie liczyłem że znajdzie się ktoś kto mi pomorze. Liczyłem na wypowiedzi typu - 'naucz się sam', 'pokombinuj trochę', 'poczytaj w książce' - bo takich jest zdecydowanie najwięcej i one najbardziej demotywują. Jest to też powód dlaczego tak późno zarejestrowałem się na elektrodzie - nie wierzyłem w pomoc, a sam jeszcze mam za małą wiedzę żeby pomagać (więc konto nie było mi potrzebne).

    Teraz mogę iść dalej. Zrobiłem przykładową działającą implementację Menu. Wszystkie mini-programy które napisałem do tej pory (diod/przyciski, transmisja UART, I2C, czujniki) mogę poskładać razem.
    Z pewnością ta lekcja pomoże mi też zagłębić się w Menu proponowane przez tmf-a w jego książce.

    0
  • #16 29 Wrz 2016 13:23
    grko
    Poziom 33  

    @trynitor Niestety na tym forum idiotyczne "porady" typu "poczytaj w książce" to norma i nie są według mnie tępione przez administratorów. Najśmieszniejsze w tym wszystkim jest to, że często tego typu uwagi wypisują ludzie, którzy mają (lekko mówiąc) średnie pojęcie o programowaniu.

    PS: Edukacja jest oczywiście ważna i warto kilka pozycji przeczytać.

    0
  • #17 30 Wrz 2016 09:21
    x_bibi
    Poziom 10  

    @grko - problem kolegi zakładającego ten temat polega na tym, że ucząc się próbuje złożyć jakiś gotowy kod z kawałków, które znajduje w różnych miejscach - takie odniosłem wrażenie czytając ten temat.

    Koledzy wcześniej dobrze zauważyli, że problem polega na braku (chęci?) analizy kodu. Przecież kod dotyczący menu jest dość prosty. Już jakiś czas nie piszę programów na mc, ale pamiętam, że kompilatory zwykle zawierały w sobie narzędzie do analizy programu - tzw debuger. Tym narzędziem można analizować pracę programu linijka po linijce i nawet podglądać wartości zmiennych, więc doskonale widać jak program pracuje i gdzie jest problem. A Autorowi tematu chyba brakło chęci aby ponieść taką pracę - analiza pracy kodu.

    Fajnie, że pomogłeś dając gotowca, ale zauważ, że kolega dalej nie rozumie jak ten kod działa, wie tylko jak go włączyć do własnego programu aby działał, ale dalej nie zrozumiał idei. Jest to spowodowane, jak koledzy wyżej zauważyli częściowo brakami w wiedzy i doświadczenia, które notabene nabywa się najskuteczniej właśnie analizując kod i problemy.

    0
  • #18 30 Wrz 2016 09:45
    grko
    Poziom 33  

    Cytat:
    Fajnie, że pomogłeś dając gotowca, ale zauważ, że kolega dalej nie rozumie jak ten kod działa, wie tylko jak go włączyć do własnego programu aby działał, ale dalej nie zrozumiał idei. Jest to spowodowane, jak koledzy wyżej zauważyli częściowo brakami w wiedzy i doświadczenia, które notabene nabywa się najskuteczniej właśnie analizując kod i problemy.


    Bardzo mnie cieszy, że koledzy zauważyli braki wiedzy autora programu. Ja również je zauważyłem. Jednak nie czuje potrzeby wypisywania tego w co drugim poście i wypisywania porad typu "czytaj książki" (no shit Sherlock). Więc zamiast narzekać na wiedzę autora wolę podać jakiegoś typu rozwiązanie. Tylko nie pisz, że to gotowiec bo nie rozwiązał wszystkich problemów autora i należy jeszcze parę rzeczy zrobić. Danie tego typu rozwiązanie również nie zwalnia autora tematu ze zrozumienia danej biblioteki. Zwłaszcza jak chce wprowadzać zmiany.

    0
  • #19 30 Wrz 2016 09:55
    tronics
    Poziom 36  

    Cytat:
    ale pamiętam, że kompilatory zwykle zawierały w sobie narzędzie do analizy programu - tzw debuger.

    Kompilatory nie posiadają debuggera. To osobne narzędzie. Dodatkowo w przypadku małych atmeg debugwire jest problematyczne w użyciu (i wymaga specjalnego programatora), a w przypadku większych jest jeszcze gorzej bo konieczne jest wydłubanie JTAG co ogranicza możliwości wykorzystania kilku pinów (i również wymaga specjalnego programatora). Pamiętajmy, że znaczna większość użytkowników jednak siedzi na usbasp, ft232 itp. a jedynie mniejsza rzesza na atmel ice, jtag ice, dragon itp. I sporo projektów powstało w ogóle bez użycia debuggera :)
    żeby było śmieszniej jeśli ktoś ma problem ze zrozumieniem opisanego w książce Tomasza menu to szczerze obsługa debuggera będzie tylko czymś w stylu czarnej magii.
    Programowanie nie może być kopiuj-wklej .c, .h, odwołaj się do paru funkcji i voila - bez zrozumienia co dane fragmenty robią i dlaczego brniemy w ślepy zaułek. Jasne, można używać gotowych bibliotek - po co wynajdować koło na nowo (jak to grko zauważył), ale nie zwalnia to nas z odpowiedzialności by poznać i zrozumieć to co tam się dzieje. Inaczej napotykając jakiś problem nie będziemy sobie w stanie sami z nim poradzić NIGDY.

    0
  • #20 30 Wrz 2016 13:29
    trynitor
    Poziom 3  

    80% postów na elektrodzie to obrzucanie autora tematu etykietami "Naucz się". Dlatego pojawiłem się tutaj dopiero dwa miesiące temu nie wierząc w jakąkolwiek pomoc.
    Szczęśliwie dla mnie znalazła się pomocna osoba i właśnie dlatego dzisiaj kończę pisać własną implementację (od zera) Menu Użytkownika.
    Problem postawiony w temacie uważam za rozwiązany, więc wątek pozwolę sobie zamknąć. Jeśli ktoś jeszcze chciałby mi powyrzucać mój brak chęci do analizy kodu to można pisać do mnie w Prywatnej Wiadomości, chętnie poczytam Wasze oburzenia.

    Nie rozumiem po co zabierają głos osoby zarzucające mi brak chęci analizy kodu. Temat dotyczy implementacji menu na wyświetlacz alfanumeryczny, a nie wylewania się nad moim sposobem uczenia języka C. Jeśli ktoś chce pogadać o drogach prowadzących do poznania języka C, może sobie założyć oddzielny temat, a w tym co najmniej milczeć.

    2