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



Teraz jest 15 lis 2024, o 21:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 31 sty 2021, o 18:27 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Witam, chcę napisać program, który po przytrzymaniu przycisku dłużej niż 3s będzie ciągle zmieniał stan diody do momentu, kiedy nie puścimy przycisku. Chcę aby zmiana stanu diody występowała w odstępie 200ms i aby nie był to program blokujący. Używam do tego timera0 w trybie CTC gdzie porównanie przerwanie od porównana występuje co 10ms. Nie rozumiem dlaczego kod w liniach 47-55 nie działa tak jak chcę. Dioda gaśnie i zapala się takim seriami. Nie jest to płynna zmiana stanu diody tylko najpierw dioda bardzo szybko zapala się potem gaśnie i znowu zapala się. Co tutaj mam nie tak? Poprzednie timery programowe działają poprawnie.

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: 31 sty 2021, o 20:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Linia 50 blokuje program do momentu puszczenia przycisku KEY1 (jeśli dobrze zrozumiałem kod)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2021, o 22:31 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Marhef napisał(a):
Linia 50 blokuje program do momentu puszczenia przycisku KEY1 (jeśli dobrze zrozumiałem kod)

Tak. bo o to mi tutaj chodzi, że jeżeli trzymam przycisk dłużej niż 3s to dioda zmienia swój stan. Nie wiem tylko dlaczego nie dzieje się to równo co 200ms. Jak używam "_delay_ms" to wszystko działa poprawnie, ale wiadomo nie chcę wykorzystywać delayów bo to blokuje mikrokontroler.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2021, o 20:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Co znaczy "nie dzieje się równo co 200ms"? Czyli co ile? Masz może zgrane jakieś przebiegi?
Bo tu popatrz, musisz mieć jednocześnie spełniony warunek
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 spełniony warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
żeby flag był równy 1, niespełniony warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
oraz spełniony warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Może spróbuj inaczej do tego podejść. W tym momencie masz za dużo zależności.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2021, o 23:43 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Kolega miał chyba rację :) Zmieniłem trochę kod na taki jak niżej i działa poprawnie dziękuję za pomoc.

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  
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 3 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