Forum: Mikrocontroller und Digitale Elektronik Serieller Zählerbaustein


von Gerd (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie schnell?
Warum zählst du nicht mit einem im uC eingebauten Zähler?
Und wieso darf deine Software nicht unterbrochen werden?

von Gerd (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Gerd (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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...

von Gerd (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

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

von Gerd (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Gerd (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

>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.

von Peter D. (peda)


Lesenswert?

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

von Gerd (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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.

von Gerd (Gast)


Lesenswert?

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)

von Peter D. (peda)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

>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?

von Gerd (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.