www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Taster


Autor: MBraun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe an den µC einen Taster mit 10k Pullup angeschlossen.
In der main aktiviere ich den Interrupt

outp((1<<INT0), GIMSK);       //int0 einschalten
outp((1<<ISC01), MCUCR);    //falling edges
sei();


Wenn der Interrupt aufgerufen wird schalte ich den Interrupt aus und 
warte erst 120ms @ 4MHz. Dann wird eine Funktion aufgerufen, die ~8s 
dauert. Danach darf wieder auf Tastendruck reagiert werden, also 
aktiviere ich den Interrupt wieder.
Das Problem ist nun, dass beim aktivieren des Interrupts der Interrupt 
gleich wieder ausgelöst wird. Ich erhalte also Pro tastendruck meistens 
2 (nie mehr) aufrufe der funktion doSTH().
Hat jemand ne Ahnung wieso?
 SIGNAL(SIG_INTERRUPT0)
{
  outp(0x00, GIMSK);  //Int0 ausschalten
  u08 i, j, k;    //warte 120ms zum entprellen
  for(k = 0; k < 7; k++){
  for(j = 0; j < 255; j++){
  for(i = 0; i < 255; i++){
    asm volatile("nop");
  }
  }
  }

  sei();      //interrupts wieder anschalten (werden für doSTH() 
benötigt)
    doSTH();      //Funktion die ca 8s dauert

    outp((1<<INT0), GIMSK);  //Int0 wieder anschalten

}


cu
MB

Autor: KlausL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo M,

der Taster prellt, d.h. er schliesst und öffnet ganz kurz hintereinander 
ein paar mal. Je nachdem wie schnell Deine Erkennungsroutine ist, 
bekommst Du 2 oder mehr "Erkennungen".

Lösung ist möglich, indem eine Zeitverzögerung nach dem ersten erkennen 
einprogrammiert wird, und der Interrupt so lange gesperrt wird.

HTH,
Klaus

Infos zu AVR und 8051 unter: http://home.t-online.de/home/k.leidinger

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich habe jetzt zwar nicht alles genau verfolgt, aber lösche doch vor der 
INT0-Freigabe mal das INT0-Flag. Ich vermute mal es wird dann gehen.
Gruss Uwe

Autor: MBraun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Ich hab leider 2 mal submit gedrückt. Hier der andere Thread.
http://www.mikrocontroller.net/forum/read-1-7902.html
Obwohl das Problem dank Elko gelöst ist, werde ich das mit dem INT0-Flag 
noch probieren.

mfg
MB

Autor: MBraun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
normal löscht man das INT0-flag ja so:
sbr GIFR, 6

Beim AT90S1200 geht das aber nicht. Es gibt dort kein INT0.
weis jemand eine Lösung für diesen µC?

mfg
MB

Autor: MBraun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Ich hab's jezt ohne Interrupts mit einer Schleife gelöst.
gruß
MB

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.