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
Wie schnell? Warum zählst du nicht mit einem im uC eingebauten Zähler? Und wieso darf deine Software nicht unterbrochen werden?
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.