Code:
/*
.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 Chan6 = 6
.equ Chan7 = 7
*/
;******************************adc_interrupt**********************
adc_rdy:
in temp0,adcl ;wichtig erst low
sts ladc,temp0
in temp1,adch ;dann high lesen sonst erg müll
sts hadc,temp1
reti
;***********************adc_header**************************
adc_header:
rcall adc_init
rcall start_convers_int ;mit Interrupt
;rcall start_convers ;ohne Interrupt
ret
;***********************adc_init*****************************
adc_init:
in temp0,ADC_ddr
ori temp0,(0<<Chan7|0<<Chan6|0<<Chan5|0<<Chan4|0<<Chan3|0<<Chan2|0<<Chan1|0<<Chan0)
out ADC_ddr,temp0
in temp0,ADCSRA
ori temp0,(1<<ADEN|0<<ADSC|0<<ADATE|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0) ;
out ADCSRA,temp0
rcall adc_ref_5V ;5V Referenz Channel 0
in temp0,SFIOR ;TriggerSource
ori temp0,(0<<ADTS2|0<<ADTS1|0<<ADTS0) ;Man beachte ADATE=0 dann keine Auswirkung auf SFIOR
out SFIOR,temp0
ret
;***********************Wandlung starten******************************************************
;mit Interrupt
start_convers_int:
in temp0,ADCSRA ;wenn ADFR aktiv dann nur adc_read nötig für jeweiligen kanal
ori temp0,(0<<ADEN|1<<ADSC|0<<ADATE|1<<ADIE|1<<ADPS2|0<<ADPS1|0<<ADPS0) ;freigabe ADC Abtastrate zwischen 50Khz-200Khz Teiler=32 single mode
out ADCSRA,temp0 ;
sei
ret
;ohne Interrupt dann abfrage auf des bits ADSC=1?????
start_convers:
in temp0,adcsra
ori temp0,(0<<ADEN|1<<ADSC|0<<ADATE|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0);freigabe der Messung
out adcsra,temp0
start_convers2: ;;;
sbic ADCSR,ADSC ;;;;;; diese kleine routine braucht man nicht wenn man mit ints arbeitet
rjmp start_convers2 ;;;
in temp0,adcl ;wichtig erst low
in temp1,adch ;dann high lesen sonst erg müll
sts ladc,temp0
sts hadc,temp1
ret
;*********************AREF
adc_ref_extern: ;extern on
in temp0,admux
andi temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
ori temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_ref_5V: ;AVCC on
in temp0,admux
andi temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
/*
adc_ref_reserve: ;reserve
in temp0,admux
ori temp0,(1<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
*/
adc_ref_256V: ;2,56V on
in temp0,admux
andi temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
ori temp0,(1<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
;*******************Channels**************************************************************************************
adc_chan_0:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_3:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_4:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_5:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_6:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_7:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
;************************!!!!!!!!!!!!!!Achtung DifferenzKanäle Fussnote beachten im DB***************************************************
adc_chan_0_0_x10:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_1_0_x10:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_0_0_x200:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_1_0_x200:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_2_2_x10:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_3_2_x10:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_2_2_x200:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_3_2_x200:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
;***** x1fach
adc_chan_0_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_1_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_2_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_3_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_4_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_5_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_6_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_7_1:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_0_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_1_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_2_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_3_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_4_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_5_2:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_122V:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
adc_chan_gnd:
in temp0,admux
andi temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
ori temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0) ;AVCC with external capacitor at AREF pin
out admux,temp0
ret
Lesezeichen