Modulo-4-Zähler: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 27: | Zeile 27: | ||
#:[[Datei:Simulink_03_10.jpg|thumb|600px]] | #:[[Datei:Simulink_03_10.jpg|thumb|600px]] | ||
#Eine Alternative ist, den Scope Manager zu benutzen. | #Eine Alternative ist, den Scope Manager zu benutzen. | ||
#:[[Datei:Simulink_03_11.jpg | #:[[Datei:Simulink_03_11.jpg|600px]] | ||
#Der Manager wird über Tools aufgerufen. In der Rubrik “Viewers“ die Substruktur Simulink öffnen, Scope auswählen und mit dem Button „Attach to model >>“ einbinden. Damit wird ein globales Scope erzeugt. | #Der Manager wird über Tools aufgerufen. In der Rubrik “Viewers“ die Substruktur Simulink öffnen, Scope auswählen und mit dem Button „Attach to model >>“ einbinden. Damit wird ein globales Scope erzeugt. | ||
#Über den Button „Edit Signal connection for selection“ kann man nun alle verfügbaren Signale dem Scope zuweisen. | #Über den Button „Edit Signal connection for selection“ kann man nun alle verfügbaren Signale dem Scope zuweisen. | ||
#:[[Datei:Simulink_03_12.jpg | #:[[Datei:Simulink_03_12.jpg|600px]] | ||
#Die mit dem globalen Scope verknüpften Signale, werden mit einer farbigen Brille über der jeweiligen Leitung im Editor angezeigt. | #Die mit dem globalen Scope verknüpften Signale, werden mit einer farbigen Brille über der jeweiligen Leitung im Editor angezeigt. | ||
#:[[Datei:Simulink_03_13.jpg | #:[[Datei:Simulink_03_13.jpg|300px]] | ||
#Mit einem Doppelklick auf eine der Brillen lässt sich das Scope-Fenster öffnen. | #Mit einem Doppelklick auf eine der Brillen lässt sich das Scope-Fenster öffnen. | ||
Jetzt hat man immerhin alle Graphen in einem Fenster. In unserem Fall ist es aber dennoch unglücklich, da sich die Graphen teilweise überlagern. Was man hier noch braucht, sind diverse Offsets. | #Jetzt hat man immerhin alle Graphen in einem Fenster. In unserem Fall ist es aber dennoch unglücklich, da sich die Graphen teilweise überlagern. Was man hier noch braucht, sind diverse Offsets. | ||
#:[[Datei:Simulink_03_14.jpg | #:[[Datei:Simulink_03_14.jpg|300px]] | ||
#Abhilfe kann hier das Erstellen eines Submoduls sein, um sich sein Display selber zu basteln: | #Abhilfe kann hier das Erstellen eines Submoduls sein, um sich sein Display selber zu basteln: | ||
#:[[Datei:Simulink_03_15.jpg | #:[[Datei:Simulink_03_15.jpg|300px]] | ||
#Subsystem-Block aus der Bibliothek einbinden und dann mit einer Anordnung wie hier rechts zu sehen füllen. | #Subsystem-Block aus der Bibliothek einbinden und dann mit einer Anordnung wie hier rechts zu sehen füllen. | ||
#:[[Datei:Simulink_03_16.jpg | #:[[Datei:Simulink_03_16.jpg|300px]] | ||
#Als Ergebnis bekommt man dann dieses Display-Submodel. | #Als Ergebnis bekommt man dann dieses Display-Submodel. | ||
#:[[Datei:Simulink_03_17.jpg | #:[[Datei:Simulink_03_17.jpg|300px]] | ||
#Tipp: Blöcke, die nichts mit dem eigentlichen Ablauf eines Programmes zu tun haben (Kommentare, Titel,…), am besten graphisch wie in diesem Beispiel abheben lassen -> sorgt für mehr Übersichtlichkeit | #Tipp: Blöcke, die nichts mit dem eigentlichen Ablauf eines Programmes zu tun haben (Kommentare, Titel,…), am besten graphisch wie in diesem Beispiel abheben lassen -> sorgt für mehr Übersichtlichkeit | ||
#Jetzt haben wir auch ordentlich vergleichbare Kurvenverläufe: | #Jetzt haben wir auch ordentlich vergleichbare Kurvenverläufe: | ||
#:[[Datei:Simulink_03_18.jpg | #:[[Datei:Simulink_03_18.jpg|300px]] | ||
#'''Optional:''' Wenn ihr Scopes automatisch beim Ausführen des Programms öffnen wollt, kann man bei den globalen Parameter-Fenster des Models in der Startsequenz folgenden Code hinzufügen: | #'''Optional:''' Wenn ihr Scopes automatisch beim Ausführen des Programms öffnen wollt, kann man bei den globalen Parameter-Fenster des Models in der Startsequenz folgenden Code hinzufügen: set_param('<Modelname>/<Submodelname>/Scopename','Open','on'); | ||
set_param('<Modelname>/<Submodelname>/Scopename','Open','on'); | #:[[Datei:Simulink_03_19.jpg|300px]] | ||
#:[[Datei:Simulink_03_19.jpg | |||
#'''Tipp:''' Hier werden Befehle via Callbacks mit Matlab verknüpft. Somit kann man z.B. Parameter (wie Axeneinstellungen) überall im Programmablauf einbringen | #'''Tipp:''' Hier werden Befehle via Callbacks mit Matlab verknüpft. Somit kann man z.B. Parameter (wie Axeneinstellungen) überall im Programmablauf einbringen | ||
#Um unsere Aufgabe zu vervollständigen, nutzen wir am besten noch zwei AND-Operatoren. Damit wird das Endsignal erst ausgegeben, wenn auch das Clocksignal wieder auf high ist. | #Um unsere Aufgabe zu vervollständigen, nutzen wir am besten noch zwei AND-Operatoren. Damit wird das Endsignal erst ausgegeben, wenn auch das Clocksignal wieder auf high ist. | ||
#:[[Datei:Simulink_03_20.jpg | #:[[Datei:Simulink_03_20.jpg|300px]] | ||
#Das Display muss aufgrund des zusätzlichen Signals natürlich angepasst werden. | #Das Display muss aufgrund des zusätzlichen Signals natürlich angepasst werden. | ||
#Hierfür einfach das Display-Submodel öffnen, die Anzahl der Eingänge des Mux auf 4 erhöhen (c), einen weiteren Input mit Converter hinzufügen (a) und das Offset-Array anpassen(b). | #Hierfür einfach das Display-Submodel öffnen, die Anzahl der Eingänge des Mux auf 4 erhöhen (c), einen weiteren Input mit Converter hinzufügen (a) und das Offset-Array anpassen(b). | ||
#:[[Datei:Simulink_03_21.jpg|300px]] | #:[[Datei:Simulink_03_21.jpg|300px]] | ||
#Und siehe da: Fertig! | |||
#:[[Datei:Simulink_03_22.jpg|300px]] | |||
== Simulink .mdl Dateien == | == Simulink .mdl Dateien == |
Aktuelle Version vom 30. Mai 2014, 15:32 Uhr
- Neues Modell öffnen.
- Um erst mal generell das Zählen von 0 bis 4 zu erreichen, baut man das Model wie folgt auf:
- Beim Kompilieren erhalten wir momentan allerdings einen Fehler und folgendes bekommen wir zu sehen:
- Beim Überprüfen können wir sehen, dass ein Boolean-Wert erwartet wird, wir aber mit der Konstante standardmäßig einen double-Wert ausgeben.
- Wie hätten wir das verhindern können? Antwort: Entweder die Dokumentation über Hilfe-Button aufrufen oder:
- Durch Doppelklicken auf das dortige J-K-FlipFlop-Model öffnet sich dann das finale Submodel mit elementaren Simulink-Blöcken, die das J-K-FlipFlop-Modell abbilden.
- Doppelklicken auf die Wahrheitstabelle verrät uns, dass nur Boolesche Werte erwartet werden.
- Das Gliedern eines Models in Submodule sorgt für Übersichtlichkeit und sollte angewendet werden. Die folgenden Folien erklären, wie es geht
- Wir markieren in unserem Model alle Blöcke, die sinnvoll zusammenpassen und erzeugen ein Subsystem durch auswählen des „Create Subsystem“ im DropDown-Menü (Öffnen per Rechtsklick auf Auswahl)
- Öffnet man das Submodel, so sieht man, das anstelle des Clock-Blockes (welches wir aussen vor gelassen haben), ein Input erzeugt wurde).
- Die Input- und Output-Blöcke sind die Schnittstellen zwischen Funktionen und Subfunktionen. Sie sind quasi die Anschlüsse für die „Leitungen“
- Es gibt auch Submodels, die durch triggern oder Ereignisse (Interrupts) aufgerufen werden können. Ein Beispiel für ein getriggertes Submodel hatten wir vorhin schon, das J-K-FlipFlop, das stets auf den fallenden Flanken des Clock-Signals ausgeführt wird.
- Kommen wir zum Prüfen, ob die Block- Anordnung überhaupt unsere Zählsequenz erzeugt.
- Klassischerweise würden wir dazu Scopes anlegen. Für jedes Signal erst mal eines (weil jedes Scope nur eine Anschlussleitung hat)
- Problem: Jedes Signal ist in einem eigenem Fenster. Die Signale sind sehr schwer zu vergleichen
- Eine Alternative ist, den Scope Manager zu benutzen.
- Der Manager wird über Tools aufgerufen. In der Rubrik “Viewers“ die Substruktur Simulink öffnen, Scope auswählen und mit dem Button „Attach to model >>“ einbinden. Damit wird ein globales Scope erzeugt.
- Über den Button „Edit Signal connection for selection“ kann man nun alle verfügbaren Signale dem Scope zuweisen.
- Die mit dem globalen Scope verknüpften Signale, werden mit einer farbigen Brille über der jeweiligen Leitung im Editor angezeigt.
- Mit einem Doppelklick auf eine der Brillen lässt sich das Scope-Fenster öffnen.
- Jetzt hat man immerhin alle Graphen in einem Fenster. In unserem Fall ist es aber dennoch unglücklich, da sich die Graphen teilweise überlagern. Was man hier noch braucht, sind diverse Offsets.
- Abhilfe kann hier das Erstellen eines Submoduls sein, um sich sein Display selber zu basteln:
- Subsystem-Block aus der Bibliothek einbinden und dann mit einer Anordnung wie hier rechts zu sehen füllen.
- Als Ergebnis bekommt man dann dieses Display-Submodel.
- Tipp: Blöcke, die nichts mit dem eigentlichen Ablauf eines Programmes zu tun haben (Kommentare, Titel,…), am besten graphisch wie in diesem Beispiel abheben lassen -> sorgt für mehr Übersichtlichkeit
- Jetzt haben wir auch ordentlich vergleichbare Kurvenverläufe:
- Optional: Wenn ihr Scopes automatisch beim Ausführen des Programms öffnen wollt, kann man bei den globalen Parameter-Fenster des Models in der Startsequenz folgenden Code hinzufügen: set_param('<Modelname>/<Submodelname>/Scopename','Open','on');
- Tipp: Hier werden Befehle via Callbacks mit Matlab verknüpft. Somit kann man z.B. Parameter (wie Axeneinstellungen) überall im Programmablauf einbringen
- Um unsere Aufgabe zu vervollständigen, nutzen wir am besten noch zwei AND-Operatoren. Damit wird das Endsignal erst ausgegeben, wenn auch das Clocksignal wieder auf high ist.
- Das Display muss aufgrund des zusätzlichen Signals natürlich angepasst werden.
- Hierfür einfach das Display-Submodel öffnen, die Anzahl der Eingänge des Mux auf 4 erhöhen (c), einen weiteren Input mit Converter hinzufügen (a) und das Offset-Array anpassen(b).
- Und siehe da: Fertig!
Simulink .mdl Dateien
→ zurück zum Hauptartikel: Einführung in Simulink