From 7ddc7e8f71d302d74bcfac35c1c4860cb1c559ba Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 13 Jun 2024 17:53:12 +0200 Subject: [PATCH] frequency to divider calculation --- generator.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/generator.c b/generator.c index f341b01..d4037d5 100644 --- a/generator.c +++ b/generator.c @@ -4,11 +4,28 @@ #include "generator.h" + + + + +const float BASE_FREQUENCY = 2457600.0; +const float MAIN_DIVIDER = 8388606.0; // 2^23 + + +static uint16_t frequencyToDivider(uint16_t freq) { + float f = (float) freq; + float n = (f * MAIN_DIVIDER) / BASE_FREQUENCY; + uint16_t i = (uint16_t) n; + if (n - i >= 0.5) { + i += 1; + } + return i; +} + void generatorInit() { P1DIR |= BIT0 | BIT1 | BIT2 | BIT3; P1OUT |= BIT0 | BIT1 | BIT2 | BIT3; - - genShifter(0, 0x8002); + genShifter(0, frequencyToDivider(441)); }