Улучшения

- улушчено отображение на OLED
- убраны настройки шага частоты и количества повторов
- сделан перебор только реализуемых частот
- увеличена точность, на 1МГц 1.25%, в остальных до 1%
- точное измерение TOTAL TIME
This commit is contained in:
2026-08-08 10:18:50 +03:00
parent a8099bf2b8
commit 21f8fe8e13
12 changed files with 293 additions and 151 deletions

View File

@@ -7,20 +7,21 @@ class Measurement {
public:
explicit Measurement(PulseReceiver &receiver) : receiver_(receiver) {}
bool start(float expectedHz, float expectedDuty, float tolerancePct,
uint32_t testTimeMs, uint8_t repeats, uint8_t settleCycles);
uint32_t testTimeMs, uint8_t settleCycles);
MeasureState update();
bool continueAfterDisplay();
void abort();
MeasureState state() const { return state_; }
FailReason reason() const { return stats_.reason; }
const StageStats &stats() const { return stats_; }
uint8_t progressStep() const { return currentStep_; }
bool statsSnapshot(StageStats &out) const;
private:
static void taskEntry(void *context);
void taskLoop();
MeasureState processOnce();
void fail(FailReason reason);
void completeStep();
void completeMeasurement();
void publishStats();
PulseReceiver &receiver_;
volatile MeasureState state_ = MeasureState::IDLE;
@@ -30,11 +31,11 @@ class Measurement {
mutable portMUX_TYPE statsMux_ = portMUX_INITIALIZER_UNLOCKED;
PeriodLimits limits_ = {};
uint32_t expectedHz_ = 0;
uint8_t repeats_ = 0, settleCycles_ = 0, settleLeft_ = 0;
uint8_t currentRepeat_ = 0, currentStep_ = 0, totalSteps_ = 0;
float expectedDutyPct_ = 0.0f;
uint8_t settleCycles_ = 0, settleLeft_ = 0;
uint64_t measurementStartTick_ = 0, deadlineTick_ = 0, stepTicks_ = 0;
uint32_t startedMs_ = 0, measurementStartMs_ = 0, lastPeriodMs_ = 0;
uint32_t stepTimeMs_ = 1, expectedPeriodMs_ = 1;
uint32_t repeatPeriods_[10] = {};
volatile uint8_t currentStep_ = 0;
PulsePeriod periodBatch_[PERIOD_BATCH_SIZE] = {};
};