-
Notifications
You must be signed in to change notification settings - Fork 0
/
adc.cpp
107 lines (84 loc) · 1.65 KB
/
adc.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <adc.h>
ISR(ADC_vect, ISR_NAKED){
asm volatile("reti");
};
uint16_t adc::current_X(void)
{
DDRF |= (1<<PINF1);
DDRF |= (1<<PINF4);
PORTF |= (1<<PINF1);
ADMUX = 2;
ADCSRA |= (1<<ADSC);//|(1<<ADIE);
while( ADCSRA & (1 << ADSC )){};
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_cpu();
uint8_t lsb = ADCL;
uint8_t msb = ADCH;
uint16_t t = lsb + (msb<<8);
DDRF &=~(1<<PINF1);
DDRF &=~(1<<PINF4);
PORTF &=~(1<<PINF1);
return t;
}
uint16_t adc::current_Y(void)
{
DDRF |= (1<<PINF5);
DDRF |= (1<<PINF0);
PORTF |= (1<<PINF0);
ADMUX = 3;
ADCSRA |= (1<<ADSC); // |(1<<ADIE);
//set_sleep_mode(SLEEP_MODE_IDLE);
//sleep_cpu();
//
while( ADCSRA & (1 << ADSC )){};
uint8_t lsb = ADCL;
uint8_t msb = ADCH;
uint16_t t = lsb + (msb<<8);
DDRF &=~(1<<PINF5);
DDRF &=~(1<<PINF0);
PORTF &=~(1<<PINF0);
return t;
}
uint16_t adc::voltage_X(void)
{
DDRF |=(1<<PINF0);
DDRF |=(1<<PINF2);
PORTF |= (1<<PINF2);
ADMUX = 1;
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1 << ADSC )){};
uint8_t lsb = ADCL;
uint8_t msb = ADCH;
uint16_t t = lsb + (msb<<8);
DDRF &=~(1<<PINF0);
DDRF &=~(1<<PINF2);
PORTF &=~(1<<PINF2);
return t;
}
uint16_t adc::voltage_Y(void)
{
DDRF |= (1<<PINF3);
DDRF |= (1<<PINF1);
PORTF |=(1<<PINF1);
ADMUX = 0;
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1 << ADSC )){};
uint8_t lsb = ADCL;
uint8_t msb = ADCH;
uint16_t t = lsb + (msb<<8);
DDRF &=~(1<<PINF3);
DDRF &=~(1<<PINF1);
PORTF &=~(1<<PINF1);
return t;
}
uint16_t adc::adc_read_10b(uint8_t pin)
{
ADMUX = pin;
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1 << ADSC )){};
uint8_t lsb = ADCL;
uint8_t msb = ADCH;
uint16_t t = lsb + (msb<<8);
return t;
}
adc Adc;