Skocz do zawartości

Debounce działa tylko raz


Majski

Pomocna odpowiedź

Mam taki prosty kod:

$regfile = "m88def.dat"
'$crystal = 16000000


Config Pinc.5 = Input
Config Pind.0 = Output
Set Portc.5


Do
  Debounce Pinc.5 , 0 , Prawo , Sub
Loop
End

Prawo:
  If Pind.0 = 0 Then Portd.0 = 1
  If Pind.0 = 1 Then Portd.0 = 0
Return

według podręcznika program powinien przy wciśnięciu przycisku na pinc.5 przełączyć stan na portd.0. Niestety program tylko za pierwszym razem przełącza, a pozniej pozostaje w stanie właczonym. Sprawdzilem na symulatorze i program identycznie się zachowuje:/

probowałem tez z funkcja toggle ale ten sam efekt:/

Wie moze co robie zle?

Link do komentarza
Share on other sites

Twój jest wyjątkowo nielogiczny dlatego ze w linijce If Pind.0 = 0 Then Portd.0 = 1 ustawiasz na wyjściu 1 a w linijce następnej If Pind.0 = 1 Then Portd.0 = 0 sprawdzasz i wynosi 1 bo sam przed chwila ustawles wiec ustawiasz na 0 i wychodzi z obslugi. mogles to zrobic tak

If Pind.0 = 0 Then

Portd.0 = 1

else

Portd.0 = 0

end if

wtedy dziala albo jedna linijka albo druga a nie 2 naraz

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jeśli już chcesz używać debounce co jest równoznaczne z wait to może inaczej?

config pinc.5 = input
config portd.0 = output

set pinc .5
set portd.0

do
if pinc.5=0 then gosub prawo
loop

prawo:
toggle portd.0
waitms 100
return
Link do komentarza
Share on other sites

Martix w tym przykładzie przycisk musi puścić zanim 100ms minie.

Po to sie właśnie debounce stosuje żeby sobie ułatwić obsługę klawiszy

Tylko że rodzą się co najmniej dwa pytania:

1 - Co kryje się pod pojęciem debounce? A co się kryje? A no kryje się waitms 25 i ponowne sprawdzanie stanu przycisku.

2 - Kto chcąc raz nacisnąć przycisk trzyma go dłużej niż 100ms? Chyba że zamierza trzymać go długo.

W moim przykładzie ma się gdzieś drgania styków bo po wykryciu stanu niskiego na pinc.5 od razu skoczy do wykonywania zmiany stanu portd.0 i tam sobie poczeka 100ms, styki drgać przestaną a program wróci do pętli głównej.

Link do komentarza
Share on other sites

Tyko zanim puścisz to jeszcze kilak razy zmieni stan.

W debounce jedno nacisniecie to jedna zmiana

Albo ja źle rozumuję, albo Ty szanowny kolego slawko_k

Trzeba się zastanowić co robi program w takim przypadku?

'tu się kręci bezczynnie do momentu sprawdzenia stanu na pinc.5

do
if pinc.5=0 then gosub prawo
loop

naciskamy przycisk na pinie c.5 i mamy skok do podprogramu prawo

prawo:
toggle portd.0    'zmieni stan portd.0 na przeciwny
waitms 100        'czeka 100ms
return                'wraca tam skąd wybył i jeśli dalej trzymamy przycisk czyli
                        'dłużej niż 100ms to znowu skoczy nam do podprogramu prawo

Zgadza się? W takim razie nasuwa się jeszcze jedno pytanie:

Gdzie tu jeszcze kilkukrotna zmiana stanu portd.0 ?

Link do komentarza
Share on other sites

Zgadza się? W takim razie nasuwa się jeszcze jedno pytanie:

Gdzie tu jeszcze kilkukrotna zmiana stanu portd.0 ?

Nie zgadza się Szanowny kolego MATRIX

a tu

toggle portd.0

lub tu

portd.0=not portd.0

Zresztą nie wiem po co drążysz temat skoro moja podpowiedź rozwiązała problem autora wątku

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.