diff --git a/adc/Makefile b/adc/Makefile index 826e24e..6a6a6f2 100644 --- a/adc/Makefile +++ b/adc/Makefile @@ -44,8 +44,6 @@ $(BLD)%.o: %.cpp @$(CXX) -std=c++17 -fno-rtti -c $(CFLAGS) $< -o $@ $(BLD): mkdir $(BLD) -sin.c: sin.py - ./sin.py flash: $(PRJ).elf minichlink -w $(PRJ).bin flash -b # vycisti diff --git a/adc/adcclass.cpp b/adc/adcclass.cpp index 0868fd8..0803547 100644 --- a/adc/adcclass.cpp +++ b/adc/adcclass.cpp @@ -93,7 +93,7 @@ static inline void AdcPostInit (void) noexcept { AdcClass::AdcClass() noexcept : pL (buffer), pH (buffer + HALF_LEN), dst (nullptr) { pInstance = this; EnableClock (); - Timer2Init (1000u); + Timer2Init (100u); NVIC.EnableIRQ (DMA1_Channel1_IRQn); AdcCalibrate(); Dma1Ch1Init (buffer); diff --git a/adc/main.cpp b/adc/main.cpp index eb7a517..6bbf3dd 100644 --- a/adc/main.cpp +++ b/adc/main.cpp @@ -10,16 +10,17 @@ class Process : public OneWay { Print cout; FIFO data; int pass_cnt; + unsigned average; public: explicit Process () noexcept : OneWay (), - led (GPIOD, 4), serial (115200u), cout (DEC), data(), pass_cnt (0) { + led (GPIOD, 4), serial (115200u), cout (DEC), data(), pass_cnt (0), average (0u) { cout += serial; } unsigned Send (uint16_t * const ptr, const unsigned len) override { - unsigned sum = 0u; - for (unsigned n=0; n>= 4; - data.Write (static_cast (sum)); + // Klouzavý průměr s exponenciálním zapomínáním lépe drží stálou hodnotu pro zobrazení. + // Průměr je rozšířen na 12-bit (0 - 4096) násobením hodnoty 4. + for (unsigned n=0; n> 4; + data.Write (static_cast (average)); return len; } void pass () { @@ -33,7 +34,7 @@ class Process : public OneWay { }; ////////////////////////////////////// /* Tohle DEMO je složitější. ADC má - * pevnou frekvenci vzorkování 1kHz, + * pevnou frekvenci vzorkování 10kHz, * vzorky se průměrují v přerušení a * vypisují (v jiném přerušení) na * sériový port.