Hej,
Czy w przyapdku nacisniecia 2 lub wiecej przyciskow w jednym rzedzie na klawiaturze matrycowej nastepuje zwarcie ktore moze usmazyc port tak jak to pokazane jest na rysunku?
http://extremeelectronics.co.in/avrtuto ... short2.gif
AVR - klawiatura matrycowa
Tez mi sie tak wydawalo, po co wiec strasza w tym artykule:
http://extremeelectronics.co.in/avr-tut ... -tutorial/
http://extremeelectronics.co.in/avr-tut ... -tutorial/
Do obsługi portów są 3 rejestry:
PIN - rejestr wejściowy (odczyt stanu na pinie uC)
PORT - rejestr wyjściowy (ustawienie stanu na pinie uC)
DDR - rejestr kierunku (czy wyjście na pinie uC)
Jeśli ustawisz pin uC jako wyjście, stan na 1 (DDR=1 i PORT=1)
a zewrzesz z zewnątrz do 0 to bufor moze się upalić.
Do klawiatury matrycowej ustawiaj stan wysoki pullupem - pin jako wejście i pullup 1 (DDR=0 i PORT=1)
Algorytm skanowania klawiatury matrycowej:
1. Inicjlizacja
ustaw linie WIERSZY jako WEJSCIA;
ustaw rezystory podciagajace na liniach WIERSZY;
ustaw linie KOLUMN jako WYJSCIA;
ustaw stan NISKI na wszystkich liniach KOLUMN;
2. Skanowanie
l_wierszy := 0;
for (wiersz := 1 to liczba_wierszy) do
if (linia wiersz w stanie niskim) then
begin
l_wierszy := l_wierszy + 1;
w_wiersz := wiersz
end
3. Skanowanie, cd.
ustaw linie KOLUMN jako WEJSCIA;
ustaw rezystory podciagajace na liniach KOLUMN;
ustaw linie WIERSZY jako WYJSCIA;
ustaw stan NISKI na wszystkich liniach WIERSZY;
l_kolumn := 0;
for (kolumna := 1 to liczba_kolumn) do
if (linia kolumny w stanie niskim) then
begin
l_kolumn := l_kolumn + 1;
w_kolumna := kolumna
end
4. Odczytanie wyniku skanowania
if (l_wierszy = 1 and l_kolumn = 1) then
obsluz_zdarzenie_klawisz(w_kolumna, w_wiersz);
Uff - i to tyle
PIN - rejestr wejściowy (odczyt stanu na pinie uC)
PORT - rejestr wyjściowy (ustawienie stanu na pinie uC)
DDR - rejestr kierunku (czy wyjście na pinie uC)
Jeśli ustawisz pin uC jako wyjście, stan na 1 (DDR=1 i PORT=1)
a zewrzesz z zewnątrz do 0 to bufor moze się upalić.
Do klawiatury matrycowej ustawiaj stan wysoki pullupem - pin jako wejście i pullup 1 (DDR=0 i PORT=1)
Algorytm skanowania klawiatury matrycowej:
1. Inicjlizacja
ustaw linie WIERSZY jako WEJSCIA;
ustaw rezystory podciagajace na liniach WIERSZY;
ustaw linie KOLUMN jako WYJSCIA;
ustaw stan NISKI na wszystkich liniach KOLUMN;
2. Skanowanie
l_wierszy := 0;
for (wiersz := 1 to liczba_wierszy) do
if (linia wiersz w stanie niskim) then
begin
l_wierszy := l_wierszy + 1;
w_wiersz := wiersz
end
3. Skanowanie, cd.
ustaw linie KOLUMN jako WEJSCIA;
ustaw rezystory podciagajace na liniach KOLUMN;
ustaw linie WIERSZY jako WYJSCIA;
ustaw stan NISKI na wszystkich liniach WIERSZY;
l_kolumn := 0;
for (kolumna := 1 to liczba_kolumn) do
if (linia kolumny w stanie niskim) then
begin
l_kolumn := l_kolumn + 1;
w_kolumna := kolumna
end
4. Odczytanie wyniku skanowania
if (l_wierszy = 1 and l_kolumn = 1) then
obsluz_zdarzenie_klawisz(w_kolumna, w_wiersz);
Uff - i to tyle
Do zabezpieczenia przed wciskaniem kilku przycisków naraz dobrze nadają się zwykłe diody. Najlepiej to przedstawia schemat z tego pliku: http://sklep.avt.pl/photo/_pdf/AVT2250.pdf
Na stronie 4 masz to pokazane.
Na stronie 4 masz to pokazane.