Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Interruptroutine Capture Compare Kategorie: Programmierung C (von Josef - 21.08.2009 10:23)
Als Antwort auf Re: Interruptroutine Capture Compare von PeterS - 20.08.2009 21:46
Ich nutze:
C-Control Pro Mega128
> > > > hallo
> > > > das problem besteht darin, dass die interruptroutine keine abfrage (if, switch usw.)
> > > > oder einen Unterprogrammaufruf vertr├Ągt.
> > >
> > > Hi, das mag Dir so erscheinen ist aber nicht so. If's etc. funktionieren In IRQ Routinen, sonst
> > > w├╝rde die ganze DCF Library nicht funkionieren.
> > >
> > > > sobald ich in die unten angef├╝hrte interruptroutine ein if einbaue verabschiedet sich der prozessor.
> > > >
> > > > void Timer3_ISR(void)
> > > > {
> > > >    x[a]=Timer_T3GetPM();
> > > >    Irq_GetCount(INT_TIM3CAPT);           // Interrupt zur├╝cksetzen
> > > > }
> > > >
> > > > will man nun ein signal mit unterschiedlichen Pulsl├Ąngen messen, funktioniert das nur
> > > > wenn man im hauptprogamm ein while (x[a]==0; einbaut und anschlie├čend die Messung
> > > > wieder startet (Bemerkung: ist aber nicht sinn eines interrupts, wenn man wartet bis der interrupt
> > > > abgearbeitet ist)
> > >
> > > Man sollte immer! im Interrupt nur das n├Âtigste erledigen, und den Rest im normalen Programm
> > > verarbeiten. Dabei erlaubt der Interpreter seinen IRQ Routinen viel mehr, als eine wirkliche
> > > CPU durchgehen liesse.
> > >
> > > Gruss Peter
> > >
> > > > oder man l├Ąsst den code durchrasseln und macht immer wieder eine abfrage -> dann ├╝bersieht man
> > > > irgendwann einen puls, wenn der codedurchlauf zu lange wird.
> > > > gibts hier eine l├Âsung?
> > > >
> > > > gru├č
> > > > josef
> >
> > :-( -> schwache antwort
>
> Nein, denn das ist eine Verhaltensregel, und keine Erkl├Ąrung von Fehlern. Eine laufende Interrupt-
> routine blockiert das Multithreading und andere Interrupts. Deshalb ist es normalerweise unklug,
> zuviel in einer IRQ Routine zu erledigen.
>
> > ich glaube nicht, wenn man eine if x[a]>0 m++; Abfrage in die interruptroutine einbaut, das eine lange ist.
> > beim 10msec interrupt -> DCF 77 programm werden auch unterprogrogramme in der interruptroutine
> > ausgef├╝hrt und es funktioniert.
> > warum genau beim timer 3 nicht?
>
> Ich kann Dir versichern, das es keinen Unterschied in der Abarbeitung von 10msec IRQs oder Timer3
> IRQs gibt. Ich mu├č es eigentlich wissen, denn ich habe es implementiert. Es gibt aber wie oft,
> auch andere Faktoren. Wie lang sind eigentlich die Impulse, die Du messen willst? W├Ąre es m├Âglich,
> das Deine Programmlogik durcheinanderkommt, wenn die Impulse k├╝rzer sind, als die Abarbeitung
> der IRQ Routine? Da ich Dein Hauptprogramm nicht kenne, ist das nat├╝rlich nur eine von mehreren
> m├Âglichen Hypothesen.
>
> Gruss Peter
>
> > gru├č josef

hallo Peter

habe aufgrund deiner ausf├╝hrungen ein setup durchgef├╝hrt und siehe da alles das wie oben beschrieben
funktioniert. der UTI Baustein auch  3St├╝ck mit je 3 PT1000 werden einwandfrei abgearbeitet.

danke f├╝r deine Hilfe
gru├č josef
wenn es erw├╝nscht ist k├Ânnte ich das Projekt als Beispiel zur verf├╝gug stellen.

noch zwei fragen
wird es bei der definition von der seriellen in zukunft auch 9 Datenbits zu definieren geben?
und kann man die Ports, die auf ausgang geschaltet sind abfragen auf deren zustand?


    Antwort schreiben


Antworten:

Re: Interruptroutine Capture Compare (von PeterS - 22.08.2009 12:04)
    Re: Interruptroutine Capture Compare (von Josef - 22.08.2009 19:41)