Capture Interrupt und Timer overflow

Gast #594913
Lesenswert?
• ▲
▼
Hallo zusammen

Hat jemand eine Idee, wie man das Problem von zwei gleichzeitig 
auftretenden Interrupts (Capture Interrupt und Timer overflow in meinem 
Fall) beheben kann? Kennt vielleicht jemand ein Paper, in welchem das 
beschrieben ist?


Danke schon mal für eure Hilfe

Gruss
F.Stadler
#594968
Lesenswert?
• ▲
▼
Wenn ein Interrupt aufgerufen wird, wird das Globale Interrupt Flag 
zurückgesetzt und erst nach RETI wieder gesetzt. Wenn Du in Deiner 
Interrupt-Service-Routine das Flag manuell löschst, gibst Du damit 
andere Interrupts wieder frei. Wirklich gleichzeitig ist das natürlich 
nicht, da der Interrupt bis zum CLI exklusiv läuft. Aber andere 
Interrupts werden gespeichert.

Wo steht das: z.B. Manual mega88 Seite 15 (glaub ich)
#594991
Lesenswert?
• ▲
▼
Analog Designer wrote:
> Hallo zusammen
>
> Hat jemand eine Idee, wie man das Problem von zwei gleichzeitig
> auftretenden Interrupts (Capture Interrupt und Timer overflow in meinem
> Fall) beheben kann?

Welches Problem?

Das Problem, dass beide Interruprs fast gleichzeitig auftreten und sich 
gegenseitig behindern? - Dagegen hilft nur, die ISRs möglichst kurz zu 
machen, so dass die Verzögerungszeiten gering bleiben. Das erreicht man, 
indem man längere Routinen aus der ISR in die Mainloop verlagert und per 
Semaphore aufruft.

Oder das Problem, dass sich die beiden (oder 3, denn meist gibt es 2 
OC-Ints) gegenseitig den Timerstand unterm Hintern verstellen? - Dagegen 
hilft saubere Programmierung, bei der keiner der Interrupts den 
Timerstand verändern darf. Die OC-Interrupts lesen ihr OC-Register ein, 
addieren das Intervall darauf und schreiben es als nächsten Int-Termin 
ins OCR zurück. Die ICP-Routine merkt sich den ICR-Wert (Zeitstempel) 
der jeweils "letzten Runde" und bildet die Differenz aus aktuellem 
Zeitstempel und dem vorherigen. Auch hierbei ist es nich nötig, den 
Timer zu Beginn des zu messenden Impulses auf 0 zu setzen.

> Kennt vielleicht jemand ein Paper, in welchem das
> beschrieben ist?

Nicht alles, was man im Laufe der Zeit durch "Erfahrung" gelernt hat, 
gibt es gefiltert und mundgerecht als "Paper".

>
>
> Danke schon mal für eure Hilfe
>
> Gruss
> F.Stadler

...
Gast #595030
Lesenswert?
• ▲
▼
Im Falle eines AVR ist es ganz einfach: Die Interrupts unterbrechen sich 
nicht gegenseitig.
Der Capture-Wert wird solange nicht verändert, bis eine (vorher 
eingegstellte) Flanke erneut auftritt: ISR möglichst kurz halten, wie 
Hannes schon schrieb.
Bei anderen Controllern kann man u.U. Interruptprioritäten vergeben.
Gast #595195
Lesenswert?
• ▲
▼
> Bei anderen Controllern kann man u.U. Interruptprioritäten vergeben.

Was passiert denn, wenn 1 Interrupt am abarbeiten ist und ein 2., 
allenfalls mit höherer Priorität, während dieser Zeit auftritt? Genau 
dies ist nämlich das Problem bei meiner Software.


@ Hannes Lux
> Nicht alles, was man im Laufe der Zeit durch "Erfahrung" gelernt hat,
gibt es gefiltert und mundgerecht als "Paper".

Im Internet ist viel mehr zu finden, als man manchmal denkt... vor allem 
die Hersteller sind interessiert, dem Kunden den Einstieg und die Arbeit 
mit ihrem uP möglichst stark zu vereinfachen.


Gruss
#595224
Lesenswert?
• ▲
▼
Analog Designer wrote:

> Was passiert denn, wenn 1 Interrupt am abarbeiten ist und ein 2.,
> allenfalls mit höherer Priorität, während dieser Zeit auftritt? Genau
> dies ist nämlich das Problem bei meiner Software.

Das kommt auf den Controller-Typ an, den Du uns penetrant verschweigst, 
da gibt es keine allgemeingültige Aussage. Du musst da schon das 
betreffende Datenblatt befragen.

> Im Internet ist viel mehr zu finden, als man manchmal denkt...

Stimmt... Im Internet ist über 95% Schrott zu finden.

> vor allem
> die Hersteller sind interessiert, dem Kunden den Einstieg und die Arbeit
> mit ihrem uP möglichst stark zu vereinfachen.

Dafür haben einige Hersteller ganz brauchbare kostenlose Datenblätter 
und AppNotes, andere Hersteller rücken ihre Informationen nur gegen 
horrende Mitgliedsbeiträge in Organisationen raus.

...
Gast #595238
Lesenswert?
• ▲
▼
Hier drin gibt es anscheindend Leute, die nicht wissen 1. keine Ahnung 
von Programmierung (-> Amateure) haben und 2. sich des Sinn und Zwecks 
eines Forums nicht bewusst sind!

Thread geschlossen, denn es gibt Foren in denen man kompetente Antworten 
erhält
#595295
Lesenswert?
• ▲
▼
Analog Designer wrote:
> Hier drin gibt es anscheindend Leute, die nicht wissen 1. keine Ahnung
> von Programmierung (-> Amateure) haben und 2. sich des Sinn und Zwecks
> eines Forums nicht bewusst sind!

Entschuldege bitte, dass ich Dir helfen wollte und versucht habe, Deine 
unpräzisen Fragen präzise zu beantworten.

>
> Thread geschlossen,

Ich vermute mal, dass Du nicht Derjenige bist, der hier einen Thread 
schließt...

> denn es gibt Foren in denen man kompetente Antworten
> erhält

Viel Erfolg...

...
Gast #595431
Lesenswert?
• ▲
▼
Du verwendest also den MSP430... gäbe es nicht die Möglichkeit, den 
Zählerstand des Timers abzufragen bei einem capture event, damit du 
feststellen kannst, wenn ein overflow des Timers kurze Zeit später 
passieren kann bzw. schon passiert ist?
Meiner Meinung nach ist dies ein bekanntes Problem, das bei 
priorisierten Interrupts halt einfach auftreten kann.

Eine andere Möglichkeit wäre, die Interrupts entsprechend zu maskieren, 
habe ich selber aber auch zu wenig Erfahrung. Evtl. kann hier ein 
erfahrender Programmierer weiterhelfen...?

Ich hoffe, dies hilft dir weiter.


Gruss
Matthias
#595537
Lesenswert?
• ▲
▼
Ich vermute mal, der Frager meinte folgendes:

Man will einen Timestamp einer Flanke haben mit mehr als 16Bit und hat 
dazu im Overflowinterrupt einen weiteren Softwarezähler.

Wenn nun der Overflowinterrupt und der Captureinterrupt zeitnah 
auftreten, weiß man ja nicht, ob das Capture vor oder nach dem Overflow 
eintrat.


Das Problem ist das gleiche, wie bei meinem 32Bit Zählerbeispiel und die 
Lösung ist es daher auch:

Beitrag "AVR Timer mit 32 Bit"


Peter

#595693
Lesenswert?
• ▲
▼
Analog Designer wrote:
> Hier drin gibt es anscheindend Leute, die nicht wissen 1. keine Ahnung
> von Programmierung (-> Amateure) haben und 2. sich des Sinn und Zwecks
> eines Forums nicht bewusst sind!
>
> Thread geschlossen, denn es gibt Foren in denen man kompetente Antworten
> erhält

Gibt es eigentlich auch ein Forum, in dem nur kompetente Fragen gestellt 
werden ?
Gast #595730
Lesenswert?
• ▲
▼
Hallo,

seine Frage war nicht inkompetent, sie war unpräzise und ließ die Leute 
raten...

Das Interruptverhalten von µC ist nicht allgemeingültig, sondern hängt 
von der µC-Familie ab, die er erst später verraten hat.

Der Fall, den er offenbar gemeint hat, tritt in dieser Form auf, wenn 
man Capture und Overflow des gleichen Counters per IRQ auswertet, das 
hat er so auch nicht verraten.

Viele übersehen beim Fragen im Forum, daß ja nur sie in diesem Moment 
das Programm, die Abläufe, die Hardware und was noch eine Rolle spielen 
kann, kennen und die Leser mit dem auskommen müssen, was gepostet wird.

Je weniger Info kommt, um so mehr muß spekuliert werden, um so geringer 
sind die Chancen, eine tatsächlich hilfreiche Antwort zu bekommen.

Zumindest hat es mich jetzt daran erinnert, daß ich das in meinem 
Multimeter auch noch nicht korrigiert habe... :(

Gruß aus Berlin
Michael

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.