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

Re: Projekt Stopuhr Kategorie: Programmierung Basic (von Aristocat - 20.02.2009 21:20)
Als Antwort auf Re: Projekt Stopuhr von Sonnenflieger - 19.02.2009 7:51

> > > hallo,
> > > bin gerade dabei eine Stopuhr zu programmieren, mittlerweile ist das Programm so umfangreich,
> > >  dass die Stopuhr zu langsam läuft. (Timer 2 10ms) analog dem Demoprogramm.
> > > In der Hilfe steht:
> > >  // Timer 2 läuft normalerweise im 10ms Takt. In diesem...
> .
> > Hi,
> >
> > mach nen Timer cnt rein if cnt >= 10 then .... dann hast du 100ms
> >
> > GrĂĽĂ?e Ulli
> >
> Hallo Ulli,
> danke fĂĽr die schnelle Antwort. Ich kann das mal versuchen.
> Kann es eigentlich sein, dass das Programm den Prozessor so beschäftigt,
> dass ein Interupt nicht abgearbeitet wird? Ich kann mir ja sonst nicht erklären warum
> die Uhr zu langsam läuft. Im Programm zusätzlich abgearbeitet TicksTimerCount, arbeitet korrekt.
> GruĂ? F.J.

Hallo Sonnenflieger,

Aus Online-Manual:
Irq_GetCount, Gibt an, wie oft der Interrupt von der Hardware bis zum Aufruf von Irq_GetCount() ausgelöst wurde.
Ein Wert grö�er 1 kann dann auftreten, wenn die Hardware schneller Interrupts generiert, als der Interpreter die
Interruptroutine abarbeiten kann.

wenn die routine länger dann 10 ms lauft, gibts problemen mit timing in das beispiel.
Die ruckgabewert von  Irq_GetCount() kann man brauchen zum corrigieren

Mit folgendes beispiel kannst Du eine routine jede 100ms laufen lassen.
Wenn die routine 20ms lauft wird der rĂĽckgabewert irqcnt=2 geben
cnt wird dann mit 2 erhöht und die timing bleibt correct.

Sub INT_10ms()
    cnt=cnt+irqcnt
    If cnt>=10 Then
        cnt=0
        Sub_100ms()
    End If
    irqcnt=Irq_GetCount(INT_TIM2COMP)   ' Interrupt Request Counter
End Sub

Achtung, "Dim irqcnt As Integer" darf nicht in die interrupt routine geschrieben werden,
sonst wird die immer auf 0 gesetzt beim anfang des routine.
Die Variablendefinition fĂĽr cnt und irqcnt soltte im main() gemacht werden

Ich hab so eine routine die zwischen 30 und 80 ms lauft, und die timing bleibt perfect

GruĂ?,
Aristocat



    Antwort schreiben


Antworten: