equal
deleted
inserted
replaced
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 |
|