|
Da eine multiplex angesteuerte LED-Anzeige (die ja auch den Timer0 benutzt) die Frequenzmessung behindert, muss die Anzeige während der Frequenzmessung abgeschaltet werden. Damit das nicht als störendes Flackern sichtbar wird, kann nur eine sehr kurze Messzeit (Zählzeit) gewählt werden. Dadurch ist die Messgenauigkeit nicht sehr hoch. Da ich die vorhandene 4-stellige LED-Anzeige einsetzen wollte, ist ohnehin nur eine Anzeige der Frequenz mit 4 Stellen möglich. Da Frequenzen bis zu 50 MHz-gemessen werden sollen, ist die kleinste anzuzeigende Stelle die 10-kHz-Stelle.
Zum Zählen bietet sich der Timer0 an. Dieser wird über einen internen, einstellbaren Vorteiler mit dem Eingangspin RA4 verbunden. Da der Timer0 nur Frequenzen bis zu 2,5 MHz (bei 10 MHz-PIC-Takt) zählen kann, ist der Vorteiler auf ein Teilerverhältnis von 32:1 einzustellen. Die maximal zu messende Frequenz von 50 MHz wird dadurch auf 1,5625 MHz verringert. Damit läuft der Timer0 problemlos.
Bei einem Vorteiler von 32:1 sind genau 3,2 ms Messzeit nötig, um eine Messauflösung von genau 10 kHz zu erreichen. (32 / 10000 = 0,0032 ). Innerhalb von 3,2 ms treffen durch den 32:1-Vorteiler bei einer Eingangsfrequenz von 50 MHz genau 5000-Pulse im Timer0 ein. Dieses Ergebnis kann ohne weitere Umrechnung (lediglich mit einem in der Mitte eingeschobenen Dezimalpunkt) direkt als 50,00 angezeigt werden.
Die feste Messdauer wird durch eine Programmschleife realisiert. Für eine Messzeit von 3,2 ms benötigt man eine Warteschleife mit 8000 Takten auf einem 10 MHz PIC.
16-Bit-Zähler
Wenn man jeden Überlauf des Timer0 per Software in einem 8-Bit
Software-Zähler mitzählt hat man einen 16-Bit Zähler mit
dem man von 1 bis 65536 zählen kann.
Damit ließen sich ohne Vorteiler theoretisch mit einer
Messzeit
von 1 Sekunde Frequenzen bis zu 16 MHz mit einer Genauigkeit von 1 Hz
messen,
wenn der Timer0 16 MHz vertragen würde. Leider ist sein
Eingangstakt
auf 1/4 des Prozessortaktes beschränkt. Der Timer0 eines mit 10
MHz
getakteter PIC kann also maximal 2,5 MHz zählen. Für
höhere
Frequenzen kann man aber den Vorteiler einsetzen. Aus diesem Grunde
wird
der 32:1 Vorteiler aktiviert.
Bei 50 MHz treffen über den 32:1-Vorteiler innerhalb der 3,2 ms
Messzeit noch 5000 Pulse am Timer0 ein. Um die zu zählen ist
der 16-Bit-Zahler ausreichend. Ich benutze einen 16-Bit
Softwarezähler,
wodurch ich insgesamt einen 24-Bit-Zähler habe. Das ist mehr als
genug.
Ein besonderes Problem ist es, den Überlauf des Timer0 zu zählen, und trotzdem den Wert des Timer0 richtig auszulesen. Es ist nämlich nicht möglich dafür das praktische T0IF-Bit zu benutzen. Zwischen der letzten Abfrage des T0IF-Bits und dem Auslesen des Zählers am Ende der Messzeit könnte der Timer0 schon wieder übergelaufen sein. Deshalb wäre das Zählergebnis in Ausnahmefällen um 256 verfälscht. Man greift besser zyklisch auf den Timer0-Wert zu, und beobachtet das Bit 7, um den Überlauf zu erkennen (springt von 1 auf 0) mit dem gelesenen Wert hat man automatisch am Ende der Messzeit die unteren 8 Bit des 16 (24) -Bit-Zählwerts verfälschungsfrei.
Berechnung der Frequenz aus dem Zählwert
Da der Zählwert der Frequenz geteilt durch 10000 entspricht, und
die Anzeige ebenfalls die Frequenz geteilt durch 10000 anzeigen soll,
ist
keine Berechnung nötig. Der Zählwert kann direkt angezeigt
werden.
Umrechnung der Frequenz in eine Dezimalzahl
Leider ist das Rechenergebnis eine Binärzahl, mit der wir im
täglichen
Leben kaum umgehen können. Deshalb steht nun noch die Umwandlung
in
eine Dezimalzahl an. Das würde man normalerweise durch wiederholte
Division durch 10 erledigen, aber eine vollwertige
32-Bit-Divisionsroutine
wäre ein zu großer Aufwand. Ich zerlege die Zahl durch
Subtraktion
und Division in ihre Zehnerpotenzen.
Ausgabe der Zahl
Das fertige Ergebnis kann man am LED-Display anzeigen.
Kalibrierung
Falls ein Keramikresonator als Taktquelle eingesetzt wird, ist eine
Kalibrierung nicht möglich. Durch die Frequenzungenauigkeit des
Keramikresonators
wird die Messgenauigkeit auf 0,5% limitiert. Für viele Zwecke ist
das aber ausreichend.
Falls aber ein Quarz eingesetzt wird, ist die Kalibrierung nicht
nötig.
Ohne Kalibrierung erreicht der Quarz eine Genauigkeit von ca. 0,01%.
Das
ist genauer als die 4-stellige Anzeige. Ein Abgleich der Quarzfrequenz
ist deshalb nicht erforderlich.
'Richtige' Frequenzzähler hoher Genauigkeit stehen auf der Projekt-Seite.
Autor: sprut
erstellt: 15.09.2003
letzte Änderung: 18.09.2003