Pfad: Home => AVR-DE => Anwendungen => Stoppuhren mit AVR
Stoppuhr AVR-Anwendungen

Stoppuhren mit AVR in Assembler
Logo

Stoppuhren mit einem AVR

Stoppuhren sind Zeitmesser. Wie könnte man, neben einer mechanischen Uhr mit Druckknöpfen, eine elektronische Uhr mit einem AVR bauen?

1 Was es braucht

Nun, man benötigt dazu
  1. einen Taktgeber, damit man die Zeit messen kann,
  2. eine Anzeige, damit man die gestoppte Zeit auch ablesen kann, und
  3. ein paar Knöpfe oder Taster, damit man die Zeitmessung starten und stoppen kann, und
  4. einen AVR.

2 Näheres zu den drei Komponenten

2.1 Taktgeber

Die AVR haben alle einen internen Taktgeber. Der arbeitet meistens bei 1 MHz. "Bei" bedeutet, dass er nicht so arg präzise ist: er hat eine Ungenauigkeit von 10%, abhängig von Temperatur und Betriebsspannung. Bei 60 Sekunden sind 10% schon stolze 6 Sekunden Ungenauigkeit. Wenn man sich Mühe gibt, kriegt man die Ungenauigkeit auf 2% abgesenkt (mit Spannungsregler, Justieren des Calibration Bytes), aber das sind immer noch 1,2 Sekunden. Wer's nicht genauer braucht, z. B. beim Eierkochen, ist damit schon fertig bedient.

Genauer kriegt man es nur mit einem Quarztakt. Käufliche Quarze haben eine Genauigkeit von 30 oder 50 ppm, womit wir in der Genauigkeit auf 0,005% kommen. Bei 60 Sekunden sind das 3 ms Ungenauigkeit und das reicht für den Amateurbedarf gänzlich aus.

Wer es noch genauer haben will, muss Für Genauigkeitsfanatismus gilt: Jede Messung kann nur so genau sein wie das schwächste Glied in der ganzen Messkette.

Welchen Quarz soll man nehmen? Da die Stoppuhr in jeder Millisekunde (Genauigkeitsfanatiker) bzw. alle 10 ms (Realisten) den Zeitmechanismus anstoßen muss, muss die Quarzfrequenz durch 1000 bzw. 100 teilbar sein. Da ein Timer das erledigt, muss sein Vorteilerwert von 8 (ms-Variante) bzw. 64 (10 ms-Variante) ebenfalls in die Teilerkette passen. Beim CTC mit einem 8-Bit-Timer muss der CTC-Wert zwischen 0 (Teilen durch 1) und 255 (Teilen durch 256) liegen. Verwendet man dafür einen 16-Bit-Timer, darf es ein Teilen durch 1 bis 65.536 sein. Beim 8-Bit-Timer sind Quarzfrequenzen von 2 oder 2,048 oder 8 MHz machbar. Beim 16-Bit-Timer geht auch 4 MHz. Das war es aber auch schon, wenn man nicht zu Monsterfrequenzen greifen will, die einem Batteriebetrieb nicht sehr zuträglich wären.

Ein Quarz engt schon mal die Auswahl des AVR-Typs auf zwei Drittel ein, denn nicht alle AVR bieten die Möglichkeit, einen Quarz oder einen externen Quarzoszillator anzuschließen.

2.2 Anzeige

Zur Anzeige kommen nur LCDs in Frage, denn eine Stoppuhr sollte ja batteriebetrieben sein, damit man sie mit sich herumschleppen kann. Wer das Ergebnis, z. B. in einem Stadion, noch auf eine Riesen-LED-Anzeige projizieren will, braucht dazu schon mal zwei AVRs: einen zum Messen und einen zur Anzeige. Und dazwischen eine Kommunikations- und Übertragungsmimik.

Eine LCD braucht, um zu funktionieren, vier oder acht Datenbus-Anschlüsse und zwei oder drei Kontrollanschlüsse (siehe Näheres hier). Das macht im Minimum sechs und im Maximum 11 Portpins.

AVR-Typen, Minimal-Version, interner RC AVR-Typen, Maximal-Version, interner RC Links sind die verfügbaren AVR-Typen in der Minimalversion, rechts die bei der Maximalversion gelistet, jeweils vom internen RC-Oszillator getaktet.

Die Auswahl wurde übrigens mit der Software avr_select_advanced erstellt, die hier näher beschrieben und verfügbar ist.

AVR-Typen, Minimal-Version, Quarztakt AVR-Typen, Maximal-Version, Quarztakt Hier nun dasselbe, aber mit einem externen Quarz als Taktgeber. Das reduziert die möglichen AVR-Typen, mit denen das machbar ist, ganz erheblich.

2.3 Knöpfe und Taster

Jede Stoppuhr braucht Taster, mit denen sie bedient werden kann. Minimal sind das
  1. die Reset-Taste, mit denen die Stoppuhr wieder auf Null gestellt werden kann, und
  2. eine Start/Stop-Taste, mit denen der Messvorgang gestartet, unterbrochen und wieder fortgesetzt werden kann.
Sollen mit der Stoppuhr verschiedene Zeiten gespeichert werden, kommt ein "Store"-Taster hinzu. Sollen die Zeiten auf zwei, drei oder vier Bahnen separat vermessen werden, braucht es weitere N Tasten. Minimal werden also zwei, maximal sechs Tasteneingänge benötigt. Die Maximalversion kann die Auswahl der verfügbaren und geeigneten AVR-Typen weiter einengen.

Da Tasten immer prellen, muss ein Schutz gegen Prellimpulse in die Hard- oder Software. Ein Hardware-Schutz gegen Prellen sähe z. B. so aus:

Hardware-Prellschutz Spannungsverlauf am Porteingang Der interne Pull-Up-Widerstand von etwa 50 kΩ lädt den Elko am AVR-Porteingang nur verzögert auf, wenn dieser durch den Tastendruck entladen wurde. Nachfolgende Prellimpulse vor dem Erreichen der Schaltschwelle des Porteingangs (3 V bei 5 V Betriebsspannung) führen noch nicht zu einer Eins am Porteingang. Die 3 V am Porteingang werden erst nach ca. 45 ms erreicht. Das unterdrückt alle Störimpulse durch die Taste, führt aber nicht zu einer Verzögerungszeit beim Erkennen des Tastendrucks.

Diese Einfachstschaltung hat ein paar ernste Nachteile:
  1. Der Elko entlädt sich schlagartig über den Taster, wenn dieser geschlossen wird. Es fließt ein sehr hoher Stoßstrom. Das führt zu einem beschleunigten Altern der Tastenkontakte, die korrodieren und irgendwann gar keinen Kontakt mehr geben.
  2. Wenn die Stomversorgung des Prozessors abgeschaltet wird, sinkt die Spannung am VCC-Pin relativ rasch ab. Der Elko ist aber noch vollgeladen, daher wird die Spannung am Eingangspin größer als die Versorgungsspannung und der Elko entlädt sich in den Eingangspin. Das kann so einen empfindlichen CMOS-Eingang quäen und im unünstigsten Fall auch zerstören.


Geschuetzter Prellschutz Um diesen beiden Folgen zu begegnen, kann man die Schaltung ein wenig erweitern:
  1. Zwischen den Elko und den Taster kommt ein Widerstand, der den Entladestrom begrenzt. Der darf aber nicht so groß sein, dass er Verzögerungen oberhalb von einer Millisekunde verursacht. 100 Ω sind ausreichend.
  2. Zwischen den Elko und den Porteingang schaltet man eine Schottky-Diode. Die sorgt dafür, dass sich der Elko nur mit dem Sperrstrom der Diode entlädt. Und der ist so niedrig, dass da nix mehr kaputt geht.


Der nötige Zusatzaufwand an Hardware sollte deutlich machen, dass man mit einer Softwarelösung einfacher dran ist als mit einem Elko.

Da bei einer Stoppuhr sowieso jede Millisekunde bzw. alle 10 Millisekunden die Zeit erhöht werden muss, bietet es sich an, die Prellunterdrückung und überhaupt die gesamte Tastenerkennung in diesen Takt einzubinden.

2.4 Welchen AVR?

Bei der Variante mit 4-Bit-LCD-Datenbus und bei bis zu vier Tasten kommt der ATtiny24 infrage. Eine entsprechende Schaltung ist hier beschrieben. Zur Ansteuerung der LCD kann die dort dargestellte Include-Software verwendet werden. Das Beispiel in Stoppuhr_tn24 ist mit dieser Software geschrieben.

Möchte man die LCD im 8-Bit-Modus betreiben oder benötigt mehr Tasteneingänge, kommen
  1. ATmega8 oder ATmega8A, oder
  2. ATmega48(A, PA) oder ATmega88(A, PA)
im 28-poligen Gehäse infrage. Wer noch eine zusätzliche serielle Schnittstelle für RS232 oder I2C braucht, muss dann auf einen 40-poligen AVR gehen wie den ATmega16 oder den ATmega8515.

In Stoppuhr_m8 ist eine Vierkanal-Variante mit dem ATmega8 beschrieben.

Da sollte für jeden Fall etwas dabei sein.

Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über das Kommentarformular an mich.

Zum Anfang dieser Seite

©2018 by http://www.avr-asm-tutorial.net