adc average
This commit is contained in:
parent
a4c3361300
commit
40cc0ee799
3 changed files with 8 additions and 9 deletions
|
@ -44,8 +44,6 @@ $(BLD)%.o: %.cpp
|
||||||
@$(CXX) -std=c++17 -fno-rtti -c $(CFLAGS) $< -o $@
|
@$(CXX) -std=c++17 -fno-rtti -c $(CFLAGS) $< -o $@
|
||||||
$(BLD):
|
$(BLD):
|
||||||
mkdir $(BLD)
|
mkdir $(BLD)
|
||||||
sin.c: sin.py
|
|
||||||
./sin.py
|
|
||||||
flash: $(PRJ).elf
|
flash: $(PRJ).elf
|
||||||
minichlink -w $(PRJ).bin flash -b
|
minichlink -w $(PRJ).bin flash -b
|
||||||
# vycisti
|
# vycisti
|
||||||
|
|
|
@ -93,7 +93,7 @@ static inline void AdcPostInit (void) noexcept {
|
||||||
AdcClass::AdcClass() noexcept : pL (buffer), pH (buffer + HALF_LEN), dst (nullptr) {
|
AdcClass::AdcClass() noexcept : pL (buffer), pH (buffer + HALF_LEN), dst (nullptr) {
|
||||||
pInstance = this;
|
pInstance = this;
|
||||||
EnableClock ();
|
EnableClock ();
|
||||||
Timer2Init (1000u);
|
Timer2Init (100u);
|
||||||
NVIC.EnableIRQ (DMA1_Channel1_IRQn);
|
NVIC.EnableIRQ (DMA1_Channel1_IRQn);
|
||||||
AdcCalibrate();
|
AdcCalibrate();
|
||||||
Dma1Ch1Init (buffer);
|
Dma1Ch1Init (buffer);
|
||||||
|
|
13
adc/main.cpp
13
adc/main.cpp
|
@ -10,16 +10,17 @@ class Process : public OneWay {
|
||||||
Print cout;
|
Print cout;
|
||||||
FIFO<uint16_t, 8> data;
|
FIFO<uint16_t, 8> data;
|
||||||
int pass_cnt;
|
int pass_cnt;
|
||||||
|
unsigned average;
|
||||||
public:
|
public:
|
||||||
explicit Process () noexcept : OneWay (),
|
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;
|
cout += serial;
|
||||||
}
|
}
|
||||||
unsigned Send (uint16_t * const ptr, const unsigned len) override {
|
unsigned Send (uint16_t * const ptr, const unsigned len) override {
|
||||||
unsigned sum = 0u;
|
// Klouzavý průměr s exponenciálním zapomínáním lépe drží stálou hodnotu pro zobrazení.
|
||||||
for (unsigned n=0; n<len; n++) sum += ptr [n];
|
// Průměr je rozšířen na 12-bit (0 - 4096) násobením hodnoty 4.
|
||||||
sum >>= 4;
|
for (unsigned n=0; n<len; n++) average = (15u * average + 4u * ptr [n]) >> 4;
|
||||||
data.Write (static_cast<uint16_t> (sum));
|
data.Write (static_cast<uint16_t> (average));
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
void pass () {
|
void pass () {
|
||||||
|
@ -33,7 +34,7 @@ class Process : public OneWay {
|
||||||
};
|
};
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
/* Tohle DEMO je složitější. ADC má
|
/* 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
|
* vzorky se průměrují v přerušení a
|
||||||
* vypisují (v jiném přerušení) na
|
* vypisují (v jiném přerušení) na
|
||||||
* sériový port.
|
* sériový port.
|
||||||
|
|
Loading…
Reference in a new issue