Matrix-Tastatur 4x3 und LCD an ATMega8

Gast #1873782
Lesenswert?

Hallo,

hab mir vor kurzem ein MyAVR-Board mit LCD-Addon besorgt, und möchte 
damit eine 4x3 Matrix Tastatur auslesen, und den eingetippten Wert dann 
im LCD ausgeben.

Der Schaltplan der Tastatur und des MyAVR Boards mit LCD-Addon ist im 
Anhang.

Habe die Spalten (X1-X3) als Ausgang (PINC4, PINC5, PINB5) 
angeschlossen.
Die Zeilen (Y1-Y4) habe ich als Eingang( PINC0-PINC3) angeschlossen.

Das Programm soll jetzt abwechselnd die 3 Spalten mit 5V versorgen,
wenn jetzt eine Taste getippt wird, soll einer der Eingänge HIGH Signal 
bekommen.

Mein Problem:
Irgendwie wird das Signal nicht richtig ausgelesen. Bekomme mit dem 
angehängten CODE nur immer eine "3" aufs LCD! Selbst wenn ich die 
Tastatur abklemme, und den Kontakt(PINB5-> PINC4 oder PINC1 mit einem 
Stück Draht überbrücke!

Hier mein CODE: Wollte es erstmal nur mit der 3.Spalte testen!!
1
#include <avr/io.h>
2
#include "MyAvrLCD.h"
3
#include <util/delay.h>
4

5
char which_key(){
6
    uint8_t temp=0;
7
    char zeichen='-';
8
    //Dritte Spalte auf 5V
9
    PORTB=0b00100000;
10

11
    _delay_ms(200);
12
    temp=PINC;
13
//    lcd_write(temp);
14
     _delay_ms(10);
15
    switch(temp){
16
        case 1:
17
            zeichen = '3';
18
        break;
19
        case 2:
20
            zeichen = '6';
21
            break;
22
        case 4:
23
            zeichen = '9';
24
            break;
25
        case 8:
26
            zeichen= '#';
27
            break;
28
        default:
29
          zeichen='-';
30
        ;
31
    }
32

33
   // _delay_us(10);
34
    PORTB=0x00;
35
   // _delay_us(10);
36
   // PORTC=0b00100000;//2.Spalte auf 5V
37
  //  _delay_ms(200);
38
   /* temp=PINC;
39
    switch(temp){
40
        case 1:
41
            zeichen = '2';
42
            break;
43
        case 2:
44
            zeichen = '5';
45
            break;
46
        case 4:
47
            zeichen = '8';
48
            break;
49
        case 8:
50
            zeichen = '0';
51
            break;
52
        default:
53
          
54
        ;
55
    }
56

57
   // _delay_ms(200);
58
    PORTC=0b00010000;//1.Spalte auf 5V
59
   // _delay_us(10);
60
    temp=PINC;
61
    switch(temp){
62
        case 1:
63
            zeichen = '1';
64
            break;
65
        case 2:
66
            zeichen = '4';
67
            break;
68
        case 4:
69
            zeichen = '7';
70
            break;
71
        case 8:
72
            zeichen = '*';
73
            break;
74
        default:
75
             ;
76
    }
77
  */
78

79
    return zeichen;
80
}
81

82

83
int main( void )
84
{  char number='-';
85
  _delay_ms(10);
86
  lcd_init();
87
  _delay_ms(10);
88
  DDRC=0b11110000;//PINS C0-C3 input, Rest Output
89
  DDRB=0b11111111;//Alle B Pins OUtput
90

91
  lcd_clear();
92
  lcd_writeText(fach);
93
  _delay_ms(100);
94
  lcd_write(number);
95
  while(1==1){
96
  
97
    number=which_key();
98
    _delay_ms(10);
99
    if(number!='-')
100
        lcd_write(number);
101
    _delay_ms(100);
102
  }
103

104

105
  _delay_ms(10);
106

107

108

109

110

111

112

113

114

115
  return 0;
116
}


Vielen Dank im Vorraus!!!

MfG
Angehängte Dateien:
Gast #1874951
Lesenswert?

Peter Dannegger schrieb:
> dacripple schrieb:
>
>> Das Programm soll jetzt abwechselnd die 3 Spalten mit 5V versorgen,
>
>> wenn jetzt eine Taste getippt wird, soll einer der Eingänge HIGH Signal
>
>> bekommen.
>
>
>
> Und was bekommt er von woher, wenn die Taste nicht gedrückt ist?
>
>
>
>
>
> PeterBeitrag melden | Bearbeiten | Löschen |

Eben nichts, könnte es vielleicht daran liegen, dass der µC kein 
"sauberes" LOW-Signal bekommt?? Hab mal mit dem Multimeter gemessen, und 
die Werte kamen mir für LOW-Signal irgendwie zu hoch vor!(1,0 V oder 
so...) Wie lässt sich das ändern?
Sorry, für die Frage kenn mich zwar schon etwas mit Programmierung aus, 
aber ist mein erstes µC Projekt!!
#1877255
Lesenswert?

dacripple schrieb:
> Eben nichts, könnte es vielleicht daran liegen, dass der µC kein
> "sauberes" LOW-Signal bekommt??

Aus der Luft kommt es bestimmt nicht, Du mußt es anlegen:


http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Eing.C3.A4nge_.28Wie_kommen_Signale_in_den_.C2.B5C.29


> Sorry, für die Frage kenn mich zwar schon etwas mit Programmierung aus,
> aber ist mein erstes µC Projekt!!

Hat weniger mit SW zu tun, sondern mit Elektronik.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren