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



Teraz jest 10 lip 2026, o 18:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 21 gru 2015, o 10:54 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Witam,
sprawa jest banalna ale trochę się pogubiłem. Otóż napisałem program, który po wciśnięciu przycisku ma zmieniać tryb świecenia diód LED na ATtiny13. Z tym, że program dochodzi do case 2 i dalej nie chce przełączyć. Proszę o pomoc - banał ale poległem :D
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: 21 gru 2015, o 11:33 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

Witam. Jestem początkującym ale jeśli dobrze rozumie założenie programu to diody maja: 0- być zgaszone; 1- zapalić się; 2 - mrugać. Po kolejnym wciśnięciu przycisku powinny zgasną, zapalić się, mrugać i tak w kółko. Wydaje mi się że brakuje tu wyzerowania "i" na końcu.
Może spróbuj dać jeszcze: case4: i=0; break; Wtedy diody zgasną.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 11:44 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

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


Próbowałem robić z tym casem 4 ale program i tak dochodził do tego samego momentu i stop - ciągle mruga. Podejrzewam, że ten delay coś bruździ bo bez mrugania o dziwo działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 12:10 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

dziś popołudniu spróbuje (na żywym organizmie) na spokojnie się nad tym zastanowić i jak zapali mi sie lampka to dam znać.

------------------------ [ Dodano po: 15 minutach ]

Tak sobie myślę... Czy funkcja "przycisk" nie zwraca wartości zmiennej "i" ? czy na końcu nie powinno być return i; a w typie zwracanej wartości funkcji zamiast void to uint8_t?
Jeśli się mylę to sorki ale jestem początkujący. :)

------------------------ [ Dodano po: 24 minutach ]

key_lock = 55000;
if (i<3){ //jeśli i < 3
i++; //to zwiększaj i

}
else{
i=0; //w przeciwnym razie i =0
}

Czy w warunku if(i<3) nie powinno być (i<=1). Bo jeśli i=2 (spełni warunek if (1<3)) to i zwiększy się o jeden (i będzie równe 3). A i=3 sie masz w obsłudze switch().



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 12:40 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Chyba masz rację ze zwracaniem typu zmiennej. Zobaczę to po 16 bo na razie jestem w pracy. Co do warunku to jeśli i jest równe 2 i zwiększy o 1 wtedy przechodzi do else i przypisuje do i zero. Dla mnie to tak działa :-)

Wysłane z mojego D5503 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 13:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 237
Lokalizacja: Rzeszów
Pomógł: 11

Hmm... myślę, że problem tkwi w funkcji
void przycisk (void)

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


Tutaj sprawdzasz, czy wciśnięty jest klawisz i czy nie był wciśnięty przy poprzednim obiegu pętli.
Ustawiasz key_lock tak aby przy wciśniętym przycisku część tego kodu wykonała się tylko raz. Warunek if(i<3) powinien wyglądać if(i=<2), bo przy i=2 warunek ten zostanie spełniony a dalej i zostanie zwiększone o 1, czyli i=3. Przy kolejnym naciśnięciu przycisku i zostanie wyzerowane.

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

Rozumiem to tak - jeśli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
niespełniony i jeśli key_lock różne od zera i przycisk nie wciśnięty zwiększ key_lock o jeden. Nie wiem jak to działało do case=2, bo key_lock będzie równe zero raz na 65536 obiegów pętli, a bez tego warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nigdy nie będzie spełniony i i nigdy nie zostanie zwiększone o jeden.
Nie powinno tam być key_lock=0 ? key_lock to flaga.
Też jestem jeszcze początkujący, więc jak ktoś znajdzie błąd w moim rozumowaniu, będę wdzięczny.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 15:45 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

Kolego APAP75 polecam przeczytać artykuły p. Mirka na temat drgających styków a szczególnie od 2. Wtedy wszystkie wątpliwości co do:
APAP75 napisał(a):
else if (key_lock && (PINB & KEY0))
        { key_lock++;}

od razu Ci się wyjaśnią. http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 16:11 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Niestety po zmianach nadal jest to samo. Co ciekawe podczas zwykłego zapalania kolejnych diod wciśnięciem przycisku (najpierw PB3, potem PB4 i gaszenie) jest ok. Tylko przy mruganiu wykrzacza i nie chce wejść do 3 case.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 17:04 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

Vroobee "poprawiłem" (troszeczkę za duże to słowo) Twój kod i działa, tylko nie wiem jak wklejać treść programu na forum. Nie podobało mi się " _delay_ms", blokowało program. Postanowiłem zrobić to na przerwaniach Timera od przepełnienia (video kursy p. Mirka dają wyniki).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 17:07 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Żeby wkleić kod musisz w pełnym edytorze rozwinąć listę "Syntax wybierz" i wybrać C. Pomiędzy "{syntax=c]...[/syntax}" wstawiasz kod.

------------------------ [ Dodano po: kilkunastu sekundach ]

Też pomyślałem właśnie żeby to zrobić na Timerze, bo wszelaka opcja delay'a nie działa.

------------------------ [ Dodano po: 1 minucie ]

Możesz spróbować jeszcze przesłać mi kod w prywatnej wiadomości jak nie uda Ci się na forum :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 17:10 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

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


------------------------ [ Dodano po: 1 minucie ]

Testowałem to na ATmega32 ale na AT8 też powinno działać bo rejestry są takie same. Cieszę się, że mogłem pomóc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 17:15 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Ja to robię na ATtiny13 więc trochę muszę poprzerabiać :D ale wielkie dzięki za pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 17:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 237
Lokalizacja: Rzeszów
Pomógł: 11

:D gonzicz - dzięki.
Sprytne to :lol:

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 18:26 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Szczerze powiedziawszy to mam problem. Kod niby ten sam no ale nie chce działać.

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


Swoją drogą nie rozumiem dlaczego w case 2 są te negacje timer i sw.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 18:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Może poza tematem ale
Vroobee napisał(a):
DDRB|=(1<<5);

tam ATtiny13 posiada RESET

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 18:38 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Wiem, wyłącze fuse bitami, żeby działał jako zwykły IO, ale najpierw muszę mieć gotowy program :)
Swoją drogą teraz po podłączeniu zasilania 3V dziwne rzeczy się dzieją :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2015, o 20:49 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

Vroobee napisał(a):
 timer = 0;

Tu niepotrzebnie zerujesz zmienną "timer" Ten "sw" to pozostałości po starym kodzie :) można go usunąć.
Vroobee napisał(a):
if (!timer){

jeśli timer jest równy zero (przeładuje się) to wykonaj polecenie.
Głębszy opis znajdzesz oglądają filmik od około 42 min https://www.youtube.com/watch?v=V83w0pu7MVo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2015, o 08:11 
Offline
Użytkownik

Dołączył(a): 25 wrz 2014
Posty: 137
Lokalizacja: Konin/Poznań
Pomógł: 0

Ok :-) okazało się że zmiana prescalera pomogła :-) dzieki za pomoc :-D

Wysłane z mojego D5503 przy użyciu Tapatalka



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Baidu [Spider] i 6 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