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 PeterS - 22.08.2009 12:04)
Als Antwort auf Re: Interruptroutine Capture Compare von Josef - 21.08.2009 10:23
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 32 Application Board, CC-Pro 128 Application Board, Pro-Bot128
> > > > > 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?

Nein, das ist ziemlich exotisch und arbeitet auch nicht mit dem Modell der seriellen IRQ Buffer
zusammen. Du kannst aber ├╝ber DirAcc_Write() das UCSRB Register schreiben, und dort den 9-Bit
Mode setzen. F├╝r den Fall wo das 9. Bit immer Null ist, wie Du es wahrscheinlich brauchst,
sollte das gehen.

> und kann man die Ports, die auf ausgang geschaltet sind abfragen auf deren zustand?

Du schreibst doch selbst die Werte auf die Ports, merk Dir doch in einer byte Variable
den Zustand.

Gruss Peter



    Antwort schreiben


Antworten:

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