- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 7 von 7

Thema: HC-SR04 mit AtMega328

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Ultraschall.asm
    Code:
    ;###########################################
    ;# Projekt: 								# 
    ;# 											#
    ;#											#
    ;# Taktfrequenz des AVR: 16 MHz	 			#
    ;# 											#
    ;# CS-SOFT 									#
    ;###########################################
    
    .include "m328Pdef.inc"	;Atmega8
    
    .def math1h 	= r8
    .def math1l 	= r9
    .def math2h 	= R10
    .def math2l 	= r11
    .def matherghh	= r12
    .def mathergh	= r13
    .def mathergl	= r14
    .def mathergll	= r15
    
    .def temp0 = r16 	; 
    .def temp1 = r17 	;
    .def temp2 = r18
    .def temp3 = r19 	;
    .def temp4 = r20
    .def cnt   = r21
    
    .equ cpu	= 16000000
    .equ Baud0	= 9600
    .equ UBRR0	= cpu/(16*Baud0)-1
    
    ;**********LCD Port mit 74HC164
    .equ LCD_signs	=	20
    .equ Zeile1 	=	$00+$80
    .equ Zeile2 	=	$40+$80
    .equ Zeile3 	=	Zeile1+LCD_signs
    .equ Zeile4 	=	Zeile2+LCD_signs
    
    .equ port_lcd_x 	= 	portc		;gilt für 4/8bit modus	
    .equ ddrx_lcd_x 	= 	ddrc
    ;				Pinbelegungen
    ;                  STD
    .equ SClock		= 	0		;LCD	;;;
    .equ SRS		=	0
    .equ SData		= 	1		;74164	;;;;;so Kann die HW angeschlossen sein
    .equ SRW		=	1
    .equ Light		= 	2		;LCD	;;;;;
    .equ SEnable	= 	3		;74164	;;;
    
    
    ;********* parallel für LCD/Simulationssoftware*************
    ;.equ st_port_lcd_x = portb
    ;.equ st_ddrx_lcd_x = ddrb
    ;                  STD
    .equ PRS		=	4	;
    .equ PEnable	= 	5	;
    
    ;Entry Set
    .equ SH			=	0 ;1 = Display shift	0 = not shifted
    .equ ID			=	1 ;1 = increase 		0 = decrease
    .equ HES		=	2 ;immer 1 setzen Symbolisiert das Ende 
                          ;des Commandos
    ;DISPLAY on/off
    .equ B			=	0 ;1 = Blink 		0 = no Blink
    .equ C			=	1 ;1 = Cursor on 	0 = Cursor off
    .equ D			=	2 ;1 = Disp on		0 = Disp off
    .equ HD			=	3 ;immer 1 setzen Symbolisiert das Ende 
                          ;des Commandos
    ;Shift
    .equ RL			=	2 ;1 = right shift	0 = left shift
    .equ SC			=	3 ;1 = Disp shift	0 = Cursor move
    .equ HS			=	4 ;immer 1 setzen Symbolisiert das Ende 
                          ;des Commandos
    ;SET Function
    .equ F			=	2 ;1 = 5x10			0 = 5x7
    .equ N			=	3 ;1 = 2line(4line)	0 = 1line
    .equ DL			=	4 ;1 = 8bit int		0 = 4bit interface
    .equ HSF		=	5 ;immer 1 setzen Symbolisiert das Ende 
                          ;des Commandos
    
    ;**********interner ADC
    .equ	ADC_ddr		=	ddrc
    .equ	ADC_Port	=	Portc
    .equ	ADC_Pin		=	PinC
    .equ	Chan0		=	0
    .equ	Chan1		=	1
    .equ	Chan2		=	2
    .equ	Chan3		=	3
    .equ	Chan4		=	4
    .equ	Chan5		=	5
    .equ	ref5		=	$1312
    .equ	ref52		=	$0
    .equ	ref256		=	$09d0
    .equ	ref2562		=	$0
    ;**********SRAM
    .equ 	erg_k		=	$0100			;erg_k wird bis zu 5 weiteren bytes genutzt sprich erg_k+5
    .equ 	ocra0		=	$0105			;für T2
    .equ	ocrb0		=	$0106
    .equ 	ocra1h		=	$0107			;;;;;
    .equ 	ocra1l		=	$0108			;;;;;;;; für T1 A channel
    .equ 	ocrb1h		=	$0109			;;;;;
    .equ 	ocrb1l		=	$010a			;;;;;;;; für T1 B channel
    .equ 	icr1xh		=	$010b			;;;;;
    .equ 	icr1xl		=	$010c			;;;;;;;; für T1 ICR
    .equ	ocra2		=	$010d
    .equ	ocrb2		=	$010e
    
    .equ	hadc		=	$0110			;adc
    .equ	ladc		=	$0111			;adc
    .equ	eep_adrh	=	$0112			;eeprom
    .equ	eep_adrl	=	$0113			;eeprom
    .equ	LTC_wertH	=	$0114
    .equ	LTC_wertL	=	$0115
    .equ	sonar1h		=	$0116
    .equ	sonar1l		=	$0117
    .equ	RSdebug		=	$0140			;debug serielle Schnittstelle
    ;***************************Einsprungadressen***********************
    .cseg
    .org $0000
    	rjmp	stack
    .org $0002			;2
    	reti;rjmp	INT_EX0
    .org $0004			;4
    	rjmp	INT_EX1
    .org $0006			;6
    	reti;rjmp	INT_PC0
    .org $0008			;8
    	reti;rjmp	INT_PC1 
    .org $000a			;a
    	reti;rjmp	INT_PC2 
    .org $000c			;c
    	reti;rjmp	INT_WDT
    .org $000e			;e
    	reti;rjmp	INT_OC2A
    .org $0010			;10
    	reti;rjmp	INT_OC2B
    .org $0012			;12
    	reti;rjmp	INT_OVF2
    .org $0014			;14
    	reti;rjmp	INT_CPT1
    .org $0016			;16
    	rjmp	INT_OC1A ;reti
    .org $0018			;18
    	reti;rjmp	INT_OC1B
    .org $001a			;1a
    	reti;rjmp	INT_OVF1
    .org $001c			;1c
    	reti;rjmp	INT_OC0A
    .org $001e			;1e
    	reti;rjmp	INT_OC0B
    .org $0020			;20
    	reti;rjmp	INT_OVF0
    .org $0022			;22
    	reti;rjmp	INT_SPI
    .org $0024			;24
    	reti;rjmp	INT_USART_RX
    .org $0026			;26
    	reti;rjmp	INT_USART_UDRE
    .org $0028			;28
    	reti;rjmp	INT_USART_TX
    .org $002a			;2a
    	reti;rjmp	INT_ADC
    .org $002c			;2c
    	reti;rjmp	INT_EE_Ready
    .org $002e			;2e
    	reti;rjmp	INT_ANALOG_COMP
    	reti		;11	keine 2wireRoutinen
    	reti		;a keine SPI Routinen
    
    ;***************************Init mit allem drumdran*****************
    stack:	ldi 		temp1,high(ramend)  ;Stackpointer festlegen
    	    out 		sph, temp1
    		ldi 		temp1,low(ramend)   ;Stackpointer festlegen
            out 		spl, temp1
    		rcall		sram
    		
    		rcall		init_HCSR04	
    		sbi			pind,6
    		
    	;	rcall		lcd_init
    	;	rcall		lcd_clear
    	;	rcall		werbe1
    	;	rcall		werbe2
    	;	rcall		wait1s		
    	;	rcall		leer_z
    
    	;	rcall		INIT_ext_Int01
    	;	rcall		deak_int01	
    
    	;	rcall		INIT_PC_INTx
    
    	;	rcall		mode7_t0_init
    	;	rcall		prescaler_T0_on
    
    	;	rcall		mode4_t1_init
    	;	rcall		prescaler_T1_on
    
    	;	rcall		mode2_t2_init
    	;	rcall		prescaler_T2_on
    
    	;	rcall		adc_header
    	
    	;	rcall		eeprom_init				;wenn ints bevorzugt werden	
    	;	rcall		adr_cnt
    	;	rcall		eeprom_write
    
    	;	rcall		AC_init
    	;	rcall		ac_change
    	
    		rcall		usart_init				;wenn INT bevorzugt dann hier aktivieren und prog erweitern 
    		rcall		werbe_rs
    	
    
    start:	rcall		HCSR04_Start
    		rcall		HCSR04_micros_out_uart
    		rcall		Zeit_zu_Entfernung
    		rcall		HCSR04_mm_out_uart
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    start2:	ldi			temp0,$32
    		rcall		waitxms
    	
    		sbis		pind,6	
    		rjmp		start
    		rjmp		start2
    
    ;*********Sram clearen***********************************************
    sram:	clr			temp0
    		ldi			yl,low(SRAM_START)
    		ldi			yh,high(SRAM_START)			;Masterclr des Sram's über
    sram2:	st			y+,temp0				;die indirekte Adressierung
    		cpi			yl,$50					;bis zur zelle x=$a0 löschen
    		brne		sram2		
    		ret
    ;*************************weitere*includedata***********************
    .include "AtMega328_ext_ints.asm"
    .include "AtMega328_timercounter.asm"
    .include "AtMega328_uart_std.asm"
    .include "AtMega328_RS_Txt_out.asm"
    .include "HC_SR04_2.asm"
    
    .include "h:\etronik\Software3\sonstiges\origin\mathe.asm"
    .include "h:\etronik\Software3\sonstiges\origin\zeitschleifen.asm"
    .include "h:\etronik\Software3\sonstiges\origin\hex_dez_wandlung.asm" 		;gebraucht für LCD oder nur umwandlung
    ;*************************ENDE**************************************
    AtMega328_ext_ints.asm
    Code:
    ;PD2/3 sind INT0/1
    INIT_EXT_INT01:
    		lds			temp0,EICRA
    		ori			temp0,(1<<ISC11|1<<ISC10|0<<ISC01|0<<ISC00) ;hier INT0/1 auf steigende flanke siehe PDF KAP.13
    		sts			EICRA,temp0
    
    		in			temp0,EIMSK
    		ori			temp0,(1<<INT1|0<<INT0)			;beide INTs aktiv
    		out			EIMSK,temp0
    
    		sei			;global int
    		ret
    
    deak_INT01:
    		lds			temp0,EIMSK
    		andi		temp0,(0<<INT1|0<<INT0)			;beide INTs aktiv
    		sts			EIMSK,temp0
    		ret
    
    INT_EX0:	;hier steht das Programm welches ausgeführt werden soll 
    		reti
    
    INT_EX1:	;hier steht das Programm welches ausgeführt werden soll
    		rcall		prescaler_T0_on
    		rcall		prescaler_T1_on
    		reti
    
    ;*******************Pin Change Interrupt*********************************************
    INIT_PC_INTx:
    		lds			temp0,PCICR
    		ori			temp0,(1<<PCIE2|1<<PCIE1|1<<PCIE0) 	;Hier Portbereich wählen
    		sts			PCICR,temp0							;2=(23:16),1=(14:),0=(7:0)
    
    		rcall		PCIE0_active
    		rcall		PCIE1_active
    		rcall		PCIE2_active
    		
    		sei
    
    		ret
    
    INIT_PC_INTx_deakt:
    		lds			temp0,PCICR
    		andi		temp0,(0<<PCIE2|0<<PCIE1|0<<PCIE0) 	;Hier Portbereich wählen
    		sts			PCICR,temp0							;2=(23:16),1=(14:),0=(7:0)
    		ret
    
    PCIE0_active:
    		lds			temp0,PCMSK0
    		ori			temp0,(0<<PCINT7 | 0<<PCINT6 | 0<<PCINT5| 0<<PCINT4 | 0<<PCINT3 | 0<<PCINT2 | 0<<PCINT1 | 0<<PCINT0)
    		sts			PCMSK0,temp0
    		ret
    
    PCIE1_active:
    		lds			temp0,PCMSK1
    		ori			temp0,(0<<PCINT14 | 0<<PCINT13 | 0<<PCINT12 | 0<<PCINT11 | 0<<PCINT10 | 0<<PCINT9 | 0<<PCINT8)
    		sts			PCMSK1,temp0
    		ret				
    						
    PCIE2_active:
    		lds			temp0,PCMSK2
    		ori			temp0,(0<<PCINT23 | 0<<PCINT22 | 0<<PCINT21 | 0<<PCINT20 | 0<<PCINT19 | 0<<PCINT18 | 0<<PCINT17 | 0<<PCINT16)
    		sts			PCMSK2,temp0
    		ret
    AtMega328_timercounter.asm
    Code:
    ;*****************************INIT-Mode 1 Timer0********************************************************************
    mode0_t0_init:
    		lds			temp1,TIMSK0
    		ori			temp1,(0<<OCIE0B | 0<<OCIE0A | 1<<TOIE0)
    		sts			TIMSK0,temp1
    		clr			temp1
    		sts			TCNT0,temp1
    		ret
    
    ;MODE 1 PWM-PhaseCorrect beide Channels nutzbar da Counter bis FF zählt
    mode1_t0_init:
    		rcall		A0_ch_en					;out aktivieren
    		rcall		B0_ch_en					;out aktivieren
    		rcall		A0_ch_load					;Zeitwert laden
    		rcall		B0_ch_load					;Zeitwert laden
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR0A,temp0
    
    		in			temp0,TCCR0B
    		ori			temp0,(0<<WGM02)
    		out			TCCR0B,temp0		
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<WGM01|1<<WGM00)
    		out			TCCR0A,temp0
    
    		lds			temp1,TIMSK0
    		ori			temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
    		sts			TIMSK0,temp1		
    
    		ret
    
    ;MODE 2 CTC ACHTUNG OCRA als Auflösung nutzbar, OCRB muss <= OCRA sein falls man togglen will 
    mode2_t0_init:
    	;	rcall		A0_ch_en					;out aktivieren
    		rcall		B0_ch_en					;out aktivieren
    		rcall		A0_ch_load					;Zeitwert laden
    		rcall		B0_ch_load					;Zeitwert laden
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<COM0A1|0<<COM0A0|0<<COM0B1|1<<COM0B0)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR0A,temp0
    
    		in			temp0,TCCR0B
    		ori			temp0,(0<<WGM02)
    		out			TCCR0B,temp0		
    
    		in			temp0,TCCR0A
    		ori			temp0,(1<<WGM01|0<<WGM00)
    		out			TCCR0A,temp0
    
    		lds			temp1,TIMSK0
    		ori			temp1,(0<<OCIE0B | 0<<OCIE0A | 0<<TOIE0)
    		sts			TIMSK0,temp1		
    
    		ret
    
    ;MODE 3 FAST PWM A / B unabahängig nutzbar
    mode3_t0_init:
    		rcall		A0_ch_en					;out aktivieren
    		rcall		B0_ch_en					;out aktivieren
    		rcall		A0_ch_load					;Zeitwert laden
    		rcall		B0_ch_load					;Zeitwert laden
    
    		in			temp0,TCCR0A
    		ori			temp0,(1<<COM0A1|1<<COM0A0|1<<COM0B1|1<<COM0B0)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR0A,temp0
    
    		in			temp0,TCCR0B
    		ori			temp0,(0<<WGM02)
    		out			TCCR0B,temp0		
    
    		in			temp0,TCCR0A
    		ori			temp0,(1<<WGM01|1<<WGM00)
    		out			TCCR0A,temp0
    
    		lds			temp1,TIMSK0
    		ori			temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
    		sts			TIMSK0,temp1		
    
    		ret
    
    ;MODE 4 RESERVED
    
    
    ;MODE 5 PWM-PhaseCorrect nur OCRA mit CHAN A und INT A, wenn OCRB < OCRA dann ist noch INT B ohne CHAN B nutzbar
    mode5_t0_init:
    		rcall		A0_ch_en					;out aktivieren
    		rcall		B0_ch_en					;out aktivieren
    		rcall		A0_ch_load					;Zeitwert laden
    		rcall		B0_ch_load					;Zeitwert laden
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR0A,temp0
    
    		in			temp0,TCCR0B
    		ori			temp0,(1<<WGM02)
    		out			TCCR0B,temp0		
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<WGM01|1<<WGM00)
    		out			TCCR0A,temp0
    
    		lds			temp1,TIMSK0
    		ori			temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
    		sts			TIMSK0,temp1		
    
    		ret
    
    ;MODE 6 RESERVED
    
    ;MODE 7 FAST-PWM nur OCRA mit CHAN A und INT A, wenn OCRB < OCRA dann ist noch INT B ohne CHAN B nutzbar
    mode7_t0_init:
    		rcall		A0_ch_en					;out aktivieren
    		rcall		B0_ch_en					;out aktivieren
    		rcall		A0_ch_load					;Zeitwert laden
    		rcall		B0_ch_load					;Zeitwert laden
    
    		in			temp0,TCCR0A
    		ori			temp0,(0<<COM0A1|1<<COM0A0|0<<COM0B1|1<<COM0B0)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR0A,temp0
    
    		in			temp0,TCCR0B
    		ori			temp0,(1<<WGM02)
    		out			TCCR0B,temp0		
    
    		in			temp0,TCCR0A
    		ori			temp0,(1<<WGM01|1<<WGM00)
    		out			TCCR0A,temp0
    
    		lds			temp1,TIMSK0
    		ori			temp1,(1<<OCIE0B | 1<<OCIE0A | 0<<TOIE0)
    		sts			TIMSK0,temp1		
    
    		ret
    
    ;Zähler de/aktivieren
    prescaler_T0_on:
    		in			temp0,TCCR0B
    		ori			temp0,(0<<CS12|0<<CS11|1<<CS10) ;schmeißt den counter an
    		out			TCCR0B,temp0
    		sei
    		ret
    
    prescaler_T0_off:
    		in			temp0,TCCR0B
    		andi		temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
    		out			TCCR0B,temp0
    		ret
    
    T0_clr:	clr			temp0
    		sts			TCNT0,temp0
    		ret
    
    ;*****************ChannelLoad******************************************************
    A0_ch_load:
    		ldi			temp0,CTC_T0		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			ocra0,temp0		;____--- oder _------ zu erreichen
    		out			OCR0A,temp0		;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
    	
    		ret
    
    A0_ch_en:
    		sbi			ddrd,6			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    A0_ch_dis:
    		cbi			ddrd,6			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B0_ch_load:
    		ldi			temp0,CTC_T0		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			ocrb0,temp0		;____--- oder _------ zu erreichen
    		out			OCR0B,temp0		;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
    		
    		ret
    
    B0_ch_en:
    		sbi			ddrd,5			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B0_ch_dis:
    		cbi			ddrd,5			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    ;******ISR
    INT_OC0A:	;$000E
    		reti
    
    INT_OC0B:	;$0010
    		reti
    
    INT_OVF0:	;$0012
    		reti
    
    
    ;******************************Init-Modes des Timers1***************************************************************
    mode0_T1_init:;NORMAL_MODE  OCR1A h:l,OCR1B h:l update ocrxH:L sofort oder im INT
    	;	rcall		A1_ch_en						;out aktivieren
    	;	rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    	;	rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<ICNC1|0<<ICES1|0<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|0<<OCIE1B|1<<OCIE1A|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode1_T1_init:;8bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode2_T1_init:;9bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode3_T1_init:;10bit phase correct mode OCR1A h:l,OCR1B h:l update ocrxH:L on top oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode4_T1_init:;CTC mode OCR1A h:l,OCR1B h:l update ocrAH:L oder im INT
    		;rcall		A1_ch_en						;out aktivieren
    		;rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		;rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode5_T1_init:;FAST PWM 8bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|1<<COM1B0|0<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode6_T1_init:;FAST PWM 9bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode7_T1_init:;FAST PWM 10bit OCR1A h:l,OCR1B h:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(0<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode8_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,ICRh:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<ICES1|1<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode9_T1_init:;PWM,PahseFrequenzyCorrect OCR1A h:l,OCR1A h:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode10_T1_init:;PWM,PahseCorrect OCR1A h:l,ICRh:l update ocrxH:L on top oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode11_T1_init:;PWM,PahseCorrect OCR1A h:l,OCRah:l update ocrxH:L on top oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|0<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode12_T1_init:;CTC OCR1A h:l,ICRh:l update sofort oder im INT
    	;	rcall		A1_ch_en						;out aktivieren
    	;	rcall		B1_ch_en						;out aktivieren
    	;	rcall		A1_ch_load					;Zeitwert laden
    	;	rcall		B1_ch_load					;Zeitwert laden
    		rcall		ICR1_ch_load
    		ldi			temp0,(1<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(0<<COM1A1|0<<COM1A0|0<<COM1B1|0<<COM1B0|0<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode13_T1_init:;RESERVED not activated
    	/*	;rcall		A1_ch_en						;out aktivieren
    		;rcall		B1_ch_en						;out aktivieren
    		;rcall		A1_ch_load					;Zeitwert laden
    		;rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1B,temp0	
    		in			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		out			TCCR1A,temp0
    		in			temp0,TIMSK
    		ori			temp0,(0<<TICIE1|1<<OCIE1A|1<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		out			TIMSK,temp0						
    	*/	ret
    
    mode14_T1_init:;FAST PWM OCR1A h:l,ICRh:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM11|0<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(1<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    mode15_T1_init:;FAST PWM OCR1A h:l,OCRah:l update ocrxH:L on bottom oder im INT
    		rcall		A1_ch_en						;out aktivieren
    		rcall		B1_ch_en						;out aktivieren
    		rcall		A1_ch_load					;Zeitwert laden
    		rcall		B1_ch_load					;Zeitwert laden
    		ldi			temp0,(1<<WGM13|1<<WGM12)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1B,temp0	
    		lds			temp0,TCCR1A
    		ori			temp0,(0<<COM1A1|1<<COM1A0|0<<COM1B1|0<<COM1B0|1<<WGM11|1<<WGM10)	;zum Toggeln COM1xA/B Einstellungen beachten!!!!!!!!!
    		sts			TCCR1A,temp0
    		lds			temp0,TIMSK1
    		ori			temp0,(0<<ICIE1|0<<OCIE1A|0<<OCIE1B|0<<TOIE1)	;INT für ICP=off, OCIE1A=off, OCIE1B=off, OVFL=1
    		sts			TIMSK1,temp0						
    		ret
    
    prescaler_T1_on:
    		lds			temp0,TCCR1B
    		ori			temp0,(1<<CS12|1<<CS11|1<<CS10) ;schmeißt den counter an
    		sts			TCCR1B,temp0
    		sei
    		ret
    
    prescaler_T1_off:
    		lds			temp0,TCCR1B
    		andi		temp0,(0<<CS12|0<<CS11|0<<CS10) ;stoppt den counter an
    		sts			TCCR1B,temp0
    		ret
    
    T1_clr:	clr			temp0
    		sts			TCNT1h,temp0
    		sts			TCNT1l,temp0
    		ret
    
    ;**********Channel load 
    A1_ch_load:
    		ldi			temp0,T1_max_h		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			OCRa1h,temp0	;____--- oder _------ zu erreichen
    		sts			OCR1ah,temp0
    		ldi			temp0,T1_max_l		;Toggeln oder Clr/Set aktiv muss OCR1Al-Register beachtet werden um
    		sts			OCRa1l,temp0	;____--- oder _------ zu erreichen
    		sts			OCR1al,temp0
    		ret
    
    A1_ch_en:
    		sbi			ddrb,1			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    A1_ch_dis:
    		cbi			ddrb,1			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B1_ch_load:
    		ldi			temp0,$00		;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
    		sts			OCRb1h,temp0	;____--- oder _------ zu erreichen
    		sts			OCR1bh,temp0
    		ldi			temp0,$80		;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
    		sts			OCRb1l,temp0	;____--- oder _------ zu erreichen
    		sts			OCR1bl,temp0
    		ret
    
    B1_ch_en:
    		sbi			ddrb,2			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B1_ch_dis:
    		cbi			ddrb,2			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    ICR1_ch_load:
    		ldi			temp0,$00		;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
    		sts			ICR1xh,temp0	;____--- oder _------ zu erreichen
    		sts			ICR1h,temp0
    		ldi			temp0,$09		;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
    		sts			ICR1xl,temp0	;____--- oder _------ zu erreichen
    		sts			ICR1l,temp0
    		ret
    
    ;**********ISR
    INT_CPT1: ;$0014 Timer/Counter1 Capture Event
    		;ICRH:L wird vom Counter TVCNT1H:L bei Steigender/Fallender Flanke beschrieben
    		reti
    
    INT_OC1A: ;$0016 Timer/Counter1 Compare Match A
    		push		temp0
    		rcall		prescaler_T0_off
    		rcall		prescaler_T1_off
    		pop			temp0
    		reti
    
    INT_OC1B: ;$0018 Timer/Counter1 Compare Match B
    		push		temp0
    		lds			temp0,OCRb1h		;Toggeln oder Clr/Set aktiv muss OCR1Bh-Register beachtet werden um
    		sts			OCR1Bh,temp0	;____--- oder _------ zu erreichen
    		lds			temp0,OCRb1l		;Toggeln oder Clr/Set aktiv muss OCR1Bl-Register beachtet werden um
    		sts			OCR1Bl,temp0	;____--- oder _------ zu erreichen
    		pop			temp0
    		reti
    
    INT_OVF1: ;$001A Timer/Counter1 Overflow
    		reti
    
    ;*******************************************************************************************************************
    ;******************************Init-Modes des Timers2***************************************************************
    mode0_T2_init:;NORMAL_MODE  OCR2 update sofort oder im INT
    		rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		rcall		B2_ch_load	
    
    		lds			temp0,TCCR2B
    		ori			temp0,(0<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<WGM21 | 0<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<COM2A1 | 0<<COM2A0 | 0<<COM2B1 | 0<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 0<<OCIE2B | 0<<OCIE2A | 1<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    
    mode1_T2_init:;PWM-PhaseCorrect 
    		rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		rcall		B2_ch_load
    
    		lds			temp0,TCCR2B
    		ori			temp0,(0<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<WGM21 | 1<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 1<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 0<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 0<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    		
    mode2_T2_init:;CTC 
    		;rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		;rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		;rcall		B2_ch_load
    		
    		lds			temp0,TCCR2B
    		ori			temp0,(0<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 1<<WGM21 | 0<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 1<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 0<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    		
    mode3_T2_init:;FastPWM 
    		rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		rcall		B2_ch_load
    	
    		lds			temp0,TCCR2B
    		ori			temp0,(0<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 1<<WGM21 | 1<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<COM2A1 | 1<<COM2A0 | 0<<COM2B1 | 1<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    
    mode5_T2_init:;PWM PHASE CORRECT 
    		rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		rcall		B2_ch_load
    	
    		lds			temp0,TCCR2B
    		ori			temp0,(1<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<WGM21 | 1<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 0<<COM2A1 | 1<<COM2A0 | 1<<COM2B1 | 0<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    
    mode7_T2_init:;FAST PWM
    		rcall		A2_ch_en			;output aktivieren wenn Toggeln am PINB3=OCR2 erwünscht
    		rcall		B2_ch_en		;Toggeln oder Clr/Set aktiv muss OCR2-Register beachtet werden um
    		rcall		A2_ch_load		;____--- oder _------ zu erreichen
    		rcall		B2_ch_load
    	
    		lds			temp0,TCCR2B
    		ori			temp0,(1<<WGM22)
    		sts			TCCR2B,temp0
    								
    		lds			temp0,TCCR2A
    		ori			temp0,( 1<<WGM21 | 1<<WGM20 )		
    		sts			TCCR2A,temp0
    
    		lds			temp0,TCCR2A
    		ori			temp0,( 1<<COM2A1 | 1<<COM2A0 | 1<<COM2B1 | 1<<COM2B0 )	;zum Toggeln COM2x Einstellungen beachten!!!!!!!!!
    		sts			TCCR2A,temp0
    
    		lds			temp0,TIMSK2
    		ori			temp0,( 1<<OCIE2B | 1<<OCIE2A | 0<<TOIE2 );OutputCompareInterrupt deaktiviert
    		sts			TIMSK2,temp0
    
    		ret
    
    prescaler_T2_on:
    		lds			temp0,TCCR2B
    		ori			temp0,(1<<CS22|1<<CS21|1<<CS20) ;schmeißt den counter an
    		sts			TCCR2B,temp0
    		sei
    		ret
    
    prescaler_T2_off:
    		lds			temp0,TCCR2B
    		andi		temp0,(0<<CS22|0<<CS21|0<<CS20) ;stoppt den counter an
    		sts			TCCR2B,temp0
    		ret
    
    T2_clr:	clr			temp0
    		sts			TCNT2,temp0
    		ret
    
    ;**********Channel load 
    A2_ch_load:
    		ldi			temp0,$4d		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			OCR2A,temp0
    		clr			temp0
    		sts			ocra2,temp0
    		ret
    
    A2_ch_en:
    		sbi			ddrb,3			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    A2_ch_dis:
    		cbi			ddrb,3			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B2_ch_load:
    		ldi			temp0,$40		;Toggeln oder Clr/Set aktiv muss OCR1Ah-Register beachtet werden um
    		sts			OCR2B,temp0
    		sts			ocrb2,temp0
    		ret
    
    B2_ch_en:
    		sbi			ddrd,3			;output aktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    B2_ch_dis:
    		cbi			ddrd,3			;output deaktivieren wenn Toggeln am PINB1=OCR1A erwünscht
    		ret
    
    
    ;*******ISR
    INT_OC2A: ;$000E
    		lds			temp0,ocra2
    		inc			temp0
    		sts			ocra2,temp0
    		cpi			temp0,$64
    		breq		INT_OC2A2
    		sts			ocra2,temp0
    		reti
    INT_OC2A2:
    		clr			temp0
    		sts			ocra2,temp0
    		sbic		pinb,5
    		cbi			portb,5
    		sbis		pinb,5
    		sbi			portb,5
    		reti
    
    INT_OC2B: ;$0010
    		push		temp1
    		lds			temp1,ocrb2
    		sts			OCR2B,temp1
    		pop			temp1
    		reti
    
    INT_OVF2: ;$0012
    		reti
    Geändert von avr_racer (20.08.2018 um 08:07 Uhr)

Ähnliche Themen

  1. Verkaufe Arduino Nano V3.0 mit Atmega328
    Von razer6 im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 08.05.2017, 15:25
  2. ATMega328 Massefläche des MLF-Gehäuses
    Von rapo im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 07.02.2016, 21:17
  3. Bascom Atmega328 Chip ID : FFFFF
    Von Projekt 2252 im Forum Bascom / C / ASM / Sketch / Codesammlung / Programmschnipsel
    Antworten: 1
    Letzter Beitrag: 30.07.2014, 18:26
  4. Syncfehler mit Arduino Nano ATmega328
    Von Sokapex im Forum Arduino -Plattform
    Antworten: 4
    Letzter Beitrag: 26.05.2013, 12:32
  5. SainSmart uno r3-atmega328
    Von Droggelbecher im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 18
    Letzter Beitrag: 04.01.2013, 11:57

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests