ciscoc Napisano Wrzesień 8, 2012 Udostępnij Napisano Wrzesień 8, 2012 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ź. Link do komentarza Share on other sites More sharing options...
mario246 Wrzesień 12, 2012 Udostępnij Wrzesień 12, 2012 Kolego możesz powiększyć te zdjęcia, bo nic nie widzę 🙂 Link do komentarza Share on other sites More sharing options...
ciscoc Wrzesień 19, 2012 Autor tematu Udostępnij Wrzesień 19, 2012 Rys.1 Kod do rysunku 1 Rys.2 Kod do rysunku 2 Link do komentarza Share on other sites More sharing options...
bartek1333 Wrzesień 19, 2012 Udostępnij Wrzesień 19, 2012 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 More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
ciscoc Wrzesień 19, 2012 Autor tematu Udostępnij Wrzesień 19, 2012 ja podałem przykład kolego, jeżeli potrafisz wyjaśnić zasadę obsługi przycisku to zapraszam do wypowiedzi! Link do komentarza Share on other sites More sharing options...
bartek1333 Wrzesień 19, 2012 Udostępnij Wrzesień 19, 2012 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 More sharing options...
ciscoc Wrzesień 23, 2012 Autor tematu Udostępnij Wrzesień 23, 2012 dziękuję za pomoc! Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »