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

Re: Timer-Ausgang überschreiben bzw. lange low-Zeit vermeiden Kategorie: CC-Pro Unit & Appl.Board (von Niko - 25.12.2015 17:35)
Als Antwort auf Re: Timer-Ausgang überschreiben bzw. lange low-Zeit vermeiden von Niko - 7.12.2015 14:13

> > > Ich versuche, diese Tesla-Spule
> > > mit der C-Control ĂĽber den externen Eingang anzusteuern. Liegt am Eingang eine positive Spannung an ist die
> Spule deaktiviert.
> > > Liegt der Eingang auf Masse, dann schwingt die Spule.
> > > Das Problem dabei ist, dass die Spule nicht fĂĽr den kontinuierlichen Betrieb ausgelegt ist.
> > > Das heiĂ?t, man darf den Eingang nur kurz auf Masse ziehen (wenige Millisekunden)
> > > und muss die Spule dann wieder einige Millisekunden ausschalten, damit die Elektronik nicht ĂĽberlastet wird.
> > >
> > > Ich verwende ein Poti am ADC 0 und PWM an Timer 1. In einer Endlosschleife wird Timer_T1PWM aufgerufen.
> > > Vereinfacht sieht das so aus:
> > >
> > > ADC_Set(ADC_VREF_VCC, 0)
> > > Do While True
> > >     Timer_T1PWM(0x610, EinPaarBerechnungen(ADC_Read()), PS_64) 'FĂĽr PW0 z.B. 0x54E
> > >     Thread_Delay(6)
> > > End While
> > >

> > > Tatsächlich wird da noch geprüft, ob ein Taster gedrückt ist und Timer_T1PWM wird auch nur dann aufgerufen,
> > > wenn sich der gemessene Wert verändert hat,
> > > aber um das Problem zu zeigen ist es sinnvoll, wenn Timer_T1PWM ständig aufgerufen wird.
> > >
> > > Das Problem ist jetzt folgendes: Immer dann, wenn Timer_T1PWM aufgerufen wird, wird der Timer ganz kurz pausiert.
> > > Der Pin verweilt dann fĂĽr kurze Zeit in einem Zustand, und das kann auch logisch 0 sein.
> > > Ich habe das am Oszilloskop gemessen und ein Foto davon angehängt.
> > >
> > > Es darf nicht passieren, dass der Pin für längere Zeit auf logisch 0 bleibt. Ich suche eine Möglichkeit,
> > > den Ausgang auf logisch 1 zu fixieren, während der Timer noch läuft.
> > > Einfach vorher Port_WriteBit(PinB5, 1) und nachher Port_WriteBit(PinB5, 0) aufzurufen scheint
keine Veränderung zu bewirken.
> >
> >
> > Hallo,
> >
> > du solltest den Timer nicht immer neu mit Timer_T1PWM() einstellen!
> > Die Routine läuft nach der Konfiguartion selber (IRQ).
> > Ă?ndere diese nur wenn es sein muss... und ĂĽbergib die Parameter bei einen Aufruf mit einer
> > eigenen Variablen und baue nicht eine Funktion in den Aufruf mit ein...
> > Wenn du keine Threads benutzt verwende absDelay!
> >
> >
> > Timer_T1PWM(0x610, meinewerte, PS_64)
> >
> >
>
> Bin mir jetzt nicht sicher, wie Du das meinst. Ich hab ja geschrieben, dass die Timer_T1PWM nur zum Demonstrieren
> permanent aufgerufen wird.
> In meiner Anwendung wird aber geprüft, ob sich der Wert tatsächlich verändert hat. Also wenn man nichts ändert,
> wird Timer_T1PWM auch nicht
> erneut mit den selben Werten aufgerufen.
>
> Welchen Unterschied macht es, sowas zu schreiben:
>
> Dim Temp As Word
> ADC_Set(ADC_VREF_VCC, 0)
> Do While True
>     Temp = EinPaarBerechnungen(ADC_Read())
>     Timer_T1PWM(0x610, Temp, PS_64) 'FĂĽr PW0 z.B. 0x54E
>     Thread_Delay(6)
> End While
>

> Ich sehe da keinen nennenswerten Unterschied, au�er halt, dass Platz für eine Variable benötigt wird.
>
> Es kann sein, dass ich später noch Threads verwenden möchte. Da möchte ich nicht alle
> AbsDelay-Aufrufe durch Thread_Delay austauschen mĂĽssen.

*Push*


    Antwort schreiben


Antworten:

Re: Timer-Ausgang überschreiben bzw. lange low-Zeit vermeiden (von PeterS - 26.12.2015 8:59)