Seite 1 von 2

Takt halbieren

Verfasst: Mo Jul 27, 2020 4:20 pm
von mclb
Hallo zusammen,

ich stehe gerade ein wenig daneben ... ich brauche für eine Logik einen Takt (gibt es ja) und zusätzlich den halbierten und den geviertelten Takt. Jetzt hätte ich gern, statt 3 einzelne Bausteine zu verwenden, einfach den 1 Takt halbiert und dann den Zweiten wieder halbiert. Wie würdet ihr das umsetzen? Oder doch einfach 3 einzelne Takt-Bausteine?

Ziel ist also Folgendes:
Takt 1: 0 1 0 1 0 1 0 1
Takt 2: 0 0 1 1 0 0 1 1
Takt 3: 0 0 0 0 1 1 1 1

Danke
Marcus

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 4:56 pm
von gbglace
Also wenn man eine Uhr hat und will die mehrfach verwenden, dann fängt man doch bitte beim kleinen Teil an und ignoriert bei Bedarf jeden zweiten Ping.

Damit lässt sich eine solche Uhr so lange verwenden wie der Takt dieser Uhr ein ganzzahliges Vielfaches der gewünschten Taktung ist.

In Deiner Version würdest einmal richtig liegen und bei allen anderen Subversionen könntest einfach nur feststellen wieviele Aktionen du verpasst hast. Oder Du hast ne Zeitmaschine.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 5:42 pm
von Robosoc
Dein dreiteiliges Bitmuster hat mich sofort auf ein Demultiplexer gebracht...
Du baust dir einen Takt, der einen Integer von 0 bis 7 zählt und danach wieder von vorne beginnt.
Anschließend zerlegst Du diesen Integer mit einem Demultiplexer in die drei Bits, die dann gleichzeitig Deine Ausgänge sind.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 6:04 pm
von S. Kolbinger
... oder einen Frequenzteiler:

Man nehme ein Latch mit Trigger auf fallende Flanke und verbindet den Ausgang invertiert auf den Eingang.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 6:17 pm
von Robosoc
S. Kolbinger hat geschrieben: Mo Jul 27, 2020 6:04 pm ... oder einen Frequenzteiler:

Man nehme ein Latch mit Trigger auf fallende Flanke und verbindet den Ausgang invertiert auf den Eingang.
Auch eine sehr coole, smarte Idee... :handgestures-thumbupright: :handgestures-thumbupright:

Marcus, hilft Dir das jeweils? Sollte glaube ich beides mit einer customlogic, einem triggereingang und drei Ausgängen, Drei Modulen lösbar sein. Wenn Du noch auf dem Schlauch stehst, sag Bescheid, dann schreib ich Dir den Code. Ist nicht aufwändig.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 6:21 pm
von gbglace
Darf ich mal Fragen was muss ich denn gelernt haben damit man beim lesen von Begrifflichkeiten wie:
zerlegst Du diesen Integer mit einem Demultiplexer in die drei Bits
bzw.
ein Latch mit Trigger auf fallende Flanke
, im Kopf direkt ohne Wikipedia und deepl eine Vorstellung bekommt was da am Ende passieren wird?

Ich bin immer für was Neues zu haben aber rein so hier beim mitlesen habe ich so das Gefühl ich verstehe zunehmend immer weniger von der Logikmaschine im TWS.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 6:40 pm
von Didda93
@gbglace
100% Zustimmung :D

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 7:50 pm
von starwarsfan
100% Zustimmung!

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 8:42 pm
von Robosoc
:confusion-scratchheadyellow:
"Darf ich mal Fragen was muss ich denn gelernt haben damit man beim lesen von Begrifflichkeiten wie"...Genau so etwas habe ich gedacht, als Du das Folgende im zweiten Beitrag geschrieben hast :laughing-rolling:
gbglace hat geschrieben: Mo Jul 27, 2020 4:56 pm In Deiner Version würdest einmal richtig liegen und bei allen anderen Subversionen könntest einfach nur feststellen wieviele Aktionen du verpasst hast. Oder Du hast ne Zeitmaschine.
Aber mal Spaß beiseite... Ich finde diese Kritik an der Kompliziertheit des Logikeditors in diesem konkreten Beispiel als nicht korrekt. Das soll nicht heißen, dass ich ihn nicht auch komplex und manchmal kompliziert finde...Aber hier passt es einfach meiner Meinung nach überhaupt nicht.

Der Begriff des Multiplexer (und ich glaube dass ein Demultiplexer das Gegenteil ist, erschliesst sich recht schnell) wird in Hochsprachen genauso angewendet. Tatsächlich habe ich den erstmalig im Wiregate Server genutzt und dabei zu schätzen gelernt, als ich einen PERL-Code von jemand Anderes nachvollzogen habe...und dann einen Multiplexer im Logikeditor des Wirgate-Servers umgesetzt habe... da war das recht aufwändig. Und als ich dies als Modul beim TWS entdeckt habe, war ich begeistert und es ist mega simpel in der Anwendung...UND ja, die Funktion eines Multiplexers kannst Du bei Wiki nachlesen, aber auch in der Knowledge Base. Ich schreibe ab und an Code in VBA, JavaScribt und ähnlichem, aber ich für meine Heimautomation mit KNX schätze ich inzwischen den TWS-Editor, insbesondere, weil hier die Eingangsfunktionen a/c/u und Ausgangsfunktionen a/c/t/ct einen darauf achten lassen, was man eigentlich will...

In der Knowledge Base findet man auch den Begriff Latch, der für mich hier auch Neuland war. Aber wenn man in der Knowledge Base das Kapitel 4.6.6 nutzt (und das habe ich beim Schreiben von Customlogiken alleine schon als Kopiervorlage immer offen), dann sind diese beiden Module meines Erachtens recht klar...und ich finde jetzt nicht so sehr dass ich ein Tech-Nerd bin.

Ich finde den Abschnitt Logikeditor in der KB wirklich sehr hilfreich und bin damit sehr schnell zu uten Ergebnissen gekommen.

Re: Takt halbieren

Verfasst: Mo Jul 27, 2020 8:50 pm
von Robosoc
Das ist die Umsetzung des Lösungsvorschlages von S. Kobinger mit Latch (deutlich weniger Codezeilen)

Code: Alles auswählen

{
    "Level": [
        ["$Takt1", "bool", false],
	["$Takt2", "bool", false],
	["$Takt3", "bool", false]
	],
	"Input": [
    ],
	"Output": [
	["Takt1","","$Takt1","c"],
	["Takt2","","$Takt2","c"],
	["Takt3","","$Takt3","c"]
    ],
    "Module": [
        ["And" , ["-$Takt1" ] , "$Takt1"],
	["Latch","-$Takt2","$Takt2","$Takt1",2],
        ["Latch","-$Takt3","$Takt3","$Takt2",2]
    ]
}
und von mir mit dem BinaryDemultiplexer

Code: Alles auswählen

{
    "Level": [
        ["$Takt1", "bool", false],
		["$Takt2", "bool", false],
		["$Takt3", "bool", false],
		["$dummy", "bool", false],
		["$const_1", "integer", 1],
		["$const_7", "integer", 7],
		["$Counter", "integer", 0]
	],
	"Input": [
    ],
	"Output": [
	    ["Takt1","","$Takt1","c"],
		["Takt2","","$Takt2","c"],
		["Takt3","","$Takt3","c"]
    ],
    "Module": [
        ["Polynomial", "$const_1", "$Counter",["$Counter", "$const_1"]],
		["Comparator" , "$Counter" , "$dummy" , "$const_7"],
		["Latch",0,"$Counter","$dummy",1],
		["BinaryDemultiplexer","$Counter",["$Takt1","$Takt2","$Takt3"]]
    ]
}
Beides Mal sieht die Zelle gleich aus:
takt1.jpg