mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik avr studio und Anzeige der Stop-Watch bei Timer0


Autor: hh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe eine Timer-Routine die alle 10us aufgerufen wird (Timermodus 
CTC für Timer0)
Wenn ich nun mit AVR-Studio (4.14) einen Breakpoint in die Routine setze 
und mir dann den Wert der "Stop Watch" anschaue, dann schwankt der Wert 
zwischen den einzelnen Aufrufen bis zu 30us! (Ich setze nach jedem 
Aufruf den Wert der Stop Watch zurück). Liegt das nun eher am Avr 
Studio, oder woher kommt das?
Das ist auch so, wenn ich da nur eine Variable hochzählen lass und hat 
somit nix mit meiner Routine zu tun, die da aufgerufen wird.

Ich benutze einen atmega48.

mfg

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts noch andere Interrupts in Deinem Programm?  Oder 
interruptgesperrte Abschnitte (cli - [critical section Code] - sei)?

Autor: hh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ja, den Timer1-Interrupt alle 100us und einen externen Interrupt (INT0) 
der bei steigender Flanke am Eingang aufgerufen wird. Diese Routine ist 
aber sehr kurz, da nur ein Zähler inkrementiert wird und Variablen 
zurückgesetzt werden. Dies benötigt aber unter 10us.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ja, den Timer1-Interrupt alle 100us und einen externen Interrupt (INT0)
>der bei steigender Flanke am Eingang aufgerufen wird. Diese Routine ist
>aber sehr kurz, da nur ein Zähler inkrementiert wird und Variablen
>zurückgesetzt werden. Dies benötigt aber unter 10us.

Mysteriöse Sache. Was genau wird in den Interrupts gemacht?

Ich glaub, ohne den Code wird das nur Rätselraten.

Autor: hh (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
mh..also anbei dann mal die interrupt-routinen

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Beste wird sein, Du checkst das Programm im Simulator vom AVR-Studio 
per Einzelschritt-Modus durch. Wenn die Timer0-Interruptroutine zu einem 
"falschen" Zeitpunkt auftritt, dann gilt es zunächst herauszufinden, an 
welcher Stelle der Einsprung stattfand (aus der Main heraus? Wenn ja: 
Was für Befehle stehen da? Oder direkt nach der Rückkehr aus einer 
anderen Interruptroutine? Wenn ja: Welche und wie lange dauert die?).

Es gibt keine "Geheimnisse" in einem Code, die man nicht mit dem 
Simulator aufspüren kann - wenngleich es in der Praxis aufwendig und 
mühsam sein kann.

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.