PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenzzähler bis 20MHz ohne Teiler?



TobiasBlome
23.01.2010, 19:29
Hallo,
ich hab da so eine Idee und möchte wissen, ob das wohl so umsetzbar ist.

Ich möchte eine Frequenz bis 20MHz direkt auf den T0 Eingang geben und die Frequenz messen.

Prinzip:
Mit T0 eine Variable hochzählen, und nach einer Sekunde den Zählerstand auf einem LCD ausgeben und Zählervariable zurücksetzen.

Das ganze in BASCOM,
mit einem AT 89C51ED2 PLCC,
einem 48MHz Quarz
und 16*2 LCD

Ist der µC mit dem 48MHz Quarz schnell genug um 20MHz zu messen und auf dem LCD auszugeben?
Kann man eventuell auch alle 0,5 Sekunden die Variable auslesen und den Wert dann verdoppeln(also von der µC Geschwindigkeit gesehen)?

Danke, Tobias

Besserwessi
23.01.2010, 20:35
Die AT89C51 µCs sind keine AVR µCs, da wäre ein anderes Forum passend, auch wenn es auch für die familie einen Bascom Compiler gibt.

Durch den Internen Takt-teiler bem 80C51 sollte bei 48 MHz takt die maximale Frequenz nur takt / 8 sein, also 6 MHz. Die Datenblätter isnd da sehr unübersichtlich, könnte sein dass sogar noch langsamer sein muß.
Man wird also da nocht um einen Vorteiler herumkommen.

TobiasBlome
23.01.2010, 21:07
aha...
ich habe den AT89C51 im Katalog auf der selben Seite wie die AVR´s gesehen und dachte der gehört dazu...schade

Kann man den internen Teiler nicht deaktiviren(wie bei den meisten AVR´s)?

Da muss ich wohl doch das Datenblatt wälzen...dachte das könnte ich mir bei einer "so einfachen" Anwendung sparen :-)

Tobias

Gento
23.01.2010, 23:01
Um eine Frequenz bis 20MHz richtig zu messen sollte die CPU Faktor >50 schneller sein.
Ganz abgesehen von von LCD Anzeige nebenbei.

Solltest Du einen Teiler / 100 z.B. nehmen.

Gento

Besserwessi
24.01.2010, 12:38
Der At89C51 ist ähnlich wie die original 8051 und hat daher immer einen Teiler :6 oder 12 drin. Die erternen takte dürfen dann auch noch man nicht so schnell sein. Die Einschränkung haben viele µCs. Auch bei den AVRs darf der externe takt höchstens halb so groß wie der µC Takt sein, und dass auch nur bei exakt 50% tastverhältniss, sonst eher 1/3.

Schneller muß die CPU nicht sein sein, man braucht nur einen Vorteiler (z.B. :256) . So komliziert oder gar teuer ist ein Vorteiler nicht. Einfach ein 8 Bit Binärzähler aus der 74HC... Serie. Wenn man auch niedriege Frequenzen messen will, dann sollte man aber auch die Möglichkeit haben ohne den Teiler zu messen - das geht aber über einen 2 ten Eingang am µC.

TobiasBlome
24.01.2010, 14:23
vielen Dank für die Antworten, dann hat es sich mit dem AT89C51 erledigt.
Ich werde einen externen Teiler nehmen und wie Besserwessi schreibt zusätzlich einen zweiten Eingang für die niedrigen Frequenzen.

Danke, Tobias

Besserwessi
25.01.2010, 21:05
Noch mal was Grundsätzliches zum Frequenzzähler. Man hat für die Frequenzmessung 3 Möglichkeiten:
1) Man zählt ganz klassisch fur z.B. 0,5 oder 1 Sekunde. Das ist relativ einfach zu programmieren und nur für höhere Frequenz (ab ca. 10 kHz) wirklich brauchbar, denn die Auflösung ist begrenzt.

2) Man mißt die Zeit für eine Periode. Das ist etwas schwieriger zu programmieren und so direkt nur gut niedriege Frequenzen (unter etwa 1 kHz)

3) Man mißt die Periodendauer über mehrere Perioden. Das ist noch etwas schwieriger zu programmieren. Dafür geht das Verfahren gut für mittllere und niedrigr Frequenz. Je nach µC so etwa bis 100 kHz, für höhere Frequenzen braucht man da einen Vorteiler.

TobiasBlome
26.01.2010, 18:06
d.h. es werden idealer weise verschiedene Methoden zum messen genommen?
Also zuerst wird über eine bestimmte Zeit (möglichst klein, um schnell etwas anzuzeigen) gemessen, und je nach Ergebniss eine andere Messmöglichkeit genommen, um die Messgenauigkeit zu erhöhen.

Richtig so?

Besserwessi
26.01.2010, 20:39
Man muß nicht die Methode wechseln, aber ggf. den Vorteiler.
Man kann z.B. erst ohne Vorteiler anfangen die Periodendauer zu messen. Wenn man dabei feststellt, das die Flanken zu schnell kommen, dann schaltet man den Vorteiler dazu. Um zu erkennen das die Flanken zu schnell kommen, braucht es nur ein ganz paar Perioden, was bei einer hoher Frequenz ja sehr schnell geht (z.B. 100 Periode bei 100 kHz oder etwa 1 ms). So habe ich das jedenfalls bei meinem Zähler gelöst.

Genauer so:
Für die Periodenmessung wird erstmal die Position der Flanken per ICP bestimmt, und eine gewisse Zeit (ca. 1/5 der angestrebten Messzeit) gemittelt, maximal aber 255 Flanken. Wenn die 255 zu schnell voll sind wird ein Vorteiler (:256 dazugeschaltet) und dann nochmal angefangen. Bei mir ist das zu schnell bei etwas über 300 kHz erreicht, allerdings in ASM. Dann wird etwas gewartet und nur die Zahl der Flanken gezählt (bis ca. 4/5 der normalen Messzeit) und dann für die gleiche Zahl an Flanken wieder die Postion bestimmt. Aus der Differenz kann dann die Periodendauer berechnet werden. Durch das mitteln über viele Flanken hat man schon sehr schnell eine hohe Auflösung und ist nicht so empfindlich auf Störungen (Jitter).

Mit dem einen Umschalten des Vorteilers geht so eine Messung von etwa 0.1 Hz bis ca. 40 MHz - was der Vorteiler halt mitmacht. Die Auflösung ist über den ganzen Bereich sehr gut. Die Messung über die Periodendauer ist mit der Auswertung mehrerer Flanken immer besser als ein direktes Zählen im µC. Man braucht das andere Verfahren also nicht.

Wenn man das gleiche in BASCOM Programieren will, sollte man die ISRs eventuell auch in ASM schreiben, denn die bestimmen die maximale Frequenz ohne Teiler. Wenn nicht wird man vermutlich ein größeren Teiler brauchen (z.B. :1024). In BASCOM hat man immerhin den Vorteil, dass man Fleißkommazahlen hat - in ASM sind lange Zahlen ziehmlich unhandlich.

TobiasBlome
26.01.2010, 20:49
Hallo Besserwessi,
vielen Dank für die ausführliche Beschreibung. Ich werde mich am Wochenende mal in die Materie einlesen - also wie ich das in Bascom umgesetzt bekomme.

vielen Dank, Tobias