Pfad: Home =>
AVR-Übersicht =>
Anwendungen => Frequenzzähler
40MHz-Frequenzzähler mit ATmega8
Diese Anwendung eines AVR beschreibt einen Frequenzzähler mit dem ATMEL ATmega8 mit
folgenden Eigenschaften:
- Digital- und Analogeingang, Spannungsmess-Eingang
- Eingangsstufe mit Vorverstärker und Vorteiler durch 16
- Anzeige mit ein- oder zweizeiliger LCD-Anzeige
- Neun Mess- und Anzeigemodi, mit Potentiometer wählbar:
- 0: Frequenzmessung mit Vorteiler, Gatezeit 0,25 s,
Ergebnis in Hz
- 1: Frequenzmessung ohne Vorteiler, Gatezeit 0,25 s,
Ergebnis in Hz
- 2: Frequenzmessung als Periodenmessung mit Frequenz-
umrechnung, Ergebnis in 0,01 Hz bzw. 0,001 Hz
- 3: Umdrehungsmessung, ohne Vorteiler, ueber
Periodenmessung mit Umrechnung, Ergebnis in Upm
- 4: Periodendauer gesamte Schwingung, Ergebnis in
Mikrosekunden
- 5: Periodendauer High-Periode, Ergebnis in Mikrosekunden
- 6: Periodendauer Low-Periode, Ergebnis in Mikrosekunden
- 7: Periodenanteil High-Periode, Ergebnis in 0,1%
- 8: Periodenanteil Low-Periode, Ergebnis in 0,1%
- 9: Spannungsmessung, Ergebnis in 0,001 Volt
- Die Auswahl von Modus 9 (rechter Poti-Anschlag)
schaltet die Frequenz-/Zeit-/Periodenmessungen aus.
- SIO-Interface zum Anschluss an PC
- Quarzoszillator 16 MHz
Änderungen gegenüber älteren Versionen
- Autorange wurde entfernt, da die Bedienung sich als
holprig erwies.
- Der Vorteiler im Analogteil wurde auf 16 umgestellt
(Ausgang von QC auf QD umlöten), damit bis
40 MHz gemessen werden kann. Der Zähler
zählt ohne Vorteiler nur Frequenzen bis zu ca.
5 MHz.
- Das serielle Interface wurde um viele Funktionen
erweitert (Spannungs- und Frequenzausgabe, Intervall
parametergesteuert, Ausgabe der Parameter).
Der Frequenzzähler besteht aus einem Eingangsteil (Vorverstärker
und Vorteiler) und dem Prozessor- und Anzeigeteil.
Das Eingangsteil hat einen Analog- und einen Digitaleingang.
Das Signal am Analogeingang wird mit dem schnellen Operationsverstärker
NE592 verstärkt. Das Ausgangssignal wird dem Pegel angepasst und dem
Schmitt-Trigger-NAND 74HCT132 zugeführt.
Der Digitaleingang wird direkt dem Schmitt-Trigger-NAND zugeführt.
Das Ausgangssignal des Schmitt-Triggers wird, abhängig vom
Steuerungssignal des Prozessors, entweder direkt dem Prozessor zum
Zählen zugeführt oder vorher im Binärzähler
74HCT93 durch 16 geteilt.
Der Prozessorteil ist um den ATmega8 herum aufgebaut. Der Prozessor
wird mit einem Quarz von 16 MHz an den Anschlüssen XTAL1 und
XTAL2 getaktet. Die beiden Keramikkondensatoren von 22 pF dienen
dem besseren Anschwingen des Quarzoszillators.
Die Versorgung erfolgt über den GND-Anschluss an Pin 8 und VCC
an Pin 7, die mit einem Keramikkondensator von 100 nF abgeblockt
sind. Die Versorgung für den AD-Wandler wird über den
GND-Anschluss Pin 22 und über eine Drossel von 22 µH
am AVCC-Pin 20 zugeführt, der ebenfalls mit 100 nF geblockt
ist. Die interne Referenzspannung wird am AREF-Pin 21 mit einem
Folienkondensator von 100 nF geglättet.
Der AD-Wandler-Eingang PC1 ist mit dem Schleifer des Potentiometers
verbunden, an dem der Mess- und Anzeigemodus eingestellt wird. Der
Widerstand von 100 k begrenzt dessen Ausgangsspannung auf
2,5 V. Wird nur ein bestimmter Messmode benötigt, kann
das Potentiometer auch gegen einen Trimmer oder einen festen
Spannungsteiler aus Widerstäden ersetzt werden.
Am AD-Wandler-Kanal ADC0 (PC0) wird über einen Spannungsteiler
das Analogsignal für die Spannungsmessung zugeführt. Im
dargestellten Fall ist die Messung auf einen Vollausschlag von
5,12 V eingestellt. Durch Ändern der beiden
Teiler-Widerstände kann die Auflösung der Spannungsmessung
in weiten Bereichen verändert werden. Der AD-Wandler-Eingang ist
wegen des hochohmigen Eingangs gegen Einstreuungen abgeblockt.
Die Signale TXD und RXD stellen das serielle Interface dar und sind
mit dem Treiber-IC MAX232 verbunden. Die am MAX232 angeschlossenen
Elkos dienen der Spannungserzeugung für die RS232-Signale. Diese
liegen über einen 10-poligen Pfostenstecker an der neunpoligen
Buchse an. Die RS232-Signale CTS, DSR und CD sind über die
Widerstände 2k2 dauernd aktiviert.
Der I/O-Pin PC5 steuert den Vorteiler. Bei High erfolgt keine
Vorteilung, bei Low eine Vorteilung durch 16.
Der Signaleingang aus dem Vorverstärker/Vorteiler wird sowohl
dem Eingang INT0, für die Flankenmessung, als auch dem Eingang
T0, für die Zählmessung, zugeführt.
Die Portbits PB0 bis PB3 dienen der vierbittigen Ansteuerung des
Datenports der LCD-Anzeige. Der E(nable)-Eingang der LCD wird
über PB5, der RS-Eingang über PB4 an gesteuert. Der
E-Eingang ist bei inaktivem Portbit über 100 k auf Masse
gelegt, um unbeabsichtigte Signale an der LCD zu vermeiden. Am
VO-Eingang der LCD ist der Kontrast der Anzeige mit einem Trimmer
von 10 k einstellbar.
Die Portbits MOSI, SCK und MISO sowie das RESET-Signal liegen am
10-poligen ISP-Port an, über den der Prozessor in der Schaltung
programmiert werden kann. Die rote LED dient der Anzeige, dass der
Programmiervorgang aktiv ist. Über die anliegende Betriebsspannung
wird das Programmierinterface mit Strom versorgt.
Der RESET-Eingang ist über ein Widerstand von 10 k mit der
Betriebsspannung verbunden.
Die LCD-Anzeige ist über den 14-poligen Standardstecker an die
Prozessorplatine angeschlossen. Verwendet werden können ein-
und zweizeilige LCD-Anzeigen mit 16 bis 40 Zeichen pro Zeile (einstellbar
per Software).
Der Zähler verfügt über einen SIO-Anschluss. Über
dieses Interface kann das Messergebnis verfolgt werden. Darüber
können auch Ausgabeparameter eingestellt werden.
Die gesamte Schaltung wurde auf einer Lochrasterplatine von
10 * 5 cm aufgebaut und mit Kupferlackdraht verdrahtet.
Zwei der Befestigungsschrauben der LCD-Anzeige dienen auch der
Befestigung der Lochrasterplatine.
Alle Komponenten, einschließlich einer kleinen Netzteilversorgung
und einer 9 V-Batterie für netzunabhängigen Betrieb passen
in ein kleines Gehäuse.
Die Bedienung ist sehr einfach. Die Auswahl zwischen dem Digital- und dem
Analog-Eingang ist nicht erforderlich: angezeigt werden stets beide zusammen.
Dazu wird bei offenem Eingang der Trimmer am Analogverstärker gerade
so weit heruntergedreht, dass keine Fehlsignale resultieren.
Am Mode-Potentiometer wird der Anzeige-Modus eingestellt. Bei der
Frequenzmessung erfolgt die Auswahl, ob Impulse gezählt werden oder ob
die Dauer der Flanken gemessen wird, durch die Modus-Auswahl.
Die Darstellung der Ergebnisse erfolgt bei zweizeiligen LCD-Anzeigen mit
16 Zeichen und mehr folgendermaßen:
| Mode | Messgröße | Messmethode | Anzeigenformat |
| 0 | Frequenz | Zählung, Vorteiler=16 | F=99.999.999 Hz |
| 1 | Frequenz | Zählung, Vorteiler=1 | f= 9.999.999 Hz |
| 2 | Frequenz | Periodenmessung | v= 9.999,999 Hz |
| 3 | Umdrehungszahl | Periodenmessung | u= 9.999.999 rpm |
| 4 | Periode | Periodenmessung | t=99.999.999 us |
| 5 | High-Periode | Periodenmessung | h=99.999.999 us |
| 6 | Low-Periode | Periodenmessung | l=99.999.999.us |
| 7 | High-Periodenanteil | Periodenmessung | P=100,0% |
| 8 | Low-Periodenanteil | Periodenmessung | p=100,0% |
| 9 | Spannung | AD-Wandlung | U=9,999V |
Bei einzeiligen LCD-Anzeigen wird die Spannung nur angezeigt, wenn Mode 9 eingestellt ist.
Bei weniger als 16 Zeichen pro Zeile werden die Tausender-Trennzeichen und die
Dimensionen nicht angezeigt. Die Messgrößen werden nur angezeigt, wenn der
Messwert die entsprechenden Positionen nicht benötigt.
Die am Spannungs-Messeingang anliegende Spannung wird vier Mal pro Sekunde gemessen und
angezeigt.
Die Software ist vollständig in Assembler geschrieben. Vor dem Assemblieren des Quellcodes
sind unbedingt wichtige Einstellungen (siehe 3.1) vorzunehmen. Beim Programmieren in den
ATmega8 sind unbedingt noch dessen Fuses zu verändern (siehe 3.2).
Die folgenden Einstellungen sind vor dem Assemblieren in der Datei
fcountV03.asm zu kontrollieren und ggfs. zu ändern:
- Die Schalter debug und debugpulse muessen auf 0 stehen.
- Wenn ein LCD-Display angeschlossen ist, muss cDisplay auf 1 stehen, sonst auf 0.
- Wenn das angeschlossene LCD-Display 8 Zeichen pro Zeile darstellen kann, muss
cDisplay8 auf 1 stehen. Wenn es 16 oder 20 Zeichen pro Zeile darstellen kann, muss
cDisplay8 auf 0 stehen.
- Wenn das angeschlossene LCD-Display eine einzige Zeile darstellen kann, muss
cDisplay2 auf 0 stehen. Wenn es zwei oder mehr Zeilen darstellen kann, muss cDisplay2
auf 1 stehen.
- Wenn die serielle Schnittstelle angeschlossen ist und bedient werden soll, muss
cUart auf 1 stehen. Ist keine serielle Schnittstelle angeschlossen oder soll sie nicht
verwendet werden, wird cUart auf 0 gesetzt.
- Ist der Vorteiler durch 16 an einem anderen Portbit als PC5 angeschlossen, sind die
Ports pPresc und pPrescD sowie das Portbit bPresc entsprechend zu aendern.
- Wird der Prozessortakt mit einer anderen Frequenz als 16 MHz betrieben, ist diese
in cFreq anzugeben.
- Soll die serielle Schnittstelle mit einer anderen Baudrate als 9600 arbeiten, ist
cBaud entsprechend zu ändern.
- Ist der Vorteiler fuer die Spannungsmessung mit zwei anderen Widerstaenden bestueckt
als mit 1M, sind die beiden Werte cR1 und cR2 entsprechend zu aendern. Wenn die angezeigte
Spannung wesentlich von der Eingangsspannung abweicht, ist cRin zu aendern: kleinere Werte
fuer cRin ergeben eine hoehere angezeigte Spannung, groeszere eine niedrigere angezeigte
Spannung.
Im gelieferten Zustand sind ATmega8-Prozessoren auf den internen RC-Oszillator eingestellt.
Damit der ATmega8 mit dem externen Quarz als Oszillator arbeitet, müssen die Fuses
umgestellt werden.
Die Einstellungen sind mit dem ATMEL Studio folgendermaßen zu ändern:
Die Einstellungen sind mit PonyProg 2000 sind folgendermaßen zu ändern:
Bitte beachten: Nach dem Ändern der Fuses ist der ATmega8 nur noch ansprechbar, wenn
ein Quarz angeschlossen ist oder der Takt extern zugeführt wird! Beim Studio ist daher
der XTAL Jumper zu stecken.
Der Quellcode liegt in HTML-Form (hier) und als
Assembler-Quelltext (hier) vor. In der Textdatei
LiesMich3.txt sind weitere Hinweise zur Programmierung und
Bedienung zusammengestellt.
©2006-2009 by http://www.avr-asm-tutorial.net