Forum: Mikrocontroller und Digitale Elektronik Fragen zum Erstellung des Flussdiagramms LED-Lauf


von Hel B. (helbi)


Angehängte Dateien:

Lesenswert?

Gute Tageszeit,

Das Programm steuert die 7-Segment-Anzeige, wo Segmente nacheinander im 
Ziffer "8" durchlaufen (Segmente der Ziffer "8" sind anzusteuernde 
LEDs).


Daneben werden andere in der Reihe positionierte LED nacheinander 
angeleuchtet (wenn eine LED [x+1] AN gegt - ist der vorherige LED [x] 
aus).


Ausdrucke: Digit_Port_Display =0x__ entsprechen einem Segment-LED im 
Ziffer "8"
Ausdrucke: Digital_Port_DA =x__ entsprechen einem LED aus der LED-Reihe.


Ich erstelle zu dem Programm (s. Anhang "Prog_01") das Flussdiagramm (s. 
Anhang "Flussdiagramm"), nur dazu habe ich Fragen:

1) Wohin geht das Befehl "return" (Zeile 76) ?

2) Was passiert falls i<7   2a) Wie wird die Schleife dann geschlossen 
falls i<7 ?

3) Entspricht der Ausdruck i &= 0x07 (Zeile 74)  der Stelle im 
Flussdiagramm i=7 ?

von Forist (Gast)


Lesenswert?

Hel B. schrieb:
> Anhang "Prog_01")

Das ist ein Screenshot von einem Gesamtmonitorbild, wo man bestenfalls 
erahnen kann, dass auf dem Monitor ein Programmcode zu lesen war, bevor 
das Ding durch die JPG-Quetsche gedreht wurde.

Geht das vielleicht auch als ASCII-File?

von Hel B. (helbi)


Lesenswert?

Bevor ich die Dateien angehängt habe, bekam ich die Meldung, dass ich 
die Dateien als Bilder hochladen kann...

von Forist (Gast)


Lesenswert?

Hel B. schrieb:
> Bevor ich die Dateien angehängt habe, bekam ich die Meldung, dass ich
> die Dateien als Bilder hochladen kann...

Kannst du, ist aber sinnlos, wenn man nichts lesen kann und 80% der 
Fläche von grauem, informationslosen Cancas eingenommen werden.

von helbi (Gast)


Angehängte Dateien:

Lesenswert?

Danke für Hinweise.
Die Dateien habe ich durch größeren ersetzt.

von Joachim B. (jar)


Lesenswert?

Hel B. schrieb:
> 1) Wohin geht das Befehl "return" (Zeile 76) ?

na der verlässt void Schleife()

wenn das der endlos Loop eines µC ist terminiert das Programm, ansonsten 
gehts nach void Schleife(); weiter.

: Bearbeitet durch User
von Mike A. (Gast)


Lesenswert?

Joachim B. schrieb:
> wenn das der endlos Loop eines µC ist terminiert das Programm.

Wenn Schleife allerdings loop() eines Arduinos ist, werkelt da noch ein 
Rahmenprogramm im Hintergrund, dass loop() laufend aufruft.

von helbi (Gast)


Lesenswert?

Danke. Also, nach dem "Start" und vor dem "Switch (i)" in Flussdiagramm 
?

von Mike A. (Gast)


Lesenswert?

Hel B. schrieb:
> 2) Was passiert falls i<7   2a) Wie wird die Schleife dann geschlossen
> falls i<7 ?

Die Funktion SCHLEIFE() läuft läuft völlig unabhängig von i. Die 
Variable i sollte allerdings irgendwo mal deklariert werden.

> 3) Entspricht der Ausdruck i &= 0x07 (Zeile 74)  der Stelle im
> Flussdiagramm i=7 ?

Die Entscheidung "i=7 ?" gibt es im Programm nicht.
Das Satement
1
i &= 0x07;
 sorgt nur dafür, dass das vierte Bit von i am Ende von SCHLEIFE() nie 
gesetzt ist, i dort als immer <= 7 ist.

von Alex Z. (alexander_z49)


Lesenswert?

Tip am Rande:

Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu 
erstellen.

Alex

von Mike A. (Gast)


Lesenswert?

Alex Z. schrieb:
> Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu
> erstellen.

Im Zusammenhang mit blockorientierter Programmierung sind Flussdiagramme 
nun wirklich ziemlich untauglich, weil die Programmblöcke dort, wenn 
überhaupt,  nur mit viel Verrenkungen abbildbar sind.

Nassi-Shneiderman-Diagramme sind da wesentlich sinnvoller.

von Alex Z. (alexander_z49)


Lesenswert?

Mike A. schrieb:
> Alex Z. schrieb:
>> Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu
>> erstellen.
>
> Im Zusammenhang mit blockorientierter Programmierung sind Flussdiagramme
> nun wirklich ziemlich untauglich, weil die Programmblöcke dort, wenn
> überhaupt,  nur mit viel Verrenkungen abbildbar sind.
>
> Nassi-Shneiderman-Diagramme sind da wesentlich sinnvoller.

Aber immer noch besser als eine handschriftliche Aufzeichnung, wie oben, 
in der man nur schlecht was erkennt.

Der TE wird wahrscheinlich nicht nur den Case-Block darstellen müssen.
Sieht nach einer Seminararbeit aus, wo noch mehr drum rum sein wird.


Aber ja, ein NSD, wäre hier besser.

Alex

von helbi (Gast)


Lesenswert?

Was passiert wenn i<7 ist ?

Ist das richtig?:

-Das Programm Springt in ein Case i, LED(i) wird angeleuchtet,
-dann mit dem Befehl "break" wird LED ausgeschaltet,
-dann mit i=i+1:

An welcher Stelle wird es kontrolliert, ob durch i++   i nicht grosser 
als 7 ist?

a)
Was wäre wenn z.B. i=5 ?
dann i=i+1=6
dann durch  Statement   "i &= 0x07"   was wird gemacht damit?
Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit 
nicht gesetzt werden soll?

Na klar, das 4-te Bit ist in dem Fall nicht gesetzt.

dann mit "return" zurück unter das "switsch(i) ?

b) was wäre wenn i=7 ?
dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll.
Aber durch den Statement    "i &= 0x07 " i=7 bleibt?
Und dann noch Mal i=i+1?

Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0" 
gesetzt ?

von void (Gast)


Lesenswert?

helbi schrieb:
> Was passiert wenn i<7 ist ?
> Ist das richtig?:
> -Das Programm Springt in ein Case i, LED(i) wird angeleuchtet,

LED(i) leuchtet und etwas wir von der LED angeleuchtet.

> -dann mit dem Befehl "break" wird LED ausgeschaltet,

Nein.

> -dann mit i=i+1:
> An welcher Stelle wird es kontrolliert, ob durch i++
> i nicht grosser als 7 ist?

i &= 7; // löscht alle bits außer bit 2-0.

> a)
> Was wäre wenn z.B. i=5 ?
> dann i=i+1=6
> dann durch  Statement   "i &= 0x07"   was wird gemacht damit?

Alle bits außer bit 2-0 werden gelöscht, die 6 bleibt erhalten weil 
diese nur einsen in den nicht veränderten drei bits hat.

> Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit
> nicht gesetzt werden soll?

Nein, die zuvor evtl. gesetzten mits 7-3 werden zurückgesetzt aus 0.

> dann mit "return" zurück unter das "switsch(i) ?

Nein, sondern zum ende der Funktion.


> b) was wäre wenn i=7 ?
> dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll.
> Aber durch den Statement    "i &= 0x07 " i=7 bleibt?

Ja. In zwei schritten
1. 7 -> 8 // i++
2. 8 -> 7 // i&=7

> Und dann noch Mal i=i+1?0

Das steht nicht in deinem Program.

> Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0"
> gesetzt ?

Gar nicht in deinem Programm. Aber das kannst du ja noch ändern...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kurz mal Offtopic:
helbi schrieb:
> Programm.jpg
Lies mal, was da ein paar Zeilen über jeder Eingabebox steht:
1
Antwort schreiben
2
Wichtige Regeln - erst lesen, dann posten!
3
    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
4
Formatierung (mehr Informationen...)
5
    [c]C-Code[/c]
Das bedeutet zweierlei:
1. Man kann voll toll eine C-Datei anhängen. Dann gibts 
Syntaxhighlighting gratis.
2. Man kann C-Code in seinen Post einfügen.

helbi schrieb:
> Die Dateien habe ich durch größeren ersetzt.
Allgemein gilt: das absolut ungeeigneste Format für einen Quelltext ist 
ein Bild. Dafür gibt es ASCII-Dateien, da kann man dann leicht was 
herauskopieren und dir den Fehler bzw. die Lösung zeigen.

Und das absolut ungeeignetste Format für einen Screenshot ist JPEG wegen 
dessen Komprimierungsartefakten.

Aber auch das steht über jeder Eingabebox. Wie gesagt: bitte einfach 
mal lesen...

Und nochwas: bitte nur 1 Name pro Thread
(siehe Hilfe:Forum Nutzungsbedingungen)
Das hier geht grade noch, weil erkennbar ist, dass in beiden Fällen der 
selbe User dran ist:
helbi schrieb:
> Autor: helbi (Gast)
Hel B. schrieb:
> Autor: Hel Birk (helbi)

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

helbi schrieb:
> Die Dateien habe ich durch größeren ersetzt.

Trotzdem das nächste mal Quelltexte immer als *.c oder *.ino posten.

Und das Gekrakel ist Gekrakel geblieben. Zu meiner Schulzeit hieß das 
Sauklaue. Willst Du Arzt werden?

von Dietrich L. (dietrichl)


Lesenswert?

void schrieb:
>> b) was wäre wenn i=7 ?
>> dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll.
>> Aber durch den Statement    "i &= 0x07 " i=7 bleibt?
>
> Ja. In zwei schritten
> 1. 7 -> 8 // i++
> 2. 8 -> 7 // i&=7

Einspruch!
2. 8 -> 0 // i&=7
.. denn bei 8 sind die Bits 2-0 ja 0.

von void (Gast)


Lesenswert?

>> void schrieb um 7:45 Morgens:
[Quatsch]
Dietrich L. schrieb:
> Einspruch!

Gähn. Verdammt, zu früh heute...

von helbi (Gast)


Lesenswert?

Danke.

void schrieb:
> helbi schrieb:
>> Was passiert wenn i<7 ist ?
>> Ist das richtig?:
>> -Das Programm Springt in ein Case i, LED(i) wird angeleuchtet,
>
> LED(i) leuchtet und etwas wir von der LED angeleuchtet.
>
>> -dann mit dem Befehl "break" wird LED ausgeschaltet,
>
> Nein.

Sondern? geht's zum "i=i+1" oder zum "case(i+1)?

>
>> -dann mit i=i+1:
>> An welcher Stelle wird es kontrolliert, ob durch i++
>> i nicht grosser als 7 ist?
>
> i &= 7; // löscht alle bits außer bit 2-0.

Was bedeutet Ausdruck "bit 2-0"? Welcher Bit ist das mit anderen Wörter? 
Ich verstehe dass z.B.
0000 0111 = 7 (dez). Welche bits (von rechts nach links) werden 
gelöscht? Und welche Bit sollten nicht gelöscht werden? Könnten Sie 
bitte mit Wörter die Bits im XXXX XXXX bezeichnen? Wo ist dieser Bit 2-0 
hier: XXXX_XXXX ?

Was sollte in diesem Wert bitweise xxxx_xxxx bleiben: a)wenn i<7  und b) 
wenn i=7 ?

Mit i=i+1 kommt mal der Wert auf Zahl 7. Wie kommt man dazu dass i 
zurück auf "0" gesetzt wäre, damit die LEDs wieder vom Start-Segment 
leuchteten (und auch wir davon etwas angeleuchtet wären)?

Wird i jedes Mal (auch wenn z.B. i=3) auf "0" gesetzt oder erst wenn i=7 
?

>
>> a)
>> Was wäre wenn z.B. i=5 ?
>> dann i=i+1=6
>> dann durch  Statement   "i &= 0x07"   was wird gemacht damit?
>
> Alle bits außer bit 2-0 werden gelöscht, die 6 bleibt erhalten weil
> diese nur einsen in den nicht veränderten drei bits hat.

Und wass passiert in der zwei nächsten Programmschritten?

>
>> Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit
>> nicht gesetzt werden soll?
>
> Nein, die zuvor evtl. gesetzten mits 7-3 werden zurückgesetzt aus 0.

Also wenn 0000_0110 (i+1=6), dann die drei rechte Bits bleiben 
unverändert und das Programm geht mit dem Befehl "return" über dem 
"switch(i) ?


>
>> dann mit "return" zurück unter das "switsch(i) ?
>
> Nein, sondern zum ende der Funktion.
>
>> b) was wäre wenn i=7 ?
>> dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll.
>> Aber durch den Statement    "i &= 0x07 " i=7 bleibt?
>
> Ja. In zwei schritten
> 1. 7 -> 8 // i++
> 2. 8 -> 7 // i&=7
>
>> Und dann noch Mal i=i+1?0
>
> Das steht nicht in deinem Program.
>
>> Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0"
>> gesetzt ?
>
> Gar nicht in deinem Programm. Aber das kannst du ja noch ändern...

von helbi (Gast)


Lesenswert?

An welcher Stelle wird LED(i) ausgeschaltet sein?

von Mike A. (Gast)


Lesenswert?

helbi schrieb:
> An welcher Stelle wird es kontrolliert, ob durch i++   i nicht grosser
> als 7 ist?

Das wird nirgends kontrolliert.

Es wird, ohne genauere Betrachtung des aktuellen Wertes von i, schlicht 
und einfach verhindert, dass i am Ende von SCHLEIFE() größer als 7 ist.

Liesen musst du schon selber.

Mike A. schrieb:
> Das Statement ...

von helbi (Gast)


Lesenswert?

Mike A. schrieb:
> helbi schrieb:
>> An welcher Stelle wird es kontrolliert, ob durch i++   i nicht grosser
>> als 7 ist?
>
> Das wird nirgends kontrolliert.
>
> Es wird, ohne genauere Betrachtung des aktuellen Wertes von i, schlicht
> und einfach verhindert, dass i am Ende von SCHLEIFE() größer als 7 ist.
>
> Liesen musst du schon selber.
>
> Mike A. schrieb:
>> Das Statement ...

Danke. Nach dem i=7 ist, wird dann durch "i &= 0x07" i auf "0" gesetzt ?
Statt 0000_0111 => 0000_0000 ?

von helbi (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das Diagramm neu gezeichnet.
 Sieht das jetzt richtig aus?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.