From b193631ad74e8a5fa2fceb859a390cc22aecf75e Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 5 Sep 2016 12:05:03 +0200 Subject: [PATCH] introduce display muxer --- src/display.c | 3 --- src/displayMuxer.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ src/displayMuxer.h | 26 ++++++++++++++++++++++++ src/main.c | 3 +++ src/measure.c | 5 ++++- 5 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 src/displayMuxer.c create mode 100644 src/displayMuxer.h diff --git a/src/display.c b/src/display.c index e29e1e6..a8a669e 100644 --- a/src/display.c +++ b/src/display.c @@ -71,9 +71,6 @@ static void showNumber(uint8_t n) { gpioSetPin(*pattern, LOW); pattern++; } while (*pattern != PINS_END); - if (n < 0 || n > 9) { - volatile uint8_t error = 1; - } pattern = NUMBERS[n]; do { gpioSetPin(*pattern, HIGH); diff --git a/src/displayMuxer.c b/src/displayMuxer.c new file mode 100644 index 0000000..c647b82 --- /dev/null +++ b/src/displayMuxer.c @@ -0,0 +1,49 @@ +/* + * displayMuxer.c + * + * Created on: 05.09.2016 + * Author: wn + */ + + +#include +#include +#include + +#include "displayMuxer.h" +#include "display.h" + + +typedef struct { + uint8_t value; + bool valid; +} tDisplayValue; + +tDisplayValue displayValues[MUX_ENDS]; + + +void displayMuxerInit(void *handleArg) { + for (tMuxerSlot i = FIRST_MUX; i < MUX_ENDS; i++) { + displayValues[i].value = 0; + displayValues[i].valid = false; + } +} + +void displayMuxerExec(void *handleArg) { + static tMuxerSlot slot = FIRST_MUX; + + if (displayValues[slot].valid) { + displaySetValue(displayValues[slot].value); + } + + slot++; + if (slot == MUX_ENDS) { + slot = FIRST_MUX; + } +} + +void displayMuxerSetValue(uint8_t value, bool valid, tMuxerSlot slot) { + displayValues[slot].value = value; + displayValues[slot].valid = valid; +} + diff --git a/src/displayMuxer.h b/src/displayMuxer.h new file mode 100644 index 0000000..21d972c --- /dev/null +++ b/src/displayMuxer.h @@ -0,0 +1,26 @@ +/* + * displayMuxer.h + * + * Created on: 05.09.2016 + * Author: wn + */ + +#ifndef DISPLAYMUXER_H_ +#define DISPLAYMUXER_H_ + +#include +#include + +typedef enum { + FIRST_MUX = 0, + TIMER_MUX = FIRST_MUX, + TEMPERATURE_MUX, + MUX_ENDS +} tMuxerSlot; + +void displayMuxerInit(void *handleArg); +void displayMuxerExec(void *handleArg); +void displayMuxerSetValue(uint8_t value, bool valid, tMuxerSlot slot); + + +#endif /* DISPLAYMUXER_H_ */ diff --git a/src/main.c b/src/main.c index a6f4ebc..d45b8d9 100644 --- a/src/main.c +++ b/src/main.c @@ -13,6 +13,7 @@ #include "gpio.h" #include "time.h" #include "display.h" +#include "displayMuxer.h" #include "PontCoopScheduler.h" // #include "testTask.h" #include "measure.h" @@ -44,12 +45,14 @@ int main() { // testTaskInit(&testTaskHandle2, TESTPIN2); measureInit(NULL); + displayMuxerInit(NULL); schAdd(displayExec, NULL, 0, 100); // schAdd(testTaskExec, &testTaskHandle1, 0, 20); // schAdd(testTaskExec, &testTaskHandle2, 2, 20); schAdd(measureStartConversion, NULL, 0, 1000); + schAdd(displayMuxerExec, NULL, 0, 500); __enable_interrupt(); diff --git a/src/measure.c b/src/measure.c index df33552..ae0dd83 100644 --- a/src/measure.c +++ b/src/measure.c @@ -8,9 +8,11 @@ #include #include #include +#include #include "measure.h" #include "PontCoopScheduler.h" +#include "displayMuxer.h" #include "display.h" #include "gpio.h" @@ -52,7 +54,8 @@ void measureCollectAndProcessConversion(void *handleArg) { uint8_t temperature = (uint8_t)t; - displaySetValue(temperature); + // displaySetValue(temperature); + displayMuxerSetValue(temperature, true, TEMPERATURE_MUX); //gpioSetPin(TESTPIN2, LOW); }