;*************************************************************************** ; ; File Name :'adc.asm" ; Title :ATmega128 internal 10-bit ADC Driver ; Date :2003.08.03. ; Version :1.0.0 ; Support telephone :+36-70-333-4034, old: +36-30-9541-658 VFX ; Support fax : ; Support Email :info@vfx.hu ; Target MCU :AVR ; ;*************************************************************************** ; D E S C R I P T I O N ; ;*************************************************************************** ; M O D I F I C A T I O N H I S T O R Y ; ; ; rev. date who why ; ---- ---------- --- ------------------------------------ ; 0.01 2003.08.03 VFX Creation ; ;*************************************************************************** ;Hardware ;*************************************************************************** ;* ;* SYSCLK: f=16.000 MHz (T= 62.5 ns) ;* ;*************************************************************************** ; ; ;************************************************************************** ;* Hardware Def. ; ;*************************************************************************** ;**** VARIABLES .DSEG ;egymas utan kell aljanak!!!! ADCCH0: .byte 2 ADCCH1: .byte 2 ADCCH2: .byte 2 ADCCH3: .byte 2 ADCCH4: .byte 2 ADCCH5: .byte 2 ADCCH6: .byte 2 ADCCH7: .byte 2 ;*************************************************************************** .ESEG ;*************************************************************************** ;**** CODE SEG ;*************************************************************************** .CSEG ADC_Init: clr R16 ldi R17,16 ;2*8 csatorna valtozoterulet = 0 ldi ZL,low(ADCCH0) ldi ZH,high(ADCCH0) ADCI1: st Z+,R16 dec R17 brne ADCI1 ldi R16,0b00000000 out ADMUX,R16 ;[7:6] - REFS1:0: Reference Selection Bits ; REFS1 REFS0 Vref Selection ; 0 0 AREF, Internal Vref turned off ; 0 1 AVCC with external capacitor at AREF pin ; 1 0 Reserved ; 1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin ;[5] - ADLAR: ADC Left Adjust Result ;[4:0] - MUX4:0: Analog Channel and Gain Selection Bits ; MUX4..0 Single Ended Input ; 00000 ADC0 ; 00001 ADC1 ; 00010 ADC2 ; 00011 ADC3 ; 00100 ADC4 ; 00101 ADC5 ; 00110 ADC6 ; 00111 ADC7 ldi R16,0b00011111 out ADCSRA,R16 ;[7] - ADEN: ADC Enable ;[6] - ADSC: ADC Start Conversion ;[5] - ADFR: ADC Free Running Select ;[4] - ADIF: ADC Interrupt Flag ;[3] - ADIE: ADC Interrupt Enable ;[2:0] - ADPS2:0: ADC Prescaler Select Bits ;ADPS2 ADPS1 ADPS0 Division Factor ; 0 0 0 2 ; 0 0 1 2 ; 0 1 0 4 ; 0 1 1 8 ; 1 0 0 16 ; 1 0 1 32 ; 1 1 0 64 ; 1 1 1 128 ret StartADC: in ZL,ADCSRA ori ZL,0b11011000 out ADCSRA,ZL ret ;**************************************** ;ADC Conversion Complete Handler ; ; ADC: PUSH ZL PUSH ZH IN ZL,SREG PUSH ZL push R0 in ZL,ADCL push ZL in R0,ADCH push R0 cbi ADCSRA,ADEN ;ADC Stop in ZL,ADMUX inc ZL andi ZL,7 out ADMUX,ZL ;kovetkezo csatorna kivalasztva clr R0 dec ZL andi ZL,7 add ZL,ZL ldi ZH,Low(ADCCH0+2) add ZL,ZH ldi ZH,high(ADCCH0+2) adc ZH,R0 pop R0 st -Z,R0 pop R0 st -Z,R0 pop R0 POP ZL OUT SREG,ZL POP ZH POP ZL RETI