Bei den älteren Einsatzfahrzeugen kommen jedoch rotierende Blaulichter zum Einsatz, die einen pulsierenden Lichteindruck erzeugen. So etwas gab es für den Modellbau bisher nicht.
So entstand also diese kleine Software für Atmel 12 Microcontroller.
Sie benutzt Pulsweitenmodulation, um ein Rotierendes Blaulicht nachzuahmen.
Das besondere an dieser Software ist die verwendung einer Nachschlagetabelle, um, den Helligkeitsverlauf zu steuern. Das ist praktisch eine Wavetable-Synthese für Helligkeitsverläufe.
Über die EInträge in den beiden LPM-Tabellen wird der Helligkeitsverlauf festgelegt. Somit sind nahezu beliebige Lichtprofile erzeugbar,
Die beiden LED's benutzen dabei unterschiedliche Tabellen , die zudem mit unterschiedlichen Geschwindigkeiten ausgelesen werden, was die anzahl der möglichen Effekte noch weiter erhöht.
Eingesetzt werden kann sie z.B. mit dieser kleinen Platine
| ;PWM Rotationsblinklicht auf PB1 und PB2 (c) 2005 Markus Vohburger Verwendung nur zum privaten Gebrauch gestattet.
.include "tn12def.inc" .def temp1=r16 .def pwmvalue1 = r17 .def pwmvalue2 = r18 .def pwmcount = r19 .def output = r20 .def swcount1 = r21 .def swcount2 = r22 .equ EE_OSCCAL = $3f .org $0000 rjmp reset ;timer overflow interrut handler .org OVF0Addr rjmp OVF0Handler reset: ;set Clock frequency ldi temp1,EE_OSCCAL rcall readeeprom cpi temp1,$00 breq ignoreosccal cpi temp1,$ff breq ignoreosccal out osccal,temp1 ignoreosccal: ldi temp1,$07 out ddrb,temp1 ;Timer zurücksetzen clr temp1 out tcnt0,temp1 ;Timer interrupts an ldi temp1,(1<<toie0) out timsk,temp1 ;Timer starten ldi temp1,0b00000011 out tccr0,temp1 ldi pwmcount,$00 ldi pwmvalue1,$ff ldi pwmvalue2,$ff clr swcount1 ldi swcount2,$10 sei loop: ldi output,$07 inc pwmcount cp pwmvalue1,pwmcount brsh makeoutput2 andi output,$04 makeoutput2: cp pwmvalue2,pwmcount brsh writeoutput andi output,$02 writeoutput: out portb,output rjmp loop OVF0Handler: in r1,sreg ldi zh,high(lpmtable1<<1) ldi zl,low(lpmtable1<<1) add zl,swcount1 ldi temp1,$00 adc zh,temp1 lpm com r0 mov pwmvalue1,r0 ldi zh,high(lpmtable2<<1) ldi zl,low(lpmtable2<<1) add zl,swcount2 ldi temp1,$00 adc zh,temp1 lpm com r0 mov pwmvalue2,r0 inc swcount1 cpi swcount1,$3f brne noreset1 clr swcount1 noreset1: inc swcount2 cpi swcount2,$3e brne noinc clr swcount2 noinc: exitovf0handler: out sreg,r1 reti readeeprom: sbic eecr,eewe rjmp readeeprom out eear,temp1 sbi eecr,eere in temp1,eedr ret lpmtable1: .db $01,$02,$04,$08,$10,$20,$40,$80 .db $ff,$ff,$f0,$80,$20,$10,$ff,$80 .db $60,$50,$40,$30,$20,$10,$08,$07 .db $04,$02,$01,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 lpmtable2: .db $01,$02,$04,$08,$10,$20,$40,$80 .db $ff,$b0,$ff,$80,$20,$80,$b0,$80 .db $60,$50,$40,$30,$20,$10,$08,$07 .db $04,$02,$01,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00 |
Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen: