Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 20 µs Timerauflösung Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 26.05.2007 11:31)
 Als Antwort auf kleine Zeiten mit der OM von Georg - 25.05.2007 18:03
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Mini M-Unit, Open-Mini Station, sonstige
Hallo zusammen,

wie immer gibt es auf der OM mehrere Realisierungsmöglichkeiten.

Besonders auf der Open-Macro bietet es sich an, einfach den 16-Bit-Zähler (TCNTH:TCNTL) vom Timer Interface Module auszulesen, denn die OMAC kann bereits von Haus aus mit 16-Bit-Zahlen umgehen. Er zählt in 20 ms üblicherweise von 0 bis 999. So ergibt sich eine zeitliche Auflösung von 20 µs.

Bei Auslesen des höherwertigen Bytes (TCNTH) wird der Inhalt des niederwertigen Bytes (TCNTL) in einem Buffer gesichert. Nachfolgendes Auslesen von TCNTH verändert nicht den Wert des gebufferten TCNTL, bis TCNTL ebenfalls ausgelesen wurde. Dadurch wird sichergestellt, daß High- und Lowbyte zum gleichen Zeitpunkt gelesen werden. Der Zähler läßt sich in BASIC oder Assembler auslesen. Der Assemblerbefehl LDHX liest sequentiell. Siehe CPU-Manual.

' 20 µs Timerauflösung auf der Open-Macro
' am 26. Mai 2007 von Dietmar Harlos

INCLUDE "OMAC0.DEF"

DEFINE TCNT WORD

PrintSpc=ON

WHILE TRUE

  PRINT TIMER;
  read_TCNT
  PRINT TCNT

WEND

END

FUNCTION read_TCNT INLASM

! LDHX TCNTH
! STHX TCNT
! RTS

END FUNCTION

Das Programmbeispiel erzeugt Ausgaben wie die folgenden auf der seriellen Schnittstelle:

 425 525
 425 166
 426 806
 427 447
 427 88
 428 664
 429 305
 429 945
 430 586
 430 227
 431 867
 432 507
 432 148

Natürlich kann man auch das TIM Counter Modulo Register (TMODH:TMODL) so anpassen, daß der 20-ms-Interrupt häufiger ausgeführt wird. Das Thema wurde bereits mehrfach hier im Forum behandelt. Selbstverständlich werden durch Ändern des Modulo-Registers nicht nur die TIMER-Variable, sondern auch vom TIM abhängige Funktionen (Uhr, PWM, etc.) beeinflußt.

Schließlich könnte man Zeiten per FOR..NEXT- oder DBNZ-Schleife stoppen. Dann sollten aber, wie in den Beispielprogrammen beschrieben, die Interrupts deaktiviert werden. Denn wenn das Ausführen der Schleife durch eine Interruptroutine unterbrochen wird, führt das effektiv zu einer Verringerung der Programmausführungsgeschwindigkeit.

> Bei der Einstellung Pause = 1 verstreicht eine Zeit von 20ms bis es weitergeht.

Nicht ganz. Siehe OM-Manual.

Grüße
Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: