Warum hängt diese Programm manchmal ?

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Warum hängt diese Programm manchmal ?

      Hallo,
      ich habe mal wieder ein Problem mit meinem Hoflicht-projekt. Manchmal stoppt das Programm einfach so .
      Ich kann mir einfach keinen Reim drauf machen. Bitte mal drüber schauen, ob da sich ein Fehler eingeschlichen hat.

      BASCOM Source Code

      1. 'Laufrichtungslicht für Hofeinfahrt (Wegbeleuchtung)
      2. 'D.Jäschke 20.05.11 fertig 16.11.13
      3. 'rev.20.07.2014 wegen Regen ISR zeitlich auf 40ms
      4. 'rev.25.02.2017 Comperator mit Rückkopplung (ä.LM358)wegen Hysterese
      5. '_______________________________________________________________
      6. $regfile = "attiny2313.dat"
      7. $crystal = 1000000
      8. $hwstack = 32
      9. $swstack = 10
      10. $framesize = 40
      11. '$sim
      12. '-------Pin, Port, Alias------------------------------------------
      13. Ddrb = &B00011100 'PB1 ist LDR
      14. Ddrd = &B11110011
      15. A1 Alias Portb.4 'OC1B
      16. A2 Alias Portb.3 'OC1A
      17. A3 Alias Portb.2 'OC0A
      18. A4 Alias Portd.5 'OC0B
      19. Led Alias Portd.4 'Anzeige Hell oder Dunkel
      20. Raus_led Alias Portd.0 'LED nur für Test
      21. Rein_led Alias Portd.1 'LED nur für Test
      22. Isr0 Alias Pind.2 'rot raus
      23. Portd.2 = 1
      24. Config Int0 = Falling
      25. Enable Int0
      26. On Int0 Raus_isr0
      27. Isr1 Alias Pind.3 'blau rein
      28. Portd.3 = 1
      29. Config Int1 = Falling
      30. Enable Int1
      31. On Int1 Rein_isr1
      32. 'Ddra = &B0000000 'Eingänge setzen
      33. '----------Helligkeitseinstellung--------------------------------
      34. Acsr = &B00000000 'komp ein, V+ -- 47k -- AIN0 -- 24k -- GND ACSR.aco -- 240k -- AIN0
      35. Du Alias Acsr.aco 'zeigt dunkel = 1
      36. '----------PWM---------------------------------------------------
      37. Config Timer0 = Pwm , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
      38. Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
      39. Enable Interrupts
      40. '---------Variablen---------------------------------------------
      41. Dim X_1 As Byte 'Anzahl Durchläufe
      42. Dim X_2 As Byte
      43. Dim X_3 As Byte
      44. Dim X_4 As Byte
      45. 'Dim Du As Bit 'Helligkeitseinstellung
      46. Dim Pwm As Byte
      47. Dim A As Byte
      48. Dim Raus As Bit 'Status für RAUS
      49. Raus = 0
      50. Dim Rein As Bit 'Status für REIN
      51. Rein = 0
      52. Const Zeit = 120 'Laufdauer
      53. '--------Hauptprogramm------------------------------------------
      54. Led = 1
      55. Do
      56. Led = Du
      57. If Du = 1 Then
      58. If Raus = 1 And Rein = 0 Then
      59. A = 0
      60. For A = 1 To 10 '10 Durchläufe
      61. For X_1 = 0 To 255 Step 51 'a1 an
      62. Pwm1b = X_1
      63. Waitms Zeit
      64. Next
      65. For X_2 = 0 To 255 Step 51 'a2 an
      66. Pwm1a = X_2
      67. Gosub 1 'a1 aus
      68. Waitms Zeit
      69. Next
      70. For X_3 = 0 To 255 Step 51 'a3 an
      71. Pwm0a = X_3
      72. Gosub 2 'a2 aus
      73. Waitms Zeit
      74. Next
      75. For X_4 = 0 To 255 Step 51 'a4 an
      76. Pwm0b = X_4
      77. Gosub 3 'a3 aus
      78. Waitms Zeit
      79. Next
      80. For X_4 = 255 To 0 Step -51 'a4 aus
      81. Pwm0b = X_4
      82. Waitms Zeit
      83. Next
      84. If Rein = 1 Then
      85. Exit For 'Abfrage ob Weg fertig
      86. End If
      87. Next A
      88. Rein = 0
      89. Raus = 0
      90. Elseif Rein = 1 And Raus = 0 Then
      91. A = 0
      92. For A = 1 To 10 '10 Durchläufe
      93. For X_4 = 0 To 255 Step 51 'a4 an
      94. Pwm0b = X_4
      95. Waitms Zeit
      96. Next
      97. For X_3 = 0 To 255 Step 51 'a3 an
      98. Pwm0a = X_3
      99. Gosub 4 'a4 aus
      100. Waitms Zeit
      101. Next
      102. For X_2 = 0 To 255 Step 51 'a2 an
      103. Pwm1a = X_2
      104. Gosub 3 'a3 aus
      105. Waitms Zeit
      106. Next
      107. For X_1 = 0 To 255 Step 51 'a1 an
      108. Pwm1b = X_1
      109. Gosub 2 'a2 aus
      110. Waitms Zeit
      111. Next
      112. For X_1 = 255 To 0 Step -51 'a1 aus
      113. Pwm1b = X_1
      114. Waitms Zeit
      115. Next
      116. If Raus = 1 Then 'Abfrage ob Weg fertig
      117. Exit For
      118. End If
      119. Next A
      120. Rein = 0
      121. Raus = 0
      122. End If
      123. End If
      124. Loop
      125. End
      126. '----------------------Gosub's----------------------------------------
      127. 1:
      128. X_1 = X_1 - 51
      129. Pwm1b = X_1
      130. Return
      131. 2:
      132. X_2 = X_2 - 51
      133. Pwm1a = X_2
      134. Return
      135. 3:
      136. X_3 = X_3 - 51
      137. Pwm0a = X_3
      138. Return
      139. 4:
      140. X_4 = X_4 - 51
      141. Pwm0b = X_4
      142. Return
      143. '---------------------Isr's-------
      144. Raus_isr0:
      145. A = 0
      146. For A = 1 To 80 'ist taster aktiv ?
      147. Waitus 500
      148. If Isr0 = 1 Then Exit For 'nein Abbruch
      149. Next
      150. If A = 81 And Isr0 = 0 Then 'verhindert Fehlauslösung
      151. Raus = 1
      152. End If
      153. Return
      154. '----------
      155. Rein_isr1:
      156. A = 0
      157. For A = 1 To 80 'ist taster aktiv ?
      158. Waitus 500
      159. If Isr1 = 1 Then Exit For 'nein Abbruch
      160. Next
      161. If A = 81 And Isr1 = 0 Then 'verhindert Fehlauslösung
      162. Rein = 1
      163. End If
      164. Return
      Display All
    • Hallo daja,
      ich denke das hier

      If A = 81 And Isr0 = 0 Then 'verhindert Fehlauslösung
      Raus = 1
      End If

      bedeutet, dass du den Taster bis auf 500µs genau 40ms drücken musst. Ansonsten kann Raus nicht 1 werden. Genauso bei Rein. Ich kann mir nicht vorstellen, dass du das schaffst. Oder ich übersehe etwas.
      Wie stellst du denn fest, dass das Programm stehenbleibt?
    • Dieser Code habe ich so geschrieben weil Schneeflocken oder auch starker Regen den Infrarottaster ausgelöst hat.
      Habe diese Zeit mit einem Osszi und einer Testperson( diese mußte den Taster auslösen) ausgemessen.

      Festgestellt habe ich das weil 1. das beleuchten des LDR keine Reaktion aus gelöst hat und nachdem ich die Eingänge separat ansteuerte auch keine Reaktion erfolgte
    • Hallo Daja

      was ich im Vorbeigene gesehen habe :

      Source Code

      1. Gosub 1
      Das macht man aber nicht. In den Language Fundamentals steht ganz sicher irgendwo beschrieben, dass Labels mit einem Buchstaben beginnen sollen, aber nicht mit einer Zahl und schon ganircht nur aus einer Zahl bestehen sollen.

      Ich kann in einem x-Beliebigen Programm ohne dafür ein entsprechendes Label vorgesehen zu haben Gosub 2 schreiben und der Compiler meckert vielleicht nicht einmal.



      Das Zweite. Ist die mehfachnutzung von A so richtig - im Hauptprogramm und in den ISR?

      Gruß
      Galahat
    • Ich tippe auf zu wenih hwstack. Du hast isr und gosub. 32 bytes für isr und wenn der innerhalb von gosub auftritt, sind schon 2 bytes für gosub verbraucht. Also mal hwstack erhöhen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch wrote:

      Ich tippe auf zu wenih hwstack. Du hast isr und gosub. 32 bytes für isr und wenn der innerhalb von gosub auftritt, sind schon 2 bytes für gosub verbraucht. Also mal hwstack erhöhen.
      War auch mein Anfangsverdacht, aber kurz gerechnet, sind es wirklich nur maximal 32 bytes die benötigt werden. Selbst wenn es zu einem Überlauf kommt, macht das nichts. Dabei würde zwar der SW-Stack zerstört, der wird aber imho nicht gebraucht. Der Frame im Übrigen auch nicht.
    • hero wrote:

      Hallo daja,
      ich denke das hier

      If A = 81 And Isr0 = 0 Then 'verhindert Fehlauslösung
      Raus = 1
      End If

      bedeutet, dass du den Taster bis auf 500µs genau 40ms drücken musst. Ansonsten kann Raus nicht 1 werden. Genauso bei Rein. Ich kann mir nicht vorstellen, dass du das schaffst. Oder ich übersehe etwas.
      Wie stellst du denn fest, dass das Programm stehenbleibt?
      Sehe ich nicht so. Man muss nur lang genug drücken, (aber nicht dabei Prellen) sonst fliegt man aus der isr. Die zitierte if-Abfrage ist eigentlich überflüssig.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Dein Programm kann hängen bleiben, wenn zufällig beide isr nacheinander aufgerufen werden und das Hauptprogramm keine wahre if -Abfrage bearbeitet. Du=0 zB. wenn jetzt Rein=1 wird und Raus=1 wird, ist's erledigt. Keine Abfrage wird mehr wahr wo Rein oder Raus zurück gesetzt werden.
      Ein Abhilfe wäre

      BASCOM Source Code

      1. Raus_isr0:
      2. A = 0
      3. For A = 1 To 80 'ist taster aktiv ?
      4. Waitus 500
      5. If Isr0 = 1 Then Exit For 'nein Abbruch
      6. Next
      7. Raus = 1
      8. Raus=0
      9. Return
      also in der isr jeweils das andere 'Hin' auf =0 zu setzen. So können nicht beide Richtungen =1 werden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Guten Morgen und Danke erst mal für die Tipps und Hinweise.
      Der "Taster" ist kein mechanisches Teil sondern der hier
      sick.com/de/de/lichttaster-und…-3/wtb27-3p2411/p/p236356

      Mit den Gosubs das wird ich ändern.

      Die Mehrfachnutzung von A : ist nur eine Zählvariable, sollte ich das besser trennen ?

      Die isr werde ich so ändern, leuchtet ein war mir so noch nicht aufgefallen, da das Programm eigentlich seit Jahren läuft (über eine Zeitschaltuhr)
    • Zu der Variablen 'A':
      Während in der main die verwendet wird, könnte die isr aufgerufen werden, die dann A neu zuweißt und nach dem Rücksprung einen anderen Wert für A hinterlässt, als A vor der isr hatte.

      Die Zeitschaltuhr hat vielleicht das Setzen von 'Rein' und 'Raus' tagsüber verhindert.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      The post was edited 1 time, last by tschoeatsch ().

    • Sorry aber ich muss aus aktuellem Anlass diesen Thread noch mal hervorkramen.
      Nun ist es wieder passiert. Das Programm reagiert nicht auf die Eingaben.
      Erst ein Reset per Spannungsunterbrechung brachte Abhilfe.
      Im Anhang noch mal der jetzige Code. Was kann den Fehler verursachen ?

      BASCOM Source Code

      1. 'Laufrichtungslicht für Hofeinfahrt (Wegbeleuchtung)
      2. 'D.Jäschke 20.05.11 fertig 16.11.13
      3. 'rev.20.07.2014 wegen Regen ISR zeitlich auf 40ms
      4. 'rev.25.02.2017 Comperator mit Rückkopplung (ä.LM358)wegen Hysterese
      5. '_______________________________________________________________
      6. $regfile = "attiny2313.dat"
      7. $crystal = 1000000
      8. $hwstack = 40
      9. $swstack = 10
      10. $framesize = 32
      11. '$sim
      12. '-------Pin, Port, Alias------------------------------------------
      13. Ddrb = &B00011100 'PB1 ist LDR
      14. Ddrd = &B11110011
      15. A1 Alias Portb.4 'OC1B
      16. A2 Alias Portb.3 'OC1A
      17. A3 Alias Portb.2 'OC0A
      18. A4 Alias Portd.5 'OC0B
      19. Led Alias Portd.4 'Anzeige Hell oder Dunkel
      20. Raus_led Alias Portd.0 'LED nur für Test
      21. Rein_led Alias Portd.1 'LED nur für Test
      22. Isr0 Alias Pind.2 'rot raus
      23. Portd.2 = 1
      24. Config Int0 = Falling
      25. Enable Int0
      26. On Int0 Raus_isr0
      27. Isr1 Alias Pind.3 'blau rein
      28. Portd.3 = 1
      29. Config Int1 = Falling
      30. Enable Int1
      31. On Int1 Rein_isr1
      32. 'Ddra = &B0000000 'Eingänge setzen
      33. '----------Helligkeitseinstellung--------------------------------
      34. Acsr = &B00000000 'komp ein, V+ -- 150k -- AIN0 -- 24k -- GND ACSR.aco -- 240k -- AIN0
      35. Du Alias Acsr.aco 'zeigt dunkel = 1
      36. '----------PWM---------------------------------------------------
      37. Config Timer0 = Pwm , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
      38. Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
      39. Enable Interrupts
      40. '---------Variablen---------------------------------------------
      41. Dim X_1 As Byte
      42. Dim X_2 As Byte
      43. Dim X_3 As Byte
      44. Dim X_4 As Byte
      45. Dim A As Byte
      46. Dim B As Byte
      47. Dim D As Byte
      48. Dim Raus As Bit 'Status für RAUS
      49. Raus = 0
      50. Dim Rein As Bit 'Status für REIN
      51. Rein = 0
      52. Const Zeit = 150 'Laufdauer
      53. '--------Hauptprogramm------------------------------------------
      54. Led = 1
      55. Do
      56. Led = Du
      57. If Du = 1 Then
      58. If Raus = 1 And Rein = 0 Then
      59. D = 0
      60. For D = 1 To 10 '10 Durchläufe
      61. For X_1 = 0 To 255 Step 51 'a1 an
      62. Pwm1b = X_1
      63. Waitms Zeit
      64. Next
      65. For X_2 = 0 To 255 Step 51 'a2 an
      66. Pwm1a = X_2
      67. Gosub L1 'a1 aus
      68. Waitms Zeit
      69. Next
      70. For X_3 = 0 To 255 Step 51 'a3 an
      71. Pwm0a = X_3
      72. Gosub L2 'a2 aus
      73. Waitms Zeit
      74. Next
      75. For X_4 = 0 To 255 Step 51 'a4 an
      76. Pwm0b = X_4
      77. Gosub L3 'a3 aus
      78. Waitms Zeit
      79. Next
      80. For X_4 = 255 To 0 Step -51 'a4 aus
      81. Pwm0b = X_4
      82. Waitms Zeit
      83. Next
      84. If Rein = 1 Then
      85. Exit For 'Abfrage ob Weg fertig
      86. End If
      87. Next D
      88. Rein = 0
      89. Raus = 0
      90. Elseif Rein = 1 And Raus = 0 Then
      91. D = 0
      92. For D = 1 To 10 '10 Durchläufe
      93. For X_4 = 0 To 255 Step 51 'a4 an
      94. Pwm0b = X_4
      95. Waitms Zeit
      96. Next
      97. For X_3 = 0 To 255 Step 51 'a3 an
      98. Pwm0a = X_3
      99. Gosub L4 'a4 aus
      100. Waitms Zeit
      101. Next
      102. For X_2 = 0 To 255 Step 51 'a2 an
      103. Pwm1a = X_2
      104. Gosub L3 'a3 aus
      105. Waitms Zeit
      106. Next
      107. For X_1 = 0 To 255 Step 51 'a1 an
      108. Pwm1b = X_1
      109. Gosub L2 'a2 aus
      110. Waitms Zeit
      111. Next
      112. For X_1 = 255 To 0 Step -51 'a1 aus
      113. Pwm1b = X_1
      114. Waitms Zeit
      115. Next
      116. If Raus = 1 Then 'Abfrage ob Weg fertig
      117. Exit For
      118. End If
      119. Next D
      120. Rein = 0
      121. Raus = 0
      122. End If
      123. End If
      124. Loop
      125. End
      126. '----------------------Gosub's----------------------------------------
      127. L1:
      128. X_1 = X_1 - 51
      129. Pwm1b = X_1
      130. Return
      131. L2:
      132. X_2 = X_2 - 51
      133. Pwm1a = X_2
      134. Return
      135. L3:
      136. X_3 = X_3 - 51
      137. Pwm0a = X_3
      138. Return
      139. L4:
      140. X_4 = X_4 - 51
      141. Pwm0b = X_4
      142. Return
      143. '---------------------Isr's-------
      144. Raus_isr0:
      145. A = 0
      146. For A = 1 To 80 'ist taster aktiv ?
      147. Waitus 500
      148. If Isr0 = 1 Then Exit For 'nein Abbruch
      149. Next
      150. If A = 81 And Isr0 = 0 Then 'verhindert Fehlauslösung
      151. Raus = 1
      152. Rein = 0
      153. End If
      154. Return
      155. '----------
      156. Rein_isr1:
      157. B = 0
      158. For B = 1 To 80 'ist taster aktiv ?
      159. Waitus 500
      160. If Isr1 = 1 Then Exit For 'nein Abbruch
      161. Next
      162. If B = 81 And Isr1 = 0 Then 'verhindert Fehlauslösung
      163. Rein = 1
      164. Raus = 0
      165. End If
      166. Return
      Display All
    • Hallo Daja
      So auf die schnelle würde ich sagen Dein Programm fängt sich in einer Dauerschleife.

      Das Problem sind die For Next Schleifen mit STEP 51
      256 läßt sich nicht durch 51 Teilen!
      Wenn Du 6x 51 von 0 abziehst, dann läuft die Varialbe schon wieder über.
      Sobald Du wieder vorwärts zählst passt es dann wieder.

      Endlosschleife plus wait in der Schleife ist böse.

      Kannst Du nicht Statt "For 0 to 255 Step 51" For 0 to 5 schreiben
      und dann pwm = schleife*51 zuweisen?
      Das würde Dein Problem ohne umprogrammieren beheben.

      gruß nolem
    • daja wrote:

      L1:
      X_1 = X_1 - 51
      Pwm1b = X_1
      Return
      Hallo Daja
      Es reicht völlig, wenn Du die Unterprogramme L1-L4 änderst.
      Ersetze X_1=X_1-51 durch
      If X_1 > 0 Then X_1=X_1-51
      oder willst Du auch bei Null etwas abziehen? Dann mußt Du noch folgende Zeile hinzufügen.
      If X_1 = 0 Then X_1=X_1-52

      Wenn bei Deinem jetzigen Programm bei Schleifenzähler=0 etwas abgezogen wird, dann wird die Schleife nicht nach einem Durchlauf beendet, sondern nach 52 Durchläufen. Sollte in dieser Zeit wieder bei Null etwas abgezogen werden, dann hast Du eine Endlosschleife.
    • nolem wrote:

      So auf die schnelle würde ich sagen Dein Programm fängt sich in einer Dauerschleife.

      Das Problem sind die For Next Schleifen mit STEP 51
      256 läßt sich nicht durch 51 Teilen!
      Wenn Du 6x 51 von 0 abziehst, dann läuft die Varialbe schon wieder über.
      Sobald Du wieder vorwärts zählst passt es dann wieder.
      Hallo nolem,
      dies würde ich so nicht stehenlassen.
      Die Schrittweite muss nicht in den Bereich glatt teilbar sein um eine Dauerschleife zu vermeiden.
      Der Compiler macht das vollkommen korrekt. Ausnahme ist nur, wenn die Schrittweite nicht in den Typ der Schleifenvariable passen würde, aber das ist hier nicht der Fall.
      Also alleine daran wird sein Problem nicht liegen.
    • Meine Meinung dazu: ich glaube nicht an einem Fehler im Programm. Die gerade angesprochenen Punkte betreffen die Steuerung der Helligkeit der Lichter, gäbe es da Fehler, würde man das schnell sehen. Ich vermute eher eine unstabile Stromversorgung oder sowas in der Richtung. Oder wenn es nicht mehr dunkel wird, Fehler beim Komparator, dann geht auch nix mehr.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Franz wrote:

      Die Schrittweite muss nicht in den Bereich glatt teilbar sein um eine Dauerschleife zu vermeiden.
      Hallo Franz
      In diesem Fall ist es das Problem!
      Daja manipuliert die For Next Schleife. Die Schleife zählt vorwärts und Daja subtrahiert 51 (=1 Schritt)
      Warum er das macht möchte ich garnicht näher ergründen.

      Ist der Schleifenzähler 0, dann 0 minus 51 ergibt 205.
      Wird dann in 51er Schritten wieder vorwärts gezählt 205 + 51= 0 kann zu einer Endlosschleife werden,
      da 255 als Schleifenende übergangen wird.

      Mir gefällt ein Spagettiprogramm nicht so gut. Aber Daja fragt nach einer Lösung:
      So könnte zumindest meiner Meinung nach der Fehler abgefangen werden. - Ohne das Rad neu zu erfinden.
      L1: (Auch L2-L4)
      If X_1 > 0 Then
      X_1=X_1-51
      else
      X_1=X_1-52 '(oder X_1=204)
      end if
      Pwm1b = X_1
      Return
    • nolem wrote:

      In diesem Fall ist es das Problem!
      Daja manipuliert die For Next Schleife. Die Schleife zählt vorwärts und Daja subtrahiert 51 (=1 Schritt)
      Warum er das macht möchte ich garnicht näher ergründen.
      Hallo nolem,
      in dem Programm sind so viele For-Schleifen, kannst du mal zeigen, auf welche du dich beziehst.
      Ich sehe keine Schleife, in der er die Laufvariable ändert, aber vielleicht übersehe ich ja da was.
      Zugegebenermaßen finde ich es auch nicht leicht, seinen Ablauf zu verstehen, aber Spaghetti würde ich es jetzt nicht nennen. Vieles sieht auch wegen der seltsamen Einrückung unübersichtlich aus.
    • Danke mal für eure Briträge. Die LED Ansteuerung ist so:
      1.dimmt an bis max dann
      2.dimmt an bis max dabei dimmt die 1. auf null
      Bei 2. max beginnt die 3. dimm auf max und die 2. geht auf null.
      Die 4. dimmt auf max, dabei geht die 3. auf null.
      Und zuletzt geht die 4. auf null. Ergibt ein auf und ab dimmenden Leuchtpunkt.
      Bei diesem Fall sind es 50cm lange LED-Bänder.
      Dieser Leuchtablauf ist so auch auf eine Modellbahn in Aktion, nur mit einer anderen Auslöse Steuerung.
      Diese For-Schleifen Steurung muß so sein damit dieser Effekt so rüberkommnt. Wenn es aber eine Besere Lösung gibt: her damit.

      nolem wrote:

      Daja manipuliert die For Next Schleife. Die Schleife zählt vorwärts und Daja subtrahiert 51 (=1 Schritt
      Aber nach dem X_1=255 ist und X_1 soll ja runter dimmen.

      Ach so: ihr könnt euch gern eine eigen Schachtelung erstellen, diese hier macht für mich die Sache übersichtlicher.

      The post was edited 3 times, last by daja ().