Messung der Periodendauer mit Conrad C-Control V1.1
----------------------------------------------------

M.Piering, 02/2022...11/2022

Disclaimer:
Die Erarbeitung der vorliegenden Arbeitsergebnisse erfolgte nach bestem Wissen und Gewissen.
Trotzdem knnen eventuelle Schden durch den Nutzer dieser Informationen und Software nicht ausgeschlossen werden.
Keine bernahme der Verantwortung fr Schden jeglicher Art durch den Author.

Die Informationen und die Dateien knnen frei fr die Gemeinschaft genutzt und -gemeinsam und vollstndig- weitergegeben werden.
Keine, wie auch immer geartete, kommerzielle Nutzung als auch Nutzung in sicherheitsrelevanten bzw. medizinischen Anwendungen erlaubt.

Hardware:
- Conrad C-Control V1.1 Main-Unit (getestet auf Starterboard); sollte auch mit M-Unit und Station 1 funktionieren,
zustzliche Hardware fr Messung der Uhrpendel-Schwingung:
- Fototransistor, 47 Ohm Widerstand und Verbindungskabel aus Busch Elektronikbox zum Anschlu an CC1,
- "Light-Pen" - Spielzeug fr Kinder-Geheimschriften als Lichtquelle fr den Fototransitor zum Bau einer einfachen Lichtschranke zur berhrungslosen Messung der Schwingung des Pendels einer
  Wanduhr; der Stift liefert ber eine Led sichtbares Licht, wohl mit UV-Anteil

Dateien:
- "lies_mich.txt", diese Datei,
- "LFCNT011.ASM",  Assembler-Routine zum Messen der Periodendauer bis ca. 33s mit Auflsung von 2us,
- "LFCNT011.s19", assemblierte Routine im S19-Format zum einbinden in CCBASIC-Programm,
- "TCAPLAD.ASM", Assembler-Programm zum Einbinden der TCAP-Messroutine in TCAP-Interrupt,
- "TCAPLAD.lst", Listing des Assemblerprogramms; der im Listing kommentierte Maschinencode wird ber den CCBASIC auf den Stack ab Adresse $91 geladen und
  mittels SYS-Befehl ausgefhrt,
- "TOFLLAD.ASM", Assembler-Programm zum Einbinden der TOFL-Messroutine in TOFL-Interrupt,
- "TOFLLAD.lst", Listing des Assemblerprogramms; der im Listing kommentierte Maschinencode wird ber den CCBASIC auf den Stack ab Adresse $91 geladen und
  mittels SYS-Befehl ausgefhrt,
- "LFCounter_0_13.bas",  CCBASIC-Programm zur wiederholten Messung der Periodendauer zwischen vorher definierten Signalflanken; die Rohdaten der gemessenen Periodendauer werden auf RS232
  ausgegeben; das Programm zeigt Abweichungen der gemessenen Periodendauer von 1s +/-10% ber die Run- und Activity-LED der CC1 zur angedachten Justage des Pendels einer Wanduhr an
- "Taktgenerator.bas", CCBASIC-Programm zur Simulation einer 1s-Schwingung eines Uhrpendels an PortPin 9 einer zweiten CC1 fr Testzwecke; die Nulldurchgnge der vollen Schwingung werden
  durch kurze Rechteckpulse gekennzeichnet

Beschaltung:
- Messung der Periodendauer eines gepulsten Signals am Collector-Eingang eines Transistors am FREQ1(DCF)-Eingang,
fr die Lichtschranke:
- Fototransistor, Collector verbunden mit FREQ1(DCF)-Eingang, Emitter verbunden ber einen 47 Ohm Widerstand auf Masse.

Funktionsweise:
- die Idee zur Messung einer Frequenz von <<1Hz bzw. einer Periodendauer >>1s  mit der C-Control V1.1 geht zurck auf den Beitrag "Periodendauer eines sehr langsamen Rechtecksignals
  ermitteln" von Dietmar Harlos im CCIntern-Forum im Oktober 2018; auch mit der CC1 sollten hnlich lange Periodenzeiten mit hoher Auflsung verlsslich messbar sein,
- als praktische Anwendung des Zhlers sollte die Schwingung des Pendels einer 100jhrigen Wanduhr me- und justierbar werden,
- das vorliegende Basic-Programm "LFCounter_0_13.bas" installiert und konfiguriert einen Langzeitzhler ber Interrupts, ermittelt die Periodendauer einer Schwingung und vergleicht diese
  gegen im Programm hinterlegte Grenzen von 1s +/-10%. Je nachdem, ob die ermittelte Periodendauer krzer, lnger oder im definierten Bereich ist, werden die RUN- und die Activity-LED
  der CC1 als "Status-Monitor" angesteuert. Parallel wird der Wert der ermittelten Periodendauer ber einen (8+16)bit-Wert als Vielfaches von 2us auf RS232 ausgegeben.
  Eine finale Berechnung und Ausgabe der Periodendauer in Sekunden oder Mikrosekunden durch das Basic-Programm erfolgt dabei nicht.
- Herzstck der Anwendung ist ein (16+8)bit breiter Zhler mit einer Auflsung von 2us, der ber im Timer-Capture(TCAP1)- und Timer-Overflow(TOFL)-Interrupt eingebundene Maschinenprogramme
  erstellt wird. Nachdem die Maschinenroutinen installiert, konfiguriert und scharf geschalten sind, knnen Beginn und Ende einer Schwingung, deren Periodendauer ermittelt werden soll,
  durch eine negative Signal-Flanke am FREQ1(DCF)-Port erkannt werden.
  Der jeweilige Wert des freilaufenden 16bit Timers der CC1 wird gespeichert und der Wert bis zum nchsten bzw. seit dem letzten Timer-berlauf wird errechnet.
  Die Nutzung des 16bit-Timers der CC1 mit einer Auflsung von 2us ermglicht die Messung einer Periodendauer von ca. 131ms (genau: 2^16*2us). Nach Erreichen der Zhlbreite des
  16bit-Timers luft dieser ber und erzeugt einen TOFL-Interrupt. Dieser Interrupt, wenn aktiv geschalten, ruft ein vorher eingebundenes Maschinenprogramm auf, welches die Anzahl
  der Timer-berlufe in einer 8bit-Variable aufsummiert.
  ber diese Kaskade von 16bit-Timer und 8bit-TOFL-Zhler ergibt sich ein 24bit Timer mit einer Auflsung von 2us. Damit lassen sich also Periodenlngen von bis zu (2^24*2us=) ~33.55
  Sekunden messen (entspricht einer Frequenz von ~0.03Hz). Ein mglicher berlauf des formierten 24bit Zhlers wird in einer definierten Kontroll- und Status-Variable, welche durch
  die Maschinenroutinen und das CCBASIC-Programm genutzt wird, angezeigt.
- der Langzeitzhler kann ber CCBASIC so konfiguriert werden, dass die Periodendauer eines von zwei fallenden Flanken begrenzten Rechtecksignals am FREQ1(DCF)-Eingang gemessen werden kann.
  Aber auch die Periodendauer der durch Rechteckpulse getriggerten Nulldurchgnge einer "mechanischen Sinusschwingung" wie der eines Uhrpendels kann ermittelt werden. Dazu mu der Zhler
  ber die Kontroll-Variable so konfiguriert werden, da nur jede zweite fallende Flanke als Start- und Ende einer zu messenden Schwingdauer bercksichtigt werden.
- die berhrungslose Messung der Periodendauer des nicht-modifizierten Uhrpendels ist problemlos mglich. Dabei durchluft ein ca. 2mm starker Gewindestab als Verlngerung des Pendels
  die aufgebaute Lichtschranke zwischen "Light-Pen" und Fototransistor (mgliche Lnge der Lichstrecke ca. (3...4)cm). Der durch den Stift permanent beleuchtete Fototransistor zieht
  den Pegel des FREQ1(DCF)-Eingangs ber seinen Kollektoreingang dauerhaft auf "Low". Ein Durchgang des Gewindestabs durch die Lichtschranke (=erster Nulldurchgang der Sinus-Schwingung)
  fhrt zu einem kurzen High-Pegel am FREQ1(DCF)-Eingang. Die fallende Flanke dieses Pulses lst ber den TCAP1-Interrupt den Start der Messung der Periodenlnge der nun ablaufenden
  Schwingbewegung des Uhrpendels aus. Eine Periode der Schwingung des Uhrpendels wird durch drei Nulldurchgnge defininiert, also durch drei ber die Lichtschranke ausgelste Pulse,
  wobei nur der erste (=Anfang der Schwingung) und der dritte Puls (=Ende der Schwingung) fr die Messung der Periodendauer von Interesse sind.
- die Funktion des Langzeitzhlers wurde mittels Generatorprogramm "Taktgenerator.bas" auf einer zweiten C-Control und zustzlichem Oszilloskop geprft (drei Pulse,
  generiert am Port 9 einer zweiten CC1, simulieren am FREQ1(DCF)-Eingang der mit dem Langzeitzhler ausgersteten CC1 eine 1s-Schwingung eines Uhrpendels).
- Die These, dass eine genau gehende Pendeluhr eine Periodendauer des Pendels von mglichst einer Sekunden besitzen mu, scheint nicht zu stimmen. Die Messung an einer langfristig,
  relativ genau laufenden Pendel-Uhr ergab eine Periodendauer von ca. 1s und 150ms (also ~+15%). Eine Verkrzung des Pendels ber die Drehung einer Mutter auf dem Gewindestab fhrte zu
  einer nur leichten Verringerung der gemessenen Periodendauer (trotzdem weit lnger als 1s), aber merklich zu eineM "Vorgehen" der Pendeluhr. Das bedeutet wohl, dass die Genauigkeit nicht
  nur ber die Schwingdauer des Uhrpendels, auch ber mechanischen Komponenten im Uhrwerk bestimmt werden.
- folgende Themen bei der Programmierung des Langzeitzhlers bzw. des Basic-Programms zur Messung der Periodendauer haben zu etwas Kopfzerbrechen gefhrt, wurden aber frher oder spter
  gelst:
  1. die Summe der ber TCAP1-Interrupt gemessenen Zeiten zwischen erster fallender SIgnalflanke und erstem Timer-Overflow bzw. zwischen letztem Timer-Overflow und letzter fallender
  Signalflanke mu mit Beachtung des Carry-Flags gebildet werden. Ist die Summe dieser Zeiten grer als die genutzte 16bit breite Variable bedeutet dies ein zustzlicher "Overflow",
  welcher im 8bit-TOFL-Zhler bercksichtig werden mu,
  2. da der 24bit-Langzeitzhler durch die 8bit-TOFL-Zhlervariable und die 16bit-Timervariable (High- und Low-Byte) reprsentiert wird, ist die IF-THEN-ELSE Prfung der gemessenen
  Periodendauer auf vorgegebene, grere Toleranzbereiche etwas unstndlicher.

Weitere Ideen:
Eine Erweiterung des TOFL-Zhlers auf 16bit (Aufsummieren der TOFL-Ereignisse in einer 16bit Variable (statt derzeit 8bit) unter Bercksichtigung des Carry-Flags) schafft einen
32bit Zhler, der eine Messung von Periodenlngen bis zu (2^32*2us=) ~2 Stunden und 23min ermglicht.

Rckmeldung erwnscht unter mak.kleist@gmx.de.
