Errors nach Update auf 2.0.8.0

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Errors nach Update auf 2.0.8.0

      Ich habe mein Bascom auf 2.0.8.0 upgedated, nun laufen einige meiner Programme nicht mehr bzw es werden Errors beim syntax check ausgeworfen. Folgendes Programm lief unter 2.0.7.9

      BASCOM-Quellcode

      1. 'Knight Rider Lauflicht mit Nachglüheffekt (exponentiell) und Hintergrundfarbe für 2 Strips WS2812-Leds a 30 LEDs
      2. 'Bascom Version 2.0.7.9 Beta
      3. '$sim
      4. $regfile = "attiny85.dat"
      5. $crystal = 8000000
      6. $hwstack = 32
      7. $swstack = 10
      8. $framesize = 40
      9. Config Rainbow = 2 , Rb0_len = 30 , Rb0_port = Portb , Rb0_pin = 2 , Rb1_len = 30 , Rb1_port = Portb , Rb1_pin = 1
      10. Declare Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      11. Rb_selectchannel 0
      12. Dim Farbe(3) As Byte
      13. Rot Alias Farbe(_base)
      14. Gruen Alias Farbe(_base + 1)
      15. Blau Alias Farbe(_base + 2)
      16. Dim Farbe_(3) As Byte
      17. R_ Alias Farbe_(_base)
      18. G_ Alias Farbe_(_base + 1)
      19. B_ Alias Farbe_(_base + 2)
      20. Dim Farbe_h(3) As Byte 'Hintergrundfarbe
      21. R_h Alias Farbe_h(_base)
      22. G_h Alias Farbe_h(_base + 1)
      23. B_h Alias Farbe_h(_base + 2)
      24. Const Num_leds = 30 '30 (Muss identisch sein mit Rb0_len !!!
      25. Const Num_leds_1 = Num_leds - 1
      26. Const Num_leds_2 = Num_leds_1 * 2
      27. Dim N As Word
      28. Dim X As Integer
      29. Dim Y As Integer
      30. Dim A As Byte
      31. Dim B As Byte
      32. Dim Position As Word
      33. Dim Position_1 As Word
      34. Dim Direction As Bit
      35. Dim Stripe_change_counter As Byte
      36. Dim Zielfarbe_erreicht As Byte
      37. Const Stufen = 60 '60x so schnelles hochdimmen
      38. 'Hintergrundfarbe setzen
      39. R_h = 0
      40. G_h = 0
      41. B_h = 0
      42. 'Sollfarbe setzen
      43. Rot = 255
      44. Gruen = 0
      45. Blau = 0
      46. Position = 0
      47. '########################### Knight Rider Lauflicht mit Nachglüheffekt ###################################
      48. Do
      49. 'Runterdimmen auf Hintergrundfarbe
      50. For A = 0 To 1 'Beide Strips bearbeiten
      51. Rb_selectchannel A
      52. For N = 0 To Num_leds_1
      53. Farbe_() = Rb_getcolor_wa(n)
      54. For Y = 0 To 1 'Nachglühdauer einstellen (höherer Wert, kürzere Nachglühdauer)
      55. If R_ > 200 Then R_ = R_ - 10 'pseudo 3 Punkte Kurve für exponentielles Dimmen
      56. If R_ < 200 And R_ > 120 Then R_ = R_ - 7
      57. If R_ < 120 And R_ > 50 Then R_ = R_ - 4
      58. If R_ > R_h Then Decr R_ Else R_ = R_h 'originale Zeile bei linearem Dimmen
      59. If G_ > 200 Then G_ = G_ - 10
      60. If G_ < 200 And G_ > 120 Then G_ = G_ - 7
      61. If G_ < 120 And G_ > 50 Then G_ = G_ - 4
      62. If G_ > G_h Then Decr G_ Else G_ = G_h
      63. If B_ > 200 Then B_ = B_ - 10
      64. If B_ < 200 And B_ > 120 Then B_ = B_ - 7
      65. If B_ < 120 And B_ > 50 Then B_ = B_ - 4
      66. If B_ > B_h Then Decr B_ Else B_ = B_h
      67. Next Y
      68. Rb_setcolor N , Farbe_()
      69. Next N
      70. Rb_send
      71. Next A
      72. 'Lauflicht bewegen
      73. Rb_selectchannel B
      74. If Stripe_change_counter = Num_leds_2 Then ' falls ein Stripwechsel ansteht, erste LED (0) auf dem neuen Strip setzen und Berechnung der neuen Position EINMAL überspringen
      75. Rb_setcolor Position , Farbe()
      76. Rb_send
      77. Stripe_change_counter = 0
      78. Goto Stripe_change
      79. End If
      80. If Direction = 0 And Position < Num_leds_1 Then 'bis zur vorletzten LED...
      81. Position = Position + 1 'wird die Position um eins erhöht...
      82. Rb_setcolor Position , Farbe() 'und LED gesetzt
      83. Rb_send
      84. End If
      85. If Direction = 1 And Position > 0 Then
      86. Position = Position - 1
      87. Rb_setcolor Position , Farbe()
      88. Rb_send
      89. End If
      90. If Position = Num_leds_1 Then 'ist die letzte LED erreicht...
      91. Direction = 1 'wird die Richtung für den nächsten Durchgang geändert...
      92. Rb_setcolor Position , Farbe() 'und die letzte LED gesetzt
      93. Rb_send
      94. End If
      95. If Position = 0 Then
      96. Direction = 0
      97. Rb_setcolor Position , Farbe()
      98. Rb_send
      99. If B = 0 Then 'Stripe wechseln
      100. B = 1
      101. Else
      102. B = 0
      103. End If
      104. End If
      105. Incr Stripe_change_counter
      106. Stripe_change:
      107. Waitms 4 ' Lauflichtgeschwindigkeit einstellen
      108. Loop
      109. End
      110. Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      111. $external Rb_getcolor
      112. LDD ZL , Y+0
      113. LDD ZH , Y+1
      114. LD R24 , Z+
      115. LD R25 , Z
      116. LDD XL , Y+2
      117. LDD XH , Y+3
      118. RCall RB_GetColor
      119. End Function
      Alles anzeigen

      Bei 2.0.8.0 kommen nun folgende Errors:

      Quellcode

      1. Error : 261 Line : 53 Array expected [FARBE_] , in File : E:\......
      2. Error : 1 Line : 112 Unknown statement [LDD ZL , Y + 0] , in File : E:\.....
      3. Error : 229 Line : 112 End Sub or End Function expected [> 1] , in File : E:\.....

      Soweit ich mich erinnern kann, wurde die Funktion Rb_getcolor_wa ursprünglich von Galahat für Michael geschrieben, da RB_GETCOLOR nicht richtig funktionierte. Leider hab ich es mit meinem begrenzten Wissen nicht geschafft, die Programme mit der neuen Bascomversion wieder zum laufen zu bringen. Es ist zum Heulen a_224_a22645d4

      Wie bekomme ich die Programme (sind mehrere) wieder hin???

      Gruß Robert
    • Nicht traurig sein a_46_71693e42
      Probier mal Farbe(1)
      und bei den Assemblerbefehler ein $ Zeichen davor.


      Gesülze!! Schau unter der Hilfe bei 'compiler directives'

      Use $ASM together with $END ASM to insert a block of assembler code in your BASIC code. You can also precede each line with the ! sign.
      Raum für Notizen

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

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

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Du meintest sicher Farbe_(1). Hab ich gemacht und die Funktion so abgeändert:

      BASCOM-Quellcode

      1. Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      2. $external Rb_getcolor
      3. $asm
      4. LDD Zl , Y + 0
      5. LDD ZH , Y+1
      6. LD R24 , Z+
      7. LD R25 , Z
      8. LDD XL , Y+2
      9. LDD XH , Y+3
      10. RCall RB_GetColor
      11. $end Asm
      12. End Function
      Alles anzeigen
      Es kommen zwar keine Errors mehr, aber leuchten tut auch nichts (alle LEDs bleiben aus) a_31_4f4a3ad8
    • Du meinst alle Farbe() und Farbe_() schreiben als Farbe(1) und Farbe_(1)? Hab ich probiert, immer noch alles dunkel. Auch Farbe(3) und Farbe_(3) bringt nichts. Da alles dunkel bleibt, hab ich jetzt auch mal alles zwischen Do und Loop ausgeklammert und nur

      BASCOM-Quellcode

      1. Rb_selectchannel 0
      2. Rb_fillstripe Farbe()
      3. Rb_selectchannel 1
      4. Rb_fillstripe Farbe()
      reingesetzt -> da leuchtet alles rot. Liegt also nicht am Aufbau oder der Hardware.
    • Also, wenn eine Zahl, dann den Wert von _base. Da du _base nicht geändert hast, ist es standardmäßig 1. Ich seh' in der Hilfe zur Rainbow, dass jetzt da immer ein Wert drin steht, zB Beispiel knightrider

      BASCOM-Quellcode

      1. '----[MAIN]---------------------------------------------------------------------
      2. Dim n as Byte
      3. RB_SelectChannel 0 ' select first channel
      4. R = 50 : G = 0 : B = 100 ' define a color
      5. RB_SetColor 0 , color(1) ' update led on the left
      6. RB_SetColor 7 , color(1) ' update led on the right
      7. RB_Send
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Zumindest macht es bei RB_FILLSTRIPE keinen Unterschied, ob man Rb_fillstripe Farbe() oder Rb_fillstripe Farbe(1) schreibt, die Strips werden stehts mit der richtigen Farbe gefüllt.

      Sollte RB_GETCOLOR denn mit der neuen Version richtig funktionieren? In den Changes steht:

      Quellcode

      1. - RB_GETCOLOR and RB_LOOKUPCOLOR functions did return false result when index was a variable.
      "did", also Vergangenheitsform?
    • Sollte man hoffen können, der Fehler ist ja eine zeitlang bekannt. Ich hab's noch nicht probiert.
      Geht jetzt rb_setcolor n, farbe(1)?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ein letzter fieberdelierium gepägter Tipp: bascom legt die alten Versionen im backup-Verzeichnis ab. Hier müsstest du unter lib die 2.079er rainbow lib finden. Die mal probehalber in das aktuelle lib-Verzeichnis kopieren.
      Jetzt wird auch der Akku leer...ade...
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Backup-Verzeichnis hab ich (noch) keins gefunden...

      Folgender Code färbt 21 LEDs ein:

      BASCOM-Quellcode

      1. Do
      2. Rb_selectchannel 0
      3. For N = 0 To 10
      4. Rb_setcolor N , Farbe(1)
      5. Next N
      6. For N = 11 To 20
      7. Rb_setcolor N , Farbe()
      8. Next N
      9. Rb_send
      10. Loop
      11. End
      Alles anzeigen

      Ob mit 1 oder ohne, daran kanns also nicht liegen...

      Gute Besserung a_221_2cffa601
    • Hab nun nochmal getestet. Mit der Rainbow LIB 2.0.7.9 (in Bascom 2.0.8.0 kopiert) läuft dieser Code

      BASCOM-Quellcode

      1. 'Knight Rider Lauflicht mit Nachglüheffekt (exponentiell) und Hintergrundfarbe für 2 Strips WS2812-Leds a 30 LEDs
      2. 'Bascom Version 2.0.7.9 Beta
      3. '$sim
      4. $regfile = "attiny85.dat"
      5. $crystal = 8000000
      6. $hwstack = 32
      7. $swstack = 10
      8. $framesize = 40
      9. Config Rainbow = 2 , Rb0_len = 30 , Rb0_port = Portb , Rb0_pin = 2 , Rb1_len = 30 , Rb1_port = Portb , Rb1_pin = 1
      10. Declare Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      11. Rb_selectchannel 0
      12. Dim Farbe(3) As Byte
      13. Rot Alias Farbe(_base)
      14. Gruen Alias Farbe(_base + 1)
      15. Blau Alias Farbe(_base + 2)
      16. Dim Farbe_(3) As Byte
      17. R_ Alias Farbe_(_base)
      18. G_ Alias Farbe_(_base + 1)
      19. B_ Alias Farbe_(_base + 2)
      20. Dim Farbe_h(3) As Byte 'Hintergrundfarbe
      21. R_h Alias Farbe_h(_base)
      22. G_h Alias Farbe_h(_base + 1)
      23. B_h Alias Farbe_h(_base + 2)
      24. Const Num_leds = 30 '30 (Muss identisch sein mit Rb0_len !!!
      25. Const Num_leds_1 = Num_leds - 1
      26. Const Num_leds_2 = Num_leds_1 * 2
      27. Dim N As Word
      28. Dim X As Integer
      29. Dim Y As Integer
      30. Dim A As Byte
      31. Dim B As Byte
      32. Dim Position As Word
      33. Dim Position_1 As Word
      34. Dim Direction As Bit
      35. Dim Stripe_change_counter As Byte
      36. Dim Zielfarbe_erreicht As Byte
      37. Const Stufen = 60 '60x so schnelles hochdimmen
      38. 'Hintergrundfarbe setzen
      39. R_h = 0
      40. G_h = 0
      41. B_h = 0
      42. 'Sollfarbe setzen
      43. Rot = 100
      44. Gruen = 0
      45. Blau = 0
      46. Position = 0
      47. '########################### Knight Rider Lauflicht mit Nachglüheffekt ###################################
      48. Do
      49. 'Runterdimmen auf Hintergrundfarbe
      50. For A = 0 To 1 'Beide Strips bearbeiten
      51. Rb_selectchannel A
      52. For N = 0 To Num_leds_1
      53. Farbe_(1) = Rb_getcolor_wa(n)
      54. For Y = 0 To 1 'Nachglühdauer einstellen (höherer Wert, kürzere Nachglühdauer)
      55. If R_ > 200 Then R_ = R_ - 10 'pseudo 3 Punkte Kurve für exponentielles Dimmen
      56. If R_ < 200 And R_ > 120 Then R_ = R_ - 7
      57. If R_ < 120 And R_ > 50 Then R_ = R_ - 4
      58. If R_ > R_h Then Decr R_ Else R_ = R_h 'originale Zeile bei linearem Dimmen
      59. If G_ > 200 Then G_ = G_ - 10
      60. If G_ < 200 And G_ > 120 Then G_ = G_ - 7
      61. If G_ < 120 And G_ > 50 Then G_ = G_ - 4
      62. If G_ > G_h Then Decr G_ Else G_ = G_h
      63. If B_ > 200 Then B_ = B_ - 10
      64. If B_ < 200 And B_ > 120 Then B_ = B_ - 7
      65. If B_ < 120 And B_ > 50 Then B_ = B_ - 4
      66. If B_ > B_h Then Decr B_ Else B_ = B_h
      67. Next Y
      68. Rb_setcolor N , Farbe_()
      69. Next N
      70. Rb_send
      71. Next A
      72. 'Lauflicht bewegen
      73. Rb_selectchannel B
      74. If Stripe_change_counter = Num_leds_2 Then ' falls ein Stripwechsel ansteht, erste LED (0) auf dem neuen Strip setzen und Berechnung der neuen Position EINMAL überspringen
      75. Rb_setcolor Position , Farbe()
      76. Rb_send
      77. Stripe_change_counter = 0
      78. Goto Stripe_change
      79. End If
      80. If Direction = 0 And Position < Num_leds_1 Then 'bis zur vorletzten LED...
      81. Position = Position + 1 'wird die Position um eins erhöht...
      82. Rb_setcolor Position , Farbe() 'und LED gesetzt
      83. Rb_send
      84. End If
      85. If Direction = 1 And Position > 0 Then
      86. Position = Position - 1
      87. Rb_setcolor Position , Farbe()
      88. Rb_send
      89. End If
      90. If Position = Num_leds_1 Then 'ist die letzte LED erreicht...
      91. Direction = 1 'wird die Richtung für den nächsten Durchgang geändert...
      92. Rb_setcolor Position , Farbe() 'und die letzte LED gesetzt
      93. Rb_send
      94. End If
      95. If Position = 0 Then
      96. Direction = 0
      97. Rb_setcolor Position , Farbe()
      98. Rb_send
      99. If B = 0 Then 'Stripe wechseln
      100. B = 1
      101. Else
      102. B = 0
      103. End If
      104. End If
      105. Incr Stripe_change_counter
      106. Stripe_change:
      107. Waitms 4 ' Lauflichtgeschwindigkeit einstellen
      108. Loop
      109. End
      110. Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      111. $external Rb_getcolor
      112. $asm
      113. ldd Zl , Y + 0
      114. LDD ZH , Y+1
      115. LD R24 , Z+
      116. LD R25 , Z
      117. LDD XL , Y+2
      118. LDD XH , Y+3
      119. RCall RB_GetColor
      120. $end Asm
      121. End Function
      Alles anzeigen




      Mit der Rainbow LIB 2.0.8.0 wird zwar ohne Error kompiliert, aber die LEDs bleiben dunkel.

      Hat die neue Rainbow-Lib einen Bug

      Gruß
      Robert
    • Eine Nacht drüber schlafen und schon funktioniert's (dabei wäre die Antwort so naheliegend gewesen, nachdem die Probleme mit den Errors behoben war)

      Alles, was mit der Funktion Rb_getcolor_wa zu tun hat ausklammern und an einer Stelle im Code ersetzen durch Rb_getcolor. Nun funktioniert der folgende Code.


      BASCOM-Quellcode

      1. 'Knight Rider Lauflicht mit Nachglüheffekt (exponentiell) und Hintergrundfarbe für 2 Strips WS2812-Leds a 30 LEDs
      2. 'Bascom Version 2.0.7.9 Beta
      3. '$sim
      4. $regfile = "attiny85.dat"
      5. $crystal = 8000000
      6. $hwstack = 32
      7. $swstack = 10
      8. $framesize = 40
      9. Config Rainbow = 2 , Rb0_len = 30 , Rb0_port = Portb , Rb0_pin = 2 , Rb1_len = 30 , Rb1_port = Portb , Rb1_pin = 1
      10. 'Declare Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      11. Rb_selectchannel 0
      12. Dim Farbe(3) As Byte
      13. Rot Alias Farbe(_base)
      14. Gruen Alias Farbe(_base + 1)
      15. Blau Alias Farbe(_base + 2)
      16. Dim Farbe_(3) As Byte
      17. R_ Alias Farbe_(_base)
      18. G_ Alias Farbe_(_base + 1)
      19. B_ Alias Farbe_(_base + 2)
      20. Dim Farbe_h(3) As Byte 'Hintergrundfarbe
      21. R_h Alias Farbe_h(_base)
      22. G_h Alias Farbe_h(_base + 1)
      23. B_h Alias Farbe_h(_base + 2)
      24. Const Num_leds = 30 '30 (Muss identisch sein mit Rb0_len !!!
      25. Const Num_leds_1 = Num_leds - 1
      26. Const Num_leds_2 = Num_leds_1 * 2
      27. Dim N As Word
      28. Dim X As Integer
      29. Dim Y As Integer
      30. Dim A As Byte
      31. Dim B As Byte
      32. Dim Position As Word
      33. Dim Position_1 As Word
      34. Dim Direction As Bit
      35. Dim Stripe_change_counter As Byte
      36. Dim Zielfarbe_erreicht As Byte
      37. Const Stufen = 60 '60x so schnelles hochdimmen
      38. 'Hintergrundfarbe setzen
      39. R_h = 0
      40. G_h = 0
      41. B_h = 0
      42. 'Sollfarbe setzen
      43. Rot = 0
      44. Gruen = 200
      45. Blau = 100
      46. Position = 0
      47. '########################### Knight Rider Lauflicht mit Nachglüheffekt ###################################
      48. Do
      49. 'Runterdimmen auf Hintergrundfarbe
      50. For A = 0 To 1 'Beide Strips bearbeiten
      51. Rb_selectchannel A
      52. For N = 0 To Num_leds_1
      53. ' Farbe_(1) = Rb_getcolor_wa(n)
      54. Farbe_(1) = Rb_getcolor(n)
      55. For Y = 0 To 1 'Nachglühdauer einstellen (höherer Wert, kürzere Nachglühdauer)
      56. If R_ > 200 Then R_ = R_ - 10 'pseudo 3 Punkte Kurve für exponentielles Dimmen
      57. If R_ < 200 And R_ > 120 Then R_ = R_ - 7
      58. If R_ < 120 And R_ > 50 Then R_ = R_ - 4
      59. If R_ > R_h Then Decr R_ Else R_ = R_h 'originale Zeile bei linearem Dimmen
      60. If G_ > 200 Then G_ = G_ - 10
      61. If G_ < 200 And G_ > 120 Then G_ = G_ - 7
      62. If G_ < 120 And G_ > 50 Then G_ = G_ - 4
      63. If G_ > G_h Then Decr G_ Else G_ = G_h
      64. If B_ > 200 Then B_ = B_ - 10
      65. If B_ < 200 And B_ > 120 Then B_ = B_ - 7
      66. If B_ < 120 And B_ > 50 Then B_ = B_ - 4
      67. If B_ > B_h Then Decr B_ Else B_ = B_h
      68. Next Y
      69. Rb_setcolor N , Farbe_()
      70. Next N
      71. Rb_send
      72. Next A
      73. 'Lauflicht bewegen
      74. Rb_selectchannel B
      75. If Stripe_change_counter = Num_leds_2 Then ' falls ein Stripwechsel ansteht, erste LED (0) auf dem neuen Strip setzen und Berechnung der neuen Position EINMAL überspringen
      76. Rb_setcolor Position , Farbe()
      77. Rb_send
      78. Stripe_change_counter = 0
      79. Goto Stripe_change
      80. End If
      81. If Direction = 0 And Position < Num_leds_1 Then 'bis zur vorletzten LED...
      82. Position = Position + 1 'wird die Position um eins erhöht...
      83. Rb_setcolor Position , Farbe() 'und LED gesetzt
      84. Rb_send
      85. End If
      86. If Direction = 1 And Position > 0 Then
      87. Position = Position - 1
      88. Rb_setcolor Position , Farbe()
      89. Rb_send
      90. End If
      91. If Position = Num_leds_1 Then 'ist die letzte LED erreicht...
      92. Direction = 1 'wird die Richtung für den nächsten Durchgang geändert...
      93. Rb_setcolor Position , Farbe() 'und die letzte LED gesetzt
      94. Rb_send
      95. End If
      96. If Position = 0 Then
      97. Direction = 0
      98. Rb_setcolor Position , Farbe()
      99. Rb_send
      100. If B = 0 Then 'Stripe wechseln
      101. B = 1
      102. Else
      103. B = 0
      104. End If
      105. End If
      106. Incr Stripe_change_counter
      107. Stripe_change:
      108. Waitms 4 ' Lauflichtgeschwindigkeit einstellen
      109. Loop
      110. End
      111. '(
      112. Function Rb_getcolor_wa(byval Lednr As Word)as Byte 'nötig wegen noch nicht richtig funktionierendem Rb_getcolor
      113. $external Rb_getcolor
      114. $asm
      115. ldd Zl , Y + 0
      116. LDD ZH , Y+1
      117. LD R24 , Z+
      118. LD R25 , Z
      119. LDD XL , Y+2
      120. LDD XH , Y+3
      121. RCall RB_GetColor
      122. $end Asm
      123. End Function
      124. ')
      Alles anzeigen

      Mach mich nun dran, meine restlichen Programme umzuschreiben.

      Vielen Dank schon mal für Deine Unterstützung :thumbsup:

      Gruß
      Robert
    • Hallo,
      habe da ein ähnliches Problem. ;(
      Habe folgenden Code welcher mit 2.0.7.9 ohne Probleme läuft,
      unter 2.0.8.0 jedoch nicht (WS2812-Leds flackert nur,egal welcher Modus)
      Compiler bringt bei beiden Versionen keine Fehler.
      Bin jetzt soweit das der "Fehler" bei der Version 2.0.8.0 vom Timer kommt, also ohne Timer0
      alles Okay, mit kommt nur Müll.
      Hat sich da was beim Timer geändert, was ich übersehen habe? a_27_b277ca12
      Obwohl die LED_1 blinkt (Timer läuft also), nur die WS2812-Leds Funktionieren nicht so wie in der Version 2.0.7.9

      BASCOM-Quellcode

      1. '*************************
      2. '------< AVR >------------
      3. '*************************
      4. $regfile = "m8adef.dat"
      5. $crystal = 16000000
      6. $hwstack = 40
      7. $swstack = 16
      8. $framesize = 64
      9. '**************************
      10. '---------< E/A >----------
      11. '**************************
      12. Ddrb = &B11111111 'port c 1 Ausgänge / 0 Eingänge
      13. Ddrc = &B11110011 'port c 1 Ausgänge / 0 Eingänge
      14. Ddrd = &B11111111 'port d 1 Ausgänge / 0 Eingänge
      15. '**************************
      16. '--------< Const >---------
      17. '**************************
      18. Const Modus = 4 '1-4
      19. Const Gesch = 2
      20. Const Num_leds = 60
      21. Const Leds = 12
      22. Const Num_leds_1 = Num_leds - 1
      23. Const Num_leds_x = Num_leds - Leds
      24. Const Num_leds_2 = Num_leds / 2
      25. Const Alignment = 768 / Num_leds 'Aufteilung des Farbspektrums auf die Anzahl der LEDs
      26. Const Start_timer0 = 241
      27. '*****************************
      28. '----------< Dim >-----------
      29. '*****************************
      30. Dim Farbe(3) As Byte
      31. Dim Farb(3) As Byte
      32. Dim Zaehler_uhr As Word
      33. Dim Richtung As Byte
      34. Dim Pos As Word
      35. Dim A As Word
      36. Dim Zaehler As Byte
      37. Dim Adc0 As Integer
      38. Dim Farb_wert As Word
      39. Dim Dimmen As Byte
      40. Dim Merker As Byte
      41. Dim Z As Byte
      42. Dim Pos_z As Byte
      43. '*****************************
      44. '--------< Config >-----------
      45. '*****************************
      46. Config Rainbow = 1 , Rb0_len = Num_leds , Rb0_port = Portc , Rb0_pin = 3
      47. Config Timer0 = Timer , Prescale = 1024
      48. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      49. '*****************************
      50. '--------< Alias >------------
      51. '*****************************
      52. Rot Alias Farbe(_base)
      53. Gruen Alias Farbe(_base + 1)
      54. Blau Alias Farbe(_base + 2)
      55. Led_1 Alias Portd.5 'run LED
      56. Led_2 Alias Portd.6
      57. Led_3 Alias Portd.7
      58. '*****************************
      59. '------< funktion >-----------
      60. '*****************************
      61. '*****************************
      62. '----< Timer/Interrupt>-------
      63. '*****************************
      64. Timer0 = Start_timer0
      65. On Timer0 Timer_0 'timer 0 überlauf --> unterprogramm timer_0
      66. Enable Timer0
      67. Enable Interrupts
      68. Rb_selectchannel 0
      69. #if Modus = 1
      70. Do
      71. Pos_z = Rnd(num_leds)
      72. Rot = 200
      73. Gruen = 200
      74. Blau = 200
      75. For Dimmen = 200 To 0 Step -20
      76. Rot = Dimmen
      77. Gruen = Dimmen
      78. Blau = Dimmen
      79. Rb_setcolor Pos_z , Farbe() ' Farbe in den Farbspeicher schreiben
      80. Rb_send
      81. Next
      82. Loop
      83. End
      84. #endif
      85. #if Modus = 2
      86. Do
      87. Pos_z = Rnd(num_leds)
      88. Rot = 200
      89. Gruen = 200
      90. Blau = 200
      91. While Merker < 7
      92. If Rot > 10 Then
      93. Rot = Dimmen - Rnd(10)
      94. Else
      95. Merker.0 = 1
      96. Rot = 0
      97. End If
      98. If Gruen > 10 Then
      99. Gruen = Dimmen - Rnd(10)
      100. Else
      101. Merker.1 = 1
      102. Gruen = 0
      103. End If
      104. If Blau > 10 Then
      105. Blau = Dimmen - Rnd(10)
      106. Else
      107. Merker.2 = 1
      108. Blau = 0
      109. End If
      110. Rb_setcolor Pos_z , Farbe() ' Farbe in den Farbspeicher schreiben
      111. Rb_send
      112. Dimmen = Dimmen - 5
      113. Wend
      114. For Z = 0 To 2
      115. Merker.z = 0
      116. Next
      117. Loop
      118. End
      119. #endif
      120. #if Modus = 3
      121. Farb_wert = 20
      122. For Pos = 1 To Leds
      123. If Pos < 5 Then
      124. Farb_wert = Farb_wert * 2
      125. Rot = Farb_wert
      126. End If
      127. If Pos = 5 Or Pos = 6 Or Pos = 7 Then Rot = 255
      128. If Pos > 7 Then
      129. Farb_wert = Farb_wert / 2
      130. Rot = Farb_wert
      131. End If
      132. Gruen = 0
      133. Blau = 0
      134. Rb_setcolor Pos , Farbe() ' Farbe in den Farbspeicher schreiben ###################
      135. Rb_send
      136. Next
      137. Start Adc
      138. Do
      139. 'Adc0 = Getadc(0) * 10.0048828125 'poti
      140. Adc0 = 50 'kein poti
      141. If Zaehler_uhr > Adc0 Then
      142. Zaehler_uhr = 0
      143. If Richtung = 0 Then
      144. Incr Zaehler
      145. Rb_shiftright 0 , Num_leds 'shift to the right all leds except the last one
      146. If Zaehler = Num_leds_x Then Richtung = 1
      147. End If
      148. If Richtung = 1 Then
      149. Decr Zaehler
      150. Rb_shiftleft 0 , Num_leds 'shift to the right all leds except the last one
      151. If Zaehler = 0 Then Richtung = 0
      152. End If
      153. Rb_send
      154. End If
      155. Loop
      156. End
      157. Hintergrundfarbe:
      158. Rot = 0 '200
      159. Gruen = 0 '200
      160. Blau = 0 '200
      161. Return
      162. Sollfarbe:
      163. Rot = 255
      164. Gruen = 0
      165. Blau = 0
      166. Return
      167. #endif
      168. #if Modus = 4 'code R2D2 Bastler
      169. Do
      170. For Z = 0 To Num_leds_1
      171. Select Case Pos
      172. Case 0 To 255
      173. Rot = Pos '0-255
      174. Gruen = 255 - Pos '255-0
      175. Blau = 0
      176. Case 256 To 511
      177. A = Pos - 256 '0-255
      178. Rot = 255 - A '255-0
      179. Gruen = 0
      180. Blau = A '0-255
      181. Case 512 To 767
      182. Rot = 0
      183. Gruen = Pos - 512 '0-255
      184. Blau = 255 - Gruen '255-0
      185. Case Is > 767
      186. Pos = Pos - 768
      187. End Select
      188. Rb_setcolor Z , Farbe(1)
      189. Pos = Pos + Alignment 'Farbspektrum für die nächste LED verschieben
      190. Next
      191. Pos = Pos - 7 'hier Richtung und Geschwindigkeit einstellen
      192. Rb_send
      193. Waitms 10
      194. Loop
      195. #endif
      196. #if Modus = 5
      197. Rot = 0 ' define a color '200
      198. Gruen = 0 '200
      199. Blau = 255
      200. Rb_setcolor 0 , Farbe(1) ' update led on the left
      201. Rb_setcolor Num_leds -1 , Farbe(1) ' update led on the right
      202. Rb_send
      203. Do
      204. For A = 1 To Num_leds_2 - 1
      205. Rb_shiftright 0 , Num_leds_2 'shift to the right
      206. Rb_shiftleft Num_leds_2 , Num_leds_2 'shift to the left all leds except the last one
      207. Waitms 100
      208. Rb_send
      209. Next
      210. For A = 1 To Num_leds_2 - 1
      211. Rb_shiftleft 0 , Num_leds_2 'shift to the left all leds except the last one
      212. Rb_shiftright Num_leds_2 , Num_leds_2 'shift to the right
      213. Waitms 100
      214. Rb_send
      215. Next
      216. Waitms 500 'wait a bit
      217. Loop
      218. #endif
      219. '**************************
      220. '-------< Timer >----------
      221. '**************************
      222. Timer_0: '1 ms
      223. Timer0 = Start_timer0
      224. Incr Zaehler_uhr
      225. If Zaehler_uhr = 1000 Then
      226. Zaehler_uhr = 0
      227. Toggle Led_1
      228. End If
      229. Return
      Alles anzeigen



      Gruß
      businski
    • tschoeatsch schrieb:

      Ist dann das Sperren der interrupts in der neuen rainbow-lib 'verloren' gegangen?

      Michael schrieb:

      businski schrieb:

      Bin jetzt soweit das der "Fehler" bei der Version 2.0.8.0 vom Timer kommt, also ohne Timer0
      alles Okay, mit kommt nur Müll.
      ich kann das Problem hier nachvollziehen.Ohne Timer funktioniert es.

      Workaround:
      jeweil vor Rb_send ein Disable Interrupts und nach Rb_send ein Enable Interrupts.

      Hallo zusammen.

      Ja, da gab es wohl Änderungen die nicht von mir kommen. a_20_e8d7189d

      Vorher war es so, das die Interrupts für die gesamte Zeit des abzusetzenden Datenstrom gesperrt waren, jetzt nur für den Moment, in dem Daten für eine LED abgesetzt werden. Wer jetzt ein bisschen darüber nachdenkt, wird erkennen, das das sch..lecht ist.

      Wer mag, kann die Änderung wieder rückgängig machen, und so geht's:

      Es gibt in der lib bei etwa Zeile 94 dies hier:

      Quellcode

      1. In R15,SREG
      2. CLI
      und bei 144

      Quellcode

      1. Out SREG,R15
      Beides mit einem Semikolon auskommentieren.

      Die oben genannten Zeilen wurden an folgenden Stellen auskommentiert und müssen wieder aktiviert werden.
      RB_Send ~Zeile 174 und 186,
      RB_CLEARStripe ~Zeile 323 und 338
      RB_FillStripe: ~Zeile 408 und 427


      Dann sollte alles wieder passen.

      Gruß
      Galahat