Skocz do zawartości

Problem ze Switchem


bartekwr1335

Pomocna odpowiedź

Witam. Po wielu godzinach spędzonych przed komputerem w końcu udało mi się zaprogramować uC. Nastąpił jednak inny problem, gdy chciałem pobawić się przyciskami.

Mianowicie kiedy podłączyłem tak mikroswitch'a:

to nic się nie dzieje.

Zamieszczam kod programu:


$regfile "attiny26.dat"
$crystal = 1000000

Config Portb.0 = Output
Config Porta.0 = Input


Do

If Pina.0 = 1 Then
Toggle Pinb.0

End If

Loop


End

Myśle, że program jest dobry.

Próbowałem też podłączenia uSwitch'a tak jak zrobił to Sabre w jednym ze swoich robotów, czyli 1 nóżka switch'a przez rezystor i kondensator do mikrokontrolera, a 2 do GND i też nic.

Czy wie któs może gdzie tkwi problem?

PS. Przepraszam za słabą jakość zdjęcia, ale robione było telefonem. 😳

Link do komentarza
Share on other sites

Jeśli switch zwiera do masy to na pinie wystąpi "0" logiczne, nie "1". To po pierwsze.

Po drugie, na stykach przycisku występują drgania, które najprościej po prostu przeczekać w programie.

Link do komentarza
Share on other sites

Po pierwsze musisz ustalić jakoś stan wysoki na PA.0, możesz to zrobić rezystorem podciągającym, lub też możesz zrobić to programowo w ten sposób:

Set Porta.0

Kolejna kwestia to taka że tutaj:

Toggle Pinb.0

zamiast pinb.0 powinno być portb.0. Za pomocą polecenia"pin" możesz tylko odczytać stan na nóżce procesora, żeby zmienić stan takiej nóżki musisz użyć polecenia "port". Poza tym wszystkim występują drgania styków, które będą powodować to że program nie będzie działał jak chcesz. Zainteresuj się poleceniem Debounce, służy właśnie do obsługi przycisków i niweluje problem drgania styków. Jeśli ten Twój program już Ci zadziała to nie zauważysz mrugania diody, ponieważ masz to w pętli i po naciśnięciu przycisku dioda ciągle się będzie przełączać.

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

$regfile "attiny26.dat" 
$crystal = 1000000 

Config Portb.0 = Output 
Config Porta.0 = Input 
Porta.0 = 1

Do 

If Pina.0 = 0 Then 
Toggle Portb.0 
waitms 100

End If 

Loop 


End 

Upewnij się że switch jest dobrze podłączony.

Link do komentarza
Share on other sites

Ok. Działa, ale tak dziwnie, bo trzeba mocniej nacisnąć żeby dioda się zaświeciła, a jak już to robi to tak jakby podwójnie. To jest spowodowane tymi drganiami? CZy może to polecenie waitms 100 ? Jeszcze jedno.

Jak i gdzie wpisywać to polecenie debounce ?

Jak wpisuje tak to wyskakuje takie coś:

Link do komentarza
Share on other sites

$regfile "attiny26.dat" 
$crystal = 1000000 

Config Portb.0 = Output 
Config Porta.0 = Input 
Porta.0 = 1

Do 

If Pina.0 = 0 Then 
Waitms 25
If Pina.0 = 0 Then
Toggle Portb.0 
Bitwait Pina.0, Set
End If 
End If 

Loop 
End 

Teraz przycisk powinien reagować tylko raz.

If Pina.0 = 0 Then 
Waitms 25
If Pina.0 = 0 Then

Ten kawałek kodu ma ne celu eliminacje drgań styku przycisku.

Bitwait Pina.0, Set

To polecenie wstrzymuje działanie pogramu do momentu aż przycisk zostanie puszczony - czyli na pinie a.0 znów pojawi się stan wysoki.

Zamiast instrukcji warunkowej "If....Then" możesz też użyć instrukcji "Debounce"

Debounce pinx.y, stan, etykieta, Sub

pinx.y - linia portu która będzie sprawdzana

stan - stan na jaki ma reagować instrukcja - 0 lub 1. W Twoim przypadku 0

etykieta - podprogram - czyli co ma być zrobione

Sub - przejście do podprogramu

$regfile "attiny26.dat" 
$crystal = 1000000 

Config Portb.0 = Output 
Config Porta.0 = Input 
Porta.0 = 1

Do 

Debounce Pina.0, 0, Pr1, Sub
Loop 
End
Pr1:
Toggle Portb.0
Return 
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.