uMIDI
The swiss army knife for quick and easy developement of MIDI applications.
adc.h
Go to the documentation of this file.
1 
4 /*
5  * Copyright 2014, 2015 Sebastian Neuser
6  *
7  * This file is part of the uMIDI firmware.
8  *
9  * The uMIDI firmware is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * The uMIDI firmware is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with the uMIDI firmware. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 #ifndef _ADC_H
24 #define _ADC_H
25 
26 
27 //---------------- includes ----------------//
28 #include <stdint.h>
29 #include <avr/io.h>
30 
31 #include "math.h"
32 
33 
34 //---------------- data types ----------------//
35 
37 typedef uint16_t adc_accumulator;
38 
41 {
44 };
45 
50 {
55 };
56 
59 {
60  ADC_INPUT_0 = ADC_CH_MUXPOS_PIN0_gc,
61  ADC_INPUT_1 = ADC_CH_MUXPOS_PIN1_gc,
62  ADC_INPUT_2 = ADC_CH_MUXPOS_PIN2_gc,
63  ADC_INPUT_3 = ADC_CH_MUXPOS_PIN3_gc,
64  ADC_INPUT_4 = ADC_CH_MUXPOS_PIN4_gc,
65  ADC_INPUT_5 = ADC_CH_MUXPOS_PIN5_gc,
66  ADC_INPUT_6 = ADC_CH_MUXPOS_PIN6_gc,
67  ADC_INPUT_7 = ADC_CH_MUXPOS_PIN7_gc,
68 };
69 
74 {
77  void (*callback_signed)(int16_t value);
78  void (*callback_unsigned)(uint16_t value);
81 };
84 
88 struct adc_config
89 {
90  enum adc_conversion_mode mode;
91  enum ADC_PRESCALER_enum prescaler;
92  struct linear_range input_range;
93 };
94 
95 
96 //---------------- constants ----------------//
97 
99 #define ADC_RESOLUTION 12
100 
102 #define ADC_SAMPLE_BUFFER_SIZE (1 << (8*sizeof(adc_accumulator) - ADC_RESOLUTION))
103 
104 
105 //---------------- functions and procedures ----------------//
111 
116 
121 
128 void init_adc_conversion(const struct adc_conversion_config* config);
129 
135 void init_adc_module(const struct adc_config* config);
136 
138 void set_adc_channel0_max_value(void);
139 
141 void set_adc_channel0_min_value(void);
142 
146 void set_adc_offset(uint16_t offset);
147 
151 void trigger_adc(enum adc_channel channel);
152 
153 
154 //---------------- EOF ----------------//
155 #endif // ADC_H
156 
void init_adc_conversion(const struct adc_conversion_config *config)
Sets up an ADC conversion.
Definition: adc.c:175
API for a small collection of mathematical functions.
Use ADC input pin 2.
Definition: adc.h:62
adc_conversion_mode
ADC conversion mode.
Definition: adc.h:40
Use ADC input pin 3.
Definition: adc.h:63
void set_adc_offset(uint16_t offset)
Sets the ADC offset.
Definition: adc.c:205
void(* callback_unsigned)(uint16_t value)
Definition: adc.h:80
Use ADC input pin 0.
Definition: adc.h:60
ADC conversion yields signed values.
Definition: adc.h:43
uint16_t adc_accumulator
Data type for ADC mean value computations.
Definition: adc.h:37
enum adc_channel channel
ADC channel.
Definition: adc.h:75
uint16_t calibrate_adc_offset(enum adc_channel channel)
Calibrates the ADC offset using the given channel.
Definition: adc.c:132
ADC configuration common to all conversions.
Definition: adc.h:88
adc_input
ADC input pin.
Definition: adc.h:58
Use ADC input pin 4.
Definition: adc.h:64
ADC channel 1.
Definition: adc.h:52
ADC conversion yields unsigned values.
Definition: adc.h:42
void trigger_adc(enum adc_channel channel)
Triggers a conversion for the given channel.
Definition: adc.c:210
adc_channel
ADC channel.
Definition: adc.h:49
void set_adc_channel0_min_value(void)
Defines the current ADC value as MIDI min value.
Definition: adc.c:199
void set_adc_channel0_max_value(void)
Defines the current ADC value as MIDI max value.
Definition: adc.c:193
Use ADC input pin 5.
Definition: adc.h:65
static uint16_t offset
ADC offset.
Definition: adc.c:84
enum adc_input input
ADC input pin.
Definition: adc.h:76
void(* callback_signed)(int16_t value)
Definition: adc.h:77
Configuration for a linear scaling function.
Definition: math.h:46
void init_adc_module(const struct adc_config *config)
Initializes and calibrates the ADC.
Definition: adc.c:148
void enable_adc_interrupt(enum adc_channel channel)
Enables the interrupt for an ADC channel.
Definition: adc.c:143
Use ADC input pin 6.
Definition: adc.h:66
ADC channel 0.
Definition: adc.h:51
ADC conversion configuration.
Definition: adc.h:73
ADC channel 3.
Definition: adc.h:54
void disable_adc_interrupt(enum adc_channel channel)
Disables the interrupt for an ADC channel.
Definition: adc.c:138
Use ADC input pin 7.
Definition: adc.h:67
Use ADC input pin 1.
Definition: adc.h:61
ADC channel 2.
Definition: adc.h:53