Amateurfunk verbindet die Welt

AVR Frequenzzähler

Erstellt: DL6GL, 20.09.2013, letzte Änderung 20.03.2014



» 1 LCD-Counter mit einem ATtiny2313

Counter LED-Display

Lassen sich Präzisionsfrequenzzähler mit einem AVR bauen? Nicht wirklich, will man die Frequenz innerhalb eines bestimmten Zeitfensters (Gate) messen. Die Counter/Timer eines AVR brauchen aufgrund des Zählverfahrens mindestens zwei Takte, um eine Halbwelle zählen zu können. Anders herum, die maximale Zählfrequenz ist etwa die Hälfte der Taktfrequenz, und die geht bei den meisten AVR nur bis 16, fallweise auch bis 20 MHz. Also ist bei ca. 10 MHz spätestens Schluss. Wer es aber auch ganz genau nehmen will, stolpert, vielleicht abgesehen von Assembler, über die nicht unmittelbar ersichtliche Dauer zum Ausführen einzelner zeitkritischer Programmschritte.

Was bleibt, ist die zu messende Frequenz zu teilen. Dabei geht aber die Auflösung in die Knie. Mit einem Teilerfaktor von 8 würden wir z.B. bei exakt 20 MHz Messfrequenz geteilte 20.000.000/8=2.500.000, also genau 2,5 MHz, im Zähler sehen. Ebenso aber auch bei 20.000.007 Hz, da die rechnerischen Nachkommastellen bei der Teilung unter den Tisch fallen. Auf die letzte 1 Hz-Stelle messen zu wollen, ergäbe also keinen Sinn. Entsprechend mehr Stellen (10, 100 Hz...) verlieren wir bei höheren Teilerfaktoren.

Dies vor Augen lassen sich AVR-Frequenzzähler mit erstaunlich geringem Aufwand bauen. Der Frequenzzähler eines in grauer Vorzeit entstandenen Messsenders war mit sage und schreibe 14 IC in der Frequenzaufbereitung und 7 Segmentanzeige bestückt.

Vorgestellt werden vier Varianten:

  1. Frequenzzähler mit programmiertem Zwischenfrequenz-Offset
    Controller: ATtiny2313
    Bestückung: konventionell, teilweise SMD
    Anzeige: 16x2-LCD
  2. Frequenzzähler ohne Offset-Korrektur
    Controller: ATmega8
    Bestückung: komplett SMD
    Anzeige: 7-Segment
  3. Frequenzzähler mit einstellbarem Zwischenfrequenz-Offset
    Controller: ATmega8
    Bestückung: komplett SMD
    Anzeige: 16x2-LCD
  4. VHF-Frequenzzähler mit Prescaler und einstellbarem Zwischenfrequenz-Offset
    Ergänzung, März 2014
    Controller: ATmega8
    Bestückung: komplett SMD
     Anzeige: 16x2-LCD

Das alles sind Module für eine Frequenzanzeige, nicht für eine Frequenzmessung auf's Hertz genau. Neben der Teilung der Messfrequenz spielt der als Taktgenerator des AVR verwendete Quarz eine entscheidende Rolle. Aus der Taktfrequenz wird die Torzeit zur Messung abgeleitet. Zunächst kann die exakte Quarzfrequenz mit dem hierzu vorgesehenen Trimmer genau auf die Sollfrequenz gezogen werden, so dass der Counter korrekt anzeigt. Damit ist der Frequenzfehler, bei Standardquarzen ca. ±30 ppm (part per million, 1 ppm = 0,0001%) korrigiert. Dazu braucht es wiederum einen verlässlichen Frequenzzähler. Im Augenblick des Abgleichs ist also die Welt in Ordnung. Auch die normale Alterung lässt sich so wieder ausgleichen.
Die Quarzfrequenz ist aber wie alles in der Elektronik temperaturabhängig. Grobe Schätzung, abhängig vom jeweiligen Kristallschnitt: bis zu ca. ±100 ppm=0,01% im Temperaturbereich -20°C bis +70°C. Bei Änderung üblicher Raumtemperatur um 5°C bzw. Eigenerwärmung werden es etwa 1 ppm sein. Im Ergebnis kann die Anzeige dann im Hochfrequenzbereich auch um ein dutzend Hertz daneben liegen. Ausweg wäre die Verwendung eines temperaturkompensierten externen Quarzoszillators (TCXO) oder eines mit Heizung temperaturgeregelten OCXO (oven controlled xtal oscillator) am Pin XTAL1 des AVR anstelle des sonst üblichen und hier eingesetzten Quarzes zwischen XTAL1 und XTAL2.

Mit einem für wenige Euro erhältlichen TCXO 12,288 MHz (Frequenzkonstanz 2,5 ppm) sollte dies mit folgenden Timer0-Einstellungen realisierbar sein. Zum Vergleich sind die in LCDCounter_200 und LCDCounter_201 (im Download) mit dem 16 MHz-Quarz verwendeten Einstellungen angegeben. Die Frequenzberechnung in der Timer0_isr bleibt unverändert, da die Torzeit in beiden Fällen 0,64 sec. ist.

  XTAL 16 MHz TCXO 12,288 MHz
Timer0 Prescale 1024 256
Presettimer0 56 0
bytTimer0_MaxRuns 50 120

Das SUT CKSEL-Fuse muss noch angepasst werden, in ATMEL Studio mit "External Clock" statt "External Crystal".

Da diese TCXO in der Regel mit 3,3V betrieben werden, ist zwischen TCXO und dem XTAL1-Pin des AVR wohl noch noch eine Pegelwandlung auf die 5V-Umgebung des ATmega mit einem Transistor vorzusehen.

Nur Hartgesottene lesen jetzt weiter. Der Selbstbau rechnet sich eigentlich nicht, wenn man nach Fertiggeräten im Web sucht. Sei's drum, eine selber entwickelte Maßanfertigung macht halt Spaß...

 

Referenzen
[1] http://www.rowalt.de/mc/avr/avrboard/09/avrb09.htm
[2] http://amateurfunkbasteln.de/blackforestcounter/counter.html

           

Download                     

lcdcounter_108.zip        

7segmentcounter_100.zip        

7segmentcounter_101.zip          

lcdcounter_200.zip          

lcdcounter_201.zip          

fmtunercounter_101.zip



» 1 LCD-Counter mit einem ATtiny2313