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

Re: Timerverwendung in der Funktionsbiliothek ? Kategorie: Programmierung C (von Franz-Peter - 13.12.2011 23:25)
Als Antwort auf Re: Timerverwendung in der Funktionsbiliothek ? von Manfred_02 - 13.12.2011 21:29
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 128 Application Board
> > > > > > > Hallo,
> > > > > > >
> > > > > > > bevor der längere Text beginnt:
> > > > > > > Kann mir jemand mitteilen, welche Timer in welchen Funktionen verwendet werden?
> > > > > > > z.B. habe ich hier im Forum gelesen, dass Multithreading, Delay.. Timer benötigen.
> > > > > > >
> > > > > > > Zur Erklärung:
> > > > > > > Ich  möchte eine eigene Zeitbasis in meinem C-Programm aufbauen.
> > > > > > > Damit möchte ich Warteschleifen in den Hauptroutinen vermeiden.
> > > > > > > Eigentlich ist es auch kein Problem.Ich habe aber festgestellt,dass
> > > > > > > es bei der gleichzeitigen Benutzung der fertigen Funktionen zu Kollisionen kommt,
> > > > > > > und meine Zeitbasis verändert wird. Es stehen 4 Timer zur Verfügung.
> > > > > > > Meine Frage:
> > > > > > > Welche Timer werden in welchen Funktionen genutzt und welche Timer wären
> > > > > > > für den eigenen Gebrauch frei ?
> > > > > > >
> > > > > > >
> > > > > > > Vielen Dank in Voraus
> > > > > > >
> > > > > > > GruÃ?
> > > > > > > Manfred
> > > > > > >
> > > > > > >  
> > > > > >
> > > > > > Siehe Manual:
> > > > > >
> > > > > > "Es stehen im C-Control Pro Mega 32 zwei, Mega128 drei unabhängige Timer-Counter
> > > > > > zur Verfügung. Timer_0 mit 8 Bit und Timer_1 mit 16 Bit Timer_3 mit 16 Bit
> > > > > > (nur Mega128). Timer_2 wird von der Firmware als interne Zeitbasis verwendet,
> > > > > > und ist fest auf einen 10ms Interrupt eingestellt."
> > > > > >
> > > > > > Alle anderen Timer werden halt verändert, wenn Du die Timer Funktionen des
> > > > > > entsprechenden Timers benutzt. Da wären noch die Servoroutinen, aber in denen
> > > > > > gibt man explizit den Timer an der genutzt wird.
> > > > > >
> > > > > > Gruss Peter
> > > > > >
> > > > >
> > > > > Hallo Peter,
> > > > >
> > > > > vielen Dank für die schnelle Antwort. Werde es mal versuchen und dann berichten.
> > > > >
> > > > >
> > > > > GuÃ?
> > > > > Manfred
> > > > >
> > > > >
> > > > >
> > > > Hallo Manfred,
> > > > in meiner Steuerung benötige ich auch viele Zeit- und Wartefunktionen, kann aber keine Warteschleifen
> > > > einbauen, da die Steuerung viele Dinge parallel tun muss.
> > > > Ich verwende dafür den 10ms Interrupt, der vom System bereitgestellt wird. �ber entsprechende
> > > > Timer-Variable, die in dem 10ms IRQ hoch bzw. runtergezählt werden, lassen sich umfangreiche Zeit-
> > > > Funktionen aufbauen, ohne da� man einen zusätzlichen HW-Timer benötigt.
> > > > Wenn dir die 10ms Auflösung reicht, wäre das vielleicht auch ein Lösungsansatz für dich.
> > > >
> > > > GruÃ?
> > > > Franz-Peter
> > >
> > > Hallo Franz-Peter,
> > >
> > > eine 10ms Auflösung wäre für meien Anwendung ausreichend. Ich werde die Hauptroutinen so
> > > schreiben, dass keine Wartezeit vergeht. Ich habe es bisher mit Timer 3 ausprobiert. Ich
> > > decremetiere globale Varibalen in der Interruptroutine. Es ist eigentlich wie eine Sanduhr. Jede
> > > Anwendung hat ihre eigene Sanduhr. So brauche ich keine Differenzbildung machen. Die CPU laüft
> > > so mit guter Performance.
> > >
> > > Der 10ms IRQ läuft doch über Timer2. Wie erhältst du Zugang? Eine eigene Routine
> > > stört die implementierte Routine.? Andererseits wäre es nur sinnvoll keinen zweiten Timer mit der
> > > gleichen Frequenz laufen zu lassen.
> > >
> > > GruÃ?
> > > Manfred
> > >
> > >
> > Hallo Manfred,
> > du kannst selbst eine Interruptroutine auf den Timer 2 setzen. Du darfst nur die Initiierung nicht
> > verändern. In der Hilfe ist unter 'Bibliothek' -> 'Interrupt' sogar ein Beispiel dazu : Mit  
> > Irq_SetVect(INT_TIM2COMP,ISR);
> > setzt du den Timer2 auf die IRQ Routine 'ISR', die dann automatisch alle 10ms aufgerufen wird.
> > Im Prinzip genauso, wie man es bei einem eigenen Timer auch macht, nur dass man eben den
> > System-Timer mitnutzt.
> > Ansonsten mache ich es im Prinzip genauso, dass ich in der IRQ-Routine globale Variable
> > herunterzähle.
> >
> > GruÃ?
> > Franz-Peter
>
>
> Hallo Franz-Peter,
>
> wenn ich eine eigene IRQ auf Timer2 setze, dann wird die IRQ der Firmware umgangen, oder?
> Ich wei� eben nicht, was ich da so anrichte, bzw was dann nicht mehr funktioniert. Vielleicht könnte
> Peter dazu etwas schreiben?
>
> @Peter, bitte schreib mal kurz ein paar Worte.
>
>
> GruÃ?
> Manfred
>
>  
Hallo Manfred,
da wird in der Firmware nichts umgangen, die Funktionalität des Interpreters, die den 10ms Takt
nutzt funktioniert weiterhin. Ich nutze auch multithreading in dem Programm, und das funktioniert
einwandfrei. Der INT_TIM2COMP ist ein define in der IDE um den 10ms Takt auch in eigenen
Programmen nutzen zu können. Es ist auch das einzige, was man in der IDE/Bibliothek mit dem Timer 2
machen kann. Zu dem Thema gibt es auch hier im Forum schon einige Beiträge.
Aber Peter kann dir das sicher auch nochmal bestätigen.
GruÃ?
Franz-Peter


    Antwort schreiben


Antworten: