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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 7 cze 2025, o 03:55


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 24 lut 2015, o 13:27 
    Offline
    Nowy

    Dołączył(a): 24 lut 2015
    Posty: 3
    Pomógł: 0

    Witam Wszystkich,

    Jest to mój pierwszy post na forum - chciałbym wszystkich serdecznie przywitać i pozdrowić !
    Jestem częstym czytelnikiem forum i wiele razy znalazłem tu pomocne informacje - liczę że i tym razem tak będzie.

    Od pewnego czasu wykonuję różne drobne projekty z wykorzystaniem Arduino. Obecnie próbuję zrobić bardziej złożony, mianowicie sterowanie silnikiem krokowym z wyświetlaczem LCD, gdzie za pomocą menu wybierać się będzie różne tryby pracy.

    Utknąłem na budowaniu menu. Próbowałem użyć do tego najpierw biblioteki MenuBackend - i tu dochodzę do sedna. Gdy napisałem kod efekt był taki że podczas inicjalizacji kolejnych elementów menu następował reset atmegi i program zaczynał od początku albo się wiesza. Pomyślałem, że może MenuBackend jest za ciężkie, poszukałem kolejnych bibliotek i zainspirowany tym (https://github.com/adacho/LCDMenu) napisałem swoją - niestety efekt jest ciągle ten sam - program resetuje się i zaczyna od początku albo wisi.
    Menu nie jest zbyt rozbudowane, a zasobów nie zużywam chyba za dużo, bo podczas kompilacji mam:

    Szkic używa 11 596 bajtów z (35%) pamięci programu. Maksimum to 32 256 bajtów.
    Globalne zmienne używają 370 bajtów z (18%) dynamicznej pamięci, pozostawiając 1 678 bajtów dla lokalnych zmiennych. Maksimum to 2 048 bajtów.


    Więc w sumie myślę, że niedużo.
    Męczę się z tym już długo i nie mam pomysłu jaka jest przyczyna. Bardzo proszę o pomoc.
    (kod jest w załączniku bo trochę przydługi)

    --
    Pozdrawiam

    Używam Arduino Uno + LCD Shield
    oraz Arduino IDE (obecnie 1.6)


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2015, o 15:27 
    Offline
    Nowy

    Dołączył(a): 16 mar 2014
    Posty: 16
    Pomógł: 0

    Witam
    Proszę sprawdzić czy zasilanie ma odpowiednią wydajność.
    może być tak, że przy zbyt małym napięciu (zbyt duże obciążenie) albo program będzie się wieszał albo się wyłączy układ.
    Proponuje dodać zewnętrzny zasilacz 12V dla przetestowania czy to wina zasilania czy nie.
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 mar 2015, o 16:11 
    Offline
    Nowy

    Dołączył(a): 24 lut 2015
    Posty: 3
    Pomógł: 0

    Sprawdziłem zasilanie. Nie ma poprawy.
    Wydaje mi się, że to jest jednak kwestia pamięci - w zależności od tego jak dużo mam zajęte pamięci na zmienne to program się zawiesza albo resetuje w różnych miejscach.
    Może to coś ze stosem. Stos jest, z tego co czytałem, w RAM'ie - pytanie ile potrzeba na niego pamięci ?
    Czy jest coś co za mnie to pilnuje czy np zajęcie RAMu do pełna nadpisze stos ?
    --
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2015, o 01:21 
    Offline
    Nowy

    Dołączył(a): 16 mar 2014
    Posty: 16
    Pomógł: 0

    Może problem jest z połączeniem albo długością przewodów, tak jak to u mnie było w przypadku UART-a.
    Może po prostu są gdzieś luźne połączenia skoro w losowych momentach występuje.
    Ogólnie jeśli ma Pan jeszcze do dyspozycji pamięć to nie powinna ona sprawiać problemów.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2015, o 13:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lis 2013
    Posty: 77
    Pomógł: 6

    sprawdz jeszcze :

    Cytuj:
    Było już na forum, reset jest powodowany przez jakiś program na twoim komputerze który omiata (otwiera) wszystkie porty COM w poszukiwaniu urządzenia. Otwarcie portu COM w arduino UNO, MEGA powoduje reset programu. Głównie są to programy do telefonów, aparatów, itp itd. (Sony Erricson).


    http://forum.atnel.pl/search.php?st=0&sk=t&sd=d&sr=topics&author_id=2072



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2015, o 13:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2015
    Posty: 41
    Lokalizacja: Gorzów Wlkp.
    Pomógł: 0

    Ekstrapolator napisał(a):
    sprawdz jeszcze :

    Cytuj:
    Było już na forum, reset jest powodowany przez jakiś program na twoim komputerze który omiata (otwiera) wszystkie porty COM w poszukiwaniu urządzenia. Otwarcie portu COM w arduino UNO, MEGA powoduje reset programu. Głównie są to programy do telefonów, aparatów, itp itd. (Sony Erricson).


    http://forum.atnel.pl/search.php?st=0&sk=t&sd=d&sr=topics&author_id=2072


    Potwierdzam, dlatego odłącz od USB i podłącz go na zewnętrznym zasilaczu, tak jak ktoś wyżej napisał najlepiej 12V, wykluczysz wtedy dwa elementy które mogą powodować restart.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 mar 2015, o 10:59 
    Offline
    Nowy

    Dołączył(a): 24 lut 2015
    Posty: 3
    Pomógł: 0

    Z użyciem zasilacza zewnętrznego brak poprawy.
    Reset następował niezależnie od tego czy układ był podłączony do komputera czy nie - więc przyczynę od strony komputera wykluczam.

    Ponieważ nie dawało mi spokoju to, że w zależności od tego jak wyglądał program (robiłem drobne zmiany) to reset następował w różnych miejscach, ale jak przywracałem program do poprzedniego stanu to reset był w tym miejscu co przed zmianami, więc zrobiłem następującą rzecz:
    Zrezygnowałem z hermetyzacji/enkapsulacji w klasach - zlikwidowałem private + get/set, zmniejszyłem maksymalnie ilość wywołań ... i sukces - pomogło ! :-)
    Kod wygląda tragicznie teraz (przynajmniej z mojego punktu widzenia) - ale, co najważniejsze, działa poprawnie.
    To by świadczyło o tym, że przyczyną było przepełnienie pamięci podczas pracy i wtedy (tak sobie tłumaczę) coś musiało nadpisywać stos.

    Hmm, wygląda na to, że te 2kB RAM ATmegi nie zawsze pozwalają na "eleganckie" programowanie w C++... :-(
    Muszę poczytać, czy nie dałoby się jakoś elegancko dołożyć RAMu i nie pozajmować przy tym większości portów.

    --
    Pozdrawiam



    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: 7 ] 

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO