Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

Bartek.k.k 07 Oct 2011 18:01 3017 30
  • #1
    Bartek.k.k
    Level 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ć):

    Code: c
    Log in, to see the code


    Pozdrawiam Bartek!
  • #3
    Bartek.k.k
    Level 21  
    dondu wrote:
    Bartek.k.k wrote:
    ... 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
    dondu
    Moderator on vacation ...
    Bartek.k.k wrote:
    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
    Bartek.k.k
    Level 21  
    dondu wrote:
    Bartek.k.k wrote:
    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
    Bartek.k.k
    Level 21  
    dondu wrote:
    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:

    Code: c
    Log in, to see the code


    Może teraz będzie to widoczne. Problemem jest brak reakcji na przycisk, który ma wyświetlać poszczególne ekrany.
  • #9
    Bartek.k.k
    Level 21  
    dondu wrote:
    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
    Bartek.k.k
    Level 21  
    dondu wrote:
    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
    User removed account
    User removed account  
  • #13
    Bartek.k.k
    Level 21  
    albertb wrote:
    Bartek.k.k wrote:
    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:

    Code: c
    Log in, to see the code


    Tutaj zaś obsługa przycisku:

    Code: c
    Log in, to see the code


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

    Code: c
    Log in, to see the code


    Pozdrawiam Bartosz!
  • #14
    User removed account
    User removed account  
  • #15
    Bartek.k.k
    Level 21  
    albertb wrote:
    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:

    Code: c
    Log in, to see the code


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

    Code: c
    Log in, to see the code


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

    uint8_t wyswietl_ekran_2; , bo inaczej eclipse buntowało się.
  • Helpful post
    #17
    User removed account
    User removed account  
  • #18
    Bartek.k.k
    Level 21  
    dondu wrote:
    Autor twierdzi, że warningów nie ma ;)
    Prawda jest jednak chyba inna ...


    Już wyjaśniam.

    Taki zapis:

    Code: c
    Log in, to see the code


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

    Code: c
    Log in, to see the code


    na ekranie następuje apokalipsa.

    Warningi:

    Code:
    ../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
    User removed account
    User removed account  
  • #21
    Bartek.k.k
    Level 21  
    albertb wrote:
    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
    User removed account
    User removed account  
  • #24
    dondu
    Moderator on vacation ...
    Bartek.k.k wrote:
    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
    User removed account
    User removed account  
  • #26
    Bartek.k.k
    Level 21  
    dondu wrote:

    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
    dondu
    Moderator on vacation ...
    albertb wrote:
    dondu wrote:
    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 wrote:
    dondu wrote:
    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
    User removed account
    User removed account  
  • #29
    Bartek.k.k
    Level 21  
    dondu wrote:
    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
    dondu
    Moderator on vacation ...
    Bartek.k.k wrote:
    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 wrote:
    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.