www.mikrocontroller.net

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


Autor: dacripple (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!

#include <avr/io.h>
#include "MyAvrLCD.h"
#include <util/delay.h>

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

    _delay_ms(200);
    temp=PINC;
//    lcd_write(temp);
     _delay_ms(10);
    switch(temp){
        case 1:
            zeichen = '3';
        break;
        case 2:
            zeichen = '6';
            break;
        case 4:
            zeichen = '9';
            break;
        case 8:
            zeichen= '#';
            break;
        default:
          zeichen='-';
        ;
    }

   // _delay_us(10);
    PORTB=0x00;
   // _delay_us(10);
   // PORTC=0b00100000;//2.Spalte auf 5V
  //  _delay_ms(200);
   /* temp=PINC;
    switch(temp){
        case 1:
            zeichen = '2';
            break;
        case 2:
            zeichen = '5';
            break;
        case 4:
            zeichen = '8';
            break;
        case 8:
            zeichen = '0';
            break;
        default:
          
        ;
    }

   // _delay_ms(200);
    PORTC=0b00010000;//1.Spalte auf 5V
   // _delay_us(10);
    temp=PINC;
    switch(temp){
        case 1:
            zeichen = '1';
            break;
        case 2:
            zeichen = '4';
            break;
        case 4:
            zeichen = '7';
            break;
        case 8:
            zeichen = '*';
            break;
        default:
             ;
    }
  */

    return zeichen;
}


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

  lcd_clear();
  lcd_writeText(fach);
  _delay_ms(100);
  lcd_write(number);
  while(1==1){
  
    number=which_key();
    _delay_ms(10);
    if(number!='-')
        lcd_write(number);
    _delay_ms(100);
  }


  _delay_ms(10);









  return 0;
}


Vielen Dank im Vorraus!!!

MfG

Autor: dacripple (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab noch das Schaltbild der Matrix Tastatur vergessen

Autor: dacripple (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dacripple (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: DaCripple (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PUSH

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...


> 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.