AVR-n00b will Passworteingabe machen

Gast #3521933
Lesenswert?
• ▲
▼
Hallo,
ich habe einen atmega8 auf nem alten STK500 und wollte eine Art 
Passworteingabe machen. Die Knöpfe 0-2 können gedrückt werden und es 
wird jeweils ein Wert in einen Puffer geschrieben. Dieser wird mit einem 
anderen verglichen und wenn sie übereinstimmen geht eine LED an.

Ich bin nicht sehr erfahren in der AVR-Programmierung und habe keine 
Ahnung wie ich eine Debug-Ausgabe realisieren soll. Ich glaube die Werte 
werden nicht richtig in den Puffer geschrieben. Die compare funktion ist 
auf jeden Fall richtig, denn wenn ich puffer und passwort gleichsetze 
leuchtet die LED. Auch wenn ich die Länge des Passworts auf 1 setze geht 
es. Ihr Profis erkennt sicher auf dem ersten Blick meinen Fehler:
1
#include <avr/io.h>
2
#include <avr/delay.h>
3

4
#define INPUT_MASK 0b00000111 //3 knöpfe
5
#define LENGTH 2
6

7
uint8_t getInput(uint8_t pin, uint8_t mask) {
8
  return ~(pin & mask);
9
}
10

11
uint8_t it = 0;
12

13
void add(uint8_t* buf, uint8_t num) {
14
  buf[it] = 1;
15
  if (it < LENGTH - 1)
16
    it++;
17
  _delay_ms(500);
18
}
19

20
int compareArrays(uint8_t* buf1, uint8_t* buf2) {
21
  for (uint8_t i; i < LENGTH; i++) {
22
    if (buf1[i] != buf2[i])
23
      return 0;
24
  }
25
  return 1;
26
}
27

28
int main(void) {
29

30
  DDRB = 0b11111111; //out
31
  DDRD = 0; //in
32
  PORTB = 0xff;
33

34
  uint8_t buffer[LENGTH] = { 0, 0 };
35
  uint8_t pass[LENGTH] = { 1, 1 };
36

37
  while (1) {
38
          uint8_t input = getInput(PIND, INPUT_MASK);
39

40
    if (input & 0b00000001) //wenn knopf 1 gedrückt
41
      add(buffer, 1);
42

43
    if (compareArrays(buffer, pass))
44
      PORTB = ~0b00001000;
45
    else
46
      PORTB = 0xff;
47
  }
48
  return 0;
49
}
Gast #3522091
Lesenswert?
• ▲
▼
Paul schrieb:
> Hm... da ist ja ein recht großes Delay drin.
>
> Walternativ schrieb:
>> return ~(pin & mask);
>
> Warum eigentlich hier das nicht?

Weil das STK500 ganz komisch ist.

Max B. schrieb:
> Wenn du eine PIN Eingabe realisieren möchtest, ist das doch ganz
> entscheidend!
>
> Beispiel
> PIN lautet 012 (Taster)
>
> Also d®ückst du die Taster 0, 1 und 2. Ergebnisse:
>
> Ohne entprellen z.B.: 0000011111222
>
> Mit entprellen: 012
>
> Gruß Max

Das ist schon richtig, aber es erklärt nicht, warum die LED überhaupt 
nicht angeht. Theoretisch müsste ja dann schon beim ersten Tastendruck 
der Puffer auf {1,1} stehen und damit dem Passwort entsprechen.

Antwort schreiben

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.

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.