Problem mit Tastatur für Codeeingabe bei Alarmanlage

OP #1179919
Sehr geehrte Forenkollegen,

ich arbeite nun schon unzählige stunden an dem problem, dass ich in AVR 
mit einem ATMEGA32 eine Tastaturfunktion für eine Aktivierung und 
Deaktivierung einer Alarmanlage zusammenkriege . Allerdings will es 
einfach nicht funktionieren .
Mein Wunsch wäre, dass die Tastatur immer abgefragt wird und sobald 4 
zeichen erreicht sind, der eingegebene Code mit einem Vorgegebenem 
verglichen wird.
Ist der Code nicht gleich, so funktioniert die Alarmanlage, bei 
Erfüllung des Vergleichs ist sie deaktiviert. Dies wird zusätzlich durch 
eine Duo-LED an PORTD signalisiert.
Wenn mir doch bitte irgendwer einen Ratchlag geben könnte? Ich wäre euch 
sehr dankbar darum.

MfG Andreas
Angehängte Dateien:
Moderator Persönliche Seite #1180277
Du hast es doch selbst schon geschrieben:
1
//Entprellung 10ms einbauen
Vorher braucht man über nichts anderes zu diskutieren.

Ganz davon abgesehen, du hast zwar prima beschrieben, was du haben
willst, aber nicht, was die Differenz deiner derzeitigen Implemen-
tierung zu deiner Zielvorstellung ist.
OP #1181202
hallo,

danke schon mal für die bisherigen antworten!
das genaue problem ist, dass die Tastatur einfach nicht funktioniert zur 
Codeeingabe. vor allem an der richtigen syntax des Unterprogramms 
(Code_Eingabe()) zur Code-Überprüfung zweifle ich.
die entprellung hab ich nun eingebaut mit einem delay (util/delay.h ist 
ja schon in der LCD.h definiert).
anbei ist mein neuer quellcode. dass der timer zurzeit umsonst ist weiß 
ich.

bitte seht euch den Code einmal an, speziell das Unterprogramm. Bin um 
jeden Ratschlag froh den ich bekomme.

MfG Andreas
Angehängte Dateien:
#1181705
3 Probleme, die mir auffallen:

1. keine Kommentare

2. Du willst einzelne Tasten prüfen, vergleichst aber immer den ganzen 
Port.
Hier mal eine funktionierende Scanroutine:
1
#include <avr\io.h>
2

3
typedef unsigned char  u8;
4
typedef unsigned short u16;
5
#define NOP();  asm volatile("nop"::);
6

7

8
#define KEY_PIN         PINB
9
#define KEY_PORT        PORTB
10
#define KEY_DDR         DDRB
11

12

13
u8 keyscan( void )
14
{
15
  u8 col = 0, row = 0;
16

17
  KEY_PORT = 0xFF;              // all pullups on
18
  KEY_DDR = 0xF0;               // pin 7..4 = output
19
  KEY_PORT = 0x0F;              // pin 7..4 = output low
20
  NOP();                        // wait until inputs sampled
21
  if( ~KEY_PIN & 1<<0 )         // if pin 0 = low
22
    col = 4;
23
  if( ~KEY_PIN & 1<<1 )
24
    col = 3;
25
  if( ~KEY_PIN & 1<<2 )
26
    col = 2;
27
  if( ~KEY_PIN & 1<<3 )
28
    col = 1;
29
  row = col;
30
  if( col ){                    // if column found, check row
31
    KEY_PORT = 0xFF;            // all pullups on
32
    KEY_DDR = 0x0F;             // pin 3..0 = output
33
    KEY_PORT = 0xF0;            // pin 3..0 = output low
34
    NOP();                      // wait until inputs sampled
35
    if( ~KEY_PIN & 1<<4 )
36
      row = 5;
37
    if( ~KEY_PIN & 1<<5 )
38
      row = 9;
39
    if( ~KEY_PIN & 1<<6 )
40
      row = 13;
41
    if( ~KEY_PIN & 1<<7 )       // if pin 7 = low
42
      row = 17;
43
  }                             // 0 = no key
44
  return row - col;             // 1..16 = key
45
}

3.
Ich sehe nirgends ne Flankenerkennung, d.h. Du flutest Deinen Puffer, 
solange ne Taste gedrückt wird.
Du darfst nur bei ner Flanke von losgelassen nach gedrückt die Taste 
übernehmen.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.