Schaltung
Die Schaltung entspricht der LED-Ziffernanzeige.
Der Eingang RA4 wird nun mit einem Tastschalter verbunden, der RA4 mit Masse verbinden kann. Mit einem 10kOhm-Widerstand wird RA4 im Ruhezustand auf "1"-Pegel gehalten (nicht in meinem Platinenlayout enthalten). Solange der Tastschalter nicht gedrückt wird, läuft die Uhr. Die Zeitmessung wird unterbrochen, solange der Schalter gedrückt wird. Um die Stoppuhr auf "0.00.0" zurückzusetzen, drückt man die Reset-Taste. Die längstmögliche Messzeit ist "9.59.9": 9 Minuten und 59,9 Sekunden. |
Programmablauf
Zur Vorbereitung muss man die Pins RB0-RB7 sowie RA0-RA3 in
Ausgabe-Mode
schalten und auf "1" setzen.
Zur Anzeige einer 4-stelligen Zahl muss man der Reihe nach die Pins RA0-RA3 vorübergehend auf "0" legen und den 7-Segment-Code der zugehörigen Ziffer am Port B ausgeben. Um ein Flackern der Anzeige zu vermeiden, sollte die Darstellung der gesamten Zahl mindestens 50 mal pro Sekunde wiederholt werden. Da der einzige Timer des 16F84 für die exakte Zeitmessung benötigt wird, wird das Anzeigetiming in diesen Rythmus einbezogen..
Bestimmte Speicherzellen enthalten die Werte für Minuten, Zehnersekunden, Einersekunden und Zehntelsekunden. Diese Speicherzellen werden beim Programmstart auf 0 gesetzt.
Es werden die üblichen Bauteile verwendet, d.h. anstelle eines Uhrenquarzes (32768 Hz) wird der normale 4 MHz-Keramikschwinger eingesetzt. Das ergibt einen internen Takt von 1 MHz. Der Timer wird mit dem Vorteiler an den Takt angeschlossen. Der Vorteiler wird auf den Teilerfaktor 32 und der Timer auf 256-125=131 eingestellt. Damit löst der Timer alle 4 ms einen Interrupt aus. Das entspricht einer Interruptfrequenz von 250 Hz.
Bei jedem Interrupt wird zur nächsten Anzeigestelle der LED-Anzeige weitergeschaltet. Nach 4 Interrupts ist die gesamte Zahl einmal dargestellt, und im 5. Interrupt wird stattdessen ein Zähler betätigt. Danach beginnt die Anzeige von neuem. Es wird also 50 mal pro Sekunde der Anzeigezyklus durchlaufen. Der Zähler ist Basis für die Zeitmessung. Nach 5 Zählertakten ist eine 1/10 Sekunde vergangen, und die anzuzeigende Stoppzeit wird um 1/10 Sekunde erhöht.
Die Routine erhöht den Wert der Zehntelsekunden-Speicherzelle. Erreicht der Wert 10, dann wird die Speicherzelle gelöscht, und der Wert der Einersekunden um 1 erhöht. Erreicht der Wert der Einersekunden 10, dann wird die Speicherzelle gelöscht, und der Wert der Zehnersekunden um 1 erhöht. Erreicht der Wert der Zehnersekunden 6, dann wird die Speicherzelle gelöscht, und der Wert der Minuten um 1 erhöht. Erreicht der Wert der Minuten 10, dann wird die Speicherzelle gelöscht.
Nach jeder kompletten Anzeige der Werte im Display wird der Pegel am Eingang RA4 eingelesen. Ist der Wert "0", dann wird das Zählen gestoppt. Ist der Wert "1" wird das Zählen erlaubt.
Programmlisting
Da RA4 ein Schmidt-Trigger-Input ist, lassen sich recht einfach Pulsweitenmesser oder Frequenzzähler mit der selben Schaltung realisieren. Allerdings fehlen freie Ports, um Schalter anzuschließen, mit denen man zwischen verschiedenen Funktionen umschalten kann. Möglich ist es, die Schalter parallel zum Display anzuschließen, weitaus einfacher ist es allerdings, für solche Zwecke ein LCD-Display mit parallel geschalteter Tastatur zu verwenden.
Da alle Lernprogramme auch auf dem 16F876 laufen, ist auch die Nutzung dieses PIC ein Ausweg. Er hat 8 zusätzliche Pins.
Autor: sprut
erstellt: 2000
letzte Änderung: 04.02.2004