Skip to Content
2021Lauflicht

Lauflicht (M242)

Datum: Juni 2021
Lesedauer: 5 Minuten


Einleitung

In diesem Dokument werden die Inhalte der Projektarbeit von C. Damas, M. Müggler und K. Wild aufgeführt.

Hinweise

Der Quellcode ist für den Keil-Simulator ausgelegt. Damit dieser auf dem Mesa-Gerät einwandfrei funktioniert, muss dieser angepasst werden. Die betroffenen Stellen sind im Code mit dem Kommentar “ÄNDERN” gekennzeichnet.

Blockschema

Grundanforderungen

block-erweitert

Erweiterte Anforderungen

Zustandsdiagramm

Grundanforderungen

zustandsdiagramm

Erweiterte Anforderungen

zustandsdiagramm-erweitert

Flussdiagramm

flussdiagramm

Struktogramm

Programmcode

programmcode

Allgemeines

struktogramm

Prinzipskizze

prinzipskizze

Testen

Testkonzept

Wir testen das Lauflicht, welches auf MESA läuft. Dazu schliessen wir das Board mithilfe des Silicon Laboratories USB Debug Adapters. Danach achten wir genau darauf, wie sich die LEDs bewegen. Auch speziell nach dem Drücken der verschiedenen Knöpfe kontrollieren wir, ob alles ordnungsgemäss funktioniert.

Testfälle

Nr.TestfallVerantwortungErwartungErgebnisWeiteres VorgehenPriorität
1Drücken von Keil SoftwareKayLauflicht bewegt sich von links nach rechts. Dabei verschiebt es sich im Sekundentakt. Ist die Kette durchgelaufen, beginnt das Ganze von vorne. Somit stoppt das Programm nicht.funktioniert-muss
2Drücken von S0 bei laufenden LEDsKayDie LEDs bleiben stehen. Somit wird also das Lauflicht pausiert.funktioniert-muss
3Drücken von S0 bei stehenden LEDsKayDas Lauflicht läuft dort weiter, wo es pausiert wurde. Wurde das Lauflicht zuvor gestoppt, beginnt es erneut.Beim Stopp muss man zuerst den Stopp Knopf erneut drücken. Danach kann man es normal starten. Da es nicht anders geht, nehmen wir das in Kauf.-muss
4Drücken von S1KayBeim Drücken dieses Buttons wird der Prozess gestoppt. Im Gegensatz zum Pausieren leuchtet hier kein LED. Das Lauflicht wird also abgebrochen.funktioniert-muss
5Drücken von S2 bei langsamer GeschwindigkeitKayBewegen sich die Lämpchen langsam, wird mithilfe des S2 Knopfs die Geschwindigkeit erhöht. Das Lauflicht verschiebt sich also schneller. Ein erneutes Drücken sorgt dafür, dass die Geschwindigkeit wieder zurückgesetzt wird.funktioniert-kann
7Drücken von S3 bei Bewegung nach linksKayDie Laufrichtung wird umgedreht. Das Lauflicht bewegt sich von links nach rechts. Beim erneuten Drücken der Taste wandern die LEDs wieder von rechts nach links.funktioniert-kann
9Drücken von S4KayDie Anzahl der LEDs in der Lichterkette erhöht sich. Um wieder weniger Lichter in der Kette zu haben, reicht ein erneutes Drücken.funktioniert-kann

Bedienungsanleitung

Funktionen

Ist der Keil an die Software angeschlossen, sollte bereits ein Lauflicht sichtbar sein. Ansonsten müssen sie sich an einen Entwickler wenden. Das Lauflicht wird folgendermassen verändert.

Pause - S0

Um das Licht anzuhalten, klickt man einmal auf den Taster S0. Somit bleiben alle LEDs stehen.

Start - S0

Sind die LEDs jeweils angehalten oder auch gestoppt, kann man die Bewegung der Lichter mit S0 wieder starten/fortsetzen.

Stopp - S1

LEDs dunkel. Mit dem Knopf S1 unterbricht man die Lichter. Nach einem Klick auf diesen Knopf sind alle

Geschwindigkeit - S2

Um die Geschwindigkeit anzupassen steht einem S2 zur Verfügung. Bei langsamer (standard) Geschwindigkeit kann diese mit der Taste erhöht werden. Dazu muss man nur den Knopf gedrückt halten.

Laufrichtung - S3

Die Taste S3 ist dazu da, die Richtung der LEDs zu ändern. Wird die Taste gedrückt, läuft die Lichterkette in die entgegengesetzte Richtung. Dies geschieht so lange, bis man den Taster wieder loslässt.

Breite - S4

Die Breite der bewegenden Lichter können ebenfalls verändert werden. Dazu hält man S4 gedrückt. Dabei wird die Grösse der Lichterkette erhöht.

Übersicht der Tasten

tasten

Code

;******************************************************************************** ; P R O G R A M M ;******************************************************************************** ; Source-File: Lauflicht.a51 ; Autor: C. Damas, M. Müggler, K. Wild ; Datum: 05.06.2021 ; Version: 2.0 ; Beschreibung: Lauflicht ; Eingaben: 8 Schalter S0 bis S7 ; Ausgaben: 8 LEDs PA0 bis PA7 ; HINWEIS Alle Änderungen die noch für das Mesa gemacht werden ; müssen, sind mit dem Keywort "ÄNDERN" gekennzeichnet ;******************************************************************************** $TITLE (Lauflicht) $NOLIST $NOMOD51 $INCLUDE (C8051F020.h) ;hier werden alle Bezeichnungen definiert $LIST NAME Lauflicht ;----- Deklarationen input equ P3 ; P3 8 Eingänge output equ P2 ; P2 8 Ausgänge llStatus data 20h ; ll -> LaufLichtStatus dStatus data 21h ; DirectionStatus -> bool-Variable die sagt, ob als letztes das Licht Vor- oder rückwärts gegangen ist fast data 22h ; deklariert geschwindigkeit -> bool-Variable die entweder schnell oder langsam ist ;----- Intitialisierung ORG 0000h ; Startadresse jmp init ; geht zu init ORG 0100h ; Programmanfang init: mov WDTCN,#0DEh mov WDTCN,#0ADh ; deaktiviert Watchdog mov P2MDOUT,#0FFh ; P2 8 Ausgänge mov P3MDOUT,#000h ; P3 8 Eingänge mov XBR2,#040h ; aktiviert crossbar (Koppelfeld) ;------ Hauptprogramm main: mov output,#00h ; LEDs ausschalten mov input, #00h ; ÄNDERN --> wenn man es auf dem Mesa laufen lässt muss man diese Zeile entfernen mov A,#0h ;------ Schleife loop: jnb input.2, fastFalse mov fast, #6h ; ÄNDERN --> Wert für Wait anpassen wenn schnell -> beim Mesa #6h mit #1h ersetzen jmp fastEnd fastFalse: mov fast, #60h; ; ÄNDERN --> Wert für Wait anpassen wenn langsam (standard-geschwindigkeit) -> beim Mesa #60h mit #6h ersetzen fastEnd: jb input.3, CBitBack ;Endlosschleife jmp CBit ;------ Licht anschalten vorwärts lightsUp: CALL compare jnb input.4, lightsUpTrue rl A add A, #1h ;------ Licht anschalten vorwärts breit lightsUpTrue: rl A add A, #1h mov output, A CALL wait jmp loop ;------ Licht ausschalten vorwärts lightsDown: CALL compare jnb input.4, lightsDownTrue rl A subb A, #1h ;------ Licht ausschalten vorwärts breit lightsDownTrue: rl A subb A, #1h mov output, A CALL wait jmp loop ;------ Licht anschalten rückwärts lightsUpBack: CALL compare jnb input.4, lightsUpBackTrue add A, #1h rr A ;------ Licht anschalten rückwärts breit lightsUpBackTrue: add A, #1h rr A mov output, A CALL wait jmp loop ;------ Licht ausschalten rückwärts lightsDownBack: CALL compare jnb input.4, lightsDownBackTrue subb A, #1h rr A ;------ Licht ausschalten rückwärts breit lightsDownBackTrue: subb A, #1h rr A mov output, A CALL wait jmp loop ;----- überprüft ob stop oder pasue gedrückt wurde compare: JB input.0, compare JB input.1, reset RET ;----- überprüft Richtung und wenn Schalter gedrückt geht zu CBitTrue (Wenn vorwärts) CBit: jb dStatus.0, CBitTrue mov A, #0h mov dStatus, #1h ;----- Setzt neue Richtung (wenn vorwärts) CBitTrue: mov llStatus, A jb llStatus.7, lightsDown jmp lightsUp ;----- überprüft Richtung und wenn Schalter gedrückt geht zu CBitBackTrue (Wenn rückwärts) CBitBack: jnb dStatus.0, CBitBackTrue mov A, #0h mov dStatus, #0h ;----- Setzt neue Richtung (wenn rückwärts) CBitBackTrue: mov llStatus, A jb llStatus.0, lightsDownBack jmp lightsUpBack ;----- Start Delay wait: mov R5, #0FFh ; mit wait wird der Delay aufgerufen, und hier wird auf das Register verschiedene Werte gesetzt und Schleifen ineinander aufgerufen wait1: mov R6, #0FFh wait2: mov R7, #05h wait3: mov R4, fast ; ÄNDERN --> bei Mesa wait 4 wieder entfernen und "mov R4, fast" beim wait 3 wait4: djnz R4, wait4 djnz R7, wait3 djnz R6, wait2 djnz R5, wait1 ret ;----- Start Reset (Stop) reset: mov output,#00h ; setzt die LEDs und den Akumulator zurück und geht wider in die Loop mov A, #0h jmp loop END

Quellen

Alle vorkommenden Diagramme, Testfälle, Texte und sonstige Grafiken wurden von unserer Gruppe entworfen.