Matrix-Tastatur 4x3 und LCD an ATMega8

Gast #1873782
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
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!!
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.