Forum: Mikrocontroller und Digitale Elektronik Gray-Zähler für 13 Bit selber bauen?


von Erwin M. (nobodyy)


Lesenswert?

Über einen Parallelport kann man ja mit einem Port-Zugriff 13 Bits 
(D0-D7 und S3-S7, ein 16-Bit-Zugriff genügt) einlesen, aber nicht sehr 
schnell, so das ich einen leicht zu bauenden, oder auch fertigen, 
13-Bit-Zähler mit Gray-Code suche.
Bisher konnte ich nur einen für 3 Bit finden: 
https://books.google.de/books?id=Q66bBgAAQBAJ&pg=PA231&lpg=PA231&dq=gray-z%C3%A4hler&source=bl&ots=wlLzRpCtOk&sig=yOdOJEznRWSYT66FRLXjDWbkyEc&hl=de&sa=X&ved=0ahUKEwj_oaS51PnTAhUGfFAKHYwXDhsQ6AEIUDAJ#v=onepage&q=gray-z%C3%A4hler&f=false

Wo findet man einen Schaltplan für einen einfachen mit 13 Bit, oder wo 
gibt es die fertig?

von Wolfgang (Gast)


Lesenswert?

Erwin M. schrieb:
> Wo findet man einen Schaltplan für einen einfachen mit 13 Bit, oder wo
> gibt es die fertig?

Das kommt drauf an, wie schnell er sein soll. Von uC über Logikgrab bis 
FPGA sind verschiedene Lösungen denkbar.

von Wolfgang (Gast)


Lesenswert?

p.s.

Auch kommt es auf den Code drauf an. Gray-Code beschreibt eine ganze 
Klasse von Codes. Willst du einen bestimmten zählen oder bist du da 
offen?
https://en.wikipedia.org/wiki/Gray_code#Special_types_of_Gray_codes

von Erwin M. (nobodyy)


Lesenswert?

Wolfgang schrieb:
> Erwin M. schrieb:
>> Wo findet man einen Schaltplan für einen einfachen mit 13 Bit, oder wo
>> gibt es die fertig?
>
> Das kommt drauf an, wie schnell er sein soll. Von uC über Logikgrab bis
> FPGA sind verschiedene Lösungen denkbar.

Erstmal brauche ich einen langsamen für Haushaltanwendungen wie Pulse 
von einem Schalter, Reed-Relais, Bewegungsmelder oder Geigerzähler 
zählen.
Für schnellere Anwendungen wie Frequenzzählen wäre einer bis 250 MHz 
sinnvoll.

: Bearbeitet durch User
von Erwin M. (nobodyy)


Lesenswert?

Wolfgang schrieb:
> p.s.
>
> Auch kommt es auf den Code drauf an. Gray-Code beschreibt eine ganze
> Klasse von Codes. Willst du einen bestimmten zählen oder bist du da
> offen?
> https://en.wikipedia.org/wiki/Gray_code#Special_types_of_Gray_codes

Das ist nebensächlich; ich brauche einen mit dem von 0 bis 8191 gezählt 
wird. Die Umrechnung wird ohnehin in Software gemacht.

von Häääh (Gast)


Lesenswert?

Dafür brauchst du doch keinen Greycode.

Graycode kommt z.B. aus einem Winkelcodierer. Greycode wird eigentlich 
verwendet um Störungen bei der Parallelen Bitübertragung zu verhindern.

von Wolfgang (Gast)


Lesenswert?

Erwin M. schrieb:
> Das ist nebensächlich; ich brauche einen mit dem von 0 bis 8191 gezählt
> wird. Die Umrechnung wird ohnehin in Software gemacht.

Welchen Vorteil siehst du darin, dass aufeinanderfolgende Zählerstände 
einen Hammingabstand von genau 1 haben? Was spricht gegen einen 
gewöhnlichen Binärzähler?

von Christian M. (Gast)


Lesenswert?

Erwin M. schrieb:
> Die Umrechnung wird ohnehin in Software gemacht

Dann brauchst Du ja gar keinen Zähler oder sowas, nur die 13 Abtaster!

Erwin M. schrieb:
> ich brauche einen mit dem von 0 bis 8191 gezählt
> wird.

Und wie ablesen? Optisch? Selbstgemacht? Selbst wenn Du jeden Millimeter 
einen Wechsel hast, wird der über 8 Meter lang!

Wolfgang schrieb:
> Was spricht gegen einen
> gewöhnlichen Binärzähler?

Eben, damit's keine Doppeldeutigkeit gibt. Stell Dir den Papierstreifen 
vor, mit 13 Bits...

Erwin, sag uns was Du machen willst; Dein Vorhaben ist wieder VIIIEEEL 
einfacher zu lösen, wenn Du offen für andere Lösungen bist!

Gruss Chregu

von Erwin M. (nobodyy)


Lesenswert?

Christian M. schrieb:
> Erwin M. schrieb:
>> Die Umrechnung wird ohnehin in Software gemacht
>
> Dann brauchst Du ja gar keinen Zähler oder sowas, nur die 13 Abtaster

Unsinn; es soll nicht rumgefummelt werden sondern gezählt werden, über 
den Parallelport.

von Häääh (Gast)


Lesenswert?

Du brauchst keinen Greycode.

von Wolfgang (Gast)


Lesenswert?

Häääh schrieb:
> Du brauchst keinen Greycode.

Vielleicht doch, wenn es darum geht, die Daten ohne Nutzung eines 
Data-Valid Signal heil über den Parallelport zu bekommen.

Einfachster Weg wäre ein Binärzähler mit einem direkt adressierten 
EEPROM dahinter, dass für die Konvertierung in den gewünschten Gray-Code 
verantwortlich zeichnet.

von Erwin M. (nobodyy)


Lesenswert?

Häääh schrieb:
> Dafür brauchst du doch keinen Greycode.
>
> Greycode wird eigentlich
> verwendet um Störungen bei der Parallelen Bitübertragung zu verhindern.

Ja, deshalb brauche ich den, damit die 13 Ausgangsbits eines Zählers 
asynchron eingelesen werden.

von Häääh (Gast)


Lesenswert?

Erwin M. schrieb:
> Erstmal brauche ich einen langsamen für Haushaltanwendungen wie Pulse
> von einem Schalter, Reed-Relais, Bewegungsmelder oder Geigerzähler
> zählen.

Erwin M. schrieb:
> Ja, deshalb brauche ich den, damit die 13 Ausgangsbits eines Zählers
> asynchron eingelesen werden.

Welchen Zähler verwendest du? Zeig mal.

von Erwin M. (nobodyy)


Lesenswert?

Häääh schrieb:
> Erwin M. schrieb:
>> Erstmal brauche ich einen langsamen für Haushaltanwendungen wie Pulse
>> von einem Schalter, Reed-Relais, Bewegungsmelder oder Geigerzähler
>> zählen.
>
> Erwin M. schrieb:
>> Ja, deshalb brauche ich den, damit die 13 Ausgangsbits eines Zählers
>> asynchron eingelesen werden.
>
> Welchen Zähler verwendest du? Zeig mal.

Bisher keinen, deshalb suche ich ja einen.

von Häääh (Gast)


Lesenswert?

Häääh schrieb:
> Du brauchst keinen Greycode.

von S. R. (svenska)


Lesenswert?

Erwin M. schrieb:
> Erstmal brauche ich einen langsamen für Haushaltanwendungen wie Pulse
> von einem Schalter, Reed-Relais, Bewegungsmelder oder Geigerzähler
> zählen.

Dafür brauchst du keinen Gray-Code. Der Rest der Welt zählt sowas binär.

> Für schnellere Anwendungen wie Frequenzzählen
> wäre einer bis 250 MHz sinnvoll.

Auch hierfür ist ein Gray-Code Unsinn, aber wenn du es trotzdem willst, 
kommst du mit Logikgrab oder Controller nicht weiter.

Du brauchst einen FPGA, da ist das relativ einfach. Aber verabschiede 
dich von 5V-Signalen (teilweise auch schon von 3V3-Signalen), denn die 
gibt's da nicht mehr.

...noch ist doch garnicht Freitag?

von Ralf D. (doeblitz)


Lesenswert?

Erwin M. schrieb:
> Häääh schrieb:
>> Dafür brauchst du doch keinen Greycode.
>>
>> Greycode wird eigentlich
>> verwendet um Störungen bei der Parallelen Bitübertragung zu verhindern.
>
> Ja, deshalb brauche ich den, damit die 13 Ausgangsbits eines Zählers
> asynchron eingelesen werden.

Dann nimm einen normalen Binärzähler und häng ein Latch dahinter, das 
auf der Flanke die Daten übernimmt, auf der Zähler nicht zählt.

Wenn du die Daten so langsam ausliest, daß während der Auslesung ein 
voller Zählzyklus (inkl. Latchen) ablaufen kann, dann brächte dir ein 
Grey-Code auch nichts mehr.

Ansonsten: Mehrfach auslesen; Daten nur verwerten, wenn Übereinstimmung 
bei aufeinanderfolgenden Lesevorgängen vorliegt. Spart dir überflüssige 
Hardware. Und schnell genug für diese "Softwareentprellung" muß der 
Rechner eh sein, da du ansonsten mit den Daten ja gar nichts anfangen 
könntest (die Verarbeitung kostet ja auch Zeit).

von Erwin M. (nobodyy)


Lesenswert?

Ralf D. schrieb:
> Erwin M. schrieb:
>> Häääh schrieb:
>>> Dafür brauchst du doch keinen Greycode.
>>>
>>> Greycode wird eigentlich
>>> verwendet um Störungen bei der Parallelen Bitübertragung zu verhindern.
>>
>> Ja, deshalb brauche ich den, damit die 13 Ausgangsbits eines Zählers
>> asynchron eingelesen werden.
>
> Dann nimm einen normalen Binärzähler und häng ein Latch dahinter, das
> auf der Flanke die Daten übernimmt, auf der Zähler nicht zählt.

Ja, das wäre eine brauchbare Lösung, mit wenig Aufwand, danke für den 
Tip.

Ein alternativer Aufbau wäre der nach
https://patentimages.storage.googleapis.com/US8421891B2/US08421891-20130416-D00003.png
Beschrieben in einem US-Patent:
https://www.google.com/patents/US8421891
Aber für einen Zähler mit 13 Bit bräuchte man dazu ein Und-Gatter mit 13 
Eingängen! Das gibt es wohl nicht fertig und selbst wenn, wäre es wohl 
langsam.

von Helmut S. (helmuts)


Lesenswert?

Graycode kann man mit einem zusätzlichen EXOR-Gatetr pro Zählerbit 
erzeugen.
http://www.hsg-kl.de/faecher/inf/digital/gray/index.php

Allerdings muss man davon ausgehen, dass die EXOR-Ausgänge Glitches 
enthalten falls man einem asynchronen Zähler verwendet.


Da man aber nie weiß welches Bit falsch abgetatstet wurde hilft auch der 
Graycode nicht den Fehler im Ergebnis zu verbessern. Wenn z. B: das 
höchste Bit falsch ist, dann hat man trotz Gray-Code 50% Fehler.

Sie sicherste Lösung wäre so oft abzutasten bis zwei 
hintereinanderfolgende 13bit Werte gleich sind. Diese Mehrfachabtastung 
muss natürlich schneller sein als die erwartete Änderungsgeschwindigkeit 
des Zählers.

: Bearbeitet durch User
von Dieter W. (dds5)


Lesenswert?

Erwin M. schrieb:
> ein Und-Gatter mit 13 Eingängen! Das gibt es wohl nicht fertig...

Zumindest als NAND gibt es das 74133 mit 13 Eingängen.

von --- (Gast)


Lesenswert?

> Zumindest als NAND gibt es das 74133 mit 13 Eingängen.

Und die sind nicht langsamer als ein NAND-Gatter mit 8 Eingängen!
(7430)

von Zeno (Gast)


Lesenswert?

Besorg Dir mal das Buch "Handbuch integrierte Schaltkreise" von 
Kühn/Schmied Verlag Technik Berlin. Dort werden die einzelnen 
Zählervcodecs u.a. auch der Graycode beschrieben und an Beispielen 
erklärt. Im Buch ist ein 4Bit Grayzähler als Schaltbeispiel dargestellt. 
Realisiert werden solche speziellen Zähler i.d.R. mit JK-FF + 
Logikgatter.  Ja und zu Zeiten des genannten Buches waren das 
TTL-Gatter. Für das Prinzip ist dies aber egal, man kann das ja auch auf 
moderne Techniken übertragen.

Im übrigen spricht im Privatbereich nichts dagegen, das eine oder andere 
mit klassischen Konzepten zu lösen, auch wenn viele hier im Forum da 
anderer Meinung sind. Für das Verständnis sind diese klassischen 
Lösungen oftmals besser geeignet, auch wenn es Bauteilgräber sind.

von Joerg W. (joergwolfram)


Lesenswert?

> Da man aber nie weiß welches Bit falsch abgetatstet wurde hilft auch der
> Graycode nicht den Fehler im Ergebnis zu verbessern. Wenn z. B: das
> höchste Bit falsch ist, dann hat man trotz Gray-Code 50% Fehler.

Nein, das ist bei einem Graycode eben nicht so. Bei einem fehlerhaften 
Bit ist der Fehler dort immer 1 (oder -1).

von Forist (Gast)


Lesenswert?

Häääh schrieb:
> Dafür brauchst du doch keinen Greycode.
> ...
> Greycode wird eigentlich verwendet ...

Häääh schrieb:
> Du brauchst keinen Greycode.

Ralf D. schrieb:
> dann brächte dir ein Grey-Code auch nichts mehr.

Da mag man sich gegen den Code sträuben, wie man will. Trotzdem wird 
deshalb kein Grau-Code draus. Der Namensgeber hieß Frank Gray.
https://de.wikipedia.org/wiki/Gray-Code
https://de.wikipedia.org/wiki/Frank_Gray_(Physiker)

von Joerg W. (joergwolfram)


Lesenswert?

Noch ein kleiner Nachtrag:

Meine erste Antwort war vielleicht etwas unglücklich formuliert.

Bei einem Graycode ändert sich zwischen zwei benachbarten Zuständen 
immer nur 1 Bit. Je nachdem welchen Zustand dieses bei der Abtastung 
hat, wird Zustand (n-1) oder Zustand (n) erkannt. Je nach Zählrichtung 
ist der maximale Fehler dann -1 (Vorwärtszählen) oder +1 
(Rückwärtszählen). Da sich immer nur 1 Bit ändert, können keine 
undefinierten "Zwischenzustände" auftreten.

Die Bits, die sich bei diesem Zustandswechsel nicht ändern, werden dabei 
nicht berücksichtigt. Würde ich hier ein Bit ändern, hängt der Fehler 
vom Zustand der restlichen Bits ab, eine feste Wertigkeit der Bits wie 
beim Binärcode gibt es beim Graycode nicht.

Jörg

von Peter D. (peda)


Lesenswert?

Erwin M. schrieb:
> Über einen Parallelport kann man ja mit einem Port-Zugriff 13 Bits
> (D0-D7 und S3-S7, ein 16-Bit-Zugriff genügt) einlesen

Wir sind aber nicht mehr im Jahr 1981.
PCs haben kaum noch einen LPT-Port und unter W10 kann man den auch nicht 
mehr so einfach einlesen, mit 250MHz schonmal gar nicht.
Heutzutage liest man Daten über UART, USB oder Ethernet ein.

Erwin M. schrieb:
> Erstmal brauche ich einen langsamen für Haushaltanwendungen wie Pulse
> von einem Schalter, Reed-Relais, Bewegungsmelder oder Geigerzähler
> zählen.

Da reicht ein ATtiny2313, der zählt (bis 10MHz) und sendet es über die 
UART zum PC. Da auch COM-Anschlüsse selten sind, zum RS232-USB-Adapter.

Erwin M. schrieb:
> Für schnellere Anwendungen wie Frequenzzählen wäre einer bis 250 MHz
> sinnvoll.

Dann fügt man einen entsprechenden Vorteiler hinzu.
Standard Logik geht aber nur bis 170MHz (74VHC393).

: Bearbeitet durch User
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.