{"id":1512,"date":"2025-08-27T19:43:46","date_gmt":"2025-08-27T18:43:46","guid":{"rendered":"https:\/\/axotron.se\/blog\/?p=1512"},"modified":"2025-08-27T19:43:48","modified_gmt":"2025-08-27T18:43:48","slug":"foxoringsandare-med-raspberry-pi-pico-del-1","status":"publish","type":"post","link":"https:\/\/axotron.se\/blog\/foxoringsandare-med-raspberry-pi-pico-del-1\/","title":{"rendered":"Foxorings\u00e4ndare med Raspberry Pi Pico \u2013 del 1"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-medium-font-size\">En resa mot kr\u00e5ngligare mjukvara f\u00f6r att<br>med minimalistisk h\u00e5rdvara f\u00e5 fina RF-egenskaper<\/h2>\n\n\n\n<p><em>Den h\u00e4r artikeln publicerades f\u00f6rst i QTC nummer 1 2025.<\/em><\/p>\n\n\n\n<p><em>Programkod, filer f\u00f6r kretskortstillverkning och 3D-modeller f\u00f6r den f\u00e4rdiga s\u00e4ndaren finns p\u00e5 <a href=\"https:\/\/github.com\/per-magnusson\/RP2350-Foxoring-Transmitter\">https:\/\/github.com\/per-magnusson\/RP2350-Foxoring-Transmitter<\/a>. Texten h\u00e4r i del 1 beskriver hur mjukvaran fungerar och utvecklades mot att generera allt b\u00e4ttre radiosignaler direkt fr\u00e5n pinnar p\u00e5 processorn.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"354\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup-1024x354.jpg\" alt=\"S\u00e4ndarprototyp\" class=\"wp-image-1514\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup-1024x354.jpg 1024w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup-300x104.jpg 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup-768x265.jpg 768w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup-1536x531.jpg 1536w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-01-lab-setup.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 1. S\u00e4ndarprototyp med Pi Pico 2, transformator, l\u00e5gpassfilter och antennanpassning.<\/em><\/figcaption><\/figure>\n\n\n\n<p>Foxoring \u00e4r en variant av r\u00e4vjakt\/radiopejlorientering d\u00e4r man anv\u00e4nder v\u00e4ldigt svaga s\u00e4ndare som bara h\u00f6rs inom en radie av 100 m eller s\u00e5. F\u00f6r att hitta fram till pejlbart avst\u00e5nd fr\u00e5n s\u00e4ndaren \u00e4r den ungef\u00e4rliga positionen inritad p\u00e5 kartan, s\u00e5 man orienterar sig fram till n\u00e4rheten av s\u00e4ndaren och pejlar sig fram sista biten. Foxoring \u00e4r inte s\u00e5 vanligt i Sverige och f\u00f6rekommer varken p\u00e5 de nationella t\u00e4vlingarna eller p\u00e5 n\u00e5got SM. Inte heller finns grenen med p\u00e5 NM, men v\u00e4l p\u00e5 EM och VM, s\u00e5 kanske borde vi i Sverige k\u00f6ra foxoringtr\u00e4ningar och -t\u00e4vlingar lite oftare?<\/p>\n\n\n\n<p>Personligen gillar jag grenen dels f\u00f6r att jag som i grunden \u00e4r orienterare har en f\u00f6rdel av att jag beh\u00e4rskar orienteringsmomentet som \u00e4r mer uttalat i denna t\u00e4vlingsform \u00e4n i vanlig r\u00e4vjakt, dels f\u00f6r att de svaga signalerna s\u00e4tter mottagaren p\u00e5 prov och g\u00f6r att man har mer att vinna p\u00e5 att utveckla k\u00e4nsligare mottagare. F\u00f6r vanlig r\u00e4vjakt p\u00e5 80m-bandet \u00e4r det inget st\u00f6rre problem att bygga en tillr\u00e4ckligt l\u00e5gbrusig mottagare och g\u00f6ra antennen tillr\u00e4ckligt k\u00e4nslig, men p\u00e5 just foxoring ger varje dB extra signal\/brusf\u00f6rh\u00e5llande en liten extra f\u00f6rdel eftersom man d\u00e5 kan h\u00f6ra s\u00e4ndaren p\u00e5 l\u00e4ngre avst\u00e5nd och tidigare styra in mot den.<\/p>\n\n\n\n<p>F\u00f6r att testa mina egenbyggda mottagare satte jag f\u00f6r l\u00e4nge sedan ihop en enkel s\u00e4ndare d\u00e4r en Si5351 (ganska billig PLL\/klockgenerator som \u00e4r popul\u00e4r i amat\u00f6rradiosammanhang) sk\u00f6ter b\u00e5de frekvenssyntes och agerar (svagt) slutsteg. Med en 3 m l\u00e5ng antenn h\u00f6rs den p\u00e5 \u00e5tminstone 500 m avst\u00e5nd. S\u00e5 att anv\u00e4nda en s\u00e5dan, ihop med en processor som konfigurerar den och sk\u00f6ter morses\u00e4ndandet, som grund f\u00f6r en foxorings\u00e4ndare \u00e4r en uppenbar m\u00f6jlighet.<\/p>\n\n\n\n<p>Via Peder Haugaard Pedersen, SM0GNS, fick jag dock tips om ett s\u00e4tt att anv\u00e4nda en Raspberry Pi Pico, allts\u00e5 en litet kort med en mikrokontroller, att sj\u00e4lvst\u00e4ndigt skapa signaler i 80m-bandet helt utan behov av en extern PLL eller oscillator. F\u00e4rdiga kort med processorn RP2040 (och den nyare RP2350), USB-kontakt, minne och sp\u00e4nningsregulator kostar ca 70\u201380 kr, s\u00e5 det borde g\u00e5 att konstruera en enkel, l\u00e4ttbyggd och billig foxorings\u00e4ndare med ett s\u00e5dant kort som bas. Och med v\u00e4sentligt mycket l\u00e4gre str\u00f6mf\u00f6rbrukning \u00e4n om man dessutom beh\u00f6ver en separat Si5351. Processorerna g\u00e5r att programmera i mikro-python samt C\/C++ via t.ex. Arduinomilj\u00f6n. Sj\u00e4lv anv\u00e4nder jag oftast det senare.<\/p>\n\n\n\n<p>RP2040 och RP2350 har ett par unika och kraftfulla inbyggda periferienheter som kallas PIO (programmable input\/output) och som \u00e4r nyckeln till att dessa processorer g\u00e5r att anv\u00e4nda som HF-generatorer. PIO-modulerna \u00e4r en sorts enkla processorer som man kan programmera i ett begr\u00e4nsat assemblerspr\u00e5k.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PIO med frekvensdelare<\/h2>\n\n\n\n<p>Peders l\u00f6sning bygger p\u00e5 ett PIO-program med tv\u00e5 instruktioner, l\u00e4gg en utg\u00e5ng h\u00f6g och l\u00e4gg den sedan l\u00e5g (och hoppa tillbaka till b\u00f6rjan). En praktisk funktion i PIO:n \u00e4r att \u00e5terhoppet till b\u00f6rjan av programmet kan ske utan att det tar n\u00e5gon extra tid, s\u00e5 programmet skapar allts\u00e5 en symmetrisk fyrkantsv\u00e5g. Det lilla PIO-programmet ser ut s\u00e5 h\u00e4r:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.wrap_target\n   set   pins, 1   ; Set output high\n   set   pins, 0   ; Set output low\n.wrap<\/code><\/pre>\n\n\n\n<p>P\u00e5 <a href=\"#pioasm\" data-type=\"internal\" data-id=\"#pioasm\">[1]<\/a> finns en online-assemblator f\u00f6r PIO-program som omvandlar dem till C-kod som man kan inkludera i sitt C-program f\u00f6r att konfigurera PIO:n p\u00e5 \u00f6nskat s\u00e4tt.<\/p>\n\n\n\n<p>En finess i varje PIO \u00e4r att man kan skapa dess klocka genom att dela ned processorklockan. Neddelningsfaktorn kan vara ett br\u00e5ktal med \u00e5tta br\u00e5ktalsbitar, s\u00e5 man kan allts\u00e5 skapa klockfrekvenser (\u00e5tminstone i medeltal) som \u00e4r processorklockan delat med ett tal p\u00e5 formen N + A\/256 d\u00e4r N och A \u00e4r heltal. En vanlig processorklockfrekvens \u00e4r 133 MHz, men det g\u00e5r bra att \u00f6verklocka processorn till exempelvis 150, 200 eller till och med 275 MHz (fast utan garanti att det fungerar). 200 MHz verkar ganska s\u00e4kert, men 275 kanske inte fungerar helt robust p\u00e5 alla exemplar. H\u00f6gre frekvens resulterar ocks\u00e5 i h\u00f6gre str\u00f6mf\u00f6rbrukning. Den trots allt begr\u00e4nsade uppl\u00f6sningen p\u00e5 br\u00e5ktalsdelarna g\u00f6r att om man \u00f6nskar en viss frekvens i bandet mellan 3,5 och 3,6 MHz s\u00e5 f\u00e5r man ett fel p\u00e5 maximalt ca 750 Hz vid 133 MHz processorfrekvens och max ca 500 Hz fel n\u00e4r man utg\u00e5r fr\u00e5n 200 MHz. Ofta hamnar man n\u00e4rmare. Det h\u00e4r \u00e4r egentligen gott och v\u00e4l tillr\u00e4ckligt bra f\u00f6r \u00e4ndam\u00e5let eftersom det inte finns n\u00e5gra f\u00f6rutbest\u00e4mda kanalfrekvenser man m\u00e5ste h\u00e5lla sig till vid r\u00e4vjakt, utan kan v\u00e4lja en som g\u00e5r att realisera.<\/p>\n\n\n\n<p>N\u00e4r man inte ska s\u00e4nda (mellan morsepipen) kan man antingen stoppa PIO:n eller v\u00e4nda riktningen p\u00e5 pinnen till en ing\u00e5ng s\u00e5 att ingen signal kommer ut.<\/p>\n\n\n\n<p>Ut\u00f6ver de harmoniska \u00f6vertonerna vid multiplar av grundfrekvensen uppst\u00e5r oftast en m\u00e4ngd spurioser i spektrumet eftersom br\u00e5ktalsdelaren hoppar mellan olika heltal f\u00f6r att i medeltal hamna r\u00e4tt. Exakt var spurioserna hamnar och hur starka de blir \u00e4r olika f\u00f6r olika delarv\u00e4rden. Figur 2a-d visar spektrum f\u00f6r n\u00e5gra olika s\u00e4ndarfrekvenser vid 200\u00a0MHz processorklocka. De tv\u00e5 renaste spektrumen har delare som \u00e4r 28,5 respektive 28,0. Grundtonen \u00e4r den h\u00f6gsta toppen medan tredje \u00f6vertonen, HD3, ligger n\u00e4ra h\u00f6gra kanten. Andra \u00f6vertonen, HD2, \u00e4r bara signifikant i f\u00f6rsta spektrumet d\u00e4r delaren \u00e4r 28,5.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02a-clkdiv-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02a-clkdiv-3508772.png\" alt=\"\" class=\"wp-image-1516\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02a-clkdiv-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02a-clkdiv-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02a-clkdiv-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 2a. Ofiltrerat spektrum f\u00f6r 3\u00a0508\u00a0772 Hz<\/em> vid 200\u00a0MHz processorklocka och klockdelare till PIO. Frekvensomr\u00e5det \u00e4r fr\u00e5n 1 MHz till 11 MHz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02b-clkdiv-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02b-clkdiv-3530000.png\" alt=\"\" class=\"wp-image-1517\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02b-clkdiv-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02b-clkdiv-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02b-clkdiv-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 2b. Ofiltrerat spektrum f\u00f6r 3\u00a0530\u00a0000 Hz.<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02c-clkdiv-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02c-clkdiv-3550000.png\" alt=\"\" class=\"wp-image-1518\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02c-clkdiv-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02c-clkdiv-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02c-clkdiv-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 2c. Ofiltrerat spektrum f\u00f6r 3\u00a0550\u00a0000 Hz.<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02d-clkdiv-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02d-clkdiv-3571429.png\" alt=\"\" class=\"wp-image-1519\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02d-clkdiv-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02d-clkdiv-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-02d-clkdiv-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 2d. Ofiltrerat spektrum f\u00f6r 3\u00a0571\u00a0429 Hz.<\/em><\/figcaption><\/figure>\n\n\n\n<p>F\u00f6r att f\u00e5 en komplett s\u00e4ndare beh\u00f6vs ytterligare n\u00e5gra detaljer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ett l\u00e5gpass- eller bandpassfilter som tv\u00e4ttar bort \u00f6vertonerna (speciellt den vid tre g\u00e5nger grundfrekvensen som i sig sj\u00e4lv bara \u00e4r ca 9 dB svagare \u00e4n grundtonen eftersom det handlar om en fyrkantsv\u00e5g),<\/li>\n\n\n\n<li>en anpassning mot den n\u00e4stan skrattretande korta antennen (30 cm \u00e4r inte mycket att komma med p\u00e5 80m-bandet),<\/li>\n\n\n\n<li>ytterligare lite programkod f\u00f6r att s\u00e4nda \u00f6nskad morsekod och kanske lyssna p\u00e5 n\u00e5gra knappar som v\u00e4ljer frekvens, r\u00e4vnummer och morsetakt,<\/li>\n\n\n\n<li>tre AA-batterier eller en LiPo-cell f\u00f6r att driva det hela och <\/li>\n\n\n\n<li>en liten l\u00e5da f\u00f6r v\u00e4derskydd.<\/li>\n<\/ul>\n\n\n\n<p>Ungef\u00e4r h\u00e4r kunde artikeln vara slut, men jag hade ett par id\u00e9er om f\u00f6rb\u00e4ttringar som sedan b\u00f6rjade f\u00f6r\u00f6ka sig&#8230;<\/p>\n\n\n\n<p>F\u00f6rb\u00e4ttringar som r\u00f6r mjukvaran g\u00f6r ju inte s\u00e4ndaren sv\u00e5rare eller dyrare att bygga, bara utvecklingstiden f\u00f6r programvaran l\u00e4ngre och programkoden kr\u00e5ngligare. S\u00e5 l\u00e5t oss se om det finns n\u00e5got att g\u00f6ra p\u00e5 fr\u00e4mst mjukvarusidan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">F\u00f6rber\u00e4knad v\u00e5gform<\/h2>\n\n\n\n<p>Efter lite googlande hittade jag <a href=\"#[2]\">[2]<\/a> som \u00e4r en mer komplett s\u00e4ndare byggd runt en RP2040. Den klarar AM, FM och SSB, delvis tack vare en extern modulator. Med sm\u00e5 f\u00f6r\u00e4ndringar i koden skulle den \u00e4ven klara CW. En id\u00e9 i denna l\u00f6sning som jag gillade var att den anv\u00e4nder en PIO p\u00e5 ett annat s\u00e4tt. Ist\u00e4llet f\u00f6r att ha ett PIO-program som autonomt v\u00e4xlar mellan etta och nolla p\u00e5 en utg\u00e5ng s\u00e5 matar huvudprogrammet i processorn ettor och nollor till PIO:n som sedan skickas ut i full fart. PIO:n har n\u00e4mligen ett FIFO-minne p\u00e5 \u00e5tta ord om 32 bitar som kan fyllas p\u00e5 fr\u00e5n processorn. P\u00e5 utg\u00e5ngen av FIFO:t finns ett 32-bitars skiftregister och det finns en praktisk PIO-assemblerinstruktion som tar en bit fr\u00e5n skiftregistret och skickar ut p\u00e5 en av processorns pinnar. N\u00e4r skiftregistret \u00e4r tomt laddas det med ett nytt ord fr\u00e5n FIFO:t. Se Figur 3.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-03-FIFO.png\"><img loading=\"lazy\" decoding=\"async\" width=\"149\" height=\"241\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-03-FIFO.png\" alt=\"\" class=\"wp-image-1521\" style=\"width:153px;height:auto\"\/><\/a><figcaption class=\"wp-element-caption\"><em>Figur 3. Ett FIFO med 8 st 32-bitar breda ord samt ett skiftregister h\u00f6r till varje tillst\u00e5ndsmaskin i en PIO.<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Det nya och v\u00e4ldigt korta PIO-programmet ser ut s\u00e5 h\u00e4r:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.wrap_target\n\u00a0\u00a0 out \u00a0 pins, 1\u00a0 ; Shift out one bit\n.wrap<\/code><\/pre>\n\n\n\n<p>\u00c4ven detta program loopar hela tiden, s\u00e5 varje klockcykel k\u00f6rs instruktionen som skiftar ut en bit fr\u00e5n skiftregistret till en pinne.<\/p>\n\n\n\n<p>Via DMA (direct memory access) kan man fylla p\u00e5 med data i FIFO:t n\u00e4r det finns plats ledigt utan att alls belasta sj\u00e4lva huvudprocessorn. S\u00e5 genom att i f\u00f6rv\u00e4g r\u00e4kna ut hur en fyrkantsv\u00e5g ska se ut f\u00f6r att skapa \u00f6nskad frekvens, l\u00e4gga fyrkantsv\u00e5gen p\u00e5 n\u00e5got st\u00e4lle i minnet och s\u00e4tta upp DMA och PIO s\u00e5 att datat i denna minnesbuffert upprepat pumpas ut till PIO:n i den takt det f\u00f6rbrukas s\u00e5 skapar man allts\u00e5 en fyrkantsv\u00e5g med \u00f6nskad frekvens. I detta fall k\u00f6r man PIO:n med fulla processorklockan.<\/p>\n\n\n\n<p>Vad \u00e4r d\u00e5 f\u00f6rdelen med detta \u00f6ver den f\u00f6rsta och betydligt enklare l\u00f6sningen som inte involverade n\u00e5gra minnesbuffertar och DMA? Det blir v\u00e4l en fyrkantsv\u00e5g i b\u00e5da fallen med ungef\u00e4r \u00f6nskad frekvens? Jo, en po\u00e4ng h\u00e4r \u00e4r att man kan approximera \u00f6nskad frekvens mer noggrant. Det man m\u00e5ste g\u00f6ra f\u00f6r att uppn\u00e5 det \u00e4r att v\u00e4lja l\u00e4ngden p\u00e5 minnesbufferten smart. Den best\u00e5r av 32-bitarsord och inneh\u00e5llet i ett ord f\u00f6rbrukas allts\u00e5 under 32 processorklockcykler. Eftersom samma sekvens spelas upp om och om igen \u00e4r det viktigt att bufferten inneh\u00e5ller ett helt antal perioder av v\u00e5gformen man vill skapa s\u00e5 att man inte f\u00e5r ett fult fashopp n\u00e4r man b\u00f6rjar om fr\u00e5n b\u00f6rjan av bufferten. Antalet 32-bitarsord i bufferten \u00e4r en fri parameter, s\u00e5 beroende p\u00e5 vilken frekvens man vill s\u00e4nda s\u00e5 kan man v\u00e4lja en l\u00e4mplig buffertl\u00e4ngd f\u00f6r att det ska g\u00e5 j\u00e4mnt upp med ett heltal perioder i v\u00e5gformen.<\/p>\n\n\n\n<p>Om f<sub>CPU<\/sub> \u00e4r processorfrekvensen, f<sub>HF<\/sub> \u00e4r \u00f6nskad b\u00e4rv\u00e5gsfrekvens, B \u00e4r antalet 32-bitarsord i bufferten och P \u00e4r antal perioder av v\u00e5gformen som bufferten inneh\u00e5ller vill man allts\u00e5 att B och P ska uppfylla:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Eq-01-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"173\" height=\"58\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Eq-01-1.png\" alt=\"f_HF = f_CPU*P\/(32*B)\" class=\"wp-image-1523\" style=\"object-fit:cover\"\/><\/a><\/figure>\n<\/div>\n\n\n<p>Eller:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Eq-02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"121\" height=\"67\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Eq-02.png\" alt=\"\" class=\"wp-image-1524\"\/><\/a><\/figure>\n<\/div>\n\n\n<p>RP2040 har ganska mycket minne f\u00f6r att vara en mikrokontroller, 264 kB, dvs \u00f6ver 65 000 st 32-bitarsord. Om vi begr\u00e4nsar oss till exempelvis 10 000 ord i bufferten kan B allts\u00e5 vara ett tal mellan 1 och 10\u00a0000. F\u00f6r varje B finns ett P som g\u00f6r att vi hamnar n\u00e4rmast den f<sub>HF<\/sub> vi vill ha med just det valet av B och f\u00f6r n\u00e5got B hamnar vi n\u00e4rmast av alla. Det vore l\u00e4tt att g\u00e5 igenom alla B, r\u00e4kna ut b\u00e4sta P och komma ih\u00e5g den hittills b\u00e4sta kombinationen av B och P. Med \u201dbara\u201d 10 000 som st\u00f6rsta v\u00e4rde p\u00e5 B g\u00e5r det dessutom ganska fort. Men varf\u00f6r g\u00f6ra det enkelt n\u00e4r man kan g\u00f6ra det b\u00e4ttre? I samband med att jag skrev mjukvara till mina pejlmottagare d\u00e4r en Si5351 anv\u00e4nds som lokaloscillator st\u00f6tte jag p\u00e5 ett liknande problem d\u00e4r motsvarigheten till B \u00e4r \u00f6ver en miljon vilket g\u00f6r att testande av alla kombinationer skulle ta opraktiskt l\u00e5ng tid. S\u00e5 d\u00e5 utvecklade jag en algoritm som mycket snabbare hittar fram till b\u00e4sta br\u00e5ktalsapproximation av ett tal n\u00e4r n\u00e4mnaren \u00e4r begr\u00e4nsad. Den bygger p\u00e5 n\u00e5got som kallas f\u00f6r Farey-sekvenser och den intresserade kan l\u00e4sa mer detaljer om hur det fungerar p\u00e5 min blogg <a href=\"#[3]\">[3]<\/a>. Denna f\u00e4rdiga l\u00f6sning kan man \u00e5teranv\u00e4nda \u00e4ven h\u00e4r f\u00f6r att snabbt hitta b\u00e4sta P och B givet f<sub>CPU<\/sub>, maximalt B och \u00f6nskad f<sub>HF<\/sub>.<\/p>\n\n\n\n<p>Med tekniken att pumpa ut data fr\u00e5n en f\u00e4rdigutr\u00e4knad buffert som \u00e4r upp till 10&nbsp;000 ord l\u00e5ng f\u00e5r man en betydligt finare frekvensuppl\u00f6sning. De m\u00f6jliga delningsfaktorerna \u00e4r inte likformigt f\u00f6rdelade och det visar sig att det finns ett par specialfall d\u00e4r maximala felet f\u00f6r frekvenser mellan 3,5 och 3,6 MHz \u00e4r ca 45 Hz om man klockar processorn med 200 MHz, men i de allra flesta fall blir frekvensfelet mycket mindre \u00e4n 1 Hz. F\u00f6r multiplar av 1 kHz blir felet 0 Hz. Man anv\u00e4nder d\u00e5 som mest B = 6250 ord, vilket ger f<sub>HF<\/sub> = P\u22191000 Hz. Om man n\u00f6jer sig med multiplar av 10 kHz kan man minska buffertl\u00e4ngden till 625 ord utan att f\u00e5 n\u00e5got avrundningsfel. Toleransen hos processorns kristall snarare \u00e4n sj\u00e4lva syntesmetoden avg\u00f6r d\u00e4rmed noggrannheten i den skapade frekvensen.<\/p>\n\n\n\n<p>Figur 4 visar hur n\u00e5gra spektrum blir med denna metod. M\u00e5lfrekvenserna \u00e4r desamma som i Figur 2. Som synes \u00e4r det inte n\u00e5gon st\u00f6rre skillnad p\u00e5 spektrumen j\u00e4mf\u00f6rt med den tidigare metoden, vilket \u00e4r f\u00f6rv\u00e4ntat eftersom det i b\u00e5da fallen handlar om rena fyrkantsv\u00e5gor som bara kan byta niv\u00e5 var femte nanosekund (eftersom klockfrekvensen \u00e4r 200 MHz).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04a-m1-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04a-m1-3508772.png\" alt=\"\" class=\"wp-image-1525\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04a-m1-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04a-m1-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04a-m1-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 4a. Ofiltrerat spektrum f\u00f6r 3\u00a0508\u00a0772 Hz vid 200\u00a0MHz processorklocka och f\u00f6rber\u00e4knad fyrkantsv\u00e5g. Frekvensomr\u00e5det \u00e4r fr\u00e5n 1\u00a0MHz till 11\u00a0MHz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04b-m1-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04b-m1-3530000.png\" alt=\"\" class=\"wp-image-1526\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04b-m1-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04b-m1-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04b-m1-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 4b. Ofiltrerat spektrum f\u00f6r 3\u00a0530\u00a0000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04c-m1-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04c-m1-3550000.png\" alt=\"\" class=\"wp-image-1527\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04c-m1-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04c-m1-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04c-m1-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 4c. Ofiltrerat spektrum f\u00f6r 3\u00a0550\u00a0000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04d-m1-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04d-m1-3571429.png\" alt=\"\" class=\"wp-image-1528\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04d-m1-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04d-m1-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-04d-m1-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 4d. Ofiltrerat spektrum f\u00f6r 3\u00a0571\u00a0429 Hz.<\/figcaption><\/figure>\n\n\n\n<p>Inte s\u00e5 viktig f\u00f6rb\u00e4ttring kanske, men det \u00e4r lite trevligt att ha st\u00f6rre frihet att v\u00e4lja frekvens. Man skulle ocks\u00e5 kunna anv\u00e4nda denna frihet f\u00f6r att kompensera f\u00f6r toleransen hos klockkristallen hos processorn om man gillar att finlira med s\u00e5dant och bem\u00f6dar sig att m\u00e4ta upp verklig frekvens vid den temperatur som s\u00e4ndaren ska arbeta i. Den stora vinningen visar sig dock vara sj\u00e4lva metoden att pumpa ut f\u00f6rber\u00e4knad data i full processorklocktakt till en pinne p\u00e5 processorn, f\u00f6r vi kan g\u00f6ra mer med denna metod.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sigma-delta<\/h2>\n\n\n\n<p>N\u00e4r v\u00e5gformen \u00e4r ber\u00e4knad i f\u00f6rv\u00e4g kan vi l\u00e4mna enkla fyrkantsv\u00e5gor och ge oss in p\u00e5 n\u00e5got mer kraftfullt och lite mer komplicerat. Sigma-delta-modulering anv\u00e4nds ofta i audiosammanhang f\u00f6r att med ganska enkel och mestadels digital h\u00e5rdvara skapa analog-till-digital (AD) och digital-till-analog (DA) -omvandlare med mycket h\u00f6g uppl\u00f6sning och dynamik; ofta 24 bitar eller mer.<\/p>\n\n\n\n<p>Principen f\u00f6r en sigma-delta DA-omvandlare bygger p\u00e5 att man h\u00e5ller reda p\u00e5 felet som skapas n\u00e4r man tr\u00f6sklar v\u00e5gformen (t.ex. n\u00e4r man avg\u00f6r om sinuskurvan ligger \u00f6ver eller under nollstrecket och v\u00e4ljer om utg\u00e5ngen ska vara h\u00f6g eller l\u00e5g) och tar med det i ber\u00e4kningen n\u00e4r man vid n\u00e4sta klockcykel \u00e5ter ska best\u00e4mma om utg\u00e5ngen ska vara h\u00f6g eller l\u00e5g. F\u00f6r att resultatet ska bli bra kr\u00e4vs att klocktakten \u00e4r m\u00e5nga g\u00e5nger h\u00f6gre \u00e4n den frekvens man vill skapa. Resultatet \u00e4r att utg\u00e5ngen hoppar snabbt mellan h\u00f6g och l\u00e5g n\u00e4r v\u00e5gformen man f\u00f6rs\u00f6ker efterlikna \u00e4r n\u00e4ra noll, medan den ligger mer stabilt h\u00f6g eller l\u00e5g n\u00e4r v\u00e5gformen \u00e4r n\u00e4ra en topp eller dal. Figur 5 visar hur det kan se ut.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"148\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus-1024x148.png\" alt=\"\" class=\"wp-image-1530\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus-1024x148.png 1024w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus-300x43.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus-768x111.png 768w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus-1536x222.png 1536w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-05-sigma-delta-sinus.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 5. Sigma-delta-modulering av en sinusv\u00e5g.<\/figcaption><\/figure>\n\n\n\n<p>I Figur 6 visas hur blockschemat f\u00f6r moduleringen ser ut. Signalen man vill modulera (sinusv\u00e5gen) kommer in fr\u00e5n v\u00e4nster vid X. Det tidigare felet adderas och resultatet D tr\u00f6sklas f\u00f6r att skapa utsignalen Y. Skillnaden mellan D och Y, dvs det fel som uppst\u00e5r vid tr\u00f6sklingen, r\u00e4knas ut och p\u00e5f\u00f6rs insignalen vid n\u00e4sta klockcykel.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-06-sigma-delta.png\"><img loading=\"lazy\" decoding=\"async\" width=\"379\" height=\"171\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-06-sigma-delta.png\" alt=\"\" class=\"wp-image-1531\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-06-sigma-delta.png 379w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-06-sigma-delta-300x135.png 300w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 6. Blockschema f\u00f6r en sigma-delta-modulator.<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Ser man p\u00e5 det spektralt visar det sig att sigma-delta-moduleringen g\u00f6r att kvantiseringsbruset trycks upp till h\u00f6gre frekvenser och d\u00e4rmed blir l\u00e4ttare att filtrera bort. Man eliminerar ocks\u00e5 mycket av de harmoniska \u00f6vertonerna. En ren fyrkantsv\u00e5g har en \u00f6verton vid tre g\u00e5nger grundfrekvensen (HD3) som \u00e4r endast 9 dB l\u00e4gre \u00e4n grundtonen, men med sigma-delta-modulering kan den tryckas ned betydligt och minska kraven p\u00e5 det analoga filtret f\u00f6re antennen.<\/p>\n\n\n\n<p>Sagt och gjort. Efter lite (eller ganska mycket\u2026) fels\u00f6kande fick jag till programkod som r\u00e4knar ut sigma-delta-modulerade v\u00e5gformer. Figur 7 visar v\u00e5gformen och Figur 8 spektrumen med denna metod. Tidigare var HD3 ca 9 dB under grundtonen, men nu \u00e4r den i v\u00e4rsta fallet ca 20 dB under och i andra fall 30\u201340 dB under. En hygglig f\u00f6rb\u00e4ttring allts\u00e5.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-07-2-level-sigma-delta.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-07-2-level-sigma-delta.png\" alt=\"\" class=\"wp-image-1532\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-07-2-level-sigma-delta.png 1020w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-07-2-level-sigma-delta-300x159.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-07-2-level-sigma-delta-768x408.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 7. V\u00e5gform vid sigma-delta-modulering av en sinusv\u00e5g.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08a-m2-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08a-m2-3508772.png\" alt=\"\" class=\"wp-image-1533\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08a-m2-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08a-m2-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08a-m2-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 8a. Ofiltrerat spektrum f\u00f6r 3\u00a0508\u00a0772 Hz vid 200\u00a0MHz processorklocka och f\u00f6rber\u00e4knad sigma-deltamodulerad v\u00e5gform. Frekvensomr\u00e5det \u00e4r fr\u00e5n 1\u00a0MHz till 11\u00a0MHz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08b-m2-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08b-m2-3530000.png\" alt=\"\" class=\"wp-image-1534\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08b-m2-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08b-m2-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08b-m2-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 8b. Ofiltrerat spektrum f\u00f6r 3\u00a0530\u00a0000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08c-m2-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08c-m2-3550000.png\" alt=\"\" class=\"wp-image-1535\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08c-m2-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08c-m2-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08c-m2-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 8c. Ofiltrerat spektrum f\u00f6r 3\u00a0550\u00a0000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08d-m2-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08d-m2-3571429.png\" alt=\"\" class=\"wp-image-1536\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08d-m2-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08d-m2-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-08d-m2-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 8d. Ofiltrerat spektrum f\u00f6r 3\u00a0571\u00a0429 Hz.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Differentiell utg\u00e5ng<\/h2>\n\n\n\n<p>Nu \u00e4r det v\u00e4l \u00e4nd\u00e5 s\u00e5 bra det kan bli? Vi har ju uppn\u00e5tt v\u00e4ldigt god frekvensuppl\u00f6sning och nedtryckta \u00f6vertoner, trots att vi bara anv\u00e4nder en mikrokontroller utan s\u00e4rskilt st\u00f6d f\u00f6r att agera HF-generator. Inte riktigt. Ytterligare en id\u00e9 jag fick var att anv\u00e4nda inte en utg\u00e5ng, utan tv\u00e5, som jobbar i motfas. En f\u00f6rdel med detta \u00e4r att man kan f\u00e5 ut h\u00f6gre effekt eftersom tv\u00e5 utg\u00e5ngar (tv\u00e5 \u201dslutsteg\u201d) hj\u00e4lps \u00e5t. En annan \u00e4r att man borde undertrycka andra ordningens distorsion som kommer av att pinnarna \u00e4r olika starka n\u00e4r de driver en h\u00f6g niv\u00e5 j\u00e4mf\u00f6rt med n\u00e4r de driver en l\u00e5g. En tredje och mindre viktig f\u00f6rdel \u00e4r att man minskar den h\u00f6gfrekventa str\u00f6mmen p\u00e5 matningen till processorn eftersom man drar ungef\u00e4r samma str\u00f6m hela tiden. D\u00e4rmed minskar ripplet p\u00e5 processorns matning (vilket i det h\u00e4r fallet knappast \u00e4r s\u00e4rskilt viktigt).<\/p>\n\n\n\n<p>F\u00f6r att skapa en differentiell signal g\u00e4ller det att skicka ut en nolla p\u00e5 den ena utg\u00e5ngen samtidigt som det skickas ut en etta p\u00e5 den andra och tv\u00e4rt om. Det kr\u00e4ver dubbelt s\u00e5 mycket f\u00f6rber\u00e4knad data eftersom det inte finns n\u00e5got s\u00e4tt att f\u00e5 en PIO att invertera en signal utan att det tar extra klockcykler. Om man anv\u00e4nder samma m\u00e4ngd minne f\u00f6r buffertarna s\u00e5 f\u00e5r man med denna metod allts\u00e5 bara h\u00e4lften s\u00e5 m\u00e5nga sampel och d\u00e4rmed lite s\u00e4mre frekvensuppl\u00f6sning. En fin finess \u00e4r att en PIO kan skicka ut mer \u00e4n en bit per klockcykel fr\u00e5n skiftregistret till olika pinnar. S\u00e5 genom att l\u00e4gga udda bitar med omv\u00e4nd polaritet mot j\u00e4mna och skriva om PIO-programmet att skicka ut tv\u00e5 bitar per klockcykel ist\u00e4llet f\u00f6r en s\u00e5 kan man skapa en differentiell signal. Enda \u00e4ndringen i PIO-programmet \u00e4r att ettan blir en tv\u00e5a f\u00f6r att skifta ut tv\u00e5 bitar per klockcykel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.wrap_target\n\u00a0\u00a0 out \u00a0 pins, 2\u00a0 ; Shift out two bits, one to each pin\n.wrap<\/code><\/pre>\n\n\n\n<p>Vilka pinnar som ber\u00f6rs st\u00e4lls in i f\u00f6rv\u00e4g genom registerskrivningar till PIO:n.<\/p>\n\n\n\n<p>En nackdel \u00e4r allts\u00e5 att det g\u00e5r \u00e5t dubbelt s\u00e5 mycket minne f\u00f6r samma l\u00e4ngd p\u00e5 sekvensen och en annan \u00e4r att DMA:n m\u00e5ste jobba dubbelt s\u00e5 fort, men det \u00e4r v\u00e4ldigt akademiska inv\u00e4ndningar eftersom det \u00e4nd\u00e5 finns mer kapacitet i form av minne och DMA-bandbredd \u00e4n man kan t\u00e4nkas beh\u00f6va i den h\u00e4r till\u00e4mpningen.<\/p>\n\n\n\n<p>F\u00f6r att skapa signalen till antennen beh\u00f6vs nu en balun, t.ex. i form av en transformator vars prim\u00e4rlindning kopplas mellan pinnarna som drivs i motfas med varandra. En kondensator i serie \u00e4r ocks\u00e5 en god id\u00e9 f\u00f6r att hindra str\u00f6mrusning om pinnarna av n\u00e5gon anledning skulle sluta \u00e4ndra niv\u00e5 hela tiden. Se Figur 9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-09-balun.png\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"295\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-09-balun.png\" alt=\"\" class=\"wp-image-1537\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-09-balun.png 673w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-09-balun-300x132.png 300w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 9. En transformator med kondensator i serie med prim\u00e4rlindningen agerar balun och omvandlar den differentiella signalen fr\u00e5n tv\u00e5 processorutg\u00e5ngar till en signal som kan driva antennen.<\/figcaption><\/figure>\n\n\n\n<p>I Figur 10 visas de nya spektrumen. F\u00f6rutom att signalniv\u00e5n \u00e4r n\u00e5gon dB h\u00f6gre har inte mycket h\u00e4nt. Men man kan notera att HD2 av n\u00e5gon anledning inte blev l\u00e4gre utan h\u00f6gre i sista spektrumet. Oklart varf\u00f6r.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10a-m2d-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10a-m2d-3508772.png\" alt=\"\" class=\"wp-image-1538\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10a-m2d-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10a-m2d-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10a-m2d-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 10a. Ofiltrerat spektrum f\u00f6r 3 508 772 Hz vid 200 MHz processorklocka och differentiell f\u00f6rber\u00e4knad sigma-deltamodulerad v\u00e5gform. Frekvensomr\u00e5det \u00e4r fr\u00e5n 1 MHz till 11 MHz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10b-m2d-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10b-m2d-3530000.png\" alt=\"\" class=\"wp-image-1539\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10b-m2d-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10b-m2d-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10b-m2d-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 10b. Ofiltrerat spektrum f\u00f6r 3 530 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10c-m2d-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10c-m2d-3550000.png\" alt=\"\" class=\"wp-image-1540\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10c-m2d-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10c-m2d-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10c-m2d-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 10c. Ofiltrerat spektrum f\u00f6r 3 550 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10d-m2d-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10d-m2d-3571429.png\" alt=\"\" class=\"wp-image-1541\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10d-m2d-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10d-m2d-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-10d-m2d-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 10d. Ofiltrerat spektrum f\u00f6r 3 571 429 Hz.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Treniv\u00e5ers kvantisering<\/h2>\n\n\n\n<p>N\u00e4r man har en differentiell signal mellan tv\u00e5 digitala utg\u00e5ngar finns det fyra m\u00f6jligheter; l\u00e5g-h\u00f6g och h\u00f6g-l\u00e5g har vi utnyttjat, men pinnarna skulle \u00e4ven kunna ha niv\u00e5erna l\u00e5g-l\u00e5g eller h\u00f6g-h\u00f6g. I de tv\u00e5 senare fallen blir ju signalen, som \u00e4r skillnaden mellan utg\u00e5ngarna, noll, men detta \u00e4r ocks\u00e5 anv\u00e4ndbart. Genom att till\u00e5ta dessa tillst\u00e5nd kan vi g\u00e5 ifr\u00e5n att kvantisera signalen till ett av tv\u00e5 m\u00f6jliga l\u00e4gen, som vi kan kalla +1 och -1, till att ha tre niv\u00e5er som vi kan kalla +1, 0 och -1. Kvantiseringen blir allts\u00e5 mindre grov, vilket ytterligare f\u00f6rb\u00e4ttrar spektrumet genom att en del spurioser undertrycks. Figur 11 visar v\u00e5gformen och Figur 12 spektrumen efter att treniv\u00e5ers kvantisering inf\u00f6rts.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-11-3-level-sigma-delta.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-11-3-level-sigma-delta.png\" alt=\"\" class=\"wp-image-1542\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-11-3-level-sigma-delta.png 1020w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-11-3-level-sigma-delta-300x159.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-11-3-level-sigma-delta-768x408.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 11. V\u00e5gform vid sigma-delta-modulering med treniv\u00e5ers kvantisering.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12a-m3-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12a-m3-3508772.png\" alt=\"\" class=\"wp-image-1543\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12a-m3-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12a-m3-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12a-m3-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 12a.  Ofiltrerat spektrum f\u00f6r 3 508 772 Hz vid treniv\u00e5ers kvantisering. En del av spurioserna har blivit betydligt l\u00e4gre j\u00e4mf\u00f6rt med tv\u00e5niv\u00e5ers.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12b-m3-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12b-m3-3530000.png\" alt=\"\" class=\"wp-image-1544\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12b-m3-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12b-m3-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12b-m3-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 12b.  Ofiltrerat spektrum f\u00f6r  3 530 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12c-m3-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12c-m3-3550000.png\" alt=\"\" class=\"wp-image-1545\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12c-m3-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12c-m3-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12c-m3-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 12c.  Ofiltrerat spektrum f\u00f6r 3 550 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12d-m3-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12d-m3-3571429.png\" alt=\"\" class=\"wp-image-1546\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12d-m3-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12d-m3-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-12d-m3-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 12d.  Ofiltrerat spektrum f\u00f6r 3 571 429 Hz.<\/figcaption><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Dithering<\/h1>\n\n\n\n<p>\u00c4r vi klara \u00e4nnu? Nej! Det finns mer att g\u00f6ra. Som synes finns fortfarande ett antal spurioser h\u00e4r och var i spektrumen. Detta \u00e4r allts\u00e5 inte \u00f6vertoner till grundtonen, utan skapas genom en komplicerad interaktion mellan tonen man vill skapa, den begr\u00e4nsade samplingsfrekvensen och kvantiseringen. Skr\u00e4p som \u00e4r ihopsamlat till en specifik frekvens \u00e4r v\u00e4rre \u00e4n om energin i skr\u00e4pet vore utspridd \u00f6ver ett bredare frekvensomr\u00e5de eftersom det l\u00e4ttare kan st\u00f6ra ut en smalbandig mottagare. Och spurioser n\u00e4ra grundtonen \u00e4r sv\u00e5rare att filtrera bort \u00e4n spurioser p\u00e5 st\u00f6rre avst\u00e5nd. Som tur \u00e4r finns en teknik att sprida ut dessa toner. Tekniken kallas \u201ddithering\u201d och g\u00e5r ut p\u00e5 att l\u00e4gga till brus innan man kvantiserar signalen. Ett blockschema som visar hur detta brus l\u00e4ggs till i sigma-delta-modulatorn visas i Figur 13. Som synes l\u00e4ggs bruset till precis f\u00f6re kvantiseringen och felet som det introducerar f\u00e5ngas allts\u00e5 upp av den vanliga fel\u00e5terkopplingen.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-13-dithering.png\"><img loading=\"lazy\" decoding=\"async\" width=\"587\" height=\"313\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-13-dithering.png\" alt=\"\" class=\"wp-image-1547\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-13-dithering.png 587w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-13-dithering-300x160.png 300w\" sizes=\"auto, (max-width: 587px) 100vw, 587px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 13. Brus l\u00e4ggs till, \u201ddithering\u201d, vilket minskar \u00f6vertonerna och sprider ut spurioserna.<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Bruset \u00e4r en serie pseudoslumptal och man kan laborera med hur stora de ska vara samt vilken spektral- och amplitudf\u00f6rdelning de ska ha. En enkel l\u00f6sning som verkar fungera n\u00e5gorlunda bra \u00e4r att ha likformigt f\u00f6rdelat brus med samma maxamplitud som p\u00e5 sinusv\u00e5gen. Spektrum efter till\u00e4gget av dithering visas i Figur 14. Som synes har det dykt upp ett brusgolv som blir h\u00f6gre vid h\u00f6gre frekvenser samtidigt som spurioserna sjunkit. Den h\u00f6gsta spuriosen var tidigare den vid ungef\u00e4r 5,7 MHz vid 3,55 MHz grundton. Nu har denna ton sjunkit med n\u00e4stan 10 dB.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14a-m3d-3508772.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14a-m3d-3508772.png\" alt=\"\" class=\"wp-image-1548\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14a-m3d-3508772.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14a-m3d-3508772-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14a-m3d-3508772-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 14a. Ofiltrerat spektrum f\u00f6r 3 508 772 Hz vid 200 MHz processorklocka, dithering, differentiell f\u00f6rber\u00e4knad treniv\u00e5ers sigma-deltamodulerad v\u00e5gform. Frekvensomr\u00e5det \u00e4r fr\u00e5n 1 MHz till 11 MHz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14b-m3d-3530000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14b-m3d-3530000.png\" alt=\"\" class=\"wp-image-1549\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14b-m3d-3530000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14b-m3d-3530000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14b-m3d-3530000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 14b. Ofiltrerat spektrum f\u00f6r 3 530 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14c-m3d-3550000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14c-m3d-3550000.png\" alt=\"\" class=\"wp-image-1550\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14c-m3d-3550000.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14c-m3d-3550000-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14c-m3d-3550000-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 14c. Ofiltrerat spektrum f\u00f6r 3 550 000 Hz.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14d-m3d-3571429.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14d-m3d-3571429.png\" alt=\"\" class=\"wp-image-1551\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14d-m3d-3571429.png 778w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14d-m3d-3571429-300x209.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-14d-m3d-3571429-768x535.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 14d. Ofiltrerat spektrum f\u00f6r 3 571 429 Hz.<\/figcaption><\/figure>\n\n\n\n<p>I tidsdom\u00e4nen ser v\u00e5gformen lite st\u00f6kigare ut \u00e4n tidigare p\u00e5 grund av det p\u00e5lagda bruset, vilket visas i Figur 15.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-15-3-level-sigma-delta-dither.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"542\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-15-3-level-sigma-delta-dither.png\" alt=\"\" class=\"wp-image-1552\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-15-3-level-sigma-delta-dither.png 1020w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-15-3-level-sigma-delta-dither-300x159.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-15-3-level-sigma-delta-dither-768x408.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 15. V\u00e5gform vid sigma-delta-modulering med treniv\u00e5ers kvantisering och dithering.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Minskning av nyckelkn\u00e4ppar\/splatter<\/h2>\n\n\n\n<p>Varf\u00f6r sluta h\u00e4r? En inte s\u00e5 elegant sak med att sl\u00e5 av och p\u00e5 b\u00e4rv\u00e5gen abrupt \u00e4r att man orsakar nyckelkn\u00e4ppar (splatter), dvs skapar st\u00f6rningar i n\u00e4rheten av den frekvens man egentligen har t\u00e4nkt h\u00e5lla sig till. L\u00f6sningen \u00e4r att g\u00f6ra \u00f6verg\u00e5ngarna mellan tystnad och s\u00e4ndning mjukare, dvs att mer gradvis sl\u00e5 av eller p\u00e5 b\u00e4rv\u00e5gen. Eftersom vi spelar upp f\u00f6rber\u00e4knade v\u00e5gformer kan vi ber\u00e4kna s\u00e5dana som mjukt ordnar en s\u00e5dan \u00f6verg\u00e5ng. Det \u00e4ter upp mer minne och h\u00e4r blir det viktigare att anv\u00e4nda tillr\u00e4ckligt l\u00e5nga buffrar f\u00f6r att \u00f6verg\u00e5ngen ska ta tillr\u00e4ckligt l\u00e5ng tid f\u00f6r att v\u00e4sentligt minska nyckelkn\u00e4pparna. F\u00f6ra att inte komplicera programkoden alltf\u00f6r mycket s\u00e5 g\u00e5r vi fr\u00e5n att ha en enda buffert med b\u00e4rv\u00e5gen till fyra lika l\u00e5nga buffertar f\u00f6r vardera upprampning, b\u00e4rv\u00e5g, nedrampning respektive tystnad. Det g\u00e5r allts\u00e5 \u00e5t fyra g\u00e5nger s\u00e5 mycket minne (\u00e5tta om vi j\u00e4mf\u00f6r med innan vi gjorde signalen differentiell) och nu b\u00f6rjar vi k\u00e4nna av att minnet trots allt \u00e4r begr\u00e4nsat.<\/p>\n\n\n\n<p>Liksom tidigare \u00e4r det DMA som skyfflar data fr\u00e5n buffertarna till PIO:n, men eftersom vi nu inte alltid ska upprepa inneh\u00e5llet i samma buffert om och om igen s\u00e5 inf\u00f6rs ett interrupt (avbrottsrutin) som anropas varje g\u00e5ng en buffert har spelats f\u00e4rdigt. Om huvudprogrammet som sk\u00f6ter morsesignaleringen exempelvis satt en flagga som s\u00e4ger att det \u00e4r dags att sluta s\u00e4nda f\u00e5r interruptrutinen styra om s\u00e5 att n\u00e4sta buffert \u00e4r nedrampningsbufferten som sedan f\u00f6ljs av bufferten med tystnad.<\/p>\n\n\n\n<p>Figur 16 visar hur b\u00e4rv\u00e5gen ser ut efter l\u00e5gpassfiltrering i samband med abrupt respektive mjuk upprampning. I Figur 17 j\u00e4mf\u00f6rs spektrum mellan konstant b\u00e4rv\u00e5g, mjuka \u00f6verg\u00e5ngar med 15\u00a0000 ord l\u00e5nga buffertar (\u00e4ter upp n\u00e4stan allt minne), 10\u00a0000 ord l\u00e5nga buffertar, respektive abrupta \u00f6verg\u00e5ngar. Spektrumen samlades in genom att k\u00f6ra h\u00f6g morsetakt (m\u00e5nga nyckelkn\u00e4ppar per sekund) och anv\u00e4nda \u201dmax hold\u201d i spektrumanalysatorn i n\u00e5gon minut f\u00f6r att f\u00e5nga maximal amplitud vid varje frekvens. Som synes sjunker st\u00f6rningarna i n\u00e4rheten av b\u00e4rv\u00e5gen n\u00e4r man har de mjukare ramperna och l\u00e4ngre \u00f6verg\u00e5ngar ger d\u00e4rmed som v\u00e4ntat minskade nyckelkn\u00e4ppar i grannkanalerna.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16a-rampup-sharp.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"541\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16a-rampup-sharp.png\" alt=\"\" class=\"wp-image-1553\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16a-rampup-sharp.png 1020w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16a-rampup-sharp-300x159.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16a-rampup-sharp-768x407.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 16a. Abrupt upprampning av b\u00e4rv\u00e5gen.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16b-rampup-smooth.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"541\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16b-rampup-smooth.png\" alt=\"\" class=\"wp-image-1554\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16b-rampup-smooth.png 1020w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16b-rampup-smooth-300x159.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-16b-rampup-smooth-768x407.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 16b. Mjuk upprampning av b\u00e4rv\u00e5gen.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-17-keyclicks.png\"><img loading=\"lazy\" decoding=\"async\" width=\"866\" height=\"564\" src=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-17-keyclicks.png\" alt=\"\" class=\"wp-image-1555\" srcset=\"https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-17-keyclicks.png 866w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-17-keyclicks-300x195.png 300w, https:\/\/axotron.se\/blog\/wp-content\/uploads\/2025\/08\/Fig-17-keyclicks-768x500.png 768w\" sizes=\"auto, (max-width: 866px) 100vw, 866px\" \/><\/a><figcaption class=\"wp-element-caption\">Figur 17. 10 kHz brett spektrum som visar nyckelkn\u00e4ppar. A gul: konstant signal (inga kn\u00e4ppar), D gr\u00f6n, mjuka \u00f6verg\u00e5ngar med 15 000 ord buffertl\u00e4ngd, B lila: mjuka \u00f6verg\u00e5ngar med 10 000 ord buffertl\u00e4ngd, C cyan: abrupta \u00f6verg\u00e5ngar.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Byte av processor<\/h2>\n\n\n\n<p>Med tanke p\u00e5 de \u00f6kade minneskraven kan det vara v\u00e4rt att fundera p\u00e5 att anv\u00e4nda den nyare RP2350, monterad p\u00e5 kortet Raspberry Pi Pico 2, som har ungef\u00e4r dubbelt s\u00e5 mycket minne som RP2040. RP2350 har dessutom inbyggd flyttalsprocessor, s\u00e5 ber\u00e4kningen av inneh\u00e5llet i buffertarna baserat p\u00e5 frekvens, dithering och nyckelkn\u00e4ppsminimering som tar 16 sekunder p\u00e5 en RP2040 (n\u00e4r buffertl\u00e4ngden \u00e4r 15 000 ord) minskar till under tre sekunder. En viktigare f\u00f6rdel \u00e4r att str\u00f6mf\u00f6rbrukningen \u00e4r l\u00e4gre p\u00e5 RP2350. Vid 200 MHz processorklocka och konstant s\u00e4ndning uppm\u00e4tte jag en minskning av str\u00f6mmen p\u00e5 5-V-matningen fr\u00e5n 50,5&nbsp;mA till 38,6 mA n\u00e4r jag bytte till det nyare processorkortet. N\u00e4r s\u00e4ndning inte sker drar Pi Pico 32 mA medan Pi Pico 2 drar 21; \u00e5terigen vid 200 MHz processorklocka. Det n\u00e5got h\u00f6gre priset p\u00e5 en Pi Pico 2 uppv\u00e4gs mer \u00e4n v\u00e4l av den l\u00e4gre str\u00f6mf\u00f6rbrukningen och h\u00f6gre prestandan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kod<\/h2>\n\n\n\n<p>Den som vill experimentera vidare med metoderna som jag beskrivit i den h\u00e4r artikeln kan ladda ned koden jag skrivit f\u00f6r det hela p\u00e5 <a href=\"#[4]\">[4]<\/a>. Det \u00e4r inte kod som \u00e4r t\u00e4nkt att anv\u00e4ndas utan \u00e4ndringar i en foxorings\u00e4ndare, utan den erbjuder ett interaktivt s\u00e4tt att via kommandon man skriver in via ett terminalf\u00f6nster experimentera med de olika moderna som beskrivits ovan. N\u00e4r str\u00f6mmen sl\u00e5s p\u00e5 s\u00e5 b\u00f6rjar den snart s\u00e4nda ut signaler som fr\u00e5n en foxorings\u00e4ndare, men det kr\u00e4vs \u00e4ndringar i koden eller kommandon via serieporten (\u00f6ver USB) f\u00f6r att v\u00e4lja frekvens, kodtakt eller r\u00e4vnummer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Del 2<\/h2>\n\n\n\n<p>Figur 1 visar en spretig prototyp med RF-delarna som beh\u00f6vs f\u00f6r en s\u00e4ndare. I del 2 av artikeln beskrivs framtagandet av de analoga delarna, bygge p\u00e5 ett riktigt kretskort tillsammans med lite DIP-switchar och en (valfri) display samt komplettering av koden s\u00e5 att det blir en v\u00e4lfungerande foxorings\u00e4ndare.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Referenser<\/h2>\n\n\n\n<p id=\"Pioasm\">[1] Online pioasm for Raspberry Pi Pico <a href=\"https:\/\/wokwi.com\/tools\/pioasm\">https:\/\/wokwi.com\/tools\/pioasm<\/a><\/p>\n\n\n\n<p id=\"[2]\">[2] Raspberry Pi Pico Ham Radio Transmitter <a href=\"https:\/\/101-things.readthedocs.io\/en\/latest\/ham_transmitter.html\">https:\/\/101-things.readthedocs.io\/en\/latest\/ham_transmitter.html<\/a><\/p>\n\n\n\n<p id=\"[3]\">[3] Fast Algorithm for Rational Approximation of Floating Point Numbers <a href=\"https:\/\/axotron.se\/blog\/fast-algorithm-for-rational-approximation-of-floating-point-numbers\/\">https:\/\/axotron.se\/blog\/fast-algorithm-for-rational-approximation-of-floating-point-numbers\/<\/a><\/p>\n\n\n\n<p id=\"[4]\">[4] Pi Pico 2 Foxoring transmitter test code. <a href=\"https:\/\/github.com\/per-magnusson\/Foxoring-test-code-for-Pi-Pico-2\">https:\/\/github.com\/per-magnusson\/Foxoring-test-code-for-Pi-Pico-2<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En resa mot kr\u00e5ngligare mjukvara f\u00f6r attmed minimalistisk h\u00e5rdvara f\u00e5 fina RF-egenskaper Den h\u00e4r artikeln publicerades f\u00f6rst i QTC nummer 1 2025. Programkod, filer f\u00f6r kretskortstillverkning och 3D-modeller f\u00f6r den f\u00e4rdiga s\u00e4ndaren finns p\u00e5 https:\/\/github.com\/per-magnusson\/RP2350-Foxoring-Transmitter. Texten h\u00e4r i del 1 beskriver hur mjukvaran fungerar och utvecklades mot att generera allt b\u00e4ttre radiosignaler direkt fr\u00e5n pinnar &hellip; <a href=\"https:\/\/axotron.se\/blog\/foxoringsandare-med-raspberry-pi-pico-del-1\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Foxorings\u00e4ndare med Raspberry Pi Pico \u2013 del 1<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,1],"tags":[21,22],"class_list":["post-1512","post","type-post","status-publish","format-standard","hentry","category-ardf","category-uncategorized","tag-ardf","tag-foxhunting"],"_links":{"self":[{"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/posts\/1512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/comments?post=1512"}],"version-history":[{"count":8,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/posts\/1512\/revisions"}],"predecessor-version":[{"id":1610,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/posts\/1512\/revisions\/1610"}],"wp:attachment":[{"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/media?parent=1512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/categories?post=1512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/axotron.se\/blog\/wp-json\/wp\/v2\/tags?post=1512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}