avr: make pulse constant and half parameters configurable per input
This commit is contained in:
parent
8f1836e8b8
commit
e5e352d5ca
|
@ -52,15 +52,20 @@ TYPE = 2300501
|
|||
PHASE = 1
|
||||
METERCONST= 5508
|
||||
# pulse settings
|
||||
PULSE_CONST = 1
|
||||
PULSE_HALF = 0
|
||||
PULSE_CONST_2 = 1
|
||||
PULSE_HALF_2 = 0
|
||||
PULSE_CONST_3 = 1
|
||||
PULSE_HALF_3 = 0
|
||||
PULSE_CONST_4 = 1
|
||||
PULSE_HALF_4 = 0
|
||||
|
||||
#
|
||||
SENSOR0 = 0123456789abcdef0123456789abcde0
|
||||
SENSOR1 = 0123456789abcdef0123456789abcde1
|
||||
SENSOR2 = 0123456789abcdef0123456789abcde2
|
||||
SENSOR3 = 0123456789abcdef0123456789abcde3
|
||||
#
|
||||
CEXTRA = -D DBG=$(DBG) -D PHASE=$(PHASE) -D METERCONST=$(METERCONST) -D PULSE_CONST=$(PULSE_CONST) -D PULSE_HALF=$(PULSE_HALF) -D 'SENSOR0="$(SENSOR0)"' -D 'SENSOR1="$(SENSOR1)"' -D 'SENSOR2="$(SENSOR2)"' -D 'SENSOR3="$(SENSOR3)"'
|
||||
CEXTRA = -D DBG=$(DBG) -D PHASE=$(PHASE) -D METERCONST=$(METERCONST) -D PULSE_CONST_2=$(PULSE_CONST_2) -D PULSE_HALF_2=$(PULSE_HALF_2) -D PULSE_CONST_3=$(PULSE_CONST_3) -D PULSE_HALF_3=$(PULSE_HALF_3) -D PULSE_CONST_4=$(PULSE_CONST_4) -D PULSE_HALF_4=$(PULSE_HALF_4) -D 'SENSOR0="$(SENSOR0)"' -D 'SENSOR1="$(SENSOR1)"' -D 'SENSOR2="$(SENSOR2)"' -D 'SENSOR3="$(SENSOR3)"'
|
||||
###############################################################################
|
||||
|
||||
|
||||
|
|
|
@ -50,12 +50,12 @@ volatile uint16_t timer = 0;
|
|||
|
||||
// interrupt service routine for INT0
|
||||
ISR(INT0_vect) {
|
||||
pulse_add(&measurements[2], &aux[2]);
|
||||
pulse_add(&measurements[2], &aux[2], PULSE_CONST_2, PULSE_HALF_2);
|
||||
}
|
||||
|
||||
// interrupt service routine for INT1
|
||||
ISR(INT1_vect) {
|
||||
pulse_add(&measurements[3], &aux[3]);
|
||||
pulse_add(&measurements[3], &aux[3], PULSE_CONST_3, PULSE_HALF_3);
|
||||
}
|
||||
|
||||
// interrupt service routine for PCI2 (PCINT20)
|
||||
|
@ -65,21 +65,22 @@ ISR(PCINT2_vect) {
|
|||
aux[4].toggle = true;
|
||||
}
|
||||
else {
|
||||
pulse_add(&measurements[4], &aux[4]);
|
||||
pulse_add(&measurements[4], &aux[4], PULSE_CONST_4, PULSE_HALF_4);
|
||||
}
|
||||
}
|
||||
**/
|
||||
|
||||
void pulse_add(volatile struct sensor *measurement, volatile struct state *aux) {
|
||||
void pulse_add(volatile struct sensor *measurement, volatile struct state *aux, uint8_t pulse_const, uint8_t pulse_half) {
|
||||
measurement->value += pulse_const;
|
||||
|
||||
if (aux->half == true) {
|
||||
measurement->value += PULSE_CONST + 1;
|
||||
measurement->value += 1;
|
||||
}
|
||||
else {
|
||||
measurement->value += PULSE_CONST;
|
||||
|
||||
if (pulse_half) {
|
||||
aux->half = !aux->half;
|
||||
}
|
||||
#if PULSE_HALF
|
||||
aux->half = !aux->half;
|
||||
#endif
|
||||
|
||||
aux->pulse = true;
|
||||
aux->time = time.ms;
|
||||
}
|
||||
|
|
|
@ -50,12 +50,28 @@
|
|||
#error "METERCONST not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_CONST
|
||||
#error "PULSE_CONST not defined"
|
||||
#ifndef PULSE_CONST_2
|
||||
#error "PULSE_CONST_2 not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_HALF
|
||||
#error "PULSE_HALF not defined"
|
||||
#ifndef PULSE_HALF_2
|
||||
#error "PULSE_HALF_2 not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_CONST_3
|
||||
#error "PULSE_CONST_3 not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_HALF_3
|
||||
#error "PULSE_HALF_3 not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_CONST_4
|
||||
#error "PULSE_CONST_4 not defined"
|
||||
#endif
|
||||
|
||||
#ifndef PULSE_HALF_4
|
||||
#error "PULSE_HALF_4 not defined"
|
||||
#endif
|
||||
|
||||
#define START 0
|
||||
|
@ -125,5 +141,5 @@ struct sensor {
|
|||
// prototypes
|
||||
void WDT_off(void);
|
||||
void WDT_on(void);
|
||||
void pulse_add(volatile struct sensor *measurement, volatile struct state *aux);
|
||||
void pulse_add(volatile struct sensor *measurement, volatile struct state *aux, uint8_t pulse_const, uint8_t pulse_half);
|
||||
void send(uint8_t msg_type, const struct sensor *measurement, const struct state *aux);
|
||||
|
|
Loading…
Reference in New Issue