Forum: Mikrocontroller und Digitale Elektronik Abfrage einer 4*3 Tastatur


von Bernd F. (berndhf)


Angehängte Dateien:

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Muß es nicht:

adiw ZH:ZL, 4 heißen?

von Otto (Gast)


Lesenswert?

ist das so richtig:

  ldi temp4,0b00011111   ; PB4 = 0
  out tasteOut,temp4

Otto

von Bernd F. (berndhf)


Lesenswert?

Danke für die schnellen Hinweise.
Werde es gleich mal austesten und gebe dann wieder Antwort

von Bernd F. (berndhf)


Lesenswert?

Hallo ,

 Travel Rec.

leider hat das auch nicht geholfen.Es erscheint noch immer A7 in der 
Anzeige


Otto ,

richtig,war ein Fehler von mir.Aber auch hier keine Änderung,in der 
Anzeige steht immer noch A7

Gruß Bernd

von Otto (Gast)


Lesenswert?

Was wird angezeigt, wenn Du keine Taste betätigst ?

Otto

von Bernd F. (berndhf)


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ß

von Otto (Gast)


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

von Bernd F. (berndhf)


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

von Peter D. (peda)


Lesenswert?

Bernd Freytag wrote:
> Nun muß ich noch die Entprellung hinbekommen.
> Geht da eigentlich auch die "Bulletproof" Routine ????????????

Ja geht, wenn man jede Taste in ein Bit umwandelt:

Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"


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.