Hallo,
ich suche einen Baustein, der Impulse bis zu einer Frequenz von 10MHz
über 1-4s ohne Vorteiler zählt und anschließend mit einem ATMEGA
ausgelesen werden kann. (24bit oder 32bit Zähler)
Mir ist bekannt, dass ich mit einem ATMEGA mir einem Frequenzzähler oder
Zähler programmieren kann. Ich muss dann aber leider einen Vorteiler
verwenden und somit die Messzeit erhöhen - das möchte ich vermeiden.
Als Zeitbasis möchte ich einen 10MHz TCXO verwenden, der an einem
Zeitnormal abgeglichen werden kann. Mich interessiert die relative
Genauigkeit mehr als die absolute Genauigkeit
Gibt es überhaupt solche Bauteile?
Gruß Tom
Ja. Du machst dir den Zähler sehr wohl mit einem ATMega, dann nimmst du
aber 1 74ls393 (74HC393) als 8-Bit-Vorteiler, diesen liest du dann
zusammen mit dem Timer1(16 Bit) des ATMega aus. Ein separates Gatter als
Zählertor ist allerdings dann notwendig, z.B. ein 7400. Ein LS/HC sollte
bis 25MHz können. Brauchst du 32 Bit, dann nimmst du eben 2 mal 74393.
74393
Dual 4-bit asynchronous binary counters with reset.
+---+--+---+
/1CLK |1 +--+ 14| VCC
1RST |2 13| /2CLK
1Q0 |3 74 12| 2RST
1Q1 |4 393 11| 2Q0
1Q2 |5 10| 2Q1
1Q3 |6 9| 2Q2
GND |7 8| 2Q3
+----------+
Quelle: GIICM http://kingswood-consulting.co.uk/giicm/
Jörn wrote:
> Mir ist bekannt, dass ich mit einem ATMEGA mir einem Frequenzzähler oder> Zähler programmieren kann. Ich muss dann aber leider einen Vorteiler> verwenden und somit die Messzeit erhöhen
Das ist Quatsch, Du rechnest den Vorteiler einfach in das Ergebnis mit
rein, d.h. die Periodenzahl ist 16 * Zählergebnis.
Nur bei kleinen Frequenzen (<16Hz) mußt Du den Bereich umschalten, also
den Vorteiler überbrücken.
Z.B. den 74HC193 kannst Du als Vorteiler 1:16 nehmen oder per
Setzeingang den Eingang auf QD durchschleifen. D.h. im Setzmodus teilt
er 1:1, im Zählmodus 16:1.
Peter
Man kann das auch mit einfachen Ripple-Countern z.B. 74HC4040 lösen,
wenn genügend Zeit zur Auswertung zur Verfügung steht. Dazu brauchst Du
nur wenige I/O-Pins. Der Clock-Eingang muß zwischen Signalquelle und µP
umschaltbar sein und das MSB des Zählers wird abgefragt.
1. Zunächst gibst Du soviele Clock-Impulse auf den Zähler, bis das MSB
auf null springt (Reset). Alternativ kannst Du den Zähler mit einem
zusätlichen I/O-Pin direkt resetten.
2. Dann schaltest Du die Clock-Leitung für eine genau definierte
Gate-Zeit, z.B. 1s, auf die Signalquelle.
3. Du gibst soviele Clock-Impulse auf den Zähler, bis das MSB wieder auf
null springt.
4. Du berechnest daraus den relevanten Zählerstand nach der Gate-Zeit.
Das ist zwar etwas umständlich in der Software, vereinfacht die Hardware
aber erheblich. Die Umschaltung des Clock-Einganges ist sehr einfach:
Signal über Widerstand z.B. 1k auf Clock-Eingang. I/O-Pin direkt auf
Clock-Eingang.
I/O-Pin hochohmig (Eingang) ---> Zählmodus
I/O-Pin niederohmig (Ausgang) ---> Zähler zählt nur Impulse von µP
Zur Verkürzung der Auswertezeit empfiehlt es sich bei Verwendung
mehrerer 4040-er jeden einzeln auszuwerten. Dazu fügst Du die o.a.
Gate-Schaltung zwischen Ausgang eines 4040 und den Eingang des folgenden
4040 ein. Mit dem I/O-Pin kannst Du dann das MSB des 4040 abfragen und
Clock-Impulse einfügen, um den nachfolgenden 4040 auszuzählen.
Jörg
P.S.: Vermutlich brauchst Du max. einen externen Zählerbaustein. Die
Zählerüberläufe kannst Du ja per Software mitzählen oder einem internen
Zähler zuführen.
Sicher das du extra-Hardware brauchst/willst? Ich denke, das kann der
Controller alleine, lass ihn halt ungeteilt zählen und behandle die
Überläufe in Software (z.B. als Interrupts).
Jörg
Was spricht dagegen, das Signal als Takteingang für einen Timer im Mega
zu verwenden?
Dann kann der µC wieder alles alleine erledigen und du brauchst keine
externe Hardware.
Ein Timer macht die Zeitbasis
Ein zweiter Timer zählt die externen Ereignisse
Noch ein bischen Interrupt Logik um die Überläufe des Zähltimers zu
bearbeiten. Fertig.
Alternativ zum HC590 koennte man nen AS867 nehmen, der braucht zwar viel
Strom aber schafft auch grinsend 60-70Mhz (ausprobiert, das Datenblatt
untertreibt ein wenig).
Ueber 100Mhz kann man schaffen mit einem F74 als erste Stufe - wenn man
nicht so ein Esel ist wie ich und sich bei der Verdrahtung so vergreift
dass bei ca. 80MHz Schluss ist :(
@An Alle
Mit einer so großen Resonanz habe ich nicht gerechnet – vielen Dank.
- Bisher war ich immer der Meinung, dass man mit einem ATMEGA nur bis
1/3 des Taktes zählen kann, damit man auch mit ungünstigen
Taktverhältnissen zurechtkommt (und das gilt auch für die Vorteiler).
(Grundlagenfrage)
Stimmt das so???
Wenn ich unabhängig von diesem Problem mit einem der internen Vorteiler
arbeitet habe ich das Problem, dass ein Teil der Information in dem
Vorteiler „steckt“ und nicht ausgelesen werden kann. Um doch alle
(periodischen) Ereignisse zu erfassen müsste ich die Messdauer erhöhen.
- Den Zähler mit drei oder vier 74HC590 aufzubauen gefällt mir. Die
Kosten sind minimal (Stückpreis <40ct) und der Kopf kann beim
Programmieren im Mittagsschlaf verbleiben.
---> Mein Favorit
Liege ich richtig, dass ein kaskadierter Zähler auch bei ungünstigeren
Tastverhältnissen bis ca. 15MHz zu gebrauchen ist?
Wo liegt die Grenze bei ziemlich symmetrischen Signalen?
- Die Idee einen auslesbaren Vorteiler zu verwenden und ihn mit einem
internen 16-bit Zähler zu koppel finde ich genial (einfach). :-))
74HC393 und 74HC4040
- Bis zu welcher Grenze kann man einen 74HC4040 , HC590 , HC4040
verwenden (ungünstige und günstige Taktverhältnisse)?
- Der 8254 vereint quasi mehrere 74HC590. Man muss nur den Bus
programmieren.
Die 74as867 , 74F74, 74VHC4040 kennt mein Händler leider nicht
Tom
Tom wrote:
> - Bisher war ich immer der Meinung, dass man mit einem ATMEGA nur bis> 1/3 des Taktes zählen kann, damit man auch mit ungünstigen> Taktverhältnissen zurechtkommt (und das gilt auch für die Vorteiler).> (Grundlagenfrage)> Stimmt das so???
Nicht ganz. Wenn dein externer Takt symmetrisch ist, dann besteht
nur die Forderung, dass er kleiner als f[IOclk]/2 sein muss. Du
bräuchtest also einen mit 20 MHz getakteten AVR, um bis 9,99999 MHz
zählen zu können.
Ggf. kannst du aber einfach 2:1 extern vorteilen: dann hast du auf
jeden Fall ein symmetrisches Tastverhältnis, und du könntest für die
9,999999 MHz auch den AVR direkt mit 10 MHz takten.
>- Der 8254 vereint quasi mehrere 74HC590. Man muss nur den Bus>programmieren.
Vergiss den das ist ein Uralt Teil aus den 70er
>Die 74as867 , 74F74, 74VHC4040 kennt mein Händler leider nicht
Alternativ kannst du einen 74AC74 verwenden. Der sollte besser zu
bekommen sein.
74F74 ist auch schon vom aussterben bedroht.
>- Bis zu welcher Grenze kann man einen 74HC4040 , HC590 , HC4040>verwenden (ungünstige und günstige Taktverhältnisse)?
Das sollte im Datenblatt drin stehen. Da die Zaehler kaskadiert werden
braucht nur der 1. Zaehler die Frequenz abzukoennen. Bedenke aber das
das Ergebnis durch den Ripple Carry etwas spaeter an den Ausgaengen
erscheint.
>- Den Zähler mit drei oder vier 74HC590 aufzubauen gefällt mir.
Du hast schon gesehen das die Tri-State Ausgaenge haben ?
Damit sollte die parallel Schaltung einfach werden.
>- Bisher war ich immer der Meinung, dass man mit einem ATMEGA nur bis>1/3 des Taktes zählen kann, damit man auch mit ungünstigen>Taktverhältnissen zurechtkommt (und das gilt auch für die Vorteiler).>(Grundlagenfrage)>Stimmt das so???
Es gilt die Frequenz die sich aus der kuerzeren Zeit ergibt und die darf
nicht ueberschritten werden.
Gruss Helmi
Tom wrote:
> Ist für meinen Zweck die 74F oder die 74AC Serie eher zu empfehlen?
Du wolltest doch nur 10MHz, das schafft ein normaler HC.
Z.B. der 74HC393 schafft je nach Hersteller:
Fairchild: 50MHz
TI: 60MHz
ST: 79MHz
NXP: 99MHz
Peter
Tom wrote:
> - Bis zu welcher Grenze kann man einen 74HC4040 , HC590 , HC4040> verwenden (ungünstige und günstige Taktverhältnisse)?
Bei 5 V ca. 50-90 MHz, je nach Hersteller
> Die 74as867 , 74F74, 74VHC4040 kennt mein Händler leider nicht
HC- oder HCT-Typen sind bei 10 MHz völlig ausreichend. Ein ungünstiges
Tastverhältnis kannst Du mit einem vorgeschalteten Monoflop vermeiden,
das eine feste Zeitkonstante von 20-50 ns hat, je nachdem was das
Datenblatt sagt und welche obere Grenzfrequenz Du noch zulassen willst.
Jörg
>Ein ungünstiges Tastverhältnis kannst Du mit einem vorgeschalteten Monoflop >vermeiden,das eine feste Zeitkonstante von 20-50 ns hat,
Eher nicht. Da sind die FlipFlops im Zaehler immer noch schneller als
das Monoflop. Wenns durch ein unguenstiges Tastverhaeltnis Probleme
geben sollte schaltes du besser ein FlipFlop aus einer schnelleren Serie
davor.
Ich hab in einem anderen Forum einen "gated counter" vorgeschlagen, das
koennte vielleicht auch fuer Deine Anwendung brauchbar sein, zumindest
Teile davon. Schaltplan ist im Anhang zu diesem Posting, und hier ist
der Link zum anderen Thread:
http://www.picaxeforum.co.uk/showthread.php?t=12263&page=2
Der Zaehler hat 16 bit, aber fuer 32 Bit musst Du bloss noch zwei
weitere 74HC393 dazuhaengen.
Die Start- und Stop-Signale koennen bei Deiner Anwendung ja vom Atmega
kommen. Wenn Du den angegebenen Thread verfolgst, siehst Du die ganze
Schaltung auch in einem einzigen CPLD (Xilinx 9572) integriert, mein
Simulator sagt, das sollte bis ca. 66 MHz laufen. Das CPLD-Projekt kann
ich Dir gerne bei Bedarf emailen.
Wolfgang
Für meinen aktuellen Anwendungszweck reichen 10MHz aus. Wenn ich aber
die Beiträge lese, kommt der Wunsch mein Gerät universeller zu
gestellten und die Grenze deutlich nach oben zu verschieben.
<faustian wrote>
Das mit der niedrigeren Frequenz beim zweiten kaskadierten Zaehler
funktioniert so aber nur bei einem Asynchronzaehler....
Warum?
Ist eine solch Kombination sinnvoll?
74AC74 oder 74f74 (als Eingang) oder einem anderen auslesbaren Vorteiler
(geteilt durch 2 oder 4) um auf 50MHz oder weniger zu kommen
3-4 74HC590 (oder weniger, wenn der interne Zähler des AVR verwendet
wird)
Bei Frequenzen über 50MHz ist eine Eingangsbeschaltung nicht mehr
trivial.
Einige Vorschläge sind sicherlich nicht nur für mich interessant.
Gruß
Tom
>Das mit der niedrigeren Frequenz beim zweiten kaskadierten Zaehler>funktioniert so aber nur bei einem Asynchronzaehler....
Weil bei einem Synchronzaehler alle FlipFlops gleichzeitig schalten.
Die Clock Eingaenge liegen dort alle parallel. Deshalb muessen die alle
die hoechste Zaehlfrequenz abkoennen.
Bei einem Asynchronzaehler liegt der Clock vom zweiten FlipFlop am
Ausgang des ersten und muss dann nur die haelfte abkoennen.
Syncronzaehler werden gebrauch wenn man das Ergebnis direkt nach dem
Takt haben muss. In deinem Fall der Frequenzmessung brauchst du das aber
nicht weil du mit dem auslesen durch den Prozessor Zeit hast.
Mit einem Vorteiler ist es ja schon ein wenig asynchron geworden.
Bei einem echten Synchronzaehler bekommen alle Stufen denselben Takt,
nur die Daten sind anders die dazwischen hergeschoben werden.
Hallo,
74ACT161 hat bei mir sicher bis 80MHz gezählt, darüber hatte ich keinen
TTL-Pegel zur Verfügung.
80/16 wären 5MHz, die passen zum AVR. Die Ausgänge des ACT noch an 4
Portpins, dazu noch CLR und TE an den AVR und fertig.
Zähler auf 0 mit CLR, dann für die Torzeit mit TE freigeben,
anschließend eben A...D einlesen.
Wären dann 20Bit mit dem 16Bit-Counter des AVR.
Gruß aus Berlin
Michael
Wenn es um eine Frequenzmeessung mit hoher auflösung geht sollte man in
der Regel die Input Capture funktion nutzen und nicht einfach zählen.
Das Gibt vor allem für niedriege Frequenz auch noch eine hohe Auflösung.
Man kann so z.B. die Schwankungen der Netzfrequenz verfolgen.
Bei vielen Chips kann man die ICP funktion über den extra ICP Eingang
oder den analogen Comperator (und damit auch über AD Eingänge) laufen
lassen. Man hat also schon die Möglichkeit intern die Quelle
umzuschalten. Für höhere Frequenzen genügt dann ein einfacher
Vorteiler. Da geht dann so ziehmlich jeder Zählerbaustein (wenigstens 7
Bit, besser 8). Bis ca. 100 kHz (bei mir gehen gut 300 kHz bei 20 MHz
Quarz) sollte man noch ohne Verteiler verarbeiten können für höhere
Frequenz wäre dann ein Teiler :256 oder so passend. Man sollte damit mit
2 Bereichen auskommen. Das direkte Signal kann an den ICP Pin das
geteilte an den Comperator. Wenn man Angst hat wegen kurzer Pulse,
eventuell immer einen Teiler durch 2 davor.
Ulrich wrote:
> Wenn es um eine Frequenzmeessung mit hoher auflösung geht sollte man in> der Regel die Input Capture funktion nutzen und nicht einfach zählen.> Das Gibt vor allem für niedriege Frequenz auch noch eine hohe Auflösung.
Ist aber bei höheren Frequenzen komplett unbrauchbar.
Jörg Wunsch wrote:
> Ulrich wrote:>> Wenn es um eine Frequenzmeessung mit hoher auflösung geht sollte man in>> der Regel die Input Capture funktion nutzen und nicht einfach zählen.>> Das Gibt vor allem für niedriege Frequenz auch noch eine hohe Auflösung.>> Ist aber bei höheren Frequenzen komplett unbrauchbar.
Besser gesagt, schadet nix bei hohen Frequenzen.
Ich messe etwa 0,5s und dann bis zur nächsten Flanke des
Eingangssignals. Damit habe ich die Dauer n für die Periodenanzahl m.
f_input = f_Quarz * m / n
Dazu geht der Eingang auf ICP und T0.
Und damit erreiche ich ne hohe Genauigkeit (5 Digits), egal ob ich 0,5Hz
oder 10MHz messe ohne jede Umschaltung.
Wenn der GCC double könnte, wärs noch genauer.
Bloß für den Vorteiler bei >10MHz braucht man ne Bereichsumschaltung.
Peter
@An alle
Vielen Dank für eure Hilfe.
Ich werde jetzt die vielen Beiträge in Ruhe durcharbeiten. Ihr habt auch
viele meiner ungestellten Fragen beantwortet :-))
Gruß
Tom
guck dir den an :
www.herbert-dingfelder.de/freq_counter/freq_counter.html
Ich habe es auch benutzt, zwar etwas umgebaut mit autorange, mehreren
gate times, und zwei vortilern ( 200-250 mhz mit 74ACT74 und 1GHZ mit
u6060b ),
aber im prinzip is das was DL5NEG vorgeschlagen gut genug ( je nach
quarz kann es probleme beim abgreifen geben, ich habe persönlich einen
oszilator mit 10.240 mhz genommen )
Den U6060B kann ich nicht empfehlen, ist schon 100 jahre alt das teil,
dafür gibts bessere neuere teile, ich hatte den noch hier und da er ttl
ausgang hat war es keine schlechte idee - habe bis 533 ttl/cmos signale
damit gemessen, ohne probleme.
Naja, eine Auflösung von 10 Hz ist auch weit oberhalb der gängigen
Möglichkeiten. Aber für Amateurfunker reicht das sicher.
Industrie-Elektroniker sind da anspruchsvoller.
Ich habe ein Zähler auf AVR basis, der die ICP Funktion nutzt. Bis etwa
200 kHz (bis etwa 330 kHz gehen) wird das direkte Signal ohne Tieler
genutzt und dabei über mehrere Perioden gemessen. Dabei wird nicht nur
die erste undletzte Zeit genutzt, sondern jeweils der Mittelwert aus
einigen Messungen. Ideal wäre eine lineare Interpolation der Zeiten, das
war mit aber etwas zu rechenintensiv (vor allem in ASM). Das gibt eine
wirklich hohe Auflösung auch nach einer kurzen Gate Zeit. Für höhere
Frequenzen reicht ein Teiler :256 dann für Frequenzen bis gut 50 MHz,
sofern es der Eingangsteil mitmacht. Auch mit dem Teiler kreigt man
schon ab etwa 10 kHz eine gute Auflösung. Bei praktisch jeder Frequenz
besser als man es durch einfaches Zählen hinkriegen kann.