PIC18F4550 timer starten und wieder stoppen

#4217764
Lesenswert?

Dürüm schrieb:
> Wer hier den Thread in die Länge zieht... Die Frage wurde ja schon mit
> der ersten Antwort beantwortet.

Fragt sich nur, wie sinnvoll die Antwort ist.

Wenn jemand im Wasser treibt und ruft, dass er nicht schwimmen könne, 
ist es zwar formal korrekt, ihm ein Buch "Schwimmen lernen für Dummies" 
zuzuwerfen, aber so richtig hilfreich ist es nicht.
Zumal wir ja unsere Pappenheimer kennen, die gerne mit Vollgas in die 
falsche Richtung fahren und dann fragen, wie man dafür die Handbremse 
löst.
#4217765
Lesenswert?

Karl H. schrieb:
> Fragt sich nur, wie sinnvoll die Antwort ist.
>
> Wenn jemand im Wasser treibt und ruft, dass er nicht schwimmen könne,
> ist es zwar formal korrekt, ihm ein Buch "Schwimmen lernen für Dummies"
> zuzuwerfen, aber so richtig hilfreich ist es nicht.

Die Antwort zielte nur darauf ab eine halbwegs vernünftig formulierte 
Frage zu bekommen. Das ganze andere Gelaber ist doch eigentlich sinnlos 
...
Gast #4217775
Lesenswert?

@ Danke an alle
Ist so auch richtig?

T1CONbits.TMR1ON = 1 // start
T1CONbits.TMR1ON = 0 // stop

Peter D. schrieb:
> Will man mehrere Zeiten messen, läßt man den Timer durchlaufen und zieht
> einfach die Start- und Stoppzeiten voneinander ab.

So ?:
register union Timers ut1;

    ut1.bt[0] = TMR1L;
    ut1.bt[1] = TMR1H;
#4217784
Lesenswert?

Ne

Simon schrieb:
> @ Danke an alle
> Ist so auch richtig?
>
> T1CONbits.TMR1ON = 1 // start
> T1CONbits.TMR1ON = 0 // stop

Da fehlen Semikola.


Simon schrieb:
> Peter D. schrieb:
>> Will man mehrere Zeiten messen, läßt man den Timer durchlaufen und zieht
>> einfach die Start- und Stoppzeiten voneinander ab.
>
> So ?:
> register union Timers ut1;
>
>     ut1.bt[0] = TMR1L;
>     ut1.bt[1] = TMR1H;

Wo wird denn da was voneinander abgezogen ?


BTW.: welchen Compiler verwendest du ?
<edit> und sag mal was du für Zeiten (Signale) messen willst.
Peter D. 's Hinweis mit dem Capture könnte da schon passen ...
Gast #4217822
Lesenswert?

Volker S. schrieb:
> Da fehlen Semikola.

@
T1CONbits.TMR1ON = 1 ;// start
T1CONbits.TMR1ON = 0 ; // stop

Volker S. schrieb:
> Wo wird denn da was voneinander abgezogen ?

sei:

[code]
    register union Timers ut1;
  unsigned long t1;

    ut1.bt[0] = TMR1L;
    ut1.bt[1] = TMR1H;
  .....

   ut2.bt[0] = TMR1L;
   ut2.bt[1] = TMR1H;

  // t Value
  t1 = ...

[\code]
Ich Weiss es nicht :-(

Volker S. schrieb:
> BTW.: welchen Compiler verwendest du ?
@
c18

Volker S. schrieb:
> <edit> und sag mal was du für Zeiten (Signale) messen willst.
> Peter D. 's Hinweis mit dem Capture könnte da schon passen ...
#4217842
Lesenswert?

Simon schrieb:

>
1
>     register union Timers ut1;
2
>   unsigned long t1;
3
> 
4
>     ut1.bt[0] = TMR1L;
5
>     ut1.bt[1] = TMR1H;
6
>   .....
7
> 
8
>    ut2.bt[0] = TMR1L;
9
>    ut2.bt[1] = TMR1H;
10
> 
11
>   // t Value
12
>   t1 = ...
13
> 
14
>
> Ich Weiss es nicht :-(


Du brauchst 2(!) Zeiten.
Machst du doch aiuch nicht anders, wenn du deine Kinder beim Radfahren 
mit einer Armbanduhr "stoppen" sollst.
Wenn Franz losfährt, merkst du dir 13 Uhr 30. Wenn Anna losfährt merkst 
du dir 13 Uhr 34. Franz kommt um 13 Uhr 48 ins Ziel, war also 13:48 - 
13:30 gleich 18 Minuten unterwegse. Wohingegen Anna um 13:56 ins Ziel 
kommt und daher nur 13:56 - 13:34 = 22 Minuten unterwegs war.

Und genauso wie du dir im täglichen Leben das rumrechnenmit Stunden und 
Minuten vereinfachen kannst, indem du erst mal alles auf Minuten 
bringst, genauso kannst du dir am µC das Leben erleichtern, indem du 
erst mal das Lowbyte und das Highbyte vom Timer in eine einzige Zahl 
zusammenfasst, mit der sich dann einfacher rechnen lässt.
1
   unsigned int Zeit1, Zeit2;
2

3

4
   Zeit1 = TMR1H << 8 + TMR1L;
5

6
etwas später
7

8
   Zeit2 = TMR1H << 8 + TMR1L;
9

10
die Zeit dazwischen ist daher
11

12
  unsigned int Laufzeit = Zeit2 - Zeit1;
#4217874
Lesenswert?

Karl H. schrieb:
> Zeit1 = TMR1H << 8 + TMR1L;

Lieber in zwei Zeilen lassen, weil wenn im 16Bit R/W Mode, dann muss 
zuerst TMR1L gelesen werden, da kein direkter Zugriff auf das 
eigentliche TMR1H möglich ist. TMR1H wird beim Lesezugriff auf TMR1L in 
ein Buffer Register geschrieben auf das dann zugegriffen wird ...
(OK, Abarbeitung von rechts nach links, aber ich würde mich nicht darauf 
verlassen). Das Resultat von TMR1H << 8 wird vermutlich NULL sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren