logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega8][C] Niedziałające menu

Bartek.k.k 07 Paź 2011 18:01 3164 30
  • #1 10002580
    Bartek.k.k
    Poziom 21  
    Witam, tworzę menu dla mojego termometru z wykorzystaniem 3 przycisków. Sęk w tym, że nie chcę to za bardzo działać i nie wiem za bardzo co powoduję, że nie mogę kontynuować programu. Sprawa wygląda tak, że mamy teoretycznie jak na razie zdefiniowane 2 ekrany, które wyświetlają temperaturę pokojową oraz zewnętrzną. Wykorzystałem do tego zmienne uint8_t oraz zdefiniowałem je na początku programu. Do klawisza 1 przypisałem komendę ktory_ekran++, która zwiększa zmienną o 1 przy każdym naciśnięciu klawisza, a to powinno powodować zmianę ekranu. Później sprawdzam w while ktory_ekran==1 to wyświetl_ekran_1, lecz tak jak wyżej pisałem coś się nie działa. Poniżej kod(to co nie potrzebne, powycinane, na komentarze proszę się nie patrzeć, niektóre są nie tam przydzielone, gdzie mają być):

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam Bartek!
  • #2 10002914
    dondu
    Moderator na urlopie...
    Bartek.k.k napisał:
    ... i nie wiem za bardzo co powoduję, że nie mogę kontynuować programu.
    ... lecz tak jak wyżej pisałem coś się nie działa.

    Witaj,
    Opisz bardziej konkretnie co się dzieje.
  • #3 10002920
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    Bartek.k.k napisał:
    ... i nie wiem za bardzo co powoduję, że nie mogę kontynuować programu.
    ... lecz tak jak wyżej pisałem coś się nie działa.

    Witaj,
    Opisz bardziej konkretnie co się dzieje.


    Sęk w tym właśnie, że nic się nie dzieje. Jakby na przycisk nie reagowało.
  • #4 10002938
    dondu
    Moderator na urlopie...
    Bartek.k.k napisał:
    Sęk w tym właśnie, że nic się nie dzieje.

    :) ale to NIC jest barzo istotne. Nic nie wyświetla, czy tylko nie reaguje na przyciski?
    Za mało danych, by w sporym programie łatwo błąd znaleźć.
    Opisz dokładniej i przy okazji dodaj schemat.
  • #5 10002974
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    Bartek.k.k napisał:
    Sęk w tym właśnie, że nic się nie dzieje.

    :) ale to NIC jest barzo istotne. Nic nie wyświetla, czy tylko nie reaguje na przyciski?
    Za mało danych, by w sporym programie łatwo błąd znaleźć.
    Opisz dokładniej i przy okazji dodaj schemat.


    Po włączeniu zasilania powinien być ekran powitalny, ustawienie wszystkich zmiennych oraz jak widać w kodzie wyświetlenie w 1 linii zdania Piec: np. 19.9C, a 2-iej D: 25.0C. Po naciśnięciu przycisku powinien wyświetlić się ekran 1, który wyświetlić ma w 1 linii Piec: temperatura, a druga linia powinna być czysta. Obstawiam, że błąd jest w kodzie, ponieważ program testuje na zestawie uruchomieniowym, więc błędnych połączeń nie ma. Schemat poniżej:

    [ATmega8][C] Niedziałające menu
  • #7 10003010
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    Piszesz co powinno, być - OK
    Ale napisz co jest - no chyba że rzeczywiście nie ma nic?



    Wyświetla się w 1 linii Piec: temperatura, a w drugiej D: 25.0C. Dokładnie wyświetla się to:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Może teraz będzie to widoczne. Problemem jest brak reakcji na przycisk, który ma wyświetlać poszczególne ekrany.
  • #9 10003034
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    I tylko dla formalności zapytam się: Czy masz jakieś warningi w czasie kompilacji?

    Do schematu - brak rezystora na bazie T1.


    Nie ma żadnych, wszelkie błędy natychmiast koryguje, jeżeli takie wystąpią.
  • #11 10003090
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    OK, Pierwsza uwaga-pytanie: Nie masz zewnętrznych pull-upów na przyciskach, a jednocześnie nie widzę, abyś w kodzie włączał pull-upy wewnętrzne - no chyba, że przeoczyłem.


    Podciągnąłem programowo, lecz dalej brak reakcji na przycisk.
  • #12 10004888
    Konto nie istnieje
    Konto nie istnieje  
  • #13 10004999
    Bartek.k.k
    Poziom 21  
    albertb napisał:
    Bartek.k.k napisał:
    Wykorzystałem do tego zmienne uint8_t oraz zdefiniowałem je na początku programu. Do klawisza 1 przypisałem komendę ktory_ekran++, która zwiększa zmienną o 1 przy każdym naciśnięciu klawisza, a to powinno powodować zmianę ekranu.!


    A możesz pokazać, gdzie to przypisanie?
    Bo w podanym kodzie jakoś go nie widzę?

    Albert


    Tutaj jest funkcja wyświetlająca ekran 1:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tutaj zaś obsługa przycisku:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak wygląda warunek w pętli wheli sprawdzający zmienną ktory_ekran:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam Bartosz!
  • #14 10005010
    Konto nie istnieje
    Konto nie istnieje  
  • #15 10005053
    Bartek.k.k
    Poziom 21  
    albertb napisał:
    Ok więc mamy kawałek kodu z błędem.

    Według Ciebie to funkcja.
    Według mnie i kompilatora to zmienna.

    Albert


    Więc dlaczego w książce jest taki kod i jest w rozdziale z funkcjami:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Swój kawałek kodu pisałem opierając się na tym fragmencie:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    tylko, że u mnie występuje znak średnika po fragmencie

    uint8_t wyswietl_ekran_2; , bo inaczej eclipse buntowało się.
  • Pomocny post
    #17 10005080
    Konto nie istnieje
    Konto nie istnieje  
  • #18 10005083
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    Autor twierdzi, że warningów nie ma ;)
    Prawda jest jednak chyba inna ...


    Już wyjaśniam.

    Taki zapis:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    kompilator przyjmuję oraz się nie buntuje, lecz jeśli usunę średnik:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    na ekranie następuje apokalipsa.

    Warningi:

    ../IR_DECODE/ir_decode.h:33:1: warning: "PORT" redefined
    In file included from ../main.c:14:
    ../LCD/lcd44780.h:124:1: warning: this is the location of the previous definition
    In file included from ../main.c:15:
    ../IR_DECODE/ir_decode.h:36:1: warning: "PIN" redefined
    In file included from ../main.c:14:
    ../LCD/lcd44780.h:127:1: warning: this is the location of the previous definition
    In file included from ../main.c:15:
    ../IR_DECODE/ir_decode.h:39:1: warning: "DDR" redefined
    In file included from ../main.c:14:
    ../LCD/lcd44780.h:130:1: warning: this is the location of the previous definition
    ../main.c: In function 'main':
    ../main.c:122: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    ../main.c:149: warning: statement with no effect
    make: *** [main.o] Error 1
  • #20 10005100
    Konto nie istnieje
    Konto nie istnieje  
  • #21 10005111
    Bartek.k.k
    Poziom 21  
    albertb napisał:
    dondu napisał:
    Autor twierdzi, że warningów nie ma :wink:
    Prawda jest jednak chyba inna ...

    Moim zdaniem nie znasz podstaw C, a zabierasz się za zbyt skomplikowany projekt.
    Nie wiesz nawet jak napisać poprawnie funkcję.


    Nie satysfakcjonuje mnie miganie diodą. Napisałem ten temat, aby dostać informację jak prawidłowo powinna wyglądać ta funkcja i tyle. Mógłby, któryś z szanownych tu kolegów poprawić poprawnie tą funkcję, aby zadziałała?
  • #23 10005120
    Konto nie istnieje
    Konto nie istnieje  
  • #24 10005121
    dondu
    Moderator na urlopie...
    Bartek.k.k napisał:
    Nie satysfakcjonuje mnie miganie diodą. Napisałem ten temat, aby dostać informację jak prawidłowo powinna wyglądać ta funkcja i tyle. Mógłby, któryś z szanownych tu kolegów poprawić poprawnie tą funkcję, aby zadziałała?

    Dostałeś link do strony na której jest wszystko o definiowaniu funkcji.
    Racz więc ten link kliknąć i zagłębić się w lekturę.
  • #25 10005124
    Konto nie istnieje
    Konto nie istnieje  
  • #26 10005126
    Bartek.k.k
    Poziom 21  
    dondu napisał:

    A gdzie podałem link do migania diodą?


    Większość takich wg. mnie niemiłych odzywek dotyczy miganiem diodą i obsługi hd44780. Wracając dziękuje za lekturę. Zabieram się do edukacji.
  • #27 10005131
    dondu
    Moderator na urlopie...
    albertb napisał:
    dondu napisał:
    Autor już pokazał gdzie.

    Nie. Ze średnikiem nie ma warningów.
    Albert

    Owszem, ale tylko dlatego że nieprawidłowo definiuje funkcje, co sam autor pokazał i wyjaśnił dlaczego średnik wstawia :)

    Dodano po 1 [minuty]:

    Bartek.k.k napisał:
    dondu napisał:
    A gdzie podałem link do migania diodą?


    Większość takich wg. mnie niemiłych odzywek dotyczy miganiem diodą i obsługi hd44780.

    Jeżeli to jest niemiła odzywka, to żałuję, że tracę czas na pomaganie Tobie.
  • #28 10005144
    Konto nie istnieje
    Konto nie istnieje  
  • #29 10005153
    Bartek.k.k
    Poziom 21  
    dondu napisał:
    Bartek.k.k napisał:
    dondu napisał:
    A gdzie podałem link do migania diodą?


    Większość takich wg. mnie niemiłych odzywek dotyczy miganiem diodą i obsługi hd44780. Wracając dziękuje za lekturę. Zabieram się do edukacji.

    Jeżeli to jest niemiła odzywka, to żałuję, że tracę czas na pomaganie Tobie.


    Każdy po swojemu interpretuje. Nie chciałem dostać informacji, że nie znam podstaw, ale znów nie zaprzeczam temu, mogę nie wiedzieć jak to się robi, bo każdy na wszystkim się nie zna, lecz pragnąłem tylko nakierowanie, gdzie robię błąd. To wszystko. Myślę, że robi się niepotrzebny OT.
  • #30 10005177
    dondu
    Moderator na urlopie...
    Bartek.k.k napisał:
    Nie chciałem dostać informacji, że nie znam podstaw, ale znów nie zaprzeczam temu, mogę nie wiedzieć jak to się robi, bo każdy na wszystkim się nie zna, lecz pragnąłem tylko nakierowanie, gdzie robię błąd. To wszystko. Myślę, że robi się niepotrzebny OT.

    Forum nie jest miejscem zastępującym kurs czy lekturę książki.
    Zadałeś pytanie dlaczego nie działa i dostałeś odpowiedź:

    albertb napisał:
    Ok więc mamy kawałek kodu z błędem.
    Według Ciebie to funkcja.
    Według mnie i kompilatora to zmienna.
    Albert


    Więc powinieneś znaleźć informacje dlaczego tak jest jak podaje Albert.
    Ty jednak wolisz abyśmy za rączkę prowadzili Ciebie i zastępowali źródło wiedzy.

    No więc dostałeś ode mnie link, a w zamian otrzymuję tekst o odzywkach. Zastanów się nad tym.
    Nadal uważam i że bierzesz się za zbyt duży projekt, nie znając podstaw C <-- i to także jest porada.
REKLAMA