; program with: ; avrdude -p t2313 -c STK200 -i 50 -U flash:w:smatrig.hex + code wheel = 4 (128kHz internal clock) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; TODO ; one shot on/off ; triggering while turnig the code wheel (position 8,A) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .nolist .include "tn2313def.inc" .list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; registers .def temp0 = r16 .def temp1 = r17 .def temp2 = r18 .def status = r19 ;.def state1 = r19 ;.def state2 = r20 .def clk_prescaler = r21 .def timer_prescaler = r22 .def timer_threshold = r23 .def timer_init = r24 .equ q = 0 ; flipflop .equ qbar = 1 .equ firstflashmode = 2 ; set for first flash triggering .equ secondflashmode = 3 ; set for second flash triggering .equ lightningcatchmode = 4 ; set for lightning triggering .equ lastswitchstate = 5 ; last state of botton .equ OUTPUT_PORT = PORTB .equ OUTPUT_PIN = 3 .equ SWITCH_PORT = PORTD .equ SWITCH_PINPORT = PIND .equ SWITCH_PIN = 2 .equ BUZZER_PORT = PORTD .equ BUZZER_PIN = 5 .equ MICENABLE_PORT = PORTD .equ MICENABLE_PIN = 6 .equ OPTO_PORT = PORTD .equ LCD_CMD_PORT = PORTB .equ RS = 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; constants .equ tau_short = 4 ;verzögerungskonstante für wait_short (16mhz) .equ tau_long = 2 ;verzögerungskonstante für wait_long (16mhz) .equ trig_duration = 205 .equ mirrorup = 3 .equ mirrordown = 235 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; interrupt vector .org 0x0000 rjmp RESET ; Reset Handler .org 0x0001 rjmp EXT_INT0 ; External Interrupt0 Handler .org 0x0002 rjmp EXT_INT1 ; External Interrupt1 Handler ;.org 0x0003 rjmp TIM1_CAPT ; Timer1 Capture Handler ;.org 0x0004 rjmp TIM1_COMPA ; Timer1 CompareA Handler ;.org 0x0005 rjmp TIM1_OVF ; Timer1 Overflow Handler ;.org 0x0006 rjmp TIM0_OVF ; Timer0 Overflow Handler ;.org 0x0007 rjmp USART0_RXC ; USART0 RX Complete Handler ;.org 0x0008 rjmp USART0_DRE ; USART0,UDR Empty Handler ;.org 0x0009 rjmp USART0_TXC ; USART0 TX Complete Handler .org 0x000A rjmp ANA_COMP ; Analog Comparator Handler .org 0x000B rjmp PCINT ; Pin Change Interrupt ;.org 0x000C rjmp TIMER1_COMPB ; Timer1 Compare B Handler ;.org 0x000D rjmp TIMER0_COMPA ; Timer0 Compare A Handler ;.org 0x000E rjmp TIMER0_COMPB ; Timer0 Compare B Handler ;.org 0x000F rjmp USI_START ; USI Start Handler ;.org 0x0010 rjmp USI_OVERFLOW ; USI Overflow Handler ;.org 0x0011 rjmp EE_READY ; EEPROM Ready Handler ;.org 0x0012 rjmp WDT_OVERFLOW ; Watchdog Overflow Handler RESET: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; reduce clock ldi temp0, 0b10000000 out CLKPR, temp0 ; 0000 1 ; 0001 2 ; 0010 4 ; 0011 8 ; 0100 16 ; 0101 32 ; 0110 64 ; 0111 128 ; 1000 256 ldi temp0, 0b00000000 ;/ 4 out CLKPR, temp0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; init stack ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ldi temp0, LOW(RAMEND) out SPL, temp0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; init variables ;ldi state1, 0xff ;ldi state2, 0x00 ldi status, (1<= (mirror down again) ; switch to normal pin operation ldi temp0, (0<4s) out TCNT1H, temp1 out TCNT1L, temp0 ; connect pin with timer ldi temp0, (1<