Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
Lichtwerfer
von Plapperkatze am 20.Mai 2007 um 17:23
zurück zur Kategorie "Tutorials"

mikrocontroller-gesteuerte lampe mit laser und dimmbaren leds für flächenausleuchtung und spotlight.



.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




gruesse von der katz

zurück zur Kategorie "Tutorials"
[0 Kommentare]

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 215314 Besucher seit dem 23.01.2012 Login