Frage zu Matrix3x4.c

Gast #2357470
Lesenswert?

Hallo Leute,

Ich möchte u.a. gerne eine 3x4 Matrix Tastatur mit meinem Atmega8 zu 
verbinden.

Als Denkanstoß dient mir dabei ein C-Code hier aus dem Forum.

http://www.mikrocontroller.net/attachment/48476/matrix3x4.c

Dazu habe ich ein paar Fragen und würde mich freuen, wenn ihr mir helfen 
könntet.

1. u8 findet die selbe Verwendung wie unsigned char. richtig?

2. Wie binde ich diese Datei in meinen C-Code ein? In "int main" oder 
gehört das noch davor?

3. Wie kann ich die eingegebene Zahl auf einem Display darstellen?
mit lcd_string(col-row);?

Vielen Dank für eure Mühe

Gruß Micha
#2357494
Lesenswert?

Michael Lambertz schrieb:

> 1. u8 findet die selbe Verwendung wie unsigned char. richtig?

In dem Fall ist es besser das u8 gegen ein char auszutauschen. Schau dir 
den Arrayinhalt an. Lauter Character. Also sollte man auch den richtigen 
Datentyp dafür nehmen. Eben char

> 2. Wie binde ich diese Datei in meinen C-Code ein? In "int main" oder
> gehört das noch davor?

Kopier den Inhalt vor deine main.
Das ist eine Funktion, die aufgerufen werden will.

> 3. Wie kann ich die eingegebene Zahl auf einem Display darstellen?
> mit lcd_string(col-row);?

No.
VOn der Funktion kriegst du offenbar eine Nummer zurück. Diese Nummer 
ist die Nummer der Taste. Aus dem MXKEY_TAB Array kriegst du dann direkt 
das zugehörige Zeichen als Character. Den mann dann natürlich ausgeben 
kann.

  uint8_t keyNr = keyscan();
  lcd_putc( MXKEY_TAB[keyNr] );
#2357513
Lesenswert?

Wart mal.
Der Kommentar hier
1
     return col - row;               // 1..12 = key

macht mich stutzig.
Wenn der stimmt, dann ist die Verwendung so gedacht
1
  uint8_t keyNr = keyscan();
2
  if( keyNr != 0 )
3
    lcd_putc( MXKEY_TAB[keyNr - 1] );


Steht denn davon nichts im Begleittext zum Artikel wo du den Code 
herhast?
Gast #2360060
Lesenswert?

Hallo,

Ich hab meinen C-Code dementsprechend umgeschrieben. (s.Anhang)

Leider klappt die LCD-Ausgabe nicht so recht.
Auf dem kompletten Display tauchen nur ungewöhnliche Zeichen auf.

Der Mikrocontroller erkennt zwar einen Tastendruck, kann den aber nicht 
verwerten, bzw. auf dem Display darstellen und gibt ein anderes Zeichen, 
anstatt einer Ziffer aus.

Vielleicht weiß einer von euch, wo ich den Fehler gemacht habe.

Danke und Gruß

Michi
Angehängte Dateien:
#2360085
Lesenswert?

Probier doch mal das hier aus
1
int main()
2
{
3

4
int main (void)
5
{
6
  char buffer[20];
7
  uint8_t keyNr;
8

9
  lcd_off();                   // LCD Reset
10
  lcd_init();                  // Initialisierung des LCDs
11
    
12
  while( 1 )
13
  {
14
    keyNr = keyscan();
15

16
    if( keyNr != 0 )
17
    {
18
      lcd_setcursor( 0, 1 );
19
      sprintf( buffer, "Code %02d, Zeichen %c", (int)keyNr, (char)MXKEY_TAB[keyNr - 1] );
20
      lcd_string( buffer );
21
    }
22
  }
23
}
#2360108
Lesenswert?

Michael Lambertz schrieb:
> Klappt leider immernoch nicht :(
Was heißt: klappt immer noch nicht.

Welche Zahlen stehen den für 'Code' dort? Da dürfen nur zahlen von 1 bis 
12 auftauchen.

> Ich werd mir wohl einen anderen Lösungsweg suchen müssen.

Wie wärs mit: den vorhandenen Code reparieren? Bisweilen sollen 
Programmierer sowas sogar machen! Oder kaufst du immer gleich ein neues 
Auto, wenn die Radkappen schmutzig sind? Vorausstzung ist natürlich, 
dass derjenige, der am Motor rumschraubt zumindest weiß, wie rum man 
einen Schraubendreher anfasst.
Gast #2360145
Lesenswert?

Karl Heinz Buchegger schrieb:
> Was heißt: klappt immer noch nicht.
>
> Welche Zahlen stehen den für 'Code' dort? Da dürfen nur zahlen von 1 bis
> 12 auftauchen.

Die LCD-Ausgabe klappt leider immer noch nicht.
Jetzt tauchen keine Zeichen mehr auf, sondern alle Felder des Displays 
sind nun komplett schwarz. Tastendruck wird auch nicht mehr erkannt.

Hab schon verschiedene Befehle für die LCD-Ausgabe versucht.
Gast #2360235
Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich bin bisher eigentlich schon davon ausgegangen, dass du dein LCD
> unter Kontrolle hast, wenn du nach einer Tastatur-Matrix frägst.

Bisher hat die Anzeige auf dem LCD auch hervorragend funktioniert.
Eine AD-Wandlung mit Anzeige der Messergebnisse funktionierte bisher 
problemlos.

Hast du möglicherweise eine Erklärung, warum das oben beschriebene 
Ereignis beim Display eintreten kann?
Gast #2361000
Lesenswert?

Du hast Recht, Karl Heinz.

In der lcd.h Datei hatte ich einige Ports gemeinsam sowohl für das LCD 
als auch für die Tastatur konfiguriert, was ich nicht berücksichtigt 
habe.

Nach tagelangem Suchen und Rumprobieren habe ich den vermeintlich 
"einfachen" Fehler also doch noch gefunden.

Danke...

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