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



Teraz jest 17 lis 2024, o 13:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: SeperDebounce
PostNapisane: 5 sie 2012, o 07:57 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

z moich testów wynika, że SuperD działa wyłącznie jeżeli przyciski są skonfigurowane na tym samym porcie?
jeżeli mam jeden przycisk na innym porcie wtedy funkcyjnie przyciski się zamieniają, np. wciskam 1 a reakcja jest jak bym wcisnął 3(mam 3 przyciski).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:03 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jak chcesz podyskutować to pokaż kod programu.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Krauser napisał(a):
Jak chcesz podyskutować to pokaż kod programu.


A już myślałem że i tu podołasz ??? No byłbym w szoku ;) ale po poprzednim wątku wiem że do wszystkiego jesteś pan zdolny ;)

Panowie - zadając pytania a szczególnie wypowiadając jakieś niesprawdzone opinie na temat kodów z książki, bardzo proszę - powołajcie się na jakiś kod źródłowy. OCZYWIŚCIE nie mówię tu o kodzie samej funkcji SuperDebounce() - tego kodu nie trzeba tu pokazywać - każdy go ma pod ręką.

Chodzi o wasz kod np z main.c, żeby zobaczyć jak tej funkcji używacie w praktyce ...

Ja dodam tylko, że ta funkcja nie ma absolutnie żadnych takich ograniczeń jak napisał na górze kolega sirk77 - a jeśli pokaże swój kod to pewnie uda nam się to wyjaśnić dlaczego tak a nie inaczej jemu się coś tam w programie zachowuje.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:34 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

generalnie kod nie powinien mieć większego znaczenia, poprzednio używałem przycisków podłączonych do portuD i działało prawidłowo:

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


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


obecnie przycisk P1 mam na porcie C, czyli zmiana w programie:

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


funkcji SuperD uzywam bezpośrednio z projektu wielozadaniowego z książki nr1

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

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

wszystkie przyciski działają prawidłowo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:50 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

No i tu kolega zrobił małą skuchę - od razu mówię.... tzn dlaczego czasem moi szanowni czytelnicy nie zaglądają do kodów na płycie DVD ???? Ja kody w książce traktuję nieco luźniej - one mają służyć tylko do wyjaśnienia pewnych zagadnień. Czasem niestety przy takiej okazji zdarzy się drobny błąd lub niedomówienie jak np w rozdziale o ADC - proszę sobie np przeczytać to:

http://atnel.pl/domyslna-promocja-do-typu-int.html

ale ok - przejdźmy do problemu kolegi sirk77 i rozwiążmy go do końca ;)

Proszę spojrzeć jaki nagłówek funkcji SuperDebounce znajduje się na płycie DVD:

Cytuj:
void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,
uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,
void (*push_proc)(void), void (*rep_proc)(void) );


Widzi kolega tutaj zasadniczą różnicę ??? wprowadzony został dodatkowy parametr. Jego opis przy funkcji na DVD wygląda tak:

Cytuj:
/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************
* AUTOR: Mirosław Kardaś
* ZALETY:
* - nie wprowadza najmniejszego spowalnienia
* - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)
* - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia
* - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)
*
* Wymagania:
* Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)
*
* Parametry wejściowe:
* *key_state - wskaźnik na zmienną w pamięci RAM (1 bajt)
* *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB
* key_mask - maska klawisza np: (1<<PB3)
* rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT
* rep_wait - czas oczekiwania do przejścia do trybu REPEAT
* push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku
* rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT
**************************************************************************************/


A przykład wykorzystania funkcji w main wygląda tak:

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


Widzi kolega te dwie różne zmienne o nazwach k1 i k2 ??? to właśnie te dwa różne bajty w pamięci RAM na potrzeby pracy każdego wywołania funkcji SuperDebounce. Można bowiem powiedzieć, że tutaj funkcja SuperDebounce działa prawie jak obiekt ;) w języku wyższego rzędu. I każda instancja obiektu potrzebuje swojego kawałka RAM na przechowywanie stanów. Jeśli tego nie ma i kod jest tylko taki jak z książki, to rzeczywiście funkcja będzie działać poprawnie TYLKO na dla JEDNEGO klawisza i nie ma znaczenia czy na tym samym porcie czy nie :(

ale jeśli użyjemy tej wersji z DVD to proszę bardzo "hulaj dusza" - można jej używać dla dowolnej ilości klawiszy i na dowolnych pinach i portach. Proszę sobie TO właśnie sprawdzić. Mówiąc TO mam na myśli kod na płycie DVD - OK?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 09:11 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

ok dzięki, funkcję brałem bezpośrednio z DVD1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 09:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

sirk77 napisał(a):
ok dzięki, funkcję brałem bezpośrednio z DVD1


No ale zaraz - to jak to jest że w przykładowym kodzie nie korzystasz z tego parametru ???? hmmm z tego co pamiętam ta poprawiona nieco funkcja była na DVD już od samego początku - czy się mylę i masz może na DVD bez tego parametru ???? daj znać proszę bo to mnie zaciekawiło teraz.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 10:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

OK w razie czego proszę jeszcze raz zajrzeć do tego LINKU

post6106.html#p6106

pod koniec jest aktualizacja lekcji nr.19 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2012, o 11:31 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

mirekk36 napisał(a):
OK w razie czego proszę jeszcze raz zajrzeć do tego LINKU

post11823.html#p11823

Ooooo... coś się po...teges... bo: "wybrany wątek nie istnieje" :?:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2012, o 12:57 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

post6106.html#p6106

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO