diff --git a/testapp/Makefile b/testapp/Makefile index f399063a90405f0bbb0606392e282c0175276eec..ff77fa6530aaeb70b4dd539c54d925fc4f252a23 100644 --- a/testapp/Makefile +++ b/testapp/Makefile @@ -66,6 +66,9 @@ CMSIS_ROOT=$(LIBS_DIR)/CMSIS # Source files for this test (add path to VPATH below) SRCS = main.c +SRCS += ../lib/card10/oled96.c +SRCS += ../lib/card10/fonts.c + # Where to find source files for this test VPATH = . diff --git a/testapp/main.c b/testapp/main.c index fcde5494de108fab9c06d82426ecb725cc42f253..0c7b11a2d154d3eb46d1ac1f43e5b04c5b4afcc3 100644 --- a/testapp/main.c +++ b/testapp/main.c @@ -43,6 +43,8 @@ /***** Includes *****/ #include <stdio.h> #include <stdint.h> +#include <string.h> +#include <stdlib.h> #include "mxc_config.h" #include "led.h" #include "board.h" @@ -51,6 +53,7 @@ #include "rtc.h" #include "spi.h" #include "MAX30003.h" +#include "oled96.h" /***** Definitions *****/ @@ -174,6 +177,62 @@ void ecg_config(void) return; } +uint8_t content[1024]; + +void clear(void) +{ + memset(content, 0x00, 1024); +} + + +void set(uint8_t index, int8_t val) +{ + uint8_t *p = &content[index]; + + if(val < -31) val = -31; + if(val > 32) val = 32; + + int8_t pos = -val + 32; + p += (pos / 8) * 128; + + *p |= (1 << (pos % 8)); +} + +int16_t samples[256]; + +void update(void) +{ + clear(); + int16_t scale = 0; + for(int i=0; i<256; i++) { + if(abs(samples[i]) > scale) { + scale = abs(samples[i]); + } + } + + scale /= 32; + + for(int i=0; i<128; i++) { + set(i, ((samples[i*2] + samples[i*2 + 1]) / scale) / 2); + } + + oledset(content); +} + +uint8_t sample_count = 0; + +void add_sample(int16_t sample) +{ + memmove(samples, samples + 1, sizeof(*samples) * 255); + samples[255] = sample; + sample_count++; + + if(sample_count == 5) { + update(); + sample_count = 0; + } +} + // ***************************************************************************** int main(void) { @@ -198,6 +257,12 @@ int main(void) } } + oledInit(0x3c, 0, 0); + oledFill(0x00); + oledWriteString(0, 0, " card10", 1); + + TMR_Delay(MXC_TMR0, MSEC(1500), 0); + // Enable 32 kHz output //RTC_SquareWave(MXC_RTC, SQUARE_WAVE_ENABLED, F_32KHZ, NOISE_IMMUNE_MODE, NULL); @@ -226,14 +291,6 @@ int main(void) printf("%02x: 0x%06x\n", i, val); } - while (0) { - LED_On(0); - TMR_Delay(MXC_TMR0, MSEC(500), 0); - LED_Off(0); - TMR_Delay(MXC_TMR0, MSEC(500), 0); - //printf("count = %d\n", count++); - } - ecg_write_reg(SYNCH, 0); uint32_t ecgFIFO, readECGSamples, idx, ETAG[32], status; @@ -288,7 +345,8 @@ int main(void) // Print results for( idx = 0; idx < readECGSamples; idx++ ) { - printf("%6d\r\n", ecgSample[idx]); + //printf("%6d\r\n", ecgSample[idx]); + add_sample(ecgSample[idx]); } }