www.mikrocontroller.net

Forum: Compiler & IDEs timer interrupt problem


Autor: Markus Reinprecht (Firma: tu wien) (specht)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich habe gerade in der uni angefangen atmega16 zu programmieren und hab 
da eine frage. ich wollte einfach nur eine stoppuhr programmieren, 
schaffe es jedoch nicht die zeit anzuhalten.
zum stoppen lese ich einfach einen button ein:

help = PINA;
if((help & 0x40)==0x40){ /*wenn PINA.7  auf 1 ist, --> uhr stoppen */
  flag = 0;
}
else{
  flag = 1;
}

soweit funktioniert das ja auch.
jetzt will ich aber im timer interrupt das flag auslesen und entweder 
einen counter dort weiterlaufen lassen oder eben stoppen, damit die zeit 
stehen bleibt:

SIGNAL(SIG_OVERFLOW1){/*timer interrupt*/
if(flag == 1){
  temp++;
}

das funktioniert aber einfach nicht. temp wird einfach immer 
weitergezählt.  ich hab auch schon probiert, dass ich einfach mal gleich 
nach dem abfragen des buttons leds ein und ausschalte. das geht auch. 
nur die abfrage im interrupt macht ein problem.
kann es sein, dass das überhaupt nicht funktioniert oder hats da ein 
anderes problem?
mfg specht

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pin A7 hat die Maske (1 << 7), also 0x80 und nicht 0x40.

Autor: Markus Reinprecht (Firma: tu wien) (specht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für den tipp, aber da ist einfach nur der kommentar alt. sollt ich 
mal ausbessern.
also das einlesen des buttons funktioniert (am pin a6)
nur das abfragen des flags im interrupt geht einfach nicht.
mfg

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist schon klar daß das bestenfalls nur dann geht, wenn der Taster 
(dauerhaft) gedrückt ist?

Ausserdem tust du dir und anderen einen Gefallen, wenn du "magische" 
Zahlen wie in TIMSK=4 vermeidest. Ich hab jetzt keine Lust das Handbuch 
runterzulagen und zu schauen was in Bit 2 codiert ist; es sollte aber 
gleichbedeutend sein zu sowas wie
TIMSK |= (1 << TOV1);

Johann

Autor: Markus Reinprecht (Firma: tu wien) (specht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke für die tipps. werds gleich mal umschreiben. bin wie gesagt neu 
im programmiergeschäft. drum schaut der code vielleicht ein bisschen 
anders aus.
das es nur solange stoppt, wie der button gedrückt ist ist mir schon 
klar. ich werds noch umändern, so dass der button start - stopp toggelt

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nachdem du den Hinweis von Ernst umgesetzt hast, lies mal
AVR-GCC-Tutorial/Die Timer und Zähler des AVR durch. DU kannst den 
Timer besser betreiben im CTC-Mode (clear Timer on compare match) und 
musst nicht von Hand die Timerwerte (momentan zudem zu einem ungünstigen 
Zeitpunkt) in Timer1 neu setzen.

Johann

Autor: Markus Reinprecht (Firma: tu wien) (specht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok werd ich machen. wird sicher noch ein langer sonntag ;)
übrigens danke für die vielen schnellen tipps. echt cool das forum hier.
das tutorial ist echt gut. im datenblatt nachlesen ist da wirklich viel 
anstrengender.

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.