'=============================================================================== 'Nachbrennersimulation für Modellflugzeuge (Empfänger Futaba R6008HS) 'RC Signal Eingang an Pin 6 (PB1) 'Die Variablen Rc_select1 und 2 bestimmen die Schaltpunkte (Knüppelstellung) 'Werte zwischen 100 und 200 entsprechen dem kompletten Knüppelweg 'Der Wert 150 entspricht dabei ca. Mittelstellung, der Wert 200 ca. Vollausschlag 'Wenn "Clear Up" --> LED an Pin 5 (PB0) über Vorwiderstand an GND '[wähle "clear up", wenn Konstantstromquelle MR16 1*1W 320~350mA verwendet wird] 'Wenn "Clear Down" --> LED an Pin 5 (PB0) über Vorwiderstand an VCC 'Made by Robert (www.roberts-r2d2-bau.de) 'Bascom Version 2.0.7.5. '=============================================================================== $regfile = "attiny45.dat" $crystal = 8000000 $hwstack = 40 $swstack = 20 $framesize = 20 '------------------------------------------------------------------------------------------------------------- 'Variablen definieren '------------------------------------------------------------------------------------------------------------- Dim A As Bit Dim C As Integer Dim B As Byte Dim D As Word Dim Rc As Word Dim Rc_select1 As Word Dim Rc_select2 As Word '------------------------------------------------------------------------------------------------------------- 'Ein- und Ausgang festlegen '------------------------------------------------------------------------------------------------------------- Config Portb.1 = Input 'Pin 6 = RC Eingang Config Portb.0 = Output 'Pin 5 = LED Ausgang '------------------------------------------------------------------------------------------------------------- 'Timer auf PWM einstellen (wird fürs Faden und Dimmen/Flackern benötigt) '------------------------------------------------------------------------------------------------------------- Config Timer0 = Pwm , Prescale = 64 , Compare A Pwm = Clear Up '------------------------------------------------------------------------------------------------------------- 'Einigen Variablen Werte zuweisen '------------------------------------------------------------------------------------------------------------- A = 0 'Variable A zu Beginn auf 0 setzen Rc_select1 = 150 'ersten Schaltpunkt eingeben Rc_select2 = 185 'zweiten Schaltpunkt eingeben '------------------------------------------------------------------------------------------------------------- 'Hauptprogramm starten '------------------------------------------------------------------------------------------------------------- Do Rc = 0 'Variable Rc auf 0 setzen Pulsein Rc , Pinb , 1 , 1 'Zählung der Systemtakte, solange der Empfänger Pegel auf 1 ist '------------------------------------------------------------------------------------------------------------- 'Nachbrenner aus '------------------------------------------------------------------------------------------------------------- While Rc <= Rc_select1 'Solange der Steuerknüppel zu weit hinten ist... Pwm0a = 0 '... bleibt der Nachbrenner aus... Pulsein Rc , Pinb , 1 , 1 '... und eine neue Zählung beginnt Wend '------------------------------------------------------------------------------------------------------------- 'Nachbrenner Startphase (Effekt: Hochfaden und scheinbar unregelmäßiges Flakern beim Zünden des Nachbrenners) '------------------------------------------------------------------------------------------------------------- While Rc > Rc_select1 And A = 0 'Wenn der Steuerknüppel eine bestimmte Position erreicht hat, wird die Startphase eingeleitet For B = 5 To 80 'Hochfaden der LED ... C = B '... bis der Wert 100 (80*80/64) erreicht ist C = C * C C = C / 64 Pwm0a = C Waitms 7 'Zeiteinstellung pro Durchlauf für das Hochfaden Next B Pwm0a = 5 'Beginn des Flackerns Waitms 200 Pwm0a = 150 Waitms 100 Pwm0a = 5 Waitms 150 Pwm0a = 200 Waitms 50 Pwm0a = 20 Waitms 50 Pwm0a = 210 Waitms 150 Pwm0a = 50 Waitms 100 'Ende des Flackerns A = 1 'Am Ende der Startphase wird die Variable A auf 1 gesetzt Wend '------------------------------------------------------------------------------------------------------------- 'Nachbrenner Stufe 1 (Effekt: Flackernde Nachbrennerflamme) '------------------------------------------------------------------------------------------------------------- While Rc > Rc_select1 And Rc < Rc_select2 And A = 1 'Wenn die Startphase abgeschlossen ist (Variable A=1) und der Steuerknüppel noch immer vorne ist, wird die Nachbrenner Stufe 1 eingeschaltet Pwm0a = 255 'LED auf hell schalten D = Rnd(120) ' Zufällige Hell-Zeit berechnen D = D + 40 ' mind. 40ms hell; max 40ms + 120ms hell Waitms D ' Warten bis Hell-Zeit vorbei ist Pwm0a = 100 'LED auf dunkel schalten D = Rnd(8) ' Zufällige Dunkel-Zeit berechnen D = D + 8 ' mind. 8ms dunkel; max 8ms + 8ms dunkel Waitms D ' Warten bis Dunkel-Zeit vorbei ist Pwm0a = 255 'LED auf hell schalten D = Rnd(100) ' Zufällige Hell-Zeit berechnen D = D + 100 ' mind. 40ms hell; max 40ms + 120ms hell Waitms D ' Warten bis Hell-Zeit vorbei ist Pwm0a = 100 'LED auf dunkel schalten D = Rnd(4) ' Zufällige Dunkel-Zeit berechnen D = D + 1 ' mind. 8ms dunkel; max 8ms + 8ms dunkel Waitms D ' Warten bis Dunkel-Zeit vorbei ist Pulsein Rc , Pinb , 1 , 1 'zwischendurch wird die Stellung des Steuerknüppels erneut überprüft Wend '------------------------------------------------------------------------------------------------------------- 'Nachbrenner Stufe 2 (Effekt: Schnellere flackernde Nachbrennerflamme) '------------------------------------------------------------------------------------------------------------- While Rc >= Rc_select2 And A = 1 'Wird der Steuerknüppel noch weiter nach vorne genommen, wird die Nachbrenner Stufe 2 eingeschaltet Pwm0a = 255 'LED auf hell schalten D = Rnd(60) ' Zufällige Hell-Zeit berechnen D = D + 20 ' mind. 40ms hell; max 40ms + 120ms hell Waitms D ' Warten bis Hell-Zeit vorbei ist Pwm0a = 180 'LED auf dunkel schalten D = Rnd(3) ' Zufällige Dunkel-Zeit berechnen D = D + 1 ' mind. 1ms dunkel; max 1ms + 3ms dunkel Waitms D ' Warten bis Dunkel-Zeit vorbei ist Pulsein Rc , Pinb , 1 , 1 'zwischendurch wird die Stellung des Steuerknüppels erneut überprüft Wend '------------------------------------------------------------------------------------------------------------- 'Nachbrenner Endphase (Effekt: Scheinbar unregelmäßiges Flackern und Ausfaden) '------------------------------------------------------------------------------------------------------------- While Rc <= Rc_select1 And A = 1 'Wird der Steuerknüppel nun zurück genommen, wird die Endphase eingeleitet Pwm0a = 50 'Beginn des Flackerns Waitms 250 Pwm0a = 220 Waitms 200 Pwm0a = 20 Waitms 150 Pwm0a = 170 Waitms 100 Pwm0a = 10 Waitms 50 Pwm0a = 130 Waitms 200 Pwm0a = 5 Waitms 150 Pwm0a = 110 Waitms 350 'Ende des Flackerns For B = 80 To 5 Step -1 'Runterfaden der LED ... C = B '... bis der Wert <1 (5*5/64) erreicht ist C = C * C C = C / 64 Pwm0a = C Waitms 10 'Zeiteinstellung pro Durchlauf für des Runterfaden Next B A = 0 'Am Schluß der Endphase wird die Variable A wieder auf 0 gesetzt Wend Loop End