Skocz do zawartości

Połączenie ATMEGI16 ze switchem


certino

Pomocna odpowiedź

Odwrócenie diod pomogło. Aczkolwiek jest to dla mnie dziwne ale ważne że działa. Dziękuję wszystkim za pomoc. Pozdrawiam

Rozwiązanie problemu, bez zrozumienia dlaczego działa, nie wróży Ci przyszłości w tej dającej wiele satysfakcji dziedzinie.

Link do komentarza
Share on other sites

Sabre: Twoje uwagi do moich postów są niewątpliwie słuszne i zasadne. Moje powyższe argumenty nie są wyznacznikiem poprawności rozwiązania. Pozwól jednak, że obronię przytoczone przeze mnie podejście w inny sposób.

Proponuję następujące rozwiązanie:

Określenie, który przycisk został wciśnięty, odbywa się na zasadzie skanowania jak poprzednio, z tą różnicą, że port B (od PB0 do PB3) jest portem wyjściowym, a port C (od PC0 do PC3) jest portem wejściowym.

Kolejnośc skanowania jest oznaczona pogrubionymi cyframi. Kolorami zaznaczono kolejne kody skanujące:

================== 1 2 3 4

PB0 ----|-----|-----|-----|--- 0 1 1 1

PB1 ----|-----|-----|-----|--- 1 0 1 1

PB2 ----|-----|-----_----|--- 1 1 0 1

PB3 ----|-----|-----|-----|--- 1 1 1 0

_____PC0 PC1 PC2 PC3 (zczytywanie)

______1___1___1___1___1

______1___1___1___1___2

______1___1___0___1___3 <- wciśnięty przycisk w 3cim wierszu i 3ciej kolumnie

______1___1___1___1___4

Wady:

- komplikacja kodu programu

- układ "trudniejszy" do oprogramowania dla początkujących

Zalety:

- oszczędność nóżek uK (dla 16 przycisków zużywamy 8 nóżek: 4 wiersze i 4 kolumny)

- układ skalowalny (szybko można zwiększy/zmniejszyć liczbę przycisków)

- możliwość wykrycia kombinacji wciśniętych przycisków (np. inna interpretacja wciśnięcia dwóch, lub trzech przycisków jednocześnie)

Link do komentarza
Share on other sites

Drobna uwaga do Twojego schematu. Rezystory nie są potrzebne ponieważ wystarczy ustawić pull-upy na PC0-PC3.

Ponieważ odniosłem się wcześniej do Twojego układu, to spróbuję dokończyć i opisać jak ja bym to widział, ale bez rezystora i bez diod. Autorowi tematu zależało na przerwaniu, więc moja propozycja jest taka:

Oczywiście będzie to trudniejsze programowo, ale za to z przerwaniem INT czyli bez skanowania oraz bez dodatkowych elementów.

Inicjujemy obsługę klawiatury:

1. Ustawiamy PD2(INT0) jako wejście i włączamy jego pull-up

2. PC0-PC3 jako wyjścia i ustawiamy na nich 0

3. Włączamy przerwania z INT0 na opadające zbocze i globalne oczywiście także.

przerwanie(INT0){

zablokuj przerwania od INT0

zmień PD2 na wyjście i ustaw zero

zmień PC0-PC3 na wejścia i ustaw pull-upy

odczytaj PC0-PC3 <-- stan klawiszy

}

W ten sposób mamy odczytany stan klawiatury w momencie przyciśnięcia przycisku.

Teraz jedynie musimy stwierdzić, czy wszystkie przyciski zostały puszczone i ponownie zainicjować klawiaturę.

Jak to zrobić - trzeba skanować, lub odwrócić kota ogonem czyli INT0 przestawić na zbocze narastające, które pojawi się gdy klawisz zostanie puszczony.

Algorytm powyższy nie pozwala jednak na naciskanie więcej niż 1 przycisku. Ale gdyby pogłówkować, to coś by się dało wymyśleć. Poza tym rozwiązanie z diodami jakie zostało przytoczone przez autora tematu jest pod tym względem, tak samo ograniczone, czyli zakładał właśnie możliwość przyciśnięcia w tym samym momencie tylko 1 przycisku.

Oczywiście zawsze jest pytanie czy warto komplikować program?

Na to pytanie już tylko autor tematu zna odpowiedź, bo on wie, co jest dla niego ważne, a co nie.

Dodatkowo w każdym omawianym w tym temacie rozwiązaniu należy jeszcze pamiętać o: Drganiach styków

Link do komentarza
Share on other sites

Witam

Nie zakładam wciskania 2 przycisków jednocześnie, dlatego to co mam mi wystarczy. Co do drgań styków nie mam problemu są wyeliminowane programowo i dodatkowo dołożyłem ceramik przy każdym porcie do masy. Wciśnięcie przycisku powoduje 1 przerwanie więc nic nie drga.

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

... dodatkowo dołożyłem ceramik przy każdym porcie do masy. Wciśnięcie przycisku powoduje 1 przerwanie więc nic nie drga.

Czy wiesz także, o tym, że switch zwierający do masy kondensator pracuje w warunkach zwarcia i cały prąd z kondensatora płynąc przez styki klawiszy powoduje ich sukcesywne niszczenie? Zobacz przedostatni punkt w tym temacie: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

W konsekwencji, czy wiesz, że w ten sposób jest także możliwe uszkodzenie mikrokontrolera przez generowane zwarciem "przepięcia"?

Link do komentarza
Share on other sites

Jak wielka energia jest zgromadzona w kondensatorze o pojemności kilku nF naładowanym do 3,3 albo 5V? Nie pamiętam już wzorów i szczerze nie chce mi się ich szukać a tym bardziej liczyć tego, ale sądzę, że wartość prądu przekraczałaby kilkadziesiąt mA przez kilkadziesiąt ps, max kilka ns.

I jakie to groźne dla uC "przepięcia" generuje rozładowywany kondensator? Co dzieje się z napięciem i prądem i w jaki sposób wpływa to na uC?

Link do komentarza
Share on other sites

Jak wielka energia jest zgromadzona w kondensatorze o pojemności kilku nF naładowanym do 3,3 albo 5V? Nie pamiętam już wzorów i szczerze nie chce mi się ich szukać a tym bardziej liczyć tego, ale sądzę, że wartość prądu przekraczałaby kilkadziesiąt mA przez kilkadziesiąt ps, max kilka ns.

I jakie to groźne dla uC "przepięcia" generuje rozładowywany kondensator? Co dzieje się z napięciem i prądem i w jaki sposób wpływa to na uC?

Na tyle groźne, że w marcu bieżącego roku ATMEL, postanowił zmienić swoją notę AVR042 z września 2005:

http://prottoss.com/projects/ucGoZilla/ucGoZilla.files/AVR042_revC.pdf

na nową: http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf

a w niej poruszyć ten temat:

Radzę doceniać zjawiska fizyczne, które są znane od wielu lat, a jednak nie doceniane, by później nie zachodzić w głowę czemu szlag trafił mój projekt, albo czemu on ciągle się resetuje.

Link do komentarza
Share on other sites

Trochę tego nie rozumiem. Żeby zapobiec przepięciom na bliskiej zeru indukcyjności switch-a(które i tak pewnie zostałyby zgaszone przez kondensator) zalecają dodać w szereg kolejną indukcyjność?

Link do komentarza
Share on other sites

Dodając rezystor szeregowo do switcha zmniejszasz radykalnie prąd (a właściwie jego zmianę czyli di), przez co czas rozładowania kondensatora (dt) się wydłuża, co w konsekwencji prowadzi do radykalnego zmniejszenia się członu równania di/dt.

L - indukcyjność ścieżek i switcha jest stała.

W konsekwencji wielkość wygenerowanej szpilki jest KOLOSALNIE mniejsza.

Należy także pamiętać, że switch generuje, kilka drgań następujących jedno po drugim.

Link do komentarza
Share on other sites

L - indukcyjność ścieżek i switcha jest stała.

Ale dokłada się do niej kolejną indukcyjność-rezystor. A ta może być 10 czy 100x większa niż indukcyjność ścieżek i switcha. No i czy te przepięcia nie zostały bo wytłumione przez kondensator?

Link do komentarza
Share on other sites

Ale dokłada się do niej kolejną indukcyjność-rezystor. A ta może być 10 czy 100x większa niż indukcyjność ścieżek i switcha.

Moim zdaniem liczby, które podajesz są bardzo zawyżone. Zawsze możesz sprawdzić oscyloskopem i zwiększyć rezystor, by zmniejszyć prąd.

Innymi słowy, dla wzoru mniej istotna jest indukcyjność, a KOLOSALNIE istotne są di i dt.

No i czy te przepięcia nie zostały bo wytłumione przez kondensator?

Odwrotnie, To kondensator jest sprawcą tych przepięć 🙂

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.