StartseiteKalenderFAQSuchenMitgliederNutzergruppenAnmeldenLogin

Austausch | 
 

 Vom hinterhältigen Takter

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
aleparad
Creator
Creator
avatar

Anzahl der Beiträge : 177
Anmeldedatum : 19.09.12
Alter : 21
Ort : Niederrhein (NRW), vor PS3 oder PC

BeitragThema: Vom hinterhältigen Takter   So Jul 14, 2013 10:14 pm

Inhaltsverzeichnis: Vom hinterhältigen Takter
1. Das Problem
2. Die Lokalisierung des Problems
3. Ein Lösungsansatz
4. Die Überprüfung des Lösungsansatzes
5. Das Ergebnis
6. Das genaue Ergebnis
7. Auswirkungen des Problems
8. Vermeidung des Problems





1. Das Problem

Bei einem kleinen Test, mit dem ich den Wahrheitsgehalt des Displays meiner Dragstrecke überprüfen wollte (nichts großes, Handyuhr und Start-Stop Schaltung) fiel mir auf, dass meine -alte- Art, einen Timer zu schalten eine sehr unerwünschte Nebenwirkung hat: Die Zeiten sind schlichtweg falsch.



2. Die Lokalisierung des Problems

Also ging es darum, die Quelle des Fehlers mit einem Test zu finden. Eine vereinfachte Form dieser Schaltung findet sich in Bild 1. Kurz erklärt: Ein Timer mit 0,1 Sekunden lässt einen Wähler mit 10 Ausgängen konstant durchschalten. Sobald der erste Wähler seinen Ausgangsstand erreicht hat, schaltet er einen zweiten Wähler um, das heißt dieser wechselt den Ausgang nachdem der erste Wähler einen kompletten 10er Durchlauf vollendet hat. Widerum bei jedem Durchlauf des zweiten Wählers schaltet der Dritte. Dabei symbolisieren die Wähler die verschiedenen Ziffernstellen der Zeit. Der erste Wähler (im Bild ganz links) steht für die 0,1er-Stelle. Der zweite Wähler (mittig) steht für die vollen Sekunden und der dritte (rechts) steht für die 10er-Sekunden. Rechnerisch ist dies ganz einfach. die 0,1er-Stelle verändert sich alle 0,1 Sekunden (getaktet durch den Timer). Die 1er-Stelle verändert sich nach 10 x 0,1s Sekunden (ein Durchlauf des Wählers #1) und nach jedem Durchlauf des 2. Wählers verändert sich die 10er-Stelle (10 x 1s; 10 x 10 x 0,1s). Das Prinzip scheint also korrekt.
Leider ergab der Versuch mit einer richtigen Uhr folgendes: nach 60 echten Sekunden zeigte der Timer eine Sekundenzahl von exakt 45 an.
Ratlosigkeit machte sich breit.
Bild 1:
 


3. Ein Lösungsansatz

Die vorrausgegangene Rechnung schließt zweiteres aus, also musste der Timer eine Fehlfunktion haben. Um das womöglich fehlerhafte Bauteil zu umgehen, entschied ich mich für folgende Taktgebermethode: Ein Sequenzer mit der Geschwindigkeit von 0,1 Sekunde pro Blockeinheit. Die Oberfläche hatte die Länge von exakt einem dieser Abschnitte und eine darauf platzierte Batterie (Standartgröße auf Schaltkarte 1x1) belegte genau die Hälfte der Länge. Dieses Modul ersetzte den Timer und die Schaltung ähnelte der aus Bild 2.
Bild 2:
 

4. Die Überprüfung des Lösungsansatzes
Um herauszufinden, ob die Probleme gelöst waren machte ich folgenden Test: Beide Schaltungen wurden mit zeitgleichen Signalen zum Start verbunden und die Zeitmessung wurde automatisch unterbrochen, sobald der erste Timer 60 Sekunden erreichte. Nebenbei lief auch eine echte Stoppuhr mit, die das wahre Ergebnis liefern sollte. Dabei entstand Bild 3.
Bild 3:
 


5. Das Ergebnis

Die Schaltung mit dem Sequenzer erreichte als erste die 60 Sekunden und auch die andere Schaltung wurde somit angehalten. Ein Blick auf die echte Stoppuhr verriet, dass exakt 60 Sekunden vergangen waren und der Sequenzer als Takter perfekt funktionierte.
Nun zu dem Timer. Da er erst 45 Sekunden erreicht hat lies sich schlussfolgern, dass er pro Takt der Sequenzers (0,1s) 45/60 oder auch 3/4 Takte machte. Er war also 1,25 mal langsamer als 0,1 Sekunden.
=> Der auf 0,1s eingestellte Timer taktet eigentlich nur alle 0,125s.


6. Das genaue Ergebnis

Weitere Tests mit gleicher Schaltung aber veränderter Taktrate (1s statt 0,1s) ergeben jedoch, dass die Zeiten (wieder zurückgerechnet, also durch 10 geteilt) ohne messbare Abweichung zutrafen. Also muss pro Rücksetzvorgang des Timers eine Verzögerung von 0.025s auftreten, unabhängig von der Füllgeschwindigkeit. Aus 0,1 Sekunden eingestellter Dauer werden somit 0,125s. Aus 1 Sekunde werden nach dem Maß 1.025s. Die Abweichung nimmt also mit zunehmender Dauer ab.


7. Auswirkungen des Problems

Und genau da liegt die Hinterhältigkeit des Problems. Bei großen Füllzeiten fällt diese Verzögerung kaum auf, jedoch tritt diese kontinuierlich auf, was schon nach 4 Takten zu einer Verschiebung von 0,1s im Vergleich zu einem genormten Takter führt. Besonders tragisch ist dieser Sachverhalt, wenn man den Timer als Takter parallel zu einer anderen Schaltung, welche einen Sequenzer als Takter nimmt. Dies muss keine hochkomplexe Uhr sein, es reicht auch ein simples Blinklicht.
Ein weiteres Problem tritt auch auf, wenn man einheitlich nur Timer benutzt, aber diese verschiedene Längen haben. So könnte man beispielsweise auf die Idee kommen, eine Uhr in Teilen und nicht wie ich als ganzes zu Takten (viele machen das, es erscheint ja auch simpler). Man könne auf die Idee kommen, für die 0,1s einen Wähler zu benutzen und diesen mit einem 0,1s Timer umzustellen. Die Sekundenstelle genauso, nur dass ihr Timer auf 1s steht und so weiter für jede gewünschte Stelle der Uhr. Rechnerisch könnte man jetzt vermuten, dass die Sekundenstelle nach der Zeit umspringt, die die ZehntelSekundenstelle für 10 Durchläufe benötigt (10 x 0,1s = 1s). Dem ist aber ganz und gar nicht mehr so, wenn man bedenkt, dass die Zehntelstelle alle 0,125 Sekunden umspringt und die Sekundenstelle nach 1,025 Sekunden, denn 10 x 0,125s = 1,25s und nicht 1,025s (der Takt der Sekundenstelle). Es ergibt sich also bei einer solchen Schaltung pro Sekunde 0,225s Abweichung zwischen der Zehntel- und der Sekundenstelle. Auf die Minute hochgerechnet ergibt das eine ziemlich hässliche Abweichung, was die gesammte Uhr (es ergibt sich ja auch eine Abweichung zwischen Sekunden und ZehnerSekundenstelle usw) unbrauchbar macht.


8. Vermeidug des Problems

Wenn es um Schaltungen geht, welche mehrere voneinander abhängige Segmente besitzen (wie bei der Uhr die Stellen), macht diese Segmente voneinander abhängig und verbindet nur das schnellste Element mit einem Takter. Damit vermeidet Ihr Differenzen zwischen den Segmenten. Um jedoch wirklich fachliche Takter zu erhalten, baut Euch einen Takter aus einem Sequenzer (wie in den Bildern zum Testaufbau). Damit könntet Ihr sogar unabhängige Elemente erzeugen, ohne dass diese irgendwann aus dem Ruder laufen.
Kurzum: Wenn es um Takt geht, haltet Euch von Timern fern, diese sind für anderes zu benutzen.


Ich hoffe dieses Tutorial konnte euch bei ungelösten Mysterien in eigenen Schaltungen weiterhelfen und euch wertvolles Vorwissen für zukünftige Projekte verschaffen
Viele Grüße Alex
Urheber: Aleparad Laboratories (2013)

__________________________________________________
Neuerungen in LittleBigPlanet?

Das Portal zum Fortschritt!
Nach oben Nach unten
Benutzerprofil anzeigen
CuriousSack
Dämonisch
Dämonisch
avatar

Anzahl der Beiträge : 574
Anmeldedatum : 14.08.12
Alter : 55
Ort : Rosenheim

BeitragThema: Re: Vom hinterhältigen Takter   So Jul 14, 2013 11:35 pm

Wow, Alex, sowas macht mich irgendwie sprachlos, und ich bin dann immer tief beeindruckt! Ich finds erstaunlich, auf welche Ideen Du kommst und das ist einfach nur genial!^^ Smile

Liebe Grüße, Jürgen^^

__________________________________________________
Nach oben Nach unten
Benutzerprofil anzeigen
 
Vom hinterhältigen Takter
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
 :: DreamCreators' LBP Bastelwerkstatt :: Tutorials-
Gehe zu: