www.mikrocontroller.net

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


Autor: Bernd Freytag (berndhf)
Datum:
Angehängte Dateien:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muß es nicht:

adiw ZH:ZL, 4 heißen?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist das so richtig:

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

Otto

Autor: Bernd Freytag (berndhf)
Datum:

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

Autor: Bernd Freytag (berndhf)
Datum:

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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was wird angezeigt, wenn Du keine Taste betätigst ?

Otto

Autor: Bernd Freytag (berndhf)
Datum:

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

Autor: Otto (Gast)
Datum:

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

Autor: Bernd Freytag (berndhf)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

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.