Schweißblitzer "Geselle" mit Attiny13 von Tschoeatsch 5x Led. Beim aufräumen gefunden.

    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!

    • Schweißblitzer "Geselle" mit Attiny13 von Tschoeatsch 5x Led. Beim aufräumen gefunden.

      BASCOM-Quellcode

      1. 'Schweißblitzer von tschoeatsch
      2. 'Gesellenversion
      3. 'Bascom-Version 2.0.7.9
      4. $regfile = "attiny13.dat"
      5. $crystal = 1200000
      6. $hwstack = 20
      7. $swstack = 10
      8. $framesize = 24
      9. Config Portb = Output 'alles auf Ausgang setzen
      10. Dim Geraet1 As Byte 'Schweißgerät1
      11. Dim Geraet2 As Byte
      12. Dim Geraet3 As Byte
      13. Dim Geraet4 As Byte
      14. Dim Geraet5 As Byte
      15. Dim Led As Byte 'enthält Bitmuster der einzelnen Geräte
      16. Led_1 Alias Led.0
      17. Led_2 Alias Led.1
      18. Led_3 Alias Led.2
      19. Led_4 Alias Led.3
      20. Led_5 Alias Led.4
      21. Dim Led_0 As Byte
      22. Dim Blitze As Byte
      23. Config Timer0 = Timer , Prescale = 256
      24. Const Timer0reload = 40
      25. On Timer0 Isrtimer0
      26. Enable Timer0
      27. Enable Interrupts
      28. Do
      29. If Geraet1 = 0 Then 'für jedes Gerät wird eine zufällig lange Ein- bzw. Ausschaltzeit festgelegt
      30. Geraet1 = Rnd(255) 'Laufzeit bzw Pausenzeit für das Gerät laden
      31. Toggle Led_1 'Laufzeit und Pausenzeit umschalten
      32. End If
      33. If Geraet2 = 0 Then
      34. Geraet2 = Rnd(255)
      35. Toggle Led_2
      36. End If
      37. If Geraet3 = 0 Then
      38. Geraet3 = Rnd(255)
      39. Toggle Led_3
      40. End If
      41. If Geraet4 = 0 Then
      42. Geraet4 = Rnd(255)
      43. Toggle Led_4
      44. End If
      45. If Geraet5 = 0 Then
      46. Geraet5 = Rnd(255)
      47. Toggle Led_5
      48. End If
      49. Decr Geraet1 'die Zeit läuft ab
      50. Decr Geraet2
      51. Decr Geraet3
      52. Decr Geraet4
      53. Decr Geraet5
      54. Waitms 100 'Einheit der Zeit max.Einschaltzeit bzw Ausschaltzeit=256*100msec=25,6Sekunden
      55. Loop
      56. End
      57. Isrtimer0: 'wird alle 30msec aufgerufen
      58. Load Timer0 , Timer0reload 'timer0 laden
      59. Blitze = Lookup(rnd(20) , Daten ) 'Hilfsvariable um ein Blitzen (Zucken) der Schweißlichts zu erzeugen
      60. Led_0 = Led And Blitze 'Überlagerung mit der Einschaltzeit des Gerätes
      61. Portb = Led_0 'Ausgabe an die portpins 1=Led an
      62. Return
      63. Daten:
      64. Data &B1111_1111
      65. Data &B1111_0101
      66. Data &B1111_1100
      67. Data &B1111_0111
      68. Data &B1110_0111
      69. Data &B1101_1110
      70. Data &B1111_1101
      71. Data &B1110_1011
      72. Data &B1111_1111
      73. Data &B1111_0111
      74. Data &B1110_1111
      75. Data &B1101_1110
      76. Data &B1111_1110
      77. Data &B1111_0111
      78. Data &B1101_1011
      79. Data &B1101_1111
      80. Data &B1111_1011
      81. Data &B1111_1101
      82. Data &B1111_0111
      83. Data &B1110_1011
      Alles anzeigen
    • Hallo ftelektro, Hallo tschoeatsch,

      würde gerne das Programm etwas abändern um eine Flammensimulation zu machen,
      natürlich wieder für die Modellbahn.
      Habe von den Digispark Modulen einige.
      Habe mal den Schweißblitzer etwas abgeändert, aber leider hat das nicht so richtig was mit Flammensimulation zu tun.
      Hier der von mir abgeänderte Code.

      Jemand nee Idee wie man das besser machen kann ?

      Gruß Thomas

      Quellcode

      1. 'Schweißblitzer
      2. 'Gesellenversion
      3. $regfile = "attiny85.dat"
      4. $crystal = 1200000
      5. $hwstack = 32
      6. $swstack = 0
      7. $framesize = 0
      8. Config Portb = Output 'alles auf Ausgang setzen
      9. Dim Geraet1 As Byte 'Schweißgerät1
      10. Dim Geraet2 As Byte
      11. Dim Geraet3 As Byte
      12. Dim Geraet4 As Byte
      13. Dim Geraet5 As Byte
      14. Dim Led As Byte 'enthält Bitmuster der einzelnen Geräte
      15. Led_1 Alias Led.0
      16. Led_2 Alias Led.1
      17. Led_3 Alias Led.2
      18. Dim Led_0 As Byte
      19. Dim Blitze As Byte
      20. Dim Zufall As Byte
      21. Config Timer0 = Timer , Prescale = 1024
      22. Const Timer0reload = 20
      23. On Timer0 Isrtimer0
      24. Enable Timer0
      25. Enable Interrupts
      26. Do
      27. If Geraet1 = 0 Then 'für jedes Gerät wird eine zufällig lange Ein- bzw. Ausschaltzeit festgelegt
      28. Geraet1 = Rnd(255) 'Laufzeit bzw Pausenzeit für das Gerät laden
      29. Toggle Led_1 'Laufzeit und Pausenzeit umschalten
      30. End If
      31. If Geraet2 = 0 Then
      32. Geraet2 = Rnd(255)
      33. Toggle Led_2
      34. End If
      35. If Geraet3 = 0 Then
      36. Geraet3 = Rnd(255)
      37. Toggle Led_3
      38. End If
      39. Decr Geraet1 'die Zeit läuft ab
      40. Decr Geraet2
      41. Decr Geraet3
      42. Waitms 2 'Einheit der Zeit max.Einschaltzeit bzw Ausschaltzeit=256*100msec=25,6Sekunden
      43. Loop
      44. End
      45. Isrtimer0: 'wird alle 30msec aufgerufen
      46. Load Timer0 , Timer0reload
      47. Zufall = Rnd(20) 'timer0 laden
      48. Blitze = Lookup(zufall , Daten ) 'Hilfsvariable um ein Blitzen (Zucken) der Schweißlichts zu erzeugen
      49. Led_0 = Led And Blitze 'Überlagerung mit der Einschaltzeit des Gerätes
      50. Portb = Led_0 'Ausgabe an die portpins 1=Led an
      51. Return
      52. Daten:
      53. Data &B1111_1111
      54. Data &B1111_0101
      55. Data &B1111_1100
      56. Data &B1111_0111
      57. Data &B1110_0111
      58. Data &B1101_1110
      59. Data &B1111_1101
      60. Data &B1110_1011
      61. Data &B1111_1111
      62. Data &B1111_0111
      63. Data &B1110_1111
      64. Data &B1101_1110
      65. Data &B1111_1110
      66. Data &B1111_0111
      67. Data &B1101_1011
      68. Data &B1101_1111
      69. Data &B1111_1011
      70. Data &B1111_1101
      71. Data &B1111_0111
      72. Data &B1110_1011
      Alles anzeigen
    • Ich würde es mal mit mehreren soft-Pwms probieren und die Leds mit diesen Pwm zufällig hoch und runter dimmen. Evtl auch weiße und orange Leds verwenden. Eine Flamme ist ja rötlicher als ein Schweißlichtbogen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch, djmsc

      wollte eigentlich 2 orange und 1 rote led nehmen.
      Soft PWM ist nicht das Problem, habe ich auch bei meinem Andreaskreuz genommen.
      Das zufällige kriege ich nicht hin.

      Hier der Code für das Andreaskreuz....

      Gruß Thomas

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.0 = Output
      7. Config Portb.1 = Output
      8. Config Portb.2 = Output
      9. Config Portb.3 = Output
      10. Led1_pin Alias Portb.0
      11. Led2_pin Alias Portb.1
      12. Led3_pin Alias Portb.2
      13. Led4_pin Alias Portb.3
      14. Const Fade_up = 1
      15. Const Fade_down = 1
      16. Dim Led1 As Byte
      17. Dim Led2 As Byte
      18. 'Auflösung 0 - 49
      19. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      20. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      21. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      22. Enable Timer0 'Timer aktivieren
      23. Start Timer0 'Timer starten
      24. Timer0 = 100 'Timer vorladen
      25. Enable Interrupts 'Interrupt aktivieren
      26. Portb = 0
      27. '*** Hauptschleife *************************************************************
      28. Do
      29. For Led1 = 80 To 0 Step -1 'abdimmen
      30. Waitms Fade_down
      31. Next Led1
      32. For Led1 = 0 To 80 Step 1 'aufdimmen
      33. Waitms Fade_up
      34. Next Led1
      35. For Led2 = 80 To 0 Step -1 'abdimmen
      36. Waitms Fade_down
      37. Next Led2
      38. For Led2 = 0 To 80 Step 1 'aufdimmen
      39. Waitms Fade_up
      40. Next Led2
      41. Loop
      42. 'Ende Hauptschleife
      43. End
      44. '*** Subs **********************************************************************
      45. Timerroutine: 'Beginn Subroutine
      46. Timer0 = 120
      47. Incr Timerzaehler
      48. If Timerzaehler = 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      49. If Timerzaehler < Led1 Then Led1_pin = 0 Else Led1_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      50. If Timerzaehler < Led2 Then Led2_pin = 0 Else Led2_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      51. If Timerzaehler < Led1 Then Led3_pin = 0 Else Led3_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      52. If Timerzaehler < Led2 Then Led4_pin = 0 Else Led4_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      53. Return
      Alles anzeigen
    • Du würfelst die Helligkeit, ist die aktuelle höher, dimmst du runter, ist die aktuelle niedriger, dimmst du hoch zur neuen.. So gibt es ein unregelmäßiges Auf und Ab mit der Helligkeit. Natürlich musst du beim Würfeln die Grenzen deiner Pwm einhalten, bei 50 Stufen halt dann rnd(50). Vielleicht wirkt es auch gut, wenn eine Led nur von 0 zu einer gewürfelten Helligkeit hoch dimmt, und dann wieder aus geht, dann wieder hoch dimmen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Tschoetsch,

      habe jetzt mal mit 2 LED auf und abdimmen, aber wie meinst du das mit
      dem unregelmäßem ?

      Gruß Thomas

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.1 = Output
      7. Config Portb.2 = Output
      8. Led1_pin Alias Portb.1
      9. Led2_pin Alias Portb.2
      10. Const Fade_up = 1
      11. Const Fade_down = 1
      12. Dim Led1 As Byte
      13. Dim Led2 As Byte
      14. 'Auflösung 0 - 49
      15. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      16. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      17. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      18. Enable Timer0 'Timer aktivieren
      19. Start Timer0 'Timer starten
      20. Timer0 = 100 'Timer vorladen
      21. Enable Interrupts 'Interrupt aktivieren
      22. Portb = 0
      23. '*** Hauptschleife *************************************************************
      24. Do
      25. For Led1 = 80 To 0 Step -1 'abdimmen
      26. Waitms Fade_down
      27. Next Led1
      28. For Led1 = 0 To 80 Step 1 'aufdimmen
      29. Waitms Fade_up
      30. Next Led1
      31. For Led2 = 80 To 0 Step -1 'abdimmen
      32. Waitms Fade_down
      33. Next Led2
      34. For Led2 = 0 To 80 Step 1 'aufdimmen
      35. Waitms Fade_up
      36. Next Led2
      37. Loop 'Ende Hauptschleife
      38. End
      39. '*** Subs **********************************************************************
      40. Timerroutine: 'Beginn Subroutine
      41. Timer0 = 120
      42. Incr Timerzaehler
      43. If Timerzaehler = 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      44. If Timerzaehler < Led1 Then Led1_pin = 0 Else Led1_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      45. If Timerzaehler < Led2 Then Led2_pin = 0 Else Led2_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      46. Return
      Alles anzeigen
    • Ne, so meinte ich es nicht. Ich hab' aber eine neue Idee
      incr led1
      if led1>= max_hell1 then
      led1 = rnd(20)
      max_hell1 = led1 + rnd(30)
      (wenn das nicht geht, auf 2 Zeien verteilen, max_hell1= rnd(30: max_hell1= max_hell+led1)
      end if
      das entsprechend mit den anderen leds auch und noch ein kleines waitms in der do loop.
      Jetzt dimmen die Leds bis zur max Helligkeit hoch, die jedes mal neu gewürfelt wird, wenn sie erreicht wird. Dann wird auch die Anfangshelligkeit gewürfelt und die Leds dimmen ab da wieder hoch.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Tschoetsch,

      meinst du so ?

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.1 = Output
      7. Config Portb.2 = Output
      8. Led1_pin Alias Portb.1
      9. Led2_pin Alias Portb.2
      10. Const Fade_up = 1
      11. Const Fade_down = 1
      12. Dim max_hell1 As Byte
      13. Dim max_hell2 As Byte
      14. Dim Led1 As Byte
      15. Dim Led2 As Byte
      16. 'Auflösung 0 - 49
      17. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      18. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      19. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      20. Enable Timer0 'Timer aktivieren
      21. Start Timer0 'Timer starten
      22. Timer0 = 10 'Timer vorladen
      23. Enable Interrupts 'Interrupt aktivieren
      24. Portb = 0
      25. '*** Hauptschleife *************************************************************
      26. Do
      27. incr led1
      28. if led1>= max_hell1 then
      29. led1 = rnd(20)
      30. max_hell1 = led1 + rnd(30)
      31. End if
      32. incr led2
      33. if led2>= max_hell2 then
      34. led2 = rnd(20)
      35. max_hell2 = led2 + rnd(30)
      36. End if
      37. Loop 'Ende Hauptschleife
      38. End
      39. '*** Subs **********************************************************************
      40. Timerroutine: 'Beginn Subroutine
      41. Timer0 = 120
      42. Incr Timerzaehler
      43. If Timerzaehler = 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      44. If Timerzaehler < Led1 Then Led1_pin = 0 Else Led1_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      45. If Timerzaehler < Led2 Then Led2_pin = 0 Else Led2_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      46. Return
      Alles anzeigen
    • Ja, nur noch ein waitms xx in die Hauptschleife, damit die bisschen eingebremst wird.
      Sind deine Leds von Vcc über Vorwiderstand zum pin vom AVR geschaltet? Dann müsste es passen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Dann ist ein hoher Wert für Led1 eine niedrigere Helligkeit. Dann passt mein main nicht, das setzt einen hohen Wert für eine hohe Helligkeit voraus. Wenn du bei deiner timer-isr das Setzen und Resetten des pins vertauscht, dann müsste es passen
      if timerzaehler<led1 then led1_pin=1, else...
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch,

      habe gestern noch mal probiert, und habe den incr in decr getauscht und
      sieht eigentlich gut aus.
      Was ich da gemacht habe weiß ich nur nicht....... ?(

      Gruß Thomas

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.1 = Output
      7. Config Portb.2 = Output
      8. Led1_pin Alias Portb.1
      9. Led2_pin Alias Portb.2
      10. Const Fade_up = 1
      11. Const Fade_down = 1
      12. Dim max_hell1 As Byte
      13. Dim max_hell2 As Byte
      14. Dim Led1 As Byte
      15. Dim Led2 As Byte
      16. 'Auflösung 0 - 49
      17. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      18. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      19. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      20. Enable Timer0 'Timer aktivieren
      21. Start Timer0 'Timer starten
      22. Timer0 = 10 'Timer vorladen
      23. Enable Interrupts 'Interrupt aktivieren
      24. Portb = 0
      25. '*** Hauptschleife *************************************************************
      26. Do
      27. incr led1
      28. if led1>= max_hell1 then
      29. led1 = rnd(10)
      30. max_hell1 = led1 + rnd(20)
      31. End if
      32. waitms 1
      33. incr led2
      34. if led2>= max_hell2 then
      35. led2 = rnd(10)
      36. max_hell2 = led2 + rnd(20)
      37. End if
      38. waitms 1
      39. Loop 'Ende Hauptschleife
      40. End
      41. '*** Subs **********************************************************************
      42. Timerroutine: 'Beginn Subroutine
      43. Timer0 = 40
      44. decr Timerzaehler
      45. If Timerzaehler = 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      46. If Timerzaehler < Led1 Then Led1_pin = 0 Else Led1_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      47. If Timerzaehler < Led2 Then Led2_pin = 0 Else Led2_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      48. Return
      Alles anzeigen
    • Jetzt ändere noch Zeile 66, dass der timerzaehler 50 wird, wenn er 0 erreicht. Jetzt zählt er von 256 (=0) runter zu 50, und fängt wieder neu an, macht also 206 Durchläufe statt 50. Das sich an den Leds überhaupt was tut, außer dauerhaft leuchten, wundert mich ein bisschen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch,

      also so.....

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.1 = Output
      7. Config Portb.2 = Output
      8. Led1_pin Alias Portb.1
      9. Led2_pin Alias Portb.2
      10. Const Fade_up = 1
      11. Const Fade_down = 1
      12. Dim max_hell1 As Byte
      13. Dim max_hell2 As Byte
      14. Dim Led1 As Byte
      15. Dim Led2 As Byte
      16. 'Auflösung 0 - 49
      17. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      18. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      19. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      20. Enable Timer0 'Timer aktivieren
      21. Start Timer0 'Timer starten
      22. Timer0 = 10 'Timer vorladen
      23. Enable Interrupts 'Interrupt aktivieren
      24. Portb = 0
      25. '*** Hauptschleife *************************************************************
      26. Do
      27. incr led1
      28. if led1>= max_hell1 then
      29. led1 = rnd(10)
      30. max_hell1 = led1 + rnd(20)
      31. End if
      32. waitms 1
      33. incr led2
      34. if led2>= max_hell2 then
      35. led2 = rnd(10)
      36. max_hell2 = led2 + rnd(20)
      37. End if
      38. waitms 1
      39. Loop 'Ende Hauptschleife
      40. End
      41. '*** Subs **********************************************************************
      42. Timerroutine: 'Beginn Subroutine
      43. Timer0 = 50
      44. decr Timerzaehler
      45. If Timerzaehler = 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      46. If Timerzaehler < Led1 Then Led1_pin = 0 Else Led1_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      47. If Timerzaehler < Led2 Then Led2_pin = 0 Else Led2_pin = 1 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      48. Return
      Alles anzeigen
    • Ne.
      Timer0= Wert setzt den timer0 auf eben diesen Wert. Der timer zählt ab diesen Wert bis 256, damit ist er 'übergelaufen' und die interrupt-Routine 'Timerroutine' wird ausgeführt. Diese Zeile bestimmt also nur, wieoft diese Routine ausgeführt wird.
      Deine Variable 'Timerzaehler' wird bei jedem Aufruf verändert. Das ist die Vergleichsvariable für die PWM. Wenn ein hoher Wert bei der PWM ein längeres Einschalten der Led (höhere Helligkeit) bedeuten soll, dann muss der pin auch lange angeschalten bleiben.
      Zählt 'Timerzaehler' von 0 beginnend hoch bis 50 und dein PWM-Wert Led1 hat den Wert 40 (eher hell), dann muss der pin für 40 Durchläufe eingeschaltet bleiben.
      If Timerzaehler < Led1 Then Led1_pin = 1 Else Led1_pin = 0
      diese Zeile passt dazu, erst wenn timerzaehler den Wert 41 erreicht, dann wird die Led wieder abgeschaltet und bleibt für die nächsten 9 Durchläufe aus.
      die sub müsste dann so aussehen

      BASCOM-Quellcode

      1. '*** Subs **********************************************************************
      2. Timerroutine: 'Beginn Subroutine
      3. Timer0 = 50
      4. incr Timerzaehler
      5. If Timerzaehler >= 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      6. If Timerzaehler < Led1 Then Led1_pin = 1 Else Led1_pin = 0 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      7. If Timerzaehler < Led2 Then Led2_pin = 1 Else Led2_pin = 0 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      8. Return
      Hat jetzt Led1 den Wert 49, dann würde die Led nie aus gehen, weil timerzaehler nie den Wert 49 überschreitet.

      Jetzt mal zur main: mein Gedanke ist, in der Glut entstehen Gase, die sich entzünden. Dabei bläht sich die Gasblase aus und es entsteht dadurch ein heller werdender Feuerschein, der aber dann auch schnell verbrennt und abrupt dunkler wird.
      led1 = rnd(10) das wäre die Anfangshelligkeit, die Glut, in der sich die Gasblase bildet.


      max_hell2 = led2 + rnd(20) hier wird eine Endhelligkeit der Gasblase festgelegt. Kleine Blasen geben weniger Helligkeit, große mehr.
      Und zwischen diesen Anfangs- und Endhelligkeiten wird in der main hoch gedimmt, um dann bei Erreichen der Endhelligkeit wieder bei einer Glut (Anfangshelligkeit) zu beginnen.
      Die Endhelligkeit sollte immer größer als die Anfangshelligkeit sein, deswegen eine Addition eines Werte auf die Anfangshelligkeit. Die Endhelligkeit sollte aber den Wert 49 nicht überschreiten, daher bei der Addition aufpassen.
      Sicherlich wäre eine Mindest-Anfangshelligkeit schöner. Etwa so

      BASCOM-Quellcode

      1. incr led1
      2. if led1>= max_hell1 then
      3. led1 = rnd(10)+5 'kann Werte von 5 bis 14 enthalten
      4. max_hell1 = led1 + 10 'hat Startwert 24
      5. max_hell1 =max_hell1 + rnd(25) 'kann Werte von 24 bis 49 enthalten
      6. End if
      Jetzt gibt es eine Mindest-Anfangshelligkeit und eine Mindest-Endhelligkeit.


      Jetzt kannst du mal zu Testzwecken das waitms mal auf 40 setzen. Das bedeutet, die Helligkeit wird sehr langsam hochgesetzt und du kannst das gut beobachten. Das wäre ein Feuer in Zeitlupe. Aber, dazu muss auch deine Angabe von $crystal passen. Verwendest du sicher nur 1,2 MHz, oder hast du eine 0 zu 12 MHz vergessen?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Thomas1964 schrieb:

      meinst da kann man noch was verbessern ?
      Ich denke schon. Auch mehrere Leds verwenden. Eine rote nur für die Glut, also wenig Endhelligkeit. Vielleicht noch eine orange Led mit einer
      Raum für Notizen

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

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

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

    • Hallo tschoeatsch,

      bekomme folgende Fehler Meldung

      Error : 28 Line : 48 IF THEN expected , in File : \\QNAP\Gemeinsame Dateien\µC Programme\Brandsimulation pwm.bas
      Error : 7 Line : 48 IF THEN expected [END IF in source 48] , in File : \\QNAP\Gemeinsame Dateien\µC Programme\Brandsimulation pwm.bas
      Error : 124 Line : 48 LOOP expected , in File : \\QNAP\Gemeinsame Dateien\µC Programme\Brandsimulation pwm.bas

      Quellcode

      1. $regfile = "attiny85.dat"
      2. $crystal = 1200000
      3. $hwstack = 32
      4. $swstack = 6
      5. $framesize = 6
      6. Config Portb.1 = Output
      7. Config Portb.2 = Output
      8. Led1_pin Alias Portb.1
      9. Led2_pin Alias Portb.2
      10. Const Fade_up = 1
      11. Const Fade_down = 1
      12. Dim max_hell1 As Byte
      13. Dim max_hell2 As Byte
      14. Dim Led1 As Byte
      15. Dim Led2 As Byte
      16. 'Auflösung 0 - 49Dim Timerzaehler As Byte 'Maximalwerte wie LED1
      17. Config Timer0 = Timer , Prescale = 1 'Timer konfigurieren
      18. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
      19. Enable Timer0 'Timer aktivieren
      20. Start Timer0 'Timer starten
      21. Timer0 = 10 'Timer vorladen
      22. Enable Interrupts 'Interrupt aktivieren
      23. Portb = 0
      24. '*** Hauptschleife *************************************************************
      25. Do
      26. incr led1
      27. if led1>= max_hell1 then
      28. led1 = rnd(10)+5 'kann Werte von 5 bis 14 enthalten
      29. max_hell1 = led1 + 10 'hat Startwert 24
      30. max_hell1 =max_hell1 + rnd(25) 'kann Werte von 24 bis 49 enthalten
      31. End if
      32. incr led2
      33. if led2>= max_hell2 then
      34. led2 = rnd(10)+5 'kann Werte von 5 bis 14 enthalten
      35. max_hell2 = led2 + 10 'hat Startwert 24
      36. max_hell2 =max_hell2 + rnd(25) 'kann Werte von 24 bis 49 enthalten
      37. End if
      38. End if
      39. waitms 1
      40. Loop 'Ende Hauptschleife
      41. End
      42. '*** Subs **********************************************************************
      43. Timerroutine: 'Beginn Subroutine
      44. Timer0 = 50
      45. incr Timerzaehler
      46. If Timerzaehler >= 50 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
      47. If Timerzaehler < Led1 Then Led1_pin = 1 Else Led1_pin = 0 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      48. If Timerzaehler < Led2 Then Led2_pin = 1 Else Led2_pin = 0 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
      49. Return
      Alles anzeigen