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



Teraz jest 5 kwi 2026, o 01:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 27 mar 2014, o 23:15 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.
Temat wydaje się prosty - nawet poczytałem sporo na forum i wszystko ładnie opisane, ale mi nie działa. Tzn działa z taką przekombinowaną pętlą, a nie działa prosto.

Zasada prsta. Po podpięciu zasilania program ma wykonywać jakiś podprogram, a po naciśnięciu przycisku ma wykonać program główny.

Na necie na pierwszym miejscu wyskakuje
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Niestety to mi nie działa - może dlatego, że jest włączony timer sprzętowy i przerwania?? Nie mam pojęcia.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wcześniej l jest zdefiniowane jako zmienna uint8_t a j jest co 1/2sek iterowana w timerze sprzętowym.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a cała program wygląda tak (nie zamieszczałem definicji, ale z tym chyba nie ma problemów a szkoda zaśmiecać
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz działa tylko pierwsza pętla while (nie przerywa się po naciśnięciu klawisza.
A ma być tak, że po jednorazowym naciśnięciu klawisza przechodzi do pętli głównej while(1) i już o pierwszej pętli zapomina do następnego resetu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2014, o 23:31 
Offline
Użytkownik

Dołączył(a): 02 lut 2014
Posty: 38
Lokalizacja: Jaworzno
Pomógł: 2

iwi napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Niestety to mi nie działa - może dlatego, że jest włączony timer sprzętowy i przerwania?? Nie mam pojęcia.


Podanym wyżej define'm niczego nie odczytujesz. Potrzebujesz czegoś takiego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2014, o 23:44 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Może to nie najładniej, ale teraz działa jak powinno:
Ale czegoś nie rozumiem jeszcze.

Dałem na początek oczekiwanie 30 sekund żeby nie robił program zupełnie nic (ale żeby się dało go przerwać) potem po 30 sek jeśli nic nie naciśniemy przechodzi do pętli pierwszej while(1) i miga nam diodą cały czas aż naciśniemy przycisk.
Ale nie rozumiem dlaczego po naciśnięciu przycisku w czasie bezczynności (pierwsze 30 sek) wychodzi do pętli głównej od razu - czyli wychodzi z obu while?

Cieszę się, że tak działa, ale zastanawiam się dlaczego - czyżby dlatego, że on nie traktuje tego mojego naciśnięcia jako pojedynczy impuls tylko jako kilka impulsów i pierwszy wychodzi z pętli oczekującej a drugi z pętli migającej??

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 28 mar 2014, o 00:29 przez iwi, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2014, o 00:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Wcale nie dziwne, że tak ci działa.
Program "kręci się" w wewnętrznej pętli while. Wciskasz przycisk i warunek if w linii 4 zostaje spełniony i po instrukcji break w linii 8 program opuszcza tą pętlę while. Potem w linii 13 znów jest sprawdzany if. A ty wciąż trzymasz przycisk wciśnięty więc ten warunek jest też spełniony przez co wykona się break w linii 17. I tym sposobem program przechodzi do pętli głównej while.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2014, o 00:32 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

tak właśnie myślałem i nawet jak dałem 3 pętle while jedna po drugiej to też działa poprawnie :) i o to chodzi.
Projekt zakończony - teraz zmontowac i wmontować.
Dzięki
Miłej nocy - ja mogę teraz spokojnie zasnąć - nie będą mi się śniły pętle.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


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