Tastenmatrix, mal wieder

OP #2640728
Edit: Vergesst es, hab PullDowns vergessen...

Hi,
ich versuch grade eine Tastenmatrix auszulesen, aber irgendwie 
verzweifel ich grade.
Anzeigen tu ich mir die gedrückte Taste aktuell noch auf einer 7 Segment 
Anzeige, das funktioniert einwandfrei.
Die Anzeige springt aber hin und her, ich hab jetzt alles soweit raus 
gelöscht, das ich nurnoch 1, 4, 7 oder n (für Stern-Taste) anzeige.
Mal steht die Anzeige, dann springt alles wild hin und her. Ein 
Tastendruck wird nur manchmal wirklich angezeigt, danach flimmert alles 
wieder. Normal soll die letzte gedrückte Taste einfach dauerhaft 
angezeigt werden.
Angeschlossen ist im Konkreten Beispiel PC5 als Output, über die 
Tastenmatrix zurück auf PD0..PD3

Hat jemand Rat warum die Anzeige spinnt? Bzw warum's nicht so hinhaut 
wie ichs möchte?
1
#define F_CPU 16000000
2

3

4
/* Includes */
5
#include <avr/io.h>
6
#include <util/delay.h>
7
#include <avr/interrupt.h>
8

9
#include "config.h"
10

11
uint8_t pressed = 12;    //12 = Default Wert, 10 = *, 11 = #
12

13
int main (void)
14
{
15
  TCCR0 |= (1<<CS02)|(1<<CS00);        //CS02, CS00: Prescaler 1024, ~16,384ms
16
  TCCR2 |= (1<<CS22)|(1<<CS20);        //CS22: Prescaler 128, ~10,24ms
17
  TIMSK |= (1<<TOIE0)|(1<<TOIE2);      //Overflow Enable für Timer0&Timer2 (8bit)
18

19
  DDRD = 0b11110000;      //Ausgänge setzen
20
  DDRC |= (1<<DDC5);      //Ausgang setzen
21
  PORTC |= (1<<PC5);      //PullUps Einschalten
22

23
  sei();
24

25
  while(1)
26
  {
27
    [...] //Zuweisung Tastendruck -> Anzeige (und reset von 'pressed' auf 12)
28
  }
29
}
30

31
ISR(TIMER2_OVF_vect)
32
{
33
    [...]
34
}
35

36
ISR(TIMER0_OVF_vect)
37
{
38
  //Tastendruck zu "pressed" zuweisen
39
  if (Row1) pressed = 1;
40
  if (Row2) pressed = 4;
41
  if (Row3) pressed = 7;
42
  if (Row4) pressed = 10;  
43
}

config.h:
1
#define Row1 (PIND & (1<<PIND0))
2
#define Row2 (PIND & (1<<PIND1))
3
#define Row3 (PIND & (1<<PIND2))
4
#define Row4 (PIND & (1<<PIND3))

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.