RTV forum PL | NewsGroups PL

Jak poprawnie podłączyć klawiaturę do ATMega32 z wyświetlaczem LCD HD44780?

[avr-gcc] Porty i klawiatura

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie podłączyć klawiaturę do ATMega32 z wyświetlaczem LCD HD44780?

Saper/nolin11
Guest

Sun Apr 08, 2007 8:42 pm   



Witam,
Podłączyłem klawiaturę do M32 o 19 przyciskach podłączoną tak:
PA0 - col1
PB0 - col2
PB1 - col3
PB2 - col4
PB3 - row1
PB4 - row2
PB5 - row3
PB6 - row4
PB7 - row5
I na porcie A mam też LCD (klasy hd44780 4bit sterow.) (RS=PA1,
EN=PA2,D4-D7=PA3-PA6)
I o ile skanowanie kolumn z portu B działa bardzo ładnie to gdy chce
sprawdzić kolumnę na PA0 to mi jej nie czyta :/
Wklejam kawałek kodu dla jednego wiersza:
<code>
uint8_t tmp=255;

// skanowanie kolumnowe
DDR(PORT_ROW) |= 1 << KBD_ROW1 | 1 << KBD_ROW2 | 1 << KBD_ROW3 | 1 <<
KBD_ROW4 | 1 << KBD_ROW5;
PORT(PORT_ROW) |= 1 << KBD_ROW1 | 1 << KBD_ROW2 | 1 << KBD_ROW3 | 1 <<
KBD_ROW4 | 1 << KBD_ROW5;

DDR(PORT_COL1) &= ~(1 << KBD_COL1);
DDR(PORT_COL2) &= ~(1 << KBD_COL2);
DDR(PORT_COL3) &= ~(1 << KBD_COL3);
DDR(PORT_COL4) &= ~(1 << KBD_COL4);

PORT(PORT_COL1) |= 1 << KBD_COL1;
PORT(PORT_COL2) |= 1 << KBD_COL2;
PORT(PORT_COL3) |= 1 << KBD_COL3;
PORT(PORT_COL4) |= 1 << KBD_COL4;

// Wiersz 1
PORT(PORT_ROW) &= ~(1 << KBD_ROW1);
// sprawdzanie kolumn
if (!(PIN(PORT_COL1) & (1 << KBD_COL1))) tmp = 1;
if (!(PIN(PORT_COL2) & (1 << KBD_COL2))) tmp = 2;
if (!(PIN(PORT_COL3) & (1 << KBD_COL3))) tmp = 3;
if (!(PIN(PORT_COL4) & (1 << KBD_COL4))) tmp = 10; // [ENTER]
PORT(PORT_ROW) |= 1 << KBD_ROW1;
// Wiersz 2
[...]
</code>


--
Saper/nolin11
majl:nolin11_USUN_TO_@interia.pl
gg:4476700

Saper/nolin11
Guest

Mon Apr 09, 2007 10:53 am   



Saper/nolin11 wrote:
Quote:
Witam,
Podłączyłem klawiaturę do M32 o 19 przyciskach podłączoną tak:
PA0 - col1
PB0 - col2
PB1 - col3
PB2 - col4
PB3 - row1
PB4 - row2
PB5 - row3
PB6 - row4
PB7 - row5
I na porcie A mam też LCD (klasy hd44780 4bit sterow.) (RS=PA1,
EN=PA2,D4-D7=PA3-PA6)
I o ile skanowanie kolumn z portu B działa bardzo ładnie to gdy chce
sprawdzić kolumnę na PA0 to mi jej nie czyta :/
Wklejam kawałek kodu dla jednego wiersza:
code
uint8_t tmp=255;

// skanowanie kolumnowe
DDR(PORT_ROW) |= 1 << KBD_ROW1 | 1 << KBD_ROW2 | 1 << KBD_ROW3 | 1
KBD_ROW4 | 1 << KBD_ROW5;
PORT(PORT_ROW) |= 1 << KBD_ROW1 | 1 << KBD_ROW2 | 1 << KBD_ROW3 | 1
KBD_ROW4 | 1 << KBD_ROW5;

DDR(PORT_COL1) &= ~(1 << KBD_COL1);
DDR(PORT_COL2) &= ~(1 << KBD_COL2);
DDR(PORT_COL3) &= ~(1 << KBD_COL3);
DDR(PORT_COL4) &= ~(1 << KBD_COL4);
DDR(A) &= ~(1 << 7); //PA7


Quote:

PORT(PORT_COL1) |= 1 << KBD_COL1;
PORT(PORT_COL2) |= 1 << KBD_COL2;
PORT(PORT_COL3) |= 1 << KBD_COL3;
PORT(PORT_COL4) |= 1 << KBD_COL4;
PORT(A) |= 1 << 7; // PA7


Quote:

// Wiersz 1
PORT(PORT_ROW) &= ~(1 << KBD_ROW1);
// sprawdzanie kolumn
if (!(PIN(PORT_COL1) & (1 << KBD_COL1))) tmp = 1;
if (!(PIN(A) & (1 << 7))) tmp = 1; //


Quote:
if (!(PIN(PORT_COL2) & (1 << KBD_COL2))) tmp = 2;
if (!(PIN(PORT_COL3) & (1 << KBD_COL3))) tmp = 3;
if (!(PIN(PORT_COL4) & (1 << KBD_COL4))) tmp = 10; // [ENTER]
PORT(PORT_ROW) |= 1 << KBD_ROW1;
// Wiersz 2
[...]
/code

Teraz dziwniejsze.... Połączyłem PA0 z PA7 i dodałem sprawdzanie PA7 z
identycznym wynikiem jak dla pinu PA0 i działa :/ może ktoś się spotkał z
czymś takim i udało mu się to rozwiązać?? Czy odpowiedz jest taka sama jak
dla anomalii w trójkącie bermudzkim? :)


--
Saper/nolin11
majl:nolin11_USUN_TO_@interia.pl
gg:4476700

EM
Guest

Tue Apr 10, 2007 2:51 pm   



Quote:

Teraz dziwniejsze.... Połączyłem PA0 z PA7 i dodałem sprawdzanie PA7 z
identycznym wynikiem jak dla pinu PA0 i działa :/ może ktoś się spotkał z
czymś takim i udało mu się to rozwiązać?? Czy odpowiedz jest taka
sama jak
dla anomalii w trójkącie bermudzkim? :)


Witaj

Może jakieś kwestie czasowe.
Ja w podobnej procedurze między ustawieniem stanu, a sprawdzaniem czy
nie ma klawisza, dawałem jakieś minimalne opóźnienie.
Może dodatkowe sprawdzanie PA7 właśnie to spowodowało...
--
Pozdr
EM

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie podłączyć klawiaturę do ATMega32 z wyświetlaczem LCD HD44780?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map