Forum: Mikrocontroller und Digitale Elektronik Taster Abfrage


von Michael B. (minimichi)


Lesenswert?

Servus zusammen.
Hab hier nen kleines Problem und ich steh echt auf dem Schlauch.

Ich will 3 Taster als input benutzen. Hierfür benutze ich PortC.
Diese will ich in einer Schleife dauerhaft abfragen, bis einer gedrückt 
wurde.
Hier mal mein Code
1
DDRC  = 0x00;  // alle auf input, da ich erweiterbar sein will
2
3
int i = 1;
4
int j = 0;
5
while (i)
6
{
7
  if ( (PINC & (1<<PINC0) ) == 0 )
8
  {
9
    i = 0; j = 1;
10
    _delay_ms(1000);
11
  }
12
  
13
  if ( (PINC & (1<<PINC1)) == 0 )
14
  {
15
    i = 0; j = 2;
16
    _delay_ms(1000);
17
  }
18
  
19
  if ( (PINC & (1<<PINC2)) == 0 )
20
  {
21
    i = 0; j = 3;
22
    _delay_ms(1000);
23
  }
24
  _delay_ms(20);
25
}

Das Programm führ Schleife auf bis eine Taste gedrückt wurde und gibt 
dann auch die Variable der Taste zurück.
Mein Problem ist, dass es hier immer in die dritte IF Abfrage springt. 
Es springt einfach rein und ich weis echt nicht warum....
bitte um Hilfe.

mfG Michael

von Dietrich L. (dietrichl)


Lesenswert?

- welcher µC?
- wie sind die Taster abgeschlossen? Pull-Up-Widerstände dran?
- bitte ganzes Programm zeigen!

Gruß Dietrich

von Thomas E. (thomase)


Lesenswert?

Michael Bennebach schrieb:
> Diese will ich in einer Schleife dauerhaft abfragen, bis einer gedrückt
> wurde.
Vergiss das alles ganz ganz schnell und mach es gleich richtig:

http://www.mikrocontroller.net/articles/Entprellung

mfg.

von holger (Gast)


Lesenswert?

JTAG Fuse abschalten.

von Linüx (Gast)


Lesenswert?

Und Tasten macht man normalerweise nicht mit Interrupts. Das machen nur 
Amateure.

von Peter II (Gast)


Lesenswert?

Linüx schrieb:
> Und Tasten macht man normalerweise nicht mit Interrupts. Das machen nur
> Amateure.

und wie kommst du darauf das er das macht?

von Michael B. (minimichi)


Lesenswert?

servus,
ich benutze einen atmega1284p auf dem stk500.

Das mit dem Entprellen schau ich mir mal, danke dir.

den JTAG Fuse abgeschaltet und alles läuft glatt, vielen vielen dank für 
diesen Tipp.

ps: ich benutze keine Interrupts, das ist eine Funktion die aufgerufen 
wird und so lange durchläuft bis eine Taste gedrückt wird, um dann eine 
Variable zurück zu liefern.

mfG michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.