inzwischen habe ich die schaltung aufgebaut, und das gehäuse ist auch bald fertig. der laser wanderte (skizze siehe oben) dorthin, wo die IR-leds eingezeichnet sind (diese habe ich weggelassen).

hier ist ein bild von der elektronik:

Bild hier  

schaltplan für step-down ist folgender:

Bild hier  
(aus dem datenblatt, hoffe das ist ok, datenblatt hier: http://www.national.com/pf/LM/LM2576.html#Datasheet)

danach eine simple mega8 grundschaltung mit folgenden besonderheiten:
- an PC0 und PC1 der abgriff der beiden potis (angeschlossen zwischen den 4V vom step-down und masse), damit werden die beiden PWMs gesteuert
- an PC2 die spannung der batterien, über einen spannungsteiler runtergeteilt (7.6/4,3kOhm) auf < 4V (damit werden die 3 batterie-überwachungs-leds angesteuert)
- an PB2 (OC1B) und PB3 (OC2) hängen 2 transistoren (BC337), die die leds ansteuern
- batterie-leds (3) an PD0, PD1, PD2 (high-active)
- eingänge:
full-bright an PB7
schalter (licht immer an oder nur mit taster) an PD5
taster (1) an PB0
taster (2) an PB6 (selbe funktion)
umschalter (3 schaltstufen) an PD6 und PD7

warum ich das so genau erkläre:
naja, weil man sonst den sourcecode nicht versteht, der hier folgt (ASM):
Code:
   .NOLIST                
   .INCLUDE <m8def.inc> 
   .LIST                    

   .def temp    = r20 
   .def pwmval1 = r21 
   .def pwmval2 = r22 
   .def batval  = r23 

   .CSEG                    
   .org 0 

   ; Interupt Vektoren 
   rjmp    init           ; Reset Handler 
   reti                   ; IRQ0 Handler 
   reti                   ; IRQ1 Handler 
   reti                   ; Timer2 Compare Handler 
   reti                   ; Timer2 Overflow Handler 
   reti                   ; Timer1 Capture Handler 
   reti                   ; Timer1 CompareA Handler 
   reti                   ; Timer1 CompareB Handler 
   reti                   ; Timer1 Overflow Handler 
   reti                   ; Timer0 Overflow Handler 
   reti                   ; SPI Transfer Complete Handler 
   reti                   ; USART RX Complete Handler 
   reti                   ; UDR Empty Handler 
   reti                   ; USART TX Complete Handler 
   rjmp ADCfertig         ; ADC Conversion Complete Handler 
   reti                   ; EEPROM Ready Handler 
   reti                   ; Analog Comparator Handler 
   reti                   ; Two-wire Serial Interface Handler 
   reti                   ; Store Program Memory Ready Handler

init: 

;Stackpointer 
   ldi  temp,  LOW(RAMEND) 
   out  SPL,   temp 
   ldi  temp,  HIGH(RAMEND) 
   out  SPH,   temp 

;Aus/Eingänge 
   ldi temp,  248
   out  DDRC,  temp    ; PC0,1,2 als Eingang 

   ldi temp,   31
   out DDRD,   temp    ; PD7,6,5 als Eingang 

   ldi temp,   255 
   out DDRB,   temp    ; PB1,2,3 als Ausgang                    

   ldi  temp,  (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10) ; set PWM mode  
   out  TCCR1A,temp

   ldi  temp,  (1<<CS10) 
   out  TCCR1B,temp 

   ldi  temp,  (1<<WGM20)|(1<<COM21)|(1<<CS20)
   out  TCCR2, temp

   sei                           ; Generelle Interruptfreigabe 
 
   ldi  pwmval1, 0
   ldi  pwmval2, 0

Main: ;----------------------------- Einsprungspunkt Main

   ldi r24,    0
   out OCR1AL, r24 
   out OCR2,   r24 

   ldi r24,    0
   out PORTD,  r24
   
   ldi r24,    0
   out PORTB,  r24

   ldi r24,   (1<<ADLAR)
   out ADMUX,  r24
   ldi r24,   (1<<ADEN) | (1<<ADSC) | (1<<ADIE); | (1<<ADPS2) 
   out ADCSRA, r24 

off:
   clr  r25
   out  OCR1BL,r25
   out  OCR2,  r25

run:

   cpi batval, 161
   brcs bat1
   ldi r25,7
   out PORTD, r25
   rjmp check
     
bat1:
   
   cpi batval, 138
   brcs bat2
   ldi r25,3
   out PORTD, r25
   rjmp check

bat2:

   cpi batval, 127
   brcs bat3
   ldi r25,1
   out PORTD, r25
   rjmp check

bat3:

   ldi r25,0
   out PORTD, r25

check:

   sbic PINB,7 ;check for pause button
   rjmp full

   sbic PIND,5 ;check for toggle switch
   rjmp spec

   sbic PINB,0 ;check for fire button
   rjmp norm

   sbic PINB,6 ;check for cursor button
   rjmp norm

   rjmp off

norm:
   sbis PIND,7
   rjmp norm1
   ldi  r25,   0
   out  OCR2,  r25
   out  OCR1BL,pwmval2
   rjmp run
   
norm1:
   sbis PIND,6
   rjmp norm2
   out  OCR2,  pwmval1
   out  OCR1BL,pwmval2
   rjmp run

norm2: 
   sbic PIND,7
   rjmp off
   sbic PIND,6
   rjmp off
   out  OCR2,  pwmval1
   ldi  r25,   0
   out  OCR1BL,r25
   rjmp run

spec:

   sbic PINB,0 ;check for fire button
   rjmp spec0

   sbic PINB,6 ;check for cursor button
   rjmp spec0

   rjmp norm

spec0:

   sbis PIND,7
   rjmp spec1
   ldi  r25,   0
   out  OCR2,  r25
   ldi  r25,   255
   out  OCR1BL,r25
   rjmp run
   
spec1:
   sbis PIND,6
   rjmp spec2
   ldi  r25,   255
   out  OCR2,  r25
   out  OCR1BL,r25
   rjmp run

spec2: 
   sbic PIND,7
   rjmp off
   sbic PIND,6
   rjmp off
   ldi  r25,   255
   out  OCR2,  r25
   ldi  r25,   0
   out  OCR1BL,r25
   rjmp run

full:
   ldi  r24,   255
   out  OCR1BL,r24
   out  OCR2,  r24
   rjmp run

;--------------------------------- subroutines / irqs

ADCfertig: 

   sbic ADMUX, MUX0
   rjmp pwm2adc

   sbic ADMUX, MUX1
   rjmp bat2adc

   in   pwmval1,   ADCH
   ldi  temp, (1<<ADLAR)|(1<<MUX0)
   out  ADMUX, temp
   ldi  temp, (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) 
   out  ADCSRA, temp 
   rjmp ende
   
pwm2adc:
   in   pwmval2,   ADCH
   ldi  temp, (1<<ADLAR)|(1<<MUX1)
   out  ADMUX, temp
   ldi  temp, (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) 
   out  ADCSRA, temp 
   rjmp ende

bat2adc:
   in   batval,   ADCH
   ldi  temp, (1<<ADLAR)
   out  ADMUX, temp
   ldi  temp, (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) 
   out  ADCSRA, temp 

ende:
   reti
vielleicht hilft es ja dem einen oder anderen (regelbares PWM, etc.)

ich hoffe, dass ich keine ports falsch angegeben habe, wenn etwas unklar ist, bitte rückfragen. sobald die lampe fertig ist, gibt es bilder davon.

gruesse von der katze