From 0e5f2086619127d9e8c347dfe67cf1013251c0f2 Mon Sep 17 00:00:00 2001 From: roman Date: Tue, 14 Nov 2023 01:37:17 +0300 Subject: [PATCH] +MilliHertz resolution. +New tests. +compiled Uf2s. v0.2. --- CMakeLists.txt | 22 ++++++------ piodco/piodco.c | 17 +++++---- piodco/piodco.h | 3 +- test.c | 56 +++++++++++++++++++++++++----- test/pico-MFSK-9M4-test.uf2 | Bin 0 -> 26112 bytes test/pico-MilliHertz-9M4-test.uf2 | Bin 0 -> 26112 bytes test/pico-RTTY-9M4-test.uf2 | Bin 0 -> 26112 bytes test/pico-Wide4FSK-9M4-test.uf2 | Bin 0 -> 26112 bytes test/pico-sweep-9M4-test.uf2 | Bin 0 -> 26112 bytes 9 files changed, 70 insertions(+), 28 deletions(-) create mode 100644 test/pico-MFSK-9M4-test.uf2 create mode 100644 test/pico-MilliHertz-9M4-test.uf2 create mode 100644 test/pico-RTTY-9M4-test.uf2 create mode 100644 test/pico-Wide4FSK-9M4-test.uf2 create mode 100644 test/pico-sweep-9M4-test.uf2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 75eb213..966a8f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,38 +20,38 @@ if (PICO_SDK_VERSION_STRING VERSION_LESS "1.4.0") message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.4.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") endif() -project(pico-DCO-test C CXX ASM) +project(pico-hf-oscillator-test C CXX ASM) # Initialise the Raspberry Pi Pico SDK pico_sdk_init() # Add executable. Default name is the project name, version 0.1 -add_executable(pico-DCO-test) +add_executable(pico-hf-oscillator-test) -pico_generate_pio_header(pico-DCO-test ${CMAKE_CURRENT_LIST_DIR}/piodco/dco.pio) +pico_generate_pio_header(pico-hf-oscillator-test ${CMAKE_CURRENT_LIST_DIR}/piodco/dco.pio) -target_sources(pico-DCO-test PUBLIC +target_sources(pico-hf-oscillator-test PUBLIC ${CMAKE_CURRENT_LIST_DIR}/lib/assert.c ${CMAKE_CURRENT_LIST_DIR}/piodco/piodco.c ${CMAKE_CURRENT_LIST_DIR}/test.c ) -pico_set_program_name(pico-DCO-test "pico-DCO-test") -pico_set_program_version(pico-DCO-test "0.9") +pico_set_program_name(pico-hf-oscillator-test "pico-hf-oscillator-test") +pico_set_program_version(pico-hf-oscillator-test "0.9") -pico_enable_stdio_uart(pico-DCO-test 1) -pico_enable_stdio_usb(pico-DCO-test 0) +pico_enable_stdio_uart(pico-hf-oscillator-test 1) +pico_enable_stdio_usb(pico-hf-oscillator-test 0) # Add the standard include files to the build -target_include_directories(pico-DCO-test PRIVATE +target_include_directories(pico-hf-oscillator-test PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts or any other standard includes, if required ) # Add any user requested libraries target_link_libraries( - pico-DCO-test + pico-hf-oscillator-test pico_stdlib pico_sync pico_multicore @@ -61,4 +61,4 @@ target_link_libraries( hardware_vreg ) -pico_add_extra_outputs(pico-DCO-test) +pico_add_extra_outputs(pico-hf-oscillator-test) diff --git a/piodco/piodco.c b/piodco/piodco.c index a7363a1..8718f7c 100644 --- a/piodco/piodco.c +++ b/piodco/piodco.c @@ -97,22 +97,25 @@ int PioDCOInit(PioDco *pdco, int gpio, int cpuclkhz) return 0; } -/// @brief Sets DCO working frequency in Hz. +/// @brief Sets DCO working frequency in Hz: Fout = ui32_frq_hz + ui32_frq_millihz * 1e-3. /// @param pdco Ptr to DCO context. -/// @param ui32_frq_hz The frequency [Hz]. +/// @param ui32_frq_hz The `coarse` part of frequency [Hz]. +/// @param ui32_frq_millihz The `fine` part of frequency [Hz]. /// @return 0 if OK. -1 invalid freq. /// @attention The func can be called while DCO running. -int PioDCOSetFreq(PioDco *pdco, uint32_t ui32_frq_hz) +int PioDCOSetFreq(PioDco *pdco, uint32_t ui32_frq_hz, uint32_t ui32_frq_millihz) { assert_(pdco); assert(pdco->_clkfreq_hz); - ui32_frq_hz <<= 1; - /* RPix: Calculate an accurate value of phase increment of the freq per 1 tick of CPU clock, here 2^24 is scaling coefficient. */ - pdco->_frq_cycles_per_pi = (int32_t)(((int64_t)pdco->_clkfreq_hz * (int64_t)(1<<24) - + (ui32_frq_hz>>1)) / (int64_t)ui32_frq_hz); + const int64_t i64denominator = 2000LL * (int64_t)ui32_frq_hz + (int64_t)ui32_frq_millihz; + pdco->_frq_cycles_per_pi = (int32_t)(((int64_t)pdco->_clkfreq_hz * (int64_t)(1<<24) * 1000LL + +(i64denominator>>1)) / i64denominator); + + //pdco->_frq_cycles_per_pi = (int32_t)(((int64_t)pdco->_clkfreq_hz * (int64_t)(1<<24) + //+ (ui32_frq_hz>>1)) / (int64_t)ui32_frq_hz); si32precise_cycles = pdco->_frq_cycles_per_pi; diff --git a/piodco/piodco.h b/piodco/piodco.h index b7d6de9..8b4866d 100644 --- a/piodco/piodco.h +++ b/piodco/piodco.h @@ -34,6 +34,7 @@ // REVISION HISTORY // // Rev 0.1 05 Nov 2023 +// Rev 0.2 18 Nov 2023 // Initial release. // // LICENCE @@ -87,7 +88,7 @@ typedef struct } PioDco; int PioDCOInit(PioDco *pdco, int gpio, int cpuclkhz); -int PioDCOSetFreq(PioDco *pdco, uint32_t ui32_frq_hz); +int PioDCOSetFreq(PioDco *pdco, uint32_t ui32_frq_hz, uint32_t ui32_frq_millihz); void PioDCOStart(PioDco *pdco); void PioDCOStop(PioDco *pdco); diff --git a/test.c b/test.c index 478a4a7..49bbfa0 100644 --- a/test.c +++ b/test.c @@ -95,7 +95,7 @@ void core1_entry() PioDCOStart(&DCO); /* Set initial freq. */ - assert_(0 == PioDCOSetFreq(&DCO, freq_hz)); + assert_(0 == PioDCOSetFreq(&DCO, freq_hz, 0u)); /* Run the main DCO algorithm. It spins forever. */ PioDCOWorker(&DCO); @@ -103,14 +103,13 @@ void core1_entry() void RAM (SpinnerMFSKTest)(void) { - int i = 0; uint32_t rndval = 77777777; for(;;) { /* This example sets new RND frequency every ~250 ms. Frequency shift is 5 Hz for each step. */ - PioDCOSetFreq(&DCO, GEN_FRQ_HZ - 5*(rndval & 7)); + PioDCOSetFreq(&DCO, GEN_FRQ_HZ - 5*(rndval & 7), 0u); /* LED signal */ gpio_put(PICO_DEFAULT_LED_PIN, 1); @@ -130,7 +129,7 @@ void RAM (SpinnerSweepTest)(void) /* This example sets new frequency every ~250 ms. Frequency shift is 5 Hz for each step. */ - PioDCOSetFreq(&DCO, GEN_FRQ_HZ - 5*i); + PioDCOSetFreq(&DCO, GEN_FRQ_HZ - 5*i, 0u); /* LED signal */ gpio_put(PICO_DEFAULT_LED_PIN, 1); @@ -146,7 +145,6 @@ void RAM (SpinnerSweepTest)(void) void RAM (SpinnerRTTYTest)(void) { - int i = 0; int32_t df = 170; /* 170 Hz freq diff. */ uint32_t rndval = 77777777; for(;;) @@ -154,8 +152,7 @@ void RAM (SpinnerRTTYTest)(void) /* This example sets new PRN frequency every ~22 ms. Note: You should use precise timing while building a real transmitter. */ - - PioDCOSetFreq(&DCO, GEN_FRQ_HZ - df*(rndval & 1)); + PioDCOSetFreq(&DCO, GEN_FRQ_HZ - df*(rndval & 1), 0u); /* LED signal */ gpio_put(PICO_DEFAULT_LED_PIN, 1); @@ -167,6 +164,45 @@ void RAM (SpinnerRTTYTest)(void) } } +void RAM (SpinnerMilliHertzTest)(void) +{ + int i = 0; + for(;;) + { + /* This example sets new frequency every ~1s. + Frequency shift is 0.99 Hz for each step. + */ + PioDCOSetFreq(&DCO, GEN_FRQ_HZ, 990*(++i&1)); + + /* LED signal */ + gpio_put(PICO_DEFAULT_LED_PIN, 1); + sleep_ms(1000); + gpio_put(PICO_DEFAULT_LED_PIN, 0); + sleep_ms(1000); + } +} + +void RAM (SpinnerWide4FSKTest)(void) +{ + int32_t df = 100; /* 100 Hz freq diff * 4 = 400 Hz. */ + uint32_t rndval = 77777777; + for(;;) + { + /* This example sets new PRN frequency every ~20 ms. + Note: You should use precise timing while building a real transmitter. + */ + PioDCOSetFreq(&DCO, GEN_FRQ_HZ - df*(rndval & 3), 0u); + + /* LED signal */ + gpio_put(PICO_DEFAULT_LED_PIN, 1); + sleep_ms(20); + gpio_put(PICO_DEFAULT_LED_PIN, 0); + sleep_ms(20); + + PRN32(&rndval); + } +} + int main() { const uint32_t clkhz = PLL_SYS_MHZ * 1000000L; @@ -178,8 +214,10 @@ int main() multicore_launch_core1(core1_entry); //SpinnerSweepTest(); - //SpinnerMFSKTest(); - SpinnerRTTYTest(); + SpinnerMFSKTest(); + //SpinnerRTTYTest(); + //SpinnerMilliHertzTest(); + //SpinnerWide4FSKTest(); } void PRN32(uint32_t *val) diff --git a/test/pico-MFSK-9M4-test.uf2 b/test/pico-MFSK-9M4-test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..e6aa8e403d3905b34bc9d96549603309ef6598f4 GIT binary patch literal 26112 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 VhjRoA5aWL=^Z)bz_Y`3G|8I!56$1bO literal 0 HcmV?d00001 diff --git a/test/pico-MilliHertz-9M4-test.uf2 b/test/pico-MilliHertz-9M4-test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..a63d5e66b3c6c8c73074fc053209056aa3019a8d GIT binary patch literal 26112 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 MpZ~u{0fzto22d9a2><{9 literal 0 HcmV?d00001 diff --git a/test/pico-RTTY-9M4-test.uf2 b/test/pico-RTTY-9M4-test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..d4546ad1c8e037e40ebed15f66049e84756b9cc4 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/test/pico-Wide4FSK-9M4-test.uf2 b/test/pico-Wide4FSK-9M4-test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..b18503efda0d50d966c12fa5e72f76a216f557e3 GIT binary patch literal 26112 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 XOP$3zg87K?KbHCb`Tu(gF#P{FmroQN literal 0 HcmV?d00001 diff --git a/test/pico-sweep-9M4-test.uf2 b/test/pico-sweep-9M4-test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..7aded8a1d7616f6e868ad66197a1018e250f82c2 GIT binary patch literal 26112 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 z $(0)aC6l29RiIw9u&s+2iY4Z*?7xzfL{k(ZcvZ(R#q3fvHz5~Y$D$LtXyWrIN zKls~su;-&bJ4S(%rMd+lU&;>s#_3=b?jh7eW@_z=Yp@1FtjK_oGiT4)?HQdy}xep{6nX zQ{_K5j6Vx{n7}{A@igr1gy!gS8(d4jIT#mwTI8;Pg+t#d!4)+lC|@{4e04GE`ClP# z1iazc?)_+?b(wnPhwoz)&YUOGAI?JQ4j36t=Q-QyK8(3oM{8;8dXzok`}Tedxd-wJ z`;UqFS5DY55LwLj!9p|cFjL)RYD(dfC6RVC^)^|waZ-xjEU|d661om9R6FCq7h_5_ zr4)4lDQsKwy!de+t63*~wX&Sv9DD|M_PS-8qOq^HdIZO$mxukNc<|y3_$uyhqQm`S z|I5$5BOSkCeaL2o*9zZJ_~(W3&x^qS9eN-XMHBy0LQ@5;KuujydI6~ME?5j#?jnbm zDQ_*_M|q_ub1x;WZ!LP7o+7SNtK`W%#l_28GQLnU$GSsIu+OYGMC(g+xrvvKTPt*j z=p1X`QkgzLw34n+SA4G=YhNPka{t;_Lf4WGeX3MZO4={r9uOQ{Da0K}ps#4QTtjgs zI(@4^Bi|l1;u*lMf|tzwf?cb;BCQ0iyxsUdXif9rr%NF>OP!-!S$voLY2|VG>q@`! zJz0=<7(ayB;K@{%EH`Z=d6H*tzJ9JeS0;0lRxE%+_NV3e+26E#GNTvWQTXSF@z0OI z{|ojx)>DX5k1^KXS1=E0#L0nf&-^F3yW}DK|G3;U|H|U~HH@kkQ5O(AaL?5!9AAOP z$_Mdn}nyZjH)-}|qge}Ex?k*@( z2~KD9|3Uu`znS&_7DV9B57-Bed&*_o@#R3SJqs{^=@*=s{=#^A4W?Vh(+^|14buSY zo@m@%zk{#a-cYxVZ`j1oeT?5${#m}xwR2~~ZoamjuWxeI?cV+bkL$6w)PJUaBmQQ& zYuCodUAyXe*LK&g9sJylnAlbC+V})krSydtNn2Lqi@%MOFV`KfU z-LSTPd%df%9%>sJb{Bs7@xmpK7A(V&1QaZ|8x}2CvVf)CTk0C{61wIqoAMhP>$Ys) z?%Lh3D}Q%=<8D~h@ELy5V!p7TkXga$dray7q1|KnFT_utu>WkYscB1u7=IKTs!zix2rDXXL*Ig`CL4Y;)#tg?8j?7UX6HW;>q^!cn2eT*>1q$y?}eV zAn?i1Ivh20Y#}^`uNEG*=VH9U5t?axm>#2ROTl`Wmfm%$)QORT84Buo?P=O*t|^_J zXqlO>*A;)ulIkXf6{hFKfNveG-dd*^ac}E7YId!o?UG%xF9_q$WMl$=%_KE0 zBQ%B8*FV10qYsjn4^Pt}*arIK%3p&yH0`?6n#25?M zT&2sM#B{R6Cr?b*uqYi034xPA>sBpJZ5 z6{Sx_u2t6x*B*l0{C-<_ml)n4KZR?FR9lKZrD<&!?gN7(5a7enE-*iC0KE&-_?RO9 zi^BM`PR|7XY>m~N5S6mfuL6PPxC88;e6}f+6`pu9*MCVuUrKnl1>sR4OkZE^zc9~+r}5FLY&`AfKVIWqqZ%o`@LL!~x(aFZzj zO+-3u?1{HrA&b69q0CKVmXV5x0@E%z1^>b@{@~ literal 0 HcmV?d00001