Die Firmware ist in Bascom-Basic geschrieben und enthält simple Software-PWM Routinen.
$regfile = "attiny2313.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 1 On Timer0 Timer0_isr Ddrb = &B00011111 Ddrd = &B00110000 'Sternegruppen Gruppe1 Alias Portb.0 Gruppe2 Alias Portb.1 Gruppe3 Alias Portb.2 Gruppe4 Alias Portb.3 Gruppe5 Alias Portb.4 'Plastikfiguren Sonne Alias Portd.4 Mond Alias Portd.5 Dim Zaehler As Byte , Pwmvar(5) As Byte , I As Byte Dim Group As Byte , Pwm_sonne As Byte , Pwm_mond As Byte 'Grenzwerte fuer die Schleifen Const Pwm_min = 0 Const Pwm_low = 25 Const Pwm_high = 50 Const Pwm_max = 150 Enable Timer0 Enable Interrupts 'Plastikfiguren auf festen Wert Pwm_sonne = 200 Pwm_mond = 100 For I = Pwm_min To Pwm_low Pwmvar(1) = I Waitms 1 Next I Main: Do Group = 1 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 2 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 2 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 3 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 4 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 5 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(1) = Pwm_low - I Waitms 1 Next I Loop End Timer0_isr: Zaehler = Zaehler + 1 If Pwmvar(1) > Zaehler Then Gruppe1 = 1 Else Gruppe1 = 0 End If If Pwmvar(2) > Zaehler Then Gruppe2 = 1 Else Gruppe2 = 0 End If If Pwmvar(3) > Zaehler Then Gruppe3 = 1 Else Gruppe3 = 0 End If If Pwmvar(4) > Zaehler Then Gruppe4 = 1 Else Gruppe4 = 0 End If If Pwmvar(5) > Zaehler Then Gruppe5 = 1 Else Gruppe5 = 0 End If If Pwm_sonne > Zaehler Then Sonne = 1 Else Sonne = 0 End If If Pwm_mond > Zaehler Then Mond = 1 Else Mond = 0 End If Return
Video vom Sternenhimmeleffekt bei Dunkelheit