Das Open-Control-Projekt - Die Alternative zur C-Control-I


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: