Forum: FPGA, VHDL & Co. Stoppuhr Logik?


von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hallo Zusammen,
hat hier jemand konkrete Informationen, wie die Sekundenbruchteile in 
der Stoppuhr einer billigen Armbanduhr dekodiert werden? Die übliche 
Uhrenquarzfrequenz ist ja 2^15 Hz. Dies erlaubt zwar die korrekte 
Darstellung von Sekunden, aber nicht der 10tel und 100stel. Mein erster 
Ansatz wäre ein 7bit-Decoder, der 0..127 auf 0..99 abbildet. Das kommt 
mir aber fast zu komplex vor, für einen Uhrenbaustein.
Mir fehlen die passenden Suchbegriffe. Ich freue mich auf Eure Tipps. 
Danke.

Einen schönen 1. Advent!
marcus

von Gustl B. (gustl_b)


Lesenswert?

Genau dafür gibt es Quarze mit z. B. 25.6 kHz. Das durch 2^8 ergibt 10 
ms.

Beitrag #6494050 wurde von einem Moderator gelöscht.
von MaWin (Gast)


Lesenswert?

Die klassische LCD Uhr verwendet ein 4-fach gemultiplextes LCD und 
erzeugt daher aus den 32768 Hz erst mal 8 Zeitfenster a 2.048ms für 64Hz 
Multiplexfrequenz.
Es macht also keinen Sinn, Zahlen darzustellen die sich öfter als 64 x 
pro Sekunde andern.
Ob sich die Stoppuhr-Hundertstel nun von einem Bild zum nächsten um 1 
oder 2 erhöht werden muss, bestimmt die Uhr durch einen 
vorausberechnezen (weil konstant) Bresenham-DDA, der nicht so viele 
Schritte hat, KGV von 100 und 64 ist 1600, also 25. Wie diese 25 gezählt 
werden, vermutlich ein 5 bit Zähler, und wie daraus die +1 oder +2 
werden, vermutlich bestimmt das ein Minterm-Gatternetz, aber das kann 
jeder Wristwatch-Chip Hersteller selber aussuchen.

Es gibt ja nichtmal ein Datenblatt zum ersten LCD Uhr (ohne Stoppuhr), 
der Intel 5810A.

von Egon D. (Gast)


Lesenswert?

Marcus H. schrieb:

> hat hier jemand konkrete Informationen, wie die
> Sekundenbruchteile in der Stoppuhr einer billigen
> Armbanduhr dekodiert werden?

Ich nicht.


> Die übliche Uhrenquarzfrequenz ist ja 2^15 Hz. Dies
> erlaubt zwar die korrekte Darstellung von Sekunden,
> aber nicht der 10tel und 100stel.

Das stimmt zwar -- aber bleiben wir doch mal realistisch:
1^15Hz sind 32'768Hz.

Würde man diese 32'768Hz durch 327 Teilen, dann kämen da
100.208Hz heraus -- die Hundertstessekunden wären also nur
9.979ms lang (statt 10.000ms).

Teilt man durch 328, dann werden die Hundertstel 10.0098ms
lang.

Teilt man allerdings 32 mal durch 327 und 68 mal durch 328,
dann hat man insgesamt 32*327 + 68*(327+1) = 32'700 + 68
Impulse gezählt -- das sind gerade 32768.

Man hätte dann 32 Hundertstelsekunden, die 21µs zu lang sind,
und 68 Hundertstelsekunden, die 9.8µs zu kurz sind. Wenn man
die geschickt mischt, so dass immer ungefähr zwei zu kurze
Intervalle auf ein zu langes folgen (--> Bresenham-Algorithmus),
dann wird der Fehler nie größer als ungefähr 21µs -- was für
eine manuelle Stoppuhr schon ziemlich spektaktulär ist.

Das ist das mathematische Prinzip, das dem "fractional divider"
und dem "dual modulus prescaler" zu Grunde liegt.

Ich weiss nicht, OB die Uhren so arbeiten. Wenn ich es
entwickeln müsste, würde ich es aber so machen.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

MaWin schrieb:
> Die klassische LCD Uhr verwendet ein 4-fach gemultiplextes LCD und
> erzeugt daher aus den 32768 Hz erst mal 8 Zeitfenster a 2.048ms für 64Hz
> Multiplexfrequenz.
> Es macht also keinen Sinn, Zahlen darzustellen die sich öfter als 64 x
> pro Sekunde andern.
> Ob sich die Stoppuhr-Hundertstel nun von einem Bild zum nächsten um 1
> oder 2 erhöht werden muss, bestimmt die Uhr durch einen
> vorausberechnezen (weil konstant) Bresenham-DDA, der nicht so viele
> Schritte hat, KGV von 100 und 64 ist 1600, also 25. Wie diese 25 gezählt
> werden, vermutlich ein 5 bit Zähler, und wie daraus die +1 oder +2
> werden, vermutlich bestimmt das ein Minterm-Gatternetz, aber das kann
> jeder Wristwatch-Chip Hersteller selber aussuchen.
Und hier sind wir am Kern meiner Frage: wie setzt man die Aufgabe mit 
minimalem Aufwand, mit den verfügbaren Prozessen in Chip um. Der von Dir 
beschriebene Ansatz ist für sich gesehen von relativ niedrigem Aufwand. 
Allerdings wird ein zweiter Zähler gebraucht. Der von mir vorgeschlagene 
Ansatz benötigt nur Logik, welche direkt die sowieso notwendigen 
Teilerstufen ausliest.
Danke für die Erinnerung, dass das Multiplexing ggf. einen Einfluss auf 
die Umsetzung hat. Beim u.s. Projekt hat der Kunde damals nur eine 
Sekunde als Auflösung gefordert. Bei der Umsetzung habe ich mich mit dem 
Stoppuhralgorithmus auch an das Displaytiming rangehängt.
http://harerod.de/applications_ger.html#allTimer

> Es gibt ja nichtmal ein Datenblatt zum ersten LCD Uhr (ohne Stoppuhr),
> der Intel 5810A.
Danke für diesen Suchbegriff!
https://www.computerhistory.org/siliconengine/digital-watch-is-first-system-on-chip-integrated-circuit/
-> ich habe gerade auf gut Glück das Buch von Weaver bestellt.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Egon D. schrieb:
> Marcus H. schrieb:
>
>> hat hier jemand konkrete Informationen, wie die
>> Sekundenbruchteile in der Stoppuhr einer billigen
>> Armbanduhr dekodiert werden?
>
> Ich nicht.
Diese Aussage gefällt mir.
...
...
> Ich weiss nicht, OB die Uhren so arbeiten. Wenn ich es
> entwickeln müsste, würde ich es aber so machen.

Danke für die Erläuterung. Wenn ich keine Info über tatsächliche Chips 
bekomme, könnte ich meine Neugier stillen, indem ich versuche die beiden 
Ansätze mit einem ASIC-Designwerkzeug nachzubauen. Das wäre dann 
allerdings ein wenig unterhalb meiner üblichen Arbeitszone. :)

Meine Frage ist übrigens aus einem 30..40 Jahre alten 
Erinnerungsfragment entstanden, das durch einen Nachlass, den ich gerade 
verwalte, aufgetaucht ist: Ein Onkel meiner Großmutter war Uhrmacher und 
Elektroniker. An seiner Werkstattwand hing eine Quarz-LED-Uhr, deren 
komplette Elektronik diskret als Transistorlogik auf Lochraster gefädelt 
war. Beim Nachdenken über dieses Projekt ist mir das Problem mit den 
Nachkommastellen eingefallen.

von MaWin (Gast)


Lesenswert?

Marcus H. schrieb:
> Der von Dir beschriebene Ansatz ist für sich gesehen von relativ
> niedrigem Aufwand. Allerdings wird ein zweiter Zähler gebraucht.

Nein, das machen die bits des normalen Zählers, hier von 64Hz bis 4Hz, 
die in
0.00
0.02
0.03
0.05
0.06
0.08
0.10
0.11
0.13
0.14
0.16
0.17
0.19
0.20
0.22
0.23
-----
0.25
decodiert werden (und dann wiederholend bis 0.5, 0.75 und 1)
Und das nicht per ROM, sondern minimiertem Gatterwerk..

von Egon D. (Gast)


Lesenswert?

Marcus H. schrieb:

> Egon D. schrieb:
>> Marcus H. schrieb:
>>
>>> hat hier jemand konkrete Informationen, wie die
>>> Sekundenbruchteile in der Stoppuhr einer billigen
>>> Armbanduhr dekodiert werden?
>>
>> Ich nicht.
> Diese Aussage gefällt mir.

:-)


> Meine Frage ist übrigens aus einem 30..40 Jahre alten
> Erinnerungsfragment entstanden, das durch einen Nachlass,
> den ich gerade verwalte, aufgetaucht ist: Ein Onkel
> meiner Großmutter war Uhrmacher und Elektroniker. An
> seiner Werkstattwand hing eine Quarz-LED-Uhr, deren
> komplette Elektronik diskret als Transistorlogik auf
> Lochraster gefädelt war. Beim Nachdenken über dieses
> Projekt ist mir das Problem mit den Nachkommastellen
> eingefallen.

Ich habe nochmal ein wenig gerechnet: Wenn man die 32'768Hz
erstmal durch 5.12 teilen könnte, kämen gerade 6'400Hz
heraus, und wie man daraus korrekte Hundertstelsekunden
gewinnen kann, ist hoffentlich offensichtlich.

Dankenswerterweise KANN man näherungsweise durch 5.12
teilen: Nichtganzzahlige Teilerfaktoren sind mit Teilern
möglich, die in ihren Rückführungen wiederum Teiler
enthalten; außerdem braucht man eine einfache Mimik aus
Gattern und Flipflops für die Impulsunterdrückung. Die
notwenigen Faktoren kann man mittels Kettenbruchentwicklung
ausrechnen; dazu gibt es Veröffentlichungen aus den 80ern
des vorigen Jahrhunderts.

Für Teilerfaktor 5.12 braucht man die Faktoren 5, 8 und 3,
denn 5+1/(8+1/3) = 5+1/(25/3) = 5+3/25 = 5+12/100 = 5.12

Die erzeugte Pulsfolge ist dieselbe wie bei der wechselnden
Teilung durch 327 bzw. 328, nur sind die erforderlichen
Faktoren viel kleiner.

Ich weiss nicht, OB es tatsächlich so gemacht wurde -- ich
würde es aber so machen, gerade in einer Eigenbau-Uhr.

von Andreas B. (bitverdreher)


Lesenswert?

Egon D. schrieb:
> Würde man diese 32'768Hz durch 327 Teilen, dann kämen da
> 100.208Hz heraus -- die Hundertstessekunden wären also nur
> 9.979ms lang (statt 10.000ms).

Stört doch niemanden. 100x 9.979ms sind 0.998s. Dann setzt man eben 
wieder auf die nächste Sekunde, resettet den Hunderstelzähler und gut 
ist.
Ich möchte sowieso mal sehen wie jemand per Hand auf 1/100s stoppt.

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.