Core: Vom Lesen und Schreiben

von | Mrz 21, 2023 | Reaktor, ReaktorCore

Wer mit Latch, Array und OBC-Leitungen, Index und R/W-Order im Selector-Tutorial lost war, bekommt hier eine spielerische Einführung in die Welt des Schreibens und Lesens in Reaktor Core. Alles wird gut!

[01]

Um was wird es gehen?

Zugegeben: Das erste Core-Tutorial war nicht von der Sorte: „wir addieren mal zwei Zahlen“. Auch wenn sich das Kernthema nur um das Lesen und Schreiben in und aus Speicherzellen drehte, hat es doch einiges abverlangt. Das fiel mir auf, als ich den Selector einigen meiner Schüler erklärte. Da die meisten Fragezeichen bei Latch- und Array-Speicher auftraten, habe ich mich entschlossen, mit ein paar einfachen Beispielen die Funktionsweise der Core-Speicher zu erklären.
Diese Beispiele haben keinen praktischen Nutzen. Sie dienen lediglich dem Verständnis des Vorgänge rund um das Verarbeiten von Variablen in einer Core-Schaltung.

[02]

Vom Lesen und Schreiben: Latch

Das Latch-Macro ist die einfachste Methode, in Core einen Wert zwischen zu speichern. Man findet es entweder über einen Rechtsklick im Kontextmenü …

Abb. 1: Das Latch-Macro

… oder man baut es sich schnell selbst. In diesem Fall habe ich in der Primary-Ebene eine Core-Cell angelegt und die Bauteile für ein Latch schnell selbst verdrahtet. Mir fiel erst später ein, dass es dafür ja auch ein fertiges Macro gibt.

Abb. 2: Latch-Schaltung

Ein Latch besteht im wesentlichen aus zwei Modulen.

  • Dem Write-Module, erkennbar an einem Pfeil, der in eine Box hinein zeigt und
  • dem Read-Module, erkennbar an einem Pfeil, der aus einer Box heraus zeigt.

Beide Module sind mit einer OBC-Leitung verbunden, was bedeutet, dass sie auf die selbe Speicherzelle zugreifen. Die Speicherzelle selbst ist nicht sichtbar. Alleine die Verbindung zwischen Write und Read manifestiert eine solche Zelle. Muss man wissen.

Ferner besitzt ein Latch zwei Eingänge und einen Ausgang.

  • Der obere Eingang (IN) nimmt den zu speichernden Wert entgegen und ist mit dem oberen Eingang des Write-Moduls verbunden. Was immer an diesem Eingang anliegt, befindet sich auch im selben Moment in der Speicherzelle.
  • Der untere Eingang (TRIG) teilt dem Read-Modul mit, wann es seinen Inhalt am Ausgang abzuliefern hat. Solange am TRIG-Eingang nichts passiert, gibt das Read-Modul auch nichts aus.

Soweit zur Anatomie der Schaltung.

Abb. 3: Latch-Schaltung und Aussenwelt

Und so sieht das von Aussen aus:

  • Am In-Eingang befindet sich ein Drehregler mit dem Wertebereich 1 – 10 und der Schrittweite 1.
  • Am TRI-Eingang hängt ein Button, der – Überraschung – als Trigger konfiguriert ist und beim anklicken den Wert „1“ sendet.
  • An OUT hängt das aus vielen Primary-Tutorials bekannte Numbers-Macro das – im Gegensatz zum Readout-Module – eine vernünftige lesbare Darstellung von Zahlen erlaubt.

Abb. 4: Schreiben …

Wenn ihr nun den Regler nach rechts bewegt, seht ihr zunächst einmal nichts. Trotzdem ist der zuletzt gesendete Wert des Drehreglers in der Speicherzelle angekommen!

Abb. 5: … und lesen

Um das Latch zur Herausgabe des Speicherinhaltes zu bewegen, klickt ihr auf den Read-Button und seht im Out-Display den gespeicherten Wert.

Abb. 6: Auto-Trigger

Ein Idee, was hier passiert ist? Richtig! Der lästige Read-Button ist überflüssig, wenn wir den Output des Drehreglers gleichzeitig als Trigger für das Read-Modul verwenden. Drehen wir am Knopf, wird sowohl der zuletzt gewählte Wert in den Speicher geschrieben als auch das Read-Module zum Auslesen getriggert.

[03]

Vom Lesen und Schreiben: Array

Nachdem wir nun wissen wie eine einzelne Speicherzelle funktioniert, schauen wir uns eine Sammlung mehrerer Speicherzellen – ein Array – an. Auch dieses Beispiel ist wieder relativ „sinnfrei“ und soll nur zum Verständnis der Technik dienen.

Abb. 7: Array

Dass ich die Eingänge von unten nach oben angeordnet habe, dient lediglich der einfacheren Verdrahtung und damit der Übersicht. Und auch hier gilt: Alle Objekte, die an der selben OBC-Leitung hängen, kommunizieren mit dem selben Speichermodul – hier das Array. Schauen wir uns die Core-Schaltung mal genauer an:

Abb. 8: Funktionsweise

Das Array-Modul kann eine in den Voreinstellungen festzulegende Anzahl an Zahlen speichern. Für dieses Beispiel habe ich 4 Speicherzellen angegeben, die (wie im Reaktor üblich) von 0 an gezählt werden. Also: 0 – 3. Da es sich jetzt um mehrere Speicherzellen handelt, müssen wir beim schreiben und lesen angeben, welche der Zellen wir meinen. Das ist auch schon das Einzige, was das Array vom Latch unterscheidet. Wie das geschieht, wird klar, wenn wir einen Blick in die Write- und Read-Macros werfen:

  • Links oben seht ihr den Inhalt des Write-Macros und erkennt wahrscheinlich gleich das Write-Modul aus dem Latch-Beispiel.
    • Wie gewohnt, erhält es seinen Eingangswert links oben und reicht das Ergebnis auf der braunen OBC-Leitung weiter. Und zwar nach links und nach rechts. Und das ist neu.
    • Nach rechts fließ das Signal ab, um alle weiteren Write- und Read-Macros zu verbinden. Dazu gleich mehr.
    • Nach links fließt das Signal durch das Index-Module, das dem Signal die gewünschte Speicherzelle zuteilt. Die passende Index-Nummer habe ich aussen am Macro mit einer Konstanten (0 – 3) festgelegt.
    • So kodiert, verlässt das Signal das Macro nach Links über den M-Ausgang (Master) in Richtung Array.
    • Am OBC-Slave-Ausgang rechts hängen das Array und das jeweilige Write-Modul. Damit es keinen Knoten im Datenverkehr gibt, regelt das R/W-Order-Module die Reihenfolge.
  • Links unten seht ihr den Inhalt des Read-Macros mit dem aus dem Latch-Beispiele bekannten Read-Module.
    • Auch das erhält von links den Trigger (dazu auch gleich mehr) und liefert nach rechts das Gelesene aus.
    • Vorher wird es vom Index-Modul mit der korrekten Auslese-Adresse versorgt, die wieder aussen am Macro angebracht ist.
    • Und auch hier regelt das R/W-Order-Module den weiteren Datenverkehr.
    • Da wir hier keinen Trigger haben, der das Read-Modul zur Arbeit überredet, habe ich ein Clock-Signal verwendet. der sogenannte SR.C-Bus stellt ein Signal zur verfügung, das sich an der Samplerate des Reaktors orientiert. Damit ich den Bus nicht an jedem einzelnen Read-Macro anklemmen wollte, habe ich ihn ebenfalls in ein Macro verpackt und dieses dann an die Read-Macros angehängt.
    • Den SR.C-Bus findet ihr, wenn ihr mit der rechten Maustaste auf einen Anschluss klickt und aus dem Kontextmenü Pickup Std. Disribution Bus > Pickup SR.C auswählt.

Soweit zur Schaltung. Und so sieht das Ganze dann aus:

Abb. 9: Anwendung

Die Werte der Drehregler landen über die Eingänge und die damit verbundenen Index-Werte an der zugehörigen Speicherstelle im Array. Die Anzeigen erhalten ihre Daten von den Read-Modulen, die durch die Dauertaktung durch den Clock-Bus und mit dem jeweiligen Index versehen, die korrekte Speicherzelle auslesen und abliefern.

Jetzt sollte das Thema „Schreiben und Lesen“ auf Core-Ebene etwas klarer sein. Auch das voran gegangene Selector-Tutorial dürfte sich nun leichter lesen.

 

[05]

Downloads

g

CoreLatch

.ens-Datei, (Zip-File, 202KB)

g

CoreAutoLatch

.ens-Datei, (Zip-File, 200KB)

g

CoreArray

.ens-Datei, (Zip-File, 204KB)

Kontakt

Bernd Scheurer
Mainstraße 2
64390 Erzhausen
Fon: 06150 865902
Mobil: 0151 50411034
unterricht@bernd-scheurer.de

Freie Plätze

  • Erzhausen
  • Langen
    • Zur Zeit keine Plätze eingeplant.

Infos

Auch interessant

Newsticker

amazona

tastenwelt

klassik heute

jazz thing

  • Be happy
    Source: jazz thing Published on 2011-07-19 By Lili Lameng
  • Der Jazzmusiker ein Feinschmecker?
    Source: jazz thing Published on 2011-06-06 By Anke Helfrich
  • Glamourfaktor
    Source: jazz thing Published on 2011-04-21 By André Nendza
  • Style
    Source: jazz thing Published on 2011-04-09 By Lorenz Hargassner
  • Topsannah
    Source: jazz thing Published on 2011-03-14 By Lili Lameng

musikexpress