Abfrage einer 4*3 Tastatur

OP #1090277
Lesenswert?

Hallo zusammmen ,

ich habe vor 3 Tagen erst mit dem Programmieren von AVR's in  Assembler 
begonnen und nun suche ich Hilfe.
Bei einem größeren Projekt ( Röhrenprüfgerät )möchte ich mit einem 
Mikrocontroller div. Mess. und Steuerungen durchführen .Da ich absoluter 
Neuling auf diesem Gebiet bin, habe ich die einzeln  Aufgaben erst 
einmal auf einzelne Programme verteilt, die ich später wenn alle einzeln 
laufen zu einem Programm zusammen geführt werden sollen . So ist der 
große Plan ( Bernd hat einen Plan ) .
Zur Zeit arbeite ich mit einem ATMega  16 und mySmartUSB MK2 als 
Programmer und AVR-Studio 4 Der Aufbau ist noch auf Lochraster-Platine.
Einige Programmteile sind schon fertig und laufen prima , LCD-Anzeige 
4*20 mit div. „Menu-Einträgen“ ; Steuerung div. Relais über Taster bzw. 
über Programm. Die Steuerung der Relais soll in einer nächsten Stufe 
über I2C erfolgen , da über 60 -65 Relais angesteuert werden müssen.
Nun zu meinem Problem : Für die Eingabe verschiedener Werte möchte ich 
eine 4*3 Tasten-Matrix verwenden  .Geht zu Zeit nur teilweise . Die 
Tastenreihen  1 , 4 , 7 , * und  2 , 5 , 8 , 0 funktionieren prima (zur 
Zeit noch ohne entprellen , kommt noch ).Bei der Reihe 3 , 6 , 9 , # 
wird ein Tastenanschlag festgestellt , aber ständig der Code  A7 im 
Display angezeigt , egal was ich am Code ändere .Meine Frage : Was ist 
am Code falsch oder bin ich zu blöd ???
Wäre schön wenn jemand mal sich die Sache anschauen würde und mir meine 
Fehler zeigen würde.Wie schon geschrieben , ich bin erst 3 Tage dabei.
Mit freundlichem Gruß
Bernd
Angehängte Dateien:
OP #1090395
Lesenswert?

Hallo Otto ,

bei dem ersten Start bleibt das Feld leer bis die erste Taste 
(1,4,7,2,5,8 ) betätigt wird.
Der richtige Code bleibt bis zur nächsten Tastenbetätigung im Display 
stehen.
Wenn ich von zB von 2 auf 5 drücke,dann erscheint A7 wenn ich dann zB 
die 8 drücke erscheind die 8 und bleibt dort auch stehen bis eine andere 
Taste gedrückt wird.

Gruß
Gast #1090412
Lesenswert?

Hallo Bernd,

1. räume Dein Programm ein wenig auf - dann ist der Fehler einfacher zu 
finden

2.ori temp4,0b11110000   ; obere Bits maskieren
  cpi temp4,0b11111111   ; ein Key in dieser Spalte?
  brne KeyRowFound     ; Spalte gefunden

ein OR maskiert keine Bits, sondern "odert" welche dazu

kommt ein Bit hinzu, wird die Bedingung nie erfüllt

Otto
OP #1090684
Lesenswert?

Hallo zusammen,

habe nach langen suchen den Fehler endlich gefunden.Die Spalte mit den 
Tasten 3,6,9,# konnte nie zur Anzeige kommen,da das durch einen 
Sprung-Befehl verhindert wurde.
Kleiner Fehler,große Wirkung.
Nun muß ich noch die Entprellung hinbekommen.
Geht da eigentlich auch die "Bulletproof" Routine ????????????

Danke allen die mir geholfen haben.

Auszug aus dem Programm :

  in  temp4,tasteInp   ; letzte Zeile lesen
  ori temp4,0b11110000   ; obere Bits maskieren
  cpi temp4,0b11111111   ; ein Key in dieser Spalte?
???  brne keinetaste     ; nicht gefunden
KeyRowFound:       ; Spalte ist gefunden
  lsr temp4       ; schiebe Bit 0 in das Carry-Flag
  brcc KeyFound
  adiw ZL,1       ; zeige auf naechsten Tastencode
  rjmp KeyRowFound     ; weiter schieben

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