www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit Tastatur für Codeeingabe bei Alarmanlage


Autor: Andreas R. (svsalzburg1933)
Datum:
Angehängte Dateien:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast es doch selbst schon geschrieben:
//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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du mir erklären, was das soll:
      }
    void Code_Eingabe(char zeichen);  
    }


Peter

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:
> Kannst Du mir erklären, was das soll:
>
>       }
>     void Code_Eingabe(char zeichen);
>     }
> 

Eine Prototyp-Deklaration, natürlich an einer sehr merkwürdigen
Stelle...

Autor: Andreas R. (svsalzburg1933)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

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

#include <avr\io.h>

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


#define KEY_PIN         PINB
#define KEY_PORT        PORTB
#define KEY_DDR         DDRB


u8 keyscan( void )
{
  u8 col = 0, row = 0;

  KEY_PORT = 0xFF;              // all pullups on
  KEY_DDR = 0xF0;               // pin 7..4 = output
  KEY_PORT = 0x0F;              // pin 7..4 = output low
  NOP();                        // wait until inputs sampled
  if( ~KEY_PIN & 1<<0 )         // if pin 0 = low
    col = 4;
  if( ~KEY_PIN & 1<<1 )
    col = 3;
  if( ~KEY_PIN & 1<<2 )
    col = 2;
  if( ~KEY_PIN & 1<<3 )
    col = 1;
  row = col;
  if( col ){                    // if column found, check row
    KEY_PORT = 0xFF;            // all pullups on
    KEY_DDR = 0x0F;             // pin 3..0 = output
    KEY_PORT = 0xF0;            // pin 3..0 = output low
    NOP();                      // wait until inputs sampled
    if( ~KEY_PIN & 1<<4 )
      row = 5;
    if( ~KEY_PIN & 1<<5 )
      row = 9;
    if( ~KEY_PIN & 1<<6 )
      row = 13;
    if( ~KEY_PIN & 1<<7 )       // if pin 7 = low
      row = 17;
  }                             // 0 = no key
  return row - col;             // 1..16 = key
}


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

Autor: Andreas R. (svsalzburg1933)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

vielen dank für die antwort ! werde das gleich mal in mein programm 
einbauen und einen testlauf durchführen .

mfg andreas

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.