Forum: Mikrocontroller und Digitale Elektronik 115us Timer Interrupt verschiebt sich


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Turtok (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
ich habe einen STM8 mit einem Timer von etwa 115us.
In dieser Zeit führe ich ein paar Berechnungen aus, die etwa so 10us 
dauern.

Wenn ich nun einen weiteren Codeblock zuschalte, verschiebt sich der 
Timerinterrupt um ein paar Mikrosekunden, dass er dann bei 130us ist.
Das ist aber schlecht, weil ersterer Code immer den gleichen Takt 
braucht.

Weiss jemand wieso das so ist? Ich kenne von Atmegas eigentlich, dass 
der Timer immer zu selben Zeit zuschlägt und sich nicht mit dem inneren 
Code verlängert.
Überlaufen tut er ja auch nicht, es ist eigentlich genug Zeit.

Hat jemand eine Idee?

Danke, Turtok

von Dangerseeker3000 (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Was passiert denn in dem zugeschalteten Codeblock so alles?

von Turtok (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dangerseeker3000 schrieb:
> Was passiert denn in dem zugeschalteten Codeblock so alles?

Ein paar If Abfragen und ggf ein paar Ausgänge schalten.

Man muss aber sagen, dass sich der Interrupt auch immer bisschen 
verschiebt ohne den Codeblock. Aber halt noch vertretbar, weil die 
Aufgaben im ersten Block recht statisch sind.

Kann es irgendwie sein, dass in diesem kleinen Bereich von 115us der 
Timer nichtmehr ordentlich "genau" sein kann? Der uC läuft auf 16Mhz.

Danke, Turtok

von Turtok (Gast)


Angehängte Dateien:
  • preview image for A.png
    A.png
    9,21 KB, 146 Downloads
  • preview image for A_B.png
    A_B.png
    8,86 KB, 139 Downloads

Bewertung
-1 lesenswert
nicht lesenswert
Ich habe es mal mit dem Oszi aufgenommen. Dabei schalte ich 1 bei Start 
des Interrupt und 0 wenn der Interrupt fertig ist.

A = Nur erster Codeblock - Ein Eingang prüfen und ein paar If-Abfragen
A + B = B hinzugekommen, Maximal 8 Ausgänge schalten, einfacher PWM 
Zähler.

Schaut man sich A+B an, sieht man das die Impulsbreite 50us ist und der 
Timer 100us hat. Wieso verschiebt sich dann der Timer, wenn es 
eigentlich passt?

Danke, Turtok

von Checker (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Frage lautet wie der Timer programmiert ist? Wenn er mit festen 
Werten arbeitet, dann kann sich nichts verschieben. Wenn du im Interrupt 
die Zeit für den nächsten veränderst, dann muss sich das verschieben.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Gibt es den TimerInterrupt als (C-)Sourcecode?

von Turtok (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Carl D. schrieb:
> Gibt es den TimerInterrupt als (C-)Sourcecode?

Checker schrieb:
> die Frage lautet wie der Timer programmiert ist?

Ganz normal als ein Overflow-Interrupt:
1
  TIM1_ARRH = 0x00;             //  Reload counter = 2500
2
  TIM1_ARRL = 0x05;
3
  TIM1_PSCRH = 0x00;            //  Prescalar
4
  TIM1_PSCRL = 0x20;
5
  TIM1_IER_UIE = 1;             //  Turn interrupts on.
6
  TIM1_CR1_CEN = 1;             // Turn of Timer 1
7
  ITC_SPR2_VECT5SPR = 3;        // Priority high

Der Rest ist nur Ausgänge schalten und if-Abfragen.

Habe aber nun rausgefunden, dass wenn ich die Timerzeit etwas erhöhe, 
der Timer konstant bleibt.
Es scheint mir als gäbe es irgendeine Richtlinie, in etwa:
"Timer Interrupt darf max. 50% bis zum nächsten Betragen, ansonsten wird 
einer übersprungen".

Glücklicherweise konnte ich den Code umschreiben des ersten Blocks, 
damit der auch mit dem langsameren (150us) Timer noch funktioniert :-)

Danke!
Turtok

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]
  • [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.