[avr-gcc] Porty i klawiatura

Apr 08, 2007 2 Replies

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>


DDR(A) &= ~(1 << 7); //PA7

PORT(A) |= 1 << 7; // PA7

if (!(PIN(A) & (1 << 7))) tmp = 1; //

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...

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required