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



Teraz jest 8 lis 2024, o 15:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 39 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 15 maja 2015, o 06:19 
Offline
Nowy

Dołączył(a): 14 maja 2015
Posty: 6
Lokalizacja: Północ Polski
Pomógł: 0

Podciągnięcie do 5V:

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

jerrylu:
Sprawdziłem kod od Ciebie - działa jak należy :D Zmieniłem jedynie funkcję obsługi drugiego przycisku tak by też działał przy wciśnięciu a nie zwolnieniu. Dzięki wielkie za pomoc i poświęcony czas.

Ale nadal nie rozumiem dlaczego mój prosty kod nie działał. Coś musiało być nie tak skoro teraz działa.

pozdrawiam
Łukasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 08:57 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

Tak jak pisałem, nie zdajesz sobie sprawy z szybkości pętli.
Pętla while + inkrementacja key_lock do 255 i zmiana na zero wykręca się b. szybko - 20ms?
I masz znowu spełniony pierwszy warunek w funkcji, która zwraca Ci 1 i zwieksza/zmniejsza licznik wyświetlacza.
20ms to 1/50 sekundy, czyli już b. krótkie nacisnieęie zmieni licznik o 1. Dłuższe o serię następnych.
Przytrzymaj przycisk przez 10 sekund. Zobacz ile Ci nabije licznik.
Podziel 10sek przez to co nastukało ci na liczniku i masz czas obiegu pętli z przepełnieniem key_lock.

Pozdrówka!

------------------------ [ Dodano po: 5 minutach ]

Dałoby się obsłużyć tą sytuację w Twojej prostej funkcji, ale wprowadzając kolejne zmienne.
Zmienna na przepełnienie licznika + zmienna zmiany stanu klawisza.
Jeśli nastąpiło przepełnienie key_lock bez zmiany stanu klawisza (klawisz cięgle wciśnięty) - zwróć zero.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 09:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

kamer napisał(a):
Ale nadal nie rozumiem dlaczego mój prosty kod nie działał. Coś musiało być nie tak skoro teraz działa.
pozdrawiam
Łukasz

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

Funkcja if wykona się, gdy argument jest prawdą - i tak jest - PRAWDA = ( klawisz_wcisniety( KEY1_PIN) ), a powinna być FALSE (klawisz puszczony).
Sprawdź taką drobnostkę - ( klawisz_wcisniety(~ KEY1_PIN) ) lub (~ klawisz_wcisniety( KEY1_PIN) ).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 09:42 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

"klawisz_wcisniety" to funkcja, do funkcji jest przekazywany klawisz jako parametr. Dopiero w funkcji sprawdzany jest jego stan.
Z uporem szukasz dziury w działających poprawnie fragmentach kodu kolegi :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 10:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

jerrylu napisał(a):
Z uporem szukasz dziury w działających poprawnie fragmentach kodu kolegi :)

;) ;) Na pewno to widzisz? - Ta funkcja ( klawisz_wcisniety( KEY1_PIN) ) ma zwrócić prawdę, by wykonało się "liczba+=1"
A tak nie było :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 10:25 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

Przecież zwracało prawdę i była inkrementacja/dekrementacja przy wciśnieciu klawisza - poprawne działanie.
Problemem było to, że przy dłuższym przytrzymaniu przycisku szła seria tych inkrementacji/dekrementacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 10:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

Chyba się nie zrozumieliśmy. Zainteresowany nie chce Twojego gotowca. Chce dojść do błędu - którego nie wskazałeś.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2015, o 15:46 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

No właśnie chyba się nie zrozumieliśmy. Proszę o wybaczenie.
A błąd Koledze kamer wskazałem 2 razy - wczoraj bez rozwinięcia, dzisiaj z rozwinięciem - godz. 08:57
Co więcej sprawdziłem, że na 16MHz pętla z inkrementacją przepełniającą key_lock trwa ok. 22ms.
Czyli bez dodatkowych zmiennych i sprawdzania warunków w jej obiegu (jak wspomniałem powyżej) nie ma siły,
żeby nie poleciał ciąg kolejnych cyfr na plus, bądź na minus w zależności od klawisza.
W końcu to tylko 1/50 sekundy i warunek ponownie jest spełniony do inkrementacji/dekrementacji licznika.
Delay aż 200ms w pierwszym warunku funkcji pozwala spokojnie zwiększać i zmniejszać licznik ale tylko przy krótkich naciśnięciach.
Ale to tylko rozwiązanie dla pokazania, że podstawowa funkcjonalność programu jest zachowana.
Pozostaje obsługa przytrzymania przycisku jak napisałem.
Ja w tym wątku nie mam już nic do dodania.



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

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

jerrylu napisał(a):
Pozostaje obsługa przytrzymania przycisku jak napisałem.
Ja w tym wątku nie mam już nic do dodania.

Oj tam - jesteś świetnym obserwatorem i dokumentalistą.
Kol. kamer uzyskał świetny pseudo random generator, a nie było to Jego zamiarem. Ty podpowiadasz, że ma wyjść z wartością 0 gdy przycisk ciągle wduszony, wtedy nie będzie "liczba" się zmieniać - mówię i ja.



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: 39 ]  Przejdź na stronę Poprzednia strona  1, 2

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