1. '============================================================
  2. '
  3. ' ************************************
  4. ' *** ***
  5. ' *** Drehlicht 18.05.2014 ***
  6. ' *** ***
  7. ' ************************************
  8. '
  9. 'name : Drehlicht.bas
  10. 'purpose : Drehlicht mit 4 LEDs
  11. 'µC : ATtiny13
  12. '
  13. '============================================================
  14. '
  15.  
  16. $regfile = "attiny13.dat"
  17. $crystal = 300000
  18. $hwstack = 20
  19. $swstack = 20
  20. $framesize = 12
  21.  
  22.  
  23. Config Portb.0 = Output
  24. Config Portb.1 = Output
  25. Config Portb.2 = Output
  26. Config Portb.3 = Output
  27.  
  28. Led1_pin Alias Portb.0
  29. Led2_pin Alias Portb.1
  30. Led3_pin Alias Portb.2
  31. Led4_pin Alias Portb.3
  32.  
  33. Const Fade_up = 3
  34. Const Fade_down = 3
  35. Const Hold = 3
  36. Const Pause = 3
  37.  
  38. Dim Led1 As Byte
  39. Dim Led2 As Byte
  40. Dim Led3 As Byte
  41. Dim Led4 As Byte
  42. 'Auflösung 0 - 49
  43. Dim Timerzaehler As Byte 'Maximalwerte wie LED1
  44.  
  45.  
  46. Config Timer0 = Timer , Prescale = 8 'Timer konfigurieren
  47. On Timer0 Timerroutine 'Timerinterrupt Subroutine zuweisen
  48. Enable Timer0 'Timer aktivieren
  49. Start Timer0 'Timer starten
  50. Timer0 = 205 'Timer vorladen
  51.  
  52. Enable Interrupts 'Interrupt aktivieren
  53. Portb = 0
  54.  
  55. '*** Hauptschleife *************************************************************
  56.  
  57. Do
  58.  
  59.  
  60. For Led1 = 0 To 49
  61. If Led4 < 21 Then 'Werte begrenzen um Timerüberläufe abzufangen
  62. If Led4 > 0 Then Decr Led4. 'Werte begrenzen um Timerüberläufe abzufangen, DED4 weiter abdimmen
  63. End If
  64. Waitms Fade_up 'aufdimmen
  65. Next Led1
  66.  
  67. Waitms Hold 'halten
  68.  
  69. For Led1 = 49 To 20 Step -1 'abdimmen
  70. Waitms Fade_down
  71. Next Led1
  72. Waitms Pause 'Pause
  73. '======================================
  74. For Led2 = 0 To 49
  75. If Led1 < 21 Then
  76. If Led1 > 0 Then Decr Led1.
  77. End If
  78. Waitms Fade_up
  79. Next Led2
  80.  
  81. Waitms Hold
  82.  
  83. For Led2 = 49 To 20 Step -1
  84. Waitms Fade_down
  85. Next Led2
  86. Waitms Pause
  87. '======================================
  88. For Led3 = 0 To 49
  89. If Led2 < 21 Then
  90. If Led2 > 0 Then Decr Led2.
  91. End If
  92. Waitms Fade_up
  93. Next Led3
  94.  
  95. Waitms Hold
  96.  
  97. For Led3 = 49 To 20 Step -1
  98. Waitms Fade_down
  99. Next Led3
  100. Waitms Pause
  101. '======================================
  102. For Led4 = 0 To 49
  103. If Led3 < 21 Then
  104. If Led3 > 0 Then Decr Led3.
  105. End If
  106. Waitms Fade_up
  107. Next Led4
  108.  
  109. Waitms Hold
  110.  
  111. For Led4 = 49 To 20 Step -1
  112. Waitms Fade_down
  113. Next Led4
  114. Waitms Pause
  115.  
  116.  
  117.  
  118. Loop
  119.  
  120. 'Ende Hauptschleife
  121. End
  122.  
  123.  
  124. '*** Subs **********************************************************************
  125. Timerroutine: 'Beginn Subroutine
  126. Timer0 = 205
  127. Incr Timerzaehler
  128. If Timerzaehler = 49 Then Timerzaehler = 0 'Timerzaehler auf LED-Auflösung begrenzen
  129. If Timerzaehler < Led1 Then Led1_pin = 1 Else Led1_pin = 0 'Vergleich Timerzähler mit LED-Wert -> LED Ein- od. Ausschalten
  130. If Timerzaehler < Led2 Then Led2_pin = 1 Else Led2_pin = 0
  131. If Timerzaehler < Led3 Then Led3_pin = 1 Else Led3_pin = 0
  132. If Timerzaehler < Led4 Then Led4_pin = 1 Else Led4_pin = 0
  133. Return