Skip to content
GitLab
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Jan Kasprzak
tinyboard
Commits
d024b5fc
Commit
d024b5fc
authored
Apr 29, 2013
by
Jan Kasprzak
Browse files
adc.c: for one pwmled only
parent
e207868d
Changes
1
Hide whitespace changes
Inline
Side-by-side
projects/step-up/adc.c
View file @
d024b5fc
...
...
@@ -4,32 +4,13 @@
#include
"lights.h"
#define BATTERY_ADC (N_PWMLEDS + 0)
#define BUTTON_ADC (N_PWMLEDS + 1)
#define ZERO_ADC (N_PWMLEDS + 2)
#define ZERO_ADC 1
//#define NUM_ADCS ZERO_ADC
#define NUM_ADCS 1
struct
{
unsigned
char
read_zero_log
:
2
;
unsigned
char
read_drop_log
:
2
;
unsigned
char
read_keep_log
:
4
;
}
adc_params
[
NUM_ADCS
]
=
{
{
0
,
1
,
PWMLED_ADC_SHIFT
},
// pwmled 1
#if 0
{ 0, 1, PWMLED_ADC_SHIFT }, // pwmled 2
{ 0, 1, PWMLED_ADC_SHIFT }, // pwmled 3
{ 0, 1, AMBIENT_ADC_SHIFT }, // ambient
{ 0, 1, 0 }, // battery
{ 0, 1, 0 }, // gain20
{ 0, 1, 0 }, // buttons
#endif
};
volatile
static
unsigned
char
current_adc
,
current_slow_adc
;
static
uint16_t
adc_sum
,
zero_count
,
drop_count
,
read_count
,
n_reads_log
;
static
uint16_t
adc_sum
,
read_zero
,
drop_count
,
read_count
,
n_reads_log
;
static
void
setup_mux
(
unsigned
char
n
)
{
...
...
@@ -72,23 +53,14 @@ void start_next_adc()
#endif
adc_sum
=
0
;
// we use the last iteration of zero_count to set up the MUX
// to its final destination, hence the "1 +" below:
if
(
adc_params
[
current_adc
].
read_zero_log
)
zero_count
=
1
+
(
1
<<
(
adc_params
[
current_adc
].
read_zero_log
-
1
));
else
zero_count
=
1
;
if
(
adc_params
[
current_adc
].
read_drop_log
)
drop_count
=
1
<<
(
adc_params
[
current_adc
].
read_drop_log
-
1
);
else
drop_count
=
0
;
read_zero
=
0
;
drop_count
=
1
;
read_count
=
1
<<
adc_params
[
current_adc
].
read_keep_log
;
n_reads_log
=
adc_params
[
current_adc
].
read_keep_log
;
read_count
=
1
<<
PWMLED_ADC_SHIFT
;
n_reads_log
=
PWMLED_ADC_SHIFT
;
// set up mux, start one-shot conversion
if
(
zero_count
>
1
)
if
(
read_zero
)
setup_mux
(
ZERO_ADC
);
else
setup_mux
(
current_adc
);
...
...
@@ -96,6 +68,7 @@ void start_next_adc()
ADCSRA
|=
_BV
(
ADSC
);
}
#if 0
void timer_start_slow_adcs()
{
if (current_slow_adc > N_PWMLEDS) { // Don't start if in progress
...
...
@@ -105,6 +78,7 @@ void timer_start_slow_adcs()
// TODO: kick the watchdog here
}
}
#endif
/*
* Single synchronous ADC conversion.
...
...
@@ -128,7 +102,6 @@ static uint16_t read_adc_sync()
void
init_adc
()
{
unsigned
char
i
;
current_slow_adc
=
NUM_ADCS
;
current_adc
=
0
;
...
...
@@ -170,16 +143,11 @@ static void adc1_gain20_adc(uint16_t adcsum)
ISR
(
ADC_vect
)
{
// IRQ handler
uint16_t
adcval
=
ADCW
;
if
(
zero_count
)
{
if
(
zero_count
>
1
)
{
ADCSRA
|=
_BV
(
ADSC
);
zero_count
--
;
return
;
}
else
{
setup_mux
(
current_adc
);
zero_count
=
0
;
/* fall through */
}
if
(
read_zero
)
{
setup_mux
(
current_adc
);
read_zero
=
0
;
ADCSRA
|=
_BV
(
ADSC
);
// drop this one, start the next
return
;
}
if
(
drop_count
)
{
...
...
@@ -189,7 +157,7 @@ ISR(ADC_vect) { // IRQ handler
}
if
(
read_count
)
{
ADCSRA
|=
_BV
(
ADSC
);
ADCSRA
|=
_BV
(
ADSC
);
// immediately start the next conversion
adc_sum
+=
adcval
;
read_count
--
;
return
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment