Hi,
ich benötige einen externen Zähler mit mindestens 17-Bit, besser wären
18. Im Moment verwende ich einen parallel Zähler, was natürlich viele
PINs an meinem µController "verschwendet". Der Gedanke war jetzt, ein
74HC165 Schieberegister zu verwenden, um aus den 18 Anschlüssen weniger
zu machen. Mit dem µController+Interrupt kann ich nicht zählen da mein
Programm nicht unterbrochen werde sollte.
Meine Frage ist ob jemand hier einen Baustein kennt, der seriell zählt,
sodass ich auf die parallelen Zähler + Schieberegister verzichten kann?
Grüße
Ich möchte Frequenzen bis ca. 18 MHz zählen, mein µController läuft mit
14,7456 MHz. Die Frequenz teilen geht auch nicht, da mir dann
Genauigkeit verloren geht. Deshalb der externe Zähler der anschließend
ausgelesen wird.
> Frequenzen bis ca. 18 MHz> mein µController läuft mit 14,7456 MHz
Dann mach doch einen Vorteiler/Zähler mit 4Bit/18MHz vor den uC. Der
bekommt dann nur noch ca. 1MHz, und das kann er locker zählen. Die 4 Bit
belegen auch nicht soooo arg viele Pins vom uC.
Also:
Aussen (schnell) 4Bit + uC (langsam) 16 Bit = 20 Bit.
habe ich schon versucht (mit 12-Bit Vorteiler), da alles sehr
zeitkritisch ist, geht es nur wenn ich extern zähle und den µController
während der Torzeit nicht unterbreche.
Deshalb bin ich jetzt auf der Suche nach einem Zähler der anstatt
parallel, seriell zählt (SPI, I2C-Bus o.ä.). Falls es sowas nicht gibt
werde ich Schieberegister (74HC165) kaskadieren.
Die viele uC (z.B. Atmegas) haben einen Capture Pin mit dem man einen
der Timer hochlaufen lassen kann. Da läuft dann das Hauptprogramm
einfach weiter...
Und wie gesagt einen 4Bit Zähler vorschalten...
ich habe einen mega64 und brauche zum einen alle timer, und zum anderen
habe ich wie schon geschrieben das ganze mit 12-bit vorteiler
ausprobiert, was nicht zufriedenstellend funktioniert hatte (ich weiß
dass das programm einfach weiterlaufen sollte). aus diesem grund ist es
wie gesagt keine option den µC zum zählen zu verwenden.
wenn niemand (inkl. google...) einen seriellen zählerbaustein kennt,
werden eben schieberegister kaskadiert...
trotzdem vielen dank für die schnellen antworten
Gerd wrote:
> ich habe einen mega64 und brauche zum einen alle timer
Das halte ich für ein Gerücht.
Ein einziger Timer ist ideal dafür geeignet, ihn für viele verschiedene
Zeitabläufe gemeinsam zu verwenden.
, und zum anderen
> habe ich wie schon geschrieben das ganze mit 12-bit vorteiler> ausprobiert, was nicht zufriedenstellend funktioniert hatte
Solange Du nicht verrätst, was nicht zufriedenstellend funktioniert hat,
kann Dir auch keiner dabei helfen.
Falls es ein Frequenzmesser werden sollte, reicht ein Vorteiler völlig
aus, dessen Zählerzustand auch nichtmal ausgelesen werden muß.
Peter
Ich möchte Frequenzen bis ca. 18Mhz innerhalb einer sehr kurzen Torzeit
(<10ms) möglichst genau messen (<10Hz). Das Ganze funktioniert auch mit
externem Zähler, der parallel an den µC angeschlossen ist. Mir geht es
jetzt nur darum, PINs einzusparen, weshalb das ganze seriell
angeschlossen werden soll. Hierzu habe ich ein 74HC165 Schieberegister
vorgesehen, wenn es einen seriellen Zähler gibt, wäre das natürlich
besser, da ich dann auf die Schieberegister verzichten könnte.
Gerd wrote:
> Ich möchte Frequenzen bis ca. 18Mhz innerhalb einer sehr kurzen Torzeit> (<10ms) möglichst genau messen (<10Hz).
Du kannst mit 10ms keine 10Hz Auflösung erreichen, dazu mußt Du schon
mindestens 100ms messen.
Ich sage absichtlich Auflösung, weil ich Dir die 0,5ppm Genauigkeit
einfach nicht glaube.
Abgesehen davon sind 10ms Meßzeit nicht menschlich erfaßbar, da siehst
Du nur verschwimmende 8-en in den untersten Digits.
Sag mal lieber ein paar realistische Zahlen und keine Mondwerte.
Peter
Das ganze funktioniert so, dass die einfallenden Impulse der zu
messenden Frequenz auf die Torzeit synchronisiert werden, sodass Beginn
und Ende der Torzeit immer bei der steigenden Flanke eines
Frequenzimpulses liegen. Ein TDC misst dann die exakte Torzeit und der
µC verrechnet gezählte Impulse und gemessene Torzeit und schickt das
ganze an den PC. Es funktioniert doch schon mir geht es nur darum den
parallelen Anschluss des externen Zählers durch einen seriellen zu
ersetzen.
>Ich möchte Frequenzen bis ca. 18Mhz ...
Ich würde die Frequenzmessung in einen externen µC auslagern und das
Ergebnis seriell einlesen: ATtiny2313 oder ATmega48 wären ausreichend.
Oder auch schon ein ATtiny44 könnte reichen.
Gerd wrote:
> Das ganze funktioniert so, dass die einfallenden Impulse der zu> messenden Frequenz auf die Torzeit synchronisiert werden, sodass Beginn> und Ende der Torzeit immer bei der steigenden Flanke eines> Frequenzimpulses liegen. Ein TDC misst dann die exakte Torzeit
Aha, dann hast Du also noch ne zusätzliche Schaltung mit Torzeitbasis
von mindestens 180MHz, um die Torzeit mit der nötigen Auflösung messen
zu können, die 10Hz bei 10ms entspricht.
Und um die 180MHz zu zählen, würde man ja einen FPGA nehmen, da sollte
doch prima noch das Schieberegister mit reinpassen.
Auch hat ein FPGA ja die nötige PLL, um die 180MHz z.B. aus nem
geheizten 10MHz Präzisionsquarz zu erzeugen.
> und der> µC verrechnet gezählte Impulse und gemessene Torzeit und schickt das> ganze an den PC.
Welchen Compiler benutzt Du denn?
Der AVR-GCC kann kein double, d.h. die 10Hz bei 18MHz (0,5ppm) kannste
voll vergessen.
Peter
Nein, die Torzeit kommt vom µC, der mit 14,7456 MHz getaktet wird, und
einen heruntergeteilten Takt (230.4 kHz) als Takt für den TDC verwendet.
Ein FPGA wird gar nicht eingesetzt. Ein mega64 für Berechnungen,
Kommunikation usw., ein TDC (TDC501 der Fa. MSC) zur Messung der
(synchronisierten) Torzeit und ein externer Zähler um die
Frequenzimpulse zu zählen.
Ich weiß nicht, wozu der TDC gebraucht wird.
Der Timer1 eines AVR kann mit seinem ICP1-Eingang die Pulsdauer exakt
synchron messen. Zwar ist für 18MHz ein Vorteiler notwendig, aber bei
reziproker Messung stört das weder die Genauigkeit noch die Auflösung.
so wie ich das verstanden habe wäre meine auflösung dann vom takt des µC
abhängig, und bei dem hier eingesetzen 14,7456 MHz-Quarz wären das eben
nur knapp 68 ns. Mir ist nicht klar wie du meinst damit eine solch hohe
Genauigkeit zu erreichen.
z.B. bei 10 MHz hätte ich eine Periodendauer von 100 ns und bei
10.000010 MHz eine Periodendauer von 99.9999 ns. So wie ich das
verstanden habe müsste ich ja jetzt praktisch meinen Vorteiler so
wählen, dass der Unterschied größer als die 68 ns (vom 14,7456-Quarz)
wird. Das Problem dabei ist, dass dann bei niedrigen Frequenzen (z.B.
50kHz) die Messdauer zu lange wird (eine Messung soll in weniger als
10ms geschehen)
Gerd wrote:
> Ein mega64 für Berechnungen,> Kommunikation usw., ein TDC (TDC501 der Fa. MSC) zur Messung der> (synchronisierten) Torzeit und ein externer Zähler um die> Frequenzimpulse zu zählen.
O.k., 220ps Auflösung des TDC501 reichen rein theoretisch. Wie genau
diese über 10ms lang gemessen werden, habe ich nicht weiter
nachgeschaut. Ich bezweifle aber, daß er Deine geforderte Genauigkeit
erreicht.
Und zur Genauigkeit eines nicht temperaturstabilisierten, billigen 14MHz
MC-Quarz sag ich mal nichts weiter.
Hinzukommt ja noch der Rechenfehler der float-Rechnung des AVR-GCC.
Etwa 5..6 Digits kann man real erreichen, der Rest ist nur
Rundungsrauschen.
Der TDC501 hat ja nen 8-Bit Datenbus, da könnte man prima 74HC590 Zähler
parallel schalten zum Auslesen. Das sollte ne Menge Leitungen sparen.
Peter
>Das Problem dabei ist, dass dann bei niedrigen Frequenzen (z.B.>50kHz) die Messdauer zu lange wird (eine Messung soll in weniger als>10ms geschehen)
In 10ms kannst Du 100Hz messen und das mit hoher Genauigkeit (abhägig
vom Referenztakt 14...MHz). Die Auflösung ergibt sich daraus, wieviel
Referenzimpulse man in der Meßzeit auswerten kann. Bei 10ms und 14MHz
sind es rund 140000. Die Auflösung ist damit 1/140000.
Suche einmal nach "reziproker Zähler".
Beim TDC habe ich auf die Schnelle nicht gesehen, wie die
"Feinquantisierungselektronik" funktioniert. Aber zaubern kann auch sie
nicht. Auflösung ist keine Genauigkeit!
Welche physikalische Größe willst Du denn Erfassen?
ich weiß jetzt bekomme ich wahrscheinlich gleich eines auf den deckel,
aber ich nutze nicht AVR-GCC sondern BASCOM. Ich runde auf ganze
Frequenzen.
Der TDC501 sollte eigentlich auch die 10ms auf 220ps genau messen, real
bin ich etwas schlechter als 1 ns.
Alle Rundungsfehler und Ungenauigkeiten mit eingerechnet, reicht es
immer noch aus, 10 MHz auf 7 Hz genau zu messen (bei einer Torzeit von
ca. 8ms).
Im Moment ist das auch noch ein relativ freifliegender Testaufbau, auf
Europakarte, ich denke wenn es erstmal mit SMD Bauteilen zusammengelötet
ist und ein gescheites Layout dazu kommt (und nicht Kabelsalat wie im
Moment) sollte es zumindest nicht schlechter werden ;)
Ich weiß nicht ob das aus meinen vorherigen Postings deutlich geworden
ist: Die Frequenzmessung schnell und genau funktioniert, ist alles real
aufgebaut, Software programmiert, es geht mir jetzt nur darum den
parallelen Zähler durch einen seriellen Zähler zu ersetzen.
Vielen Dank trotzdem für das kritische Hinterfragen und die Tipps.
74HC590 werde ich mir anschauen