Skocz do zawartości

Obsługa przycisku


ciscoc

Pomocna odpowiedź

Niżej zamieszczam temat pod tyczący obsługi przycisku. Chciałem zapytać o makrodefinicję typu bit_is_clear oraz bit_is_set dotyczącą obsługi przycisku wg. rys.1 oraz rys.2.

Pierwszy program (rys.1) czy dobrze rozumuję jeżeli nie proszę mnie poprawić.

Mianowicie linie portu D zostają ustawione jako wejściowe z ustawieniem PD0 na 1 (pull up) związku z czym rejestr PIND przyjmuje wartości PORTD, a zatem przycisk S1 ustawiony jest w wysoki stan logiczny 1 na PD0 i teraz jeżeli przycisk zostanie wciśnięty czyli musi być niski stan napięcia na przycisku S1, niski stan logiczny 0, to jeżeli rejestr funkcyjny PIND odczyta że bit 0 linii portu PD0 będzie miał wartość 0 to zapali nam wtedy diodę. Ale sytuacja taka będzie tylko w przypadku gdy przycisk S1 nie jest podpięty bezpośrednio do zasilania 5V.

Czy tak mam rozumieć wykorzystanie makrodefinicji bit_is_clear wtedy gdy przycisk S1 nie jest podpięty bezpośrednio do zasilania 5V?

Oraz drugi przypadek (rys.2) w tej sytuacji mamy tak że przycisk S1 podpięty jest pod linie PD7 oraz bezpośrednio pod zasilanie 5V związku z czym muszę go ustawić w niski stan logiczny 0 jako przycisk NO a w momencie zwarcia NC będzie miał stan logicznej 1 czyli w tym przypadku wykorzystamy makrodefinicję typu bit_is_set, czyli jeżeli rejestr PIND odczyta że bit 7 portu D ma stan wysoki to zapali nam diodę?

Podsumowując można powiedzieć że makrodefinicja typu bit_is_set będzie wykorzystywana gdy przycisk S1 będzie zwarty NC gdy będzie reagował na wysoki stan logiczny gdy będzie zasilany bezpośrednio zasilany ze źródła zasilania 5V. Natomiast makrodefinicja typu bit_is_clear będzie wykorzystywana gdy przycisk S1 w stanie zwarcia NC będzie miał stan logicznego 0 czyli w momencie gdy nie jest bezpośrednio podpięty do zasilania, aby w ogóle zaobserwować przepływ prądu na tej linii (rys.1) musimy wymusić na linii do której podpięty jest przycisk wysoki stan logiczny 1 aby w momencie wciśnięcia zaobserwować ucieczkę ładunku elektrycznego do masy.

Proszę mnie poprawić jeżeli źle myślę bądź może potraficie to prościej wytłumaczyć, będę wdzięczny za odpowiedź.

rys.1.jpg.0f0ec7a5e781c080712c9d13835a1ad7.jpg

rys.2.jpg.7a67e1e77c8aea23bc12b33dd6187462.jpg

Link do komentarza
Share on other sites

Chyba nie zamierzasz podłączyć tego tak jak to jest na rysunku?

Bo bez rezystora ograniczającego prąd dla diody, spalisz port (pin) i być może cały uC (ale nie jestem pewien z tym całym uC).

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

Chciałem zapytać o makrodefinicję typu bit_is_clear oraz bit_is_set dotyczącą obsługi przycisku wg. rys.1 oraz rys.2.

Więc tak.

- bit_is_clear(P, b) – zwróci wartość prawda (a w zasadzie zwraca wartość 1) jeśli bit o numerze b w rejestrze funkcyjnym P jest wyzerowany;

- bit_is_set(P, b) – zwróci wartość prawda (a w zasadzie zwraca wartość 1) jeśli bit o numerze bP w rejestrze funkcyjnym jest ustawiony (ma wartość 1).

cytat ze strony: http://www.glk.edu.pl/kel/programowanie_avr_w_asemblerze_i_w_c.html

Więc jeśli masz przycisk podpięty pod GND, i włączony pull-up, to możesz sprawdzić czy jest wciśnięty makrodefinicją bit_is_clear(PIND, 0). Wtedy będzie to prawda, jeżeli bit 0 w rejestrze PIND ma wartość 0, czyli jeśli nastąpiło zwarcie do masy.

Analogicznie jest z bit_is_set i przyciskiem pod VCC. Jeżeli jest wciśnięty, to na tym pinie występuje stan wysoki, więc makrodefinicja zwróci 1 (czyli prawdę).

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.