adc.inc
author Tero Marttila <terom@paivola.fi>
Mon, 21 Apr 2014 00:20:27 +0300
changeset 82 b5878197d017
parent 32 7ceb76b5a104
permissions -rw-r--r--
dmx-web: change dmx layout for more light types
18
79b25e81721f use timer for 1s delay
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     1
;;
79b25e81721f use timer for 1s delay
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     2
;; Basic ADC operation
79b25e81721f use timer for 1s delay
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     3
;;
79b25e81721f use timer for 1s delay
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     4
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     5
; Reference select
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     6
.set ADC_REF    = 0b01      ; AVcc
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     7
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     8
; Bit adjustment
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     9
.set ADC_LAR    = 1         ; Left-adjust
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    10
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    11
; Input select
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    12
.set ADC_MUX    = 0b000     ; ADC0
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    13
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    14
; Auto-trigger source
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    15
.set ADC_ATS    = 0b011     ; TC0 OCA
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    16
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    17
; Auto-trigger enable
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    18
.set ADC_ATE    = 1
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    19
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    20
; Prescaler
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    21
.set ADC_PS     = 0b111     ; 1/128
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    22
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    23
; I/O pins
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
.equ ADC_DDR    = DDRC
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
.equ ADC_PORT   = PORTC
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
.equ ADC_PIN    = PORTC0
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
;; Initialize the ADC for starting conversions
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
ADC_Init:
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    30
    ; ADMUX
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    31
        ldi         r16, (ADC_REF << REFS0) | (ADC_LAR << ADLAR) | (ADC_MUX << MUX0)
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        sts         ADMUX, r16
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    34
    ; ADCSRB
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    35
        ldi         r16, (ADC_ATS << ADTS0)
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        sts         ADCSRB, r16
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    38
    ; ADCSRA
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    39
        ; ADSC: No need if using external auto-trigger ???
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    40
        ; Enable interrupt
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    41
        ldi         r16, (1 << ADEN) | (1 << ADSC) | (ADC_ATE << ADATE) | (1 << ADIE) | (ADC_PS << ADPS0)
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        sts         ADCSRA, r16
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    43
    
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    ; Disable digital circuit for pin
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        ldi         r16, (1 << ADC_PIN)
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        sts         DIDR0, r16
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    ; Done
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        ret
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    51
;; Interrupt handler stub for ADC_HANDLER
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
ADC_Interrupt:
32
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    53
        in          r0, SREG
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    54
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    55
        rcall       ADC_HANDLER
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    56
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    57
        out         SREG, r0
7ceb76b5a104 semi-broken Timer_Update mechanism
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    58
        reti
17
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
;; Read the current 8-bit ADC sample 
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
; Returns value in r16
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
ADC_Read8:
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    ; Copy
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        lds         r16, ADCH
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    ; Done
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        ret
a7c668003a19 split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68