Wenn man beispielsweise eine digitale Uhr bauen möchte, benötigt man einen zuverlässigen (Sekunden-)Takt mit der Frequenz von 1Hz. Eine Umsetzung mit dem NE555 wäre zu ungenau, denn die zeitgebenden Komponenten (Widerstände und Kondensatoren) variieren ebenso wie der NE555 selbst abhängig von der Umgebungstemperatur. Daher wird auf einen Schaltkreis mit einem (Schwing-)Quarz zurückgegriffen, der auf der Pierce-Schaltung basiert.
Schwingquarze erzeugen einen Oszillator mit einer bestimmten Frequenz in hoher Genauigkeit, sobald eine
Spannung angelegt wird. Meist sind diese Schwingungen jedoch im Bereich kHz oder MHz. Für unser Signal
benötigen wir jedoch eine Frequenz von 1Hz.
Hier wird zunächst der Binärzähler-Chip CD4060 als Frequenzteiler verwendet, so dass an seinem Q14-Ausgang
ein 2Hz-Signal anliegt. Weiter lässt sich die Original-Frequenz von 32768kHz des Quarzes nicht teilen.
In einer weiteren Stufe wird der Zähler CD4518 verwendet, um diese 2Hz in ein 1Hz-Signal umzuwandeln.
Der IC CD4060 ist ein 14-stufiger, binärer Ripple-Carry-Zähler/Teiler mit Oszillator, der meist in dem DIP-16 Gehäuse schon seit 1968 auf dem Markt ist. Er bietet die Möglichkeit, neben einen Taktgenerator für RC-Glieder auch ein Schwingquarz zu verwenden. Dessen Signal geht auf einen 14-stufigen Teiler, wobei 10 Teilerstufen nach außen geführt sind.
VDD | 3V (abhängig vom IC auch mehr) |
---|---|
VSS / GND | Masse |
Q4 – Q14 | Ausgänge der Teilerstufen |
RESET (auch: MR) | ("Master Reset") Setzt den Takt und die Teilerstufen zurück, sobald ein HIGH-Signal anliegt |
⌀1 [#11] (auch: Clock) | Externes Taktsignal für den Teiler (RC-Stufe oder Schwingquarz) |
⌀0 [#10] (auch: ExtR) | Widerstand der RC-Kombination |
⌀0 [#9] (auch: ExtC | Kondensator der RC-Kombination |
Der IC CD4815 ist ein dualer BCD-Zähler Baustein in einem DIP-16 Gehäuse. Es können also unabhängig voneinander zwei Taktsignale hochgezählt werden.
VDD | Spannungsversorgung (3V) |
---|---|
VSS / GND | Masse |
Enable A | Aktiviert Zähler A |
Enable B | Aktiviert Zähler B |
Reset A | Setzt Zähler A zurück |
Reset B | Setzt Zähler B zurück |
Clock A | Eingangs-Takt für Zähler A |
Clock B | Eingangs-Takt für Zähler B |
Q1A, Q2A, Q3A, Q4A | BCD-Ausgänge für Zähler A |
Q1B, Q2B, Q3B, Q4B | BCD-Ausgänge für Zähler A |
Im ersten Schaltplan ist der Aufbau des Quarz-Oszillators mit dem CD4060 gezeigt, der an seinem Ausgang (Q14) zunächst das 2Hz-Signal generiert. Dies wird durch eine blaue LED visualisiert:
Hinweis: Obwohl in den meisten Datenblättern eine Betriebsspannung von bis zu 15V angegeben wird, hat die Schaltung bei mir nicht mit einer 9V-Batterie funktioniert. Eine 3V-Knopfzelle hat einwandfrei funktioniert. Vermutlich lag es aber daran, dass ein Schwingquarz höchstens mit einer Leistung von ca. 1µW belastet werden darf, um zu schwingen, ansonsten bleibt er "stehen"
Das Signal an CLOCK
des ersten Schaltplans wird mit dem Eingang CLOCK/A
des
CD4518 verbunden und sollte dann ein stabiles 1Hz-Signal am Ausgang Q1A
ergeben. Dies wird
hier mit einer roten LED visualisiert.
Wenn die Schaltung richtig aufgebaut wurde, dann sollte die blaue LED am Ausgang des CD4060 im 2Hz-Takt und die rote LED am Ausgang des CD4518 im 1Hz-Takt blinken wie im folgenden Video gezeigt:
Um die Genauigkeit und Stabilität des Taktsignals zu überprüfen, habe ich den 1Hz-Ausgang mit einem digitalen
Eingang (hier: D7) eines Arduino Uno verbunden und den Taktgeber direkt über den Arduino mit 3,3V mit Spannung versorgt.
(Alle anderen externen Spannungsquellen entfernen!)
Der folgende Sketch misst die Differenz zwischen zwei Takten in einer Genauigkeit von Mikrosekunden und
gibt diese auf der seriellen Konsole aus:
#define PIN_CLOCK 7
long lastClockValue = 0, clockValue = 0;
byte oldClockState = 0, clockState = 0;
void setup()
{
lastClockValue = micros();
clockValue = lastClockValue;
pinMode(PIN_CLOCK, INPUT_PULLUP);
Serial.begin(9600);
}
void loop()
{
clockState = digitalRead(PIN_CLOCK);
if (clockState != oldClockState) {
oldClockState = clockState;
clockValue = micros();
Serial.println(clockValue - lastClockValue);
lastClockValue = clockValue;
}
}
Das Signal scheint recht stabil zu sein, ist aber meist um 20µs zu kurz, was aber dennoch einer Genauigkeit von 99,996% entspricht.
zurück