-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadc_examples.cpp
More file actions
122 lines (96 loc) · 2.64 KB
/
adc_examples.cpp
File metadata and controls
122 lines (96 loc) · 2.64 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#define F_CPU 8000000
#include "adc.h"
#include "irqs.h"
#include "ports.h"
using namespace adc;
// «ADC_TASK1»
void f(const uint16_t& result) {
PIN_B4::PORT = result > 0x0F;
}
// use the default nullptr (do_nothing) irq-task
typedef Adc<Ref::V1_1, PIN_ADC5, Mode::FreeRunning, f> AdcWTask;
#define NEW_ADC AdcWTask
#include REGISTER_ADC
/*¤*/
#undef NEW_ADC
void f2(const uint16_t& result) {
PIN_B5::PORT = result > 0x0F;
}
// «ADC_IRQ_REG»
typedef Adc<Ref::V1_1, Input::Unset, Mode::SingleConversion, f> MyAdc;
#define NEW_ADC MyAdc
#include REGISTER_ADC
#undef NEW_ADC
typedef Adc<Ref::V1_1, Input::Unset, Mode::SingleConversion, f2> MyAdc2;
#define NEW_ADC MyAdc2
#include REGISTER_ADC
/*¤*/
#undef NEW_ADC
// «ADC_NOISE_RED1»
// use the default nullptr (do_nothing) irq-task
typedef Adc<Ref::V1_1> NoiseRedAdc;
#define NEW_ADC NoiseRedAdc
#include REGISTER_ADC
/*¤*/
int main() {
PIN_B4::DDR = ports::DataDirection::Output;
PIN_B5::DDR = ports::DataDirection::Output;
uint8_t adc3;
uint8_t adc4;
// «ADC_2_INPUTS1[^ ,]»
typedef Adc<Ref::V1_1, Input::Unset> Adc1_1;
Adc1_1::init<PIN_ADC3>();
adc3 = Adc1_1::adc_8bit();
Adc1_1::init<PIN_ADC4>();
adc4 = Adc1_1::adc_8bit();
/*¤*/
// Use variables to avoid warnings.
if (adc3 == adc4) PIN_B4::PORT = 1;
// «ADC_2_INPUTS2[^ ,]»
typedef Adc<Ref::V1_1, PIN_ADC3> AdcAdc3;
typedef Adc<Ref::V1_1, PIN_ADC4> AdcAdc4;
AdcAdc3::init();
adc3 = AdcAdc3::adc_8bit();
AdcAdc4::init();
adc4 = AdcAdc4::adc_8bit();
/*¤*/
// «ADC_SHARED[^ ,]»
AdcAdc3::init();
AdcAdc4::init();
// !!! THIS WON'T WORK !!!
// AdcAdc3::adc_8bit() will use PIN_ADC4 as input!
// AdcAdc4::init() switched the adc subsystem to input PIN_ADC4.
adc3 = AdcAdc3::adc_8bit();
adc4 = AdcAdc4::adc_8bit();
/*¤*/
// «ADC_SYNC[^ ,]»
MyAdc::init<PIN_ADC0>();
uint8_t adc1 = MyAdc::adc_8bit();
MyAdc2::init<PIN_ADC1>();
uint16_t adc2 = MyAdc2::adc_10bit();
/*¤*/
// «ADC_NOISE_RED2[^ ,]»
NoiseRedAdc::init<PIN_ADC3>();
uint16_t adcNoiseRed = NoiseRedAdc::adc_10bit<1>();
/*¤*/
// Use variables to avoid warnings.
if (adc1 == adc2) PIN_ADC3::DDR = 1;
if (adcNoiseRed == 0x0F) PIN_ADC3::PORT = 1;
// «ADC_BACKGROUND[^ ,]»
MyAdc::init<PIN_ADC0>();
MyAdc::start_adc_8bit();
while (!MyAdc::is_adc_finished()) { /* do some other stuff */ }
adc1 = MyAdc::get_adc_8bit_result();
/*¤*/
// Use variables to avoid warnings.
if (adc1 == adc2) PIN_ADC3::DDR = 1;
// «ADC_BACKGROUND[^ ,]»
AdcWTask::init();
sei();
AdcWTask::start_adc_8bit();
/*¤*/
for(;;);
}
// «REGISTER_IRQS»
#include REGISTER_IRQS
/*¤*/