Bauplan Schaltplan Einsatzfahrzeug Blinklicht mit PWM
Für ein Modellbauprojekt sollte ein möglichst realistisches Blaulicht erstellt werden. Alle erhältlichen Schaltungen waren einfache "Blinklichter", die eben nur blinkten.

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

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1214374