AVR - klawiatura matrycowa

Jesli jesteś początkującym elektronikiem, to tu z pewnością znajdziesz pomoc. Miejsce dobre do dyskusji nad podstawami elektroniki w zakresie teorii i praktyki.
ODPOWIEDZ
Awatar użytkownika
Amugilap
Użytkownik
Posty: 480
Rejestracja: 19 cze 2011, 9:28
Lokalizacja: UK

AVR - klawiatura matrycowa

Post autor: Amugilap » 22 maja 2012, 16:33

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

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 22 maja 2012, 16:39

Stan wysoki należy ustawiać poprzez podciągnięcie przez wewnętrzny rezystor (pull-up).
Wtedy nic się nie upali.

Awatar użytkownika
Amugilap
Użytkownik
Posty: 480
Rejestracja: 19 cze 2011, 9:28
Lokalizacja: UK

Post autor: Amugilap » 22 maja 2012, 16:50

Tez mi sie tak wydawalo, po co wiec strasza w tym artykule:
http://extremeelectronics.co.in/avr-tut ... -tutorial/

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 22 maja 2012, 17:20

W artykule dobrze ostrzegają, długotrwałe zwarcie na portach może uszkodzić procesor.
Choć praktyka pokazuje że 2s zwarcia pinu do zasilania nie robi na procesorze wrażenia.

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 22 maja 2012, 17:35

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 :-)

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 22 maja 2012, 18:54

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.

ODPOWIEDZ