Forum: Mikrocontroller und Digitale Elektronik Matrix-Tastatur 4x3 und LCD an ATMega8


von dacripple (Gast)


Angehängte Dateien:

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

von dacripple (Gast)


Angehängte Dateien:

Lesenswert?

Hab noch das Schaltbild der Matrix Tastatur vergessen

von dacripple (Gast)


Lesenswert?

Liegt es möglicherweise am Anschluss des LCD´s?
Wird für die Matrix Tastatur ein kompletter PORT benötigt?

von Peter D. (peda)


Lesenswert?

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?


Peter

von dacripple (Gast)


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

von DaCripple (Gast)


Lesenswert?

PUSH

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.