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



Teraz jest 19 kwi 2024, o 19:59


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