Gwoli wyjaśnienia - ów "duś" to przełącznik monostabilny, normalnie otwarty.
Jest sobie pin procesora, który może być wyjściem cyfrowy (w stanie niskim i wysokim), wejściem cyfrowym (o wysokiej impedancji lub z podciągnięciem do zasilania przez ~50k) lub wejściem "analogowym" (odczytywanym przez przetwornik analogowo-cyfrowy).
Zadanie polega na podłączeniu do niego "dusia" i LED-a w taki sposób, żeby mikrokontroler mógł niezależnie odczytywać dusia i zapalać LEDa a najlepiej, żeby naciśnięcie dusia nie wpływało na stan LED-a, ale to nie jest najważniejsze.
Jakieś błyskotliwe propozycje?
Zakładam, że tryb pracy owego pinu będzie z dużą częstotliwością przełączany między wyjściem na LEDa, a wejściem podciągniętym do jedynki.
Nie chce mi się rysować schematu, to go opiszę. Do pinu jest podłączony LED przez swój opornik i równolegle z LEDem i opornikiem duś przez swój własny opornik. LED i duś idą do masy. Teraz, wszystkie przypadki:
- LED zgaszony, duś zwolniony. Dioda zasilana z 5V przez opór >50k będzie raczej słabo świecić, albo i nie zapali się wcale.
- LED zgaszony, przycisk wciśnięty. Jeżeli opornik przy przycisku będzie rzędu kilku kiloomów, napięcie na diodzie i wejściu spadnie poniżej 1V, dioda będzie zgaszona, a procesor powinien uznać stan 0.
- LED świeci, przycisk zwolniony. Dioda świeci, bo co ma innego robić?
- LED świeci, duś wciśnięty. Wyjście procesora ma raczej mały opór, więc wciśnięcie przycisku nie powinno powodować ściemniania LEDa.
A gdyby się okazało, że LED ma za małe napięcie przewodzenia i procesor cały czas uznaje, że duś jest wciśnięty, to z LEDem trzeba dać szeregowo jakąś inną diodę. Tylko nie bijcie, jak się gdzieś pomyliłem.
Coś w tym jest, ale muszę to sobie rozrysować. Spadek napięcia na LED nie jest istotny, bo mogę to wejście odczytywać przetwornikiem analogowo-cyfrowym.
Podłączone to jest do pinu analogowego (ADC), w skanuj klawiaturę konfigurując jako wejście ADC, jeżeli odczytasz >>0V to znaczy że nic sensownego się nie dzieje, LED zgaszony, skanujesz następny klawisz. Jeżeli ktoś pstryknie, to zaświeci leda, a ty masz czas na przeskanowanie ADC i sprawdzenie czy jest tam coś bliskiego 0V, jeżeli tak to przełączysz pin na cyfrowe wyjście, zaświecając Leda. W następnym cyklu, znowu przełączasz się na odczyt ADC, nikt nie zauważy, że dioda nie świeci, a masz czas na odczytanie klawiatury i tak w kółko.
Trochę zagmatwane, ale nie chciałeś prostego rozwiązania.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
I ten układ wykorzystam(y). Rezystor R1 będzie trochę mniejszy, żeby zwykły LED też zaświecił. R2 jest zbędny, bo pin nigdy nie będzie ustawiany jako wyjście w stanie wysokim. Odczyt przez ADC nie będzie konieczny, bo próg przełączania wynosi około 1.6V (+/-0.1V histerezy). Tutaj masa będzie "czysta" a stan wysoki ~3V lub nawet więcej, jeśli załączę wewnętrzne podciągnięcie. Dzięki!
Nagrody nie będzie, bo to do Twojego urządzenia.
A nie będzie przypadkiem tak, że S1 ma wpływ na stan diody? Kiedy procesor chce zgasić diodę, podaje na wyjście 5V. Wtedy, kiedy przycisk jest zwolniony, jest ok, ale wciśnięcie przycisku spowoduje podanie masy na katodę diody i jej zapalenie...
Nie, procesor nigdy nie wystawia "1" na wyjściu dopuszczalne są tylko dwa stany wyjście otwarty dren i wejście z podwieszeniem. Jeżeli dioda świeci - wyjście wybrane, naciśnięcie przycisku nic nie zmienia, jeżeli dioda jest zgaszona, a naciśniesz przycisk to zaświeci, a procesor ma to wychwycić i podtrzymać. Trochę jest z tym zabawy programowej...
Krzysiek16 pisze:[...]W temacie było napisane tylko, że najlepiej, żeby przycisk i dioda nie wpływały na siebie.
Zgadza się, ale napisałem też, że "to nie jest najważniejsze". Gdyby faktycznie duś nie mógł wpływać na LED, to zastosowałbym Twoją propozycję, ale skoro nie ma to większego znaczenia, można zaoszczędzić trochę rezystorów - w układzie będzie 7 takich zestawów LED+duś.