mikrocontroller.net

Forum: Compiler & IDEs mega8 Tastenentprellung


Autor: Thomas M. (tmo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bekomme die Tastenentprellung von Peter Dannegger in meinem 
Testprogramm nicht zum Laufen - das Programm reagiert gar nicht auf 
Tastendruck.
Mit einer simplen Tastenerkennung mit delay hatte alles funktioniert.

Eine weitere Frage wäre, ob es sinnvoll ist, die verschiedenen 
Programmeteile in der Interruptroutine auszuwählen. Es funktioniert 
zwar, aber Interruptroutinen sollen ja auch kurz sein.
Wie man sicher sieht, ist das Programm eines meiner ersten Versuche mit 
C, an dem ich schon eine Weile "rumstricke" ...

Bin hier im Moment etwas ratlos und dankbar für jede Hilfe.

Gruß
Thomas

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  TIMSK = 1<<TOIE0;        // enable timer interrupt

...

    // enable Output Compare 1 overflow interrupt
    TIMSK  = (1<<OCIE1A);            

Der Timer0-Interrupt ist nicht aktiviert, weil du in der zweiten 
TIMSK-Zeile das Bit wieder auf 0 setzt.

Autor: Thomas M. (tmo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke Stefan!
Habe ganz übersehen, daß ich das bereits gesetzte Bit mit der zweiten 
Zuweisung wieder lösche.
Mit
    TIMSK  |= (1<<OCIE1A);
tut es wie es soll.

Wie sieht es denn mit meiner zweiten Frage aus, soviel Code in den 
Interrupthandler zu schreiben? Kann man das nicht eleganter lösen, oder 
ist das eine brauchbare Methode?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas M. wrote:

> Wie sieht es denn mit meiner zweiten Frage aus, soviel Code in den
> Interrupthandler zu schreiben? Kann man das nicht eleganter lösen, oder
> ist das eine brauchbare Methode?

Das ist nicht wirklich viel code, schau dir einfach mal den erstellten 
ASM-Code an, und zähl die Taktzyklen zusammen.

Der sonst übliche Hinweis "möglichst wenig Code in ISRs" bezieht sich 
eher auf das "kleine" printf zum debuggen, die "kurzen" Float-Divisionen 
zwischendurch oder den _delay_ms Aufruf innerhalb der ISR...

Autor: Thomas M. (tmo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo kann ich mir in AVR Studio den ASM-Code anzeigen lassen ?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas M. wrote:
> Wo kann ich mir in AVR Studio den ASM-Code anzeigen lassen ?

Unter "Other Files" findest du eine Datei mit der Endung lss.

Autor: Thomas M. (tmo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank!

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.