- Beiträge
- 6.996
- Reaktionspunkte
- 2.673
-> Hier kostenlos registrieren
Die Benutzung des Ausgangs des analogen Schieberegister hatte ich oben im Versuch dazu schon mal gepostet:wie würde dann das Programm aussehen wenn ich das ohne den zwei integrierten Schieberegistern mache, sondern nur mit den selbst erstellten ?

Es sollte also im Programm noch kein Problem darstellen, die integrierten Schieberegister zu löschen und stattdessen, wie im Versuch, den Ausgang des analogen Schieberegisters zu nutzen (grün):

Bei der Gelegenheit verweise ich gleich noch mal auf den Eingang des (Gesamt-) Schieberegisters B008 (rot), weil das bei den nächsten Schritten von Bedeutung ist.
Jetzt hast Du allerdings nur noch insgesamt 90 Schiebe-Bits. Das bedeutet, Du mußt (erst) nochmal 15 Bits zum Register hinzufügen -> Deine 4. Frage:
Hinzufügen mache ich am unteren Ende, weil da naturgemäß noch Platz auf dem Arbeitsblatt ist. (Etwas einfacher wäre am oberen Ende, dafür muss man dann das ganze Register nach unten verschieben, um Platz zu bekommen. - Gelöscht wird immer von oben.)-Ich habe mal versucht ein selbsterstellen Schieberegister zu bauen, um zu den 105 Bits 15 Bits mehr hinzuzufügen, hat irgendwie nicht geklappt, obwohl ich die Parametersätze wie bei den anderen Funktionsblöcken übernommen habe. So ganz habe ich das Programm noch nicht durchleuchtet.![]()
Also, das unterste Einzelregister (grün) markieren, kopieren und drunter noch mal einfügen:

Den Takt an das neue Register anschließen, den Eingang des (Gesamt-) Schieberegisters B008 (rot, da war doch weiter oben was) auf das neue 1. Register umschreiben und dabei die Verweise zur Berechnung (grün) wieder einfügen (werden beim Kopieren gelöscht!) und abschließend den Eingang des vorherigen 1. Registers auf den Ausgang des neuen 1. Registers verknüpfen (orange):

Das vorherige Schieberegister Bit 1-16 (türkis) wird dann Bit 16-30. Die Umbenennung setzt sich so bis zum obersten Einzelregister fort.
Als letzte Anpassung haben wir jetzt beim letzten Einzelregister einige Bits zuviel, was dann Deine 2. & 3. Frage beantwortet:
Ich hatte die grundlegende Funktion zwar hier schon mal erklärt:-Also wenn ich das jetzt bei deinen selbsterstellten Schieberegistern ansehe, hast du immer in 15 ner Schritten (Bits) gearbeitet . Kann man auch je Schieberegister eine beliebige Zahl nehmen z.B. 12 ? Wenn ja wie kann ich es definieren, dass je Schieberegister statt 15 Bit z.B. 12 Bit verschoben werden?
-Wenn ich z.B. die On/OFF Werte beim analogen Schwellwertschalter ändere, dann macht das Programm irgendwas und die Funktion ist dann nicht mehr erfüllt, ich weiß aber nicht warum.
sollte dann aber doch noch zusätzlich detailierter auf die einzelnen verwendeten Bausteine (mit den Bausteinbezeichnungen aus dem Quote) eingehen:Dann brauchst Du ein eigenes Schieberegister:
Dazu ein paar Vorbetrachtungen. Wenn ein Bit in einem Binärwert um eine Stelle nach links verschoben wird, so wird z.B. aus 'ner 1 eine 2, aus 'ner 2 eine 4 oder aus 'ner 8 eine 16. Es entspricht also einer Multiplikation mit 2. Wird dagegen das höchste Bit aus dem Wert herausgeschoben, veringert sich der Wert um 2^x, wobei x der herausgeschobenen Bitstelle (begonnen bei 0) entspricht.
Analogwerte können bei der Logo bis 32.767 berechnet werden. Das sind 15 Bits (Bit 0 - 14). Das 16. Bit dient übrigens, wie üblich, als Vorzeichen.
...
Das Ganze hab' ich also mit den Analogbausteinen, die das Rechnen ermöglichen, versucht nachzubauen. Es entstand ein 15-Bit-Schieberegister:
![]()
Wie auch im Zitat von mir zu sehen, habe ich also in 15er Schritten gearbeitet, weil es das Maximale an "einfacher" Berechnung darstellt, was die Logo schafft (15 Bit Wert + 1 Bit Vorzeichen = 16 Bit Verarbeitungsgröße der Logo!). Die Bits zu verringern ist aber einfach möglich, was wir an dieser Stelle der Programmanpassung benötigen.Die arithmetische Anweisung B002 ist der Wert des einzuschiebenden Bits. Beim Kaskadieren mehrerer Register ist das der Ausgang des vorigen Registers. Eingeschoben wird immer an Bit 0 mit der Wertigkeit von 2^0=1. Es kann also je nach Zustand des Eingangs EN den Wert 0 oder 1 haben:
Die arithmetische Anweisung B003 stellt das eigentliche Schieberegister dar. Wenn der Eingang aktiv ist, wird durch die Berechnung des neuen Wertes das Bit verschoben. (Hier ist es übrigens wichtig, dass der Takt bei seiner Aktivierung über die Flanke B001 nur jeweils genau einen Zyklus an B003 ansteht, damit je Takt auch nur einmal gerechnet wird! Die Zähler und die Logo!-Schieberegister haben diese Flankenabfrage integriert.)
Berechnet wird: (Bisheriger Wert - Wert des auszuschiebenden Bits) x 2 + Wert des einzuschiebenden Bits.
Wird der Eingang wieder inaktiv, wird dieser berechnete Wert weiterhin ausgegeben (grün), damit er über B004 bei der nächsten Berechnung noch zur Verfügung steht:
Der Schwellwertschalter B004 hat 2 Funktionen. Zum Einen gibt er den Wert von B003 zurück, da B003 den ja für die neue Berechnung benötigt, aber nicht auf sich selbst verweisen kann. Und zum Anderen schaltet es den Ausgang des Schieberegisters ein, wenn das parametrierte höchstwertigste Bit des Registers EIN ist. Die kleine Hürde beim Parametrieren des Schwellwertschalters hatte ich auch schon erwähnt:Ich verwende also als Schwellwert für EIN und AUS den Wert 2^n-1. Somit geht der Schwellwertschalter ab dem Wert 2^n auf EIN. Dieser Wert wird nur erreicht, wenn die höchstwertigste Bitstelle EIN ist, was dann wie gewünscht ausgegeben wird.Allerdings können bei Schwellwertschaltern nur Grenzwerte bis 20.000 eingestellt werden. Da aber bei der gesetzten Bitstelle 14 Werte von 2^14 = 16.384 bis 2^15-1 = 32.767 vorkommen, muss man als Grenzwert für Ein und Aus den gleichen Wert wählen und der entspricht dann dem Wert, bis zu dem der Schwellwertschalter aus ist.
B005 schließlich stellt den Wert des höchstwertigsten Bits dar, um diesen beim Ausschieben des Bits wieder abzuziehen. Ist der Zustand AUS, ist der Wert 0x2^n, also 0. Ist der Zustand EIN, ist der Wert dagegen 1x2^n, also der dezimale Wert der höchsten Bitstelle. Welcher von beiden Werten ausgegeben wird, wird wieder parametriert:
Abschließend dazu noch die Tabelle mit den Wertigkeiten, die wir gleich benötigen:
![]()
So - 100 Schritte war das Ziel, also wird der gewünschte Ausgang beim insgesamt 100. Bit erreicht.
(PS: Ich glaub', hier hatte ich eine kleinen Denkfehler. Eigentlich sollten 100 Schritte dazwischen sein und damit wäre die Ausgabe erst beim 101. Bit. Da es aber für die Erklärung keinen Abbruch tut, mach' ich das Folgende nicht noch mal alles neu.)
Das stellt das 10. Bit im letzten Einzelregister dar und da immer mit Bit 0 zu zählen begonnen wird, ist dies Bit 9. Bit 9 hat eine Wertigkeit von 2^9 = 512 (grün). Der Schwellwertschalter muss also bei allen Werten darunter aus sein, das entspricht 2^9-1 = 511 (rot). Hier nochmal in der Übersicht:

Diese ermittelten Werte werden jetzt beim Schwellwertschalter und bei der arithmetischen Anweisung, die das auszuschiebende Bit abbildet, eingegeben:


F E R T I G !
Die Anpassung der Impulse läßt sich zwar nur begrenzt über Parameter einstellen, aber in der Gesamtfunktion ist es sicher einfacher als mit den x Zählern.
Hier nochmal der Download (incl. der Bit-Tabelle) zum Ansehen des 0BA6-tauglichen Schieberegisters:
Anhänge
Zuletzt bearbeitet: