adc.inc
changeset 89 1b3cea759eff
parent 88 c923295ee520
child 90 13c2deb919d1
equal deleted inserted replaced
88:c923295ee520 89:1b3cea759eff
     1 ;;
       
     2 ;; Basic ADC operation
       
     3 ;;
       
     4 
       
     5 ; Reference select
       
     6 .set ADC_REF    = 0b01      ; AVcc
       
     7 
       
     8 ; Bit adjustment
       
     9 .set ADC_LAR    = 1         ; Left-adjust
       
    10 
       
    11 ; Input select
       
    12 .set ADC_MUX    = 0b000     ; ADC0
       
    13 
       
    14 ; Auto-trigger source
       
    15 .set ADC_ATS    = 0b011     ; TC0 OCA
       
    16 
       
    17 ; Auto-trigger enable
       
    18 .set ADC_ATE    = 1
       
    19 
       
    20 ; Prescaler
       
    21 .set ADC_PS     = 0b111     ; 1/128
       
    22 
       
    23 ; I/O pins
       
    24 .equ ADC_DDR    = DDRC
       
    25 .equ ADC_PORT   = PORTC
       
    26 .equ ADC_PIN    = PORTC0
       
    27         
       
    28 ;; Initialize the ADC for starting conversions
       
    29 ADC_Init:
       
    30     ; ADMUX
       
    31         ldi         r16, (ADC_REF << REFS0) | (ADC_LAR << ADLAR) | (ADC_MUX << MUX0)
       
    32         sts         ADMUX, r16
       
    33     
       
    34     ; ADCSRB
       
    35         ldi         r16, (ADC_ATS << ADTS0)
       
    36         sts         ADCSRB, r16
       
    37 
       
    38     ; ADCSRA
       
    39         ; ADSC: No need if using external auto-trigger ???
       
    40         ; Enable interrupt
       
    41         ldi         r16, (1 << ADEN) | (1 << ADSC) | (ADC_ATE << ADATE) | (1 << ADIE) | (ADC_PS << ADPS0)
       
    42         sts         ADCSRA, r16
       
    43     
       
    44     ; Disable digital circuit for pin
       
    45         ldi         r16, (1 << ADC_PIN)
       
    46         sts         DIDR0, r16
       
    47 
       
    48     ; Done
       
    49         ret
       
    50 
       
    51 ;; Interrupt handler stub for ADC_HANDLER
       
    52 ADC_Interrupt:
       
    53         in          r0, SREG
       
    54 
       
    55         rcall       ADC_HANDLER
       
    56 
       
    57         out         SREG, r0
       
    58         reti
       
    59 
       
    60 ;; Read the current 8-bit ADC sample 
       
    61 ; Returns value in r16
       
    62 ADC_Read8:
       
    63     ; Copy
       
    64         lds         r16, ADCH
       
    65 
       
    66     ; Done
       
    67         ret
       
    68