Netradio og dab+ med Raspberrypi og B&O datalink

Netradio med datalink

Dab+ tuner med datalink

Raspberrypi som DAB/DAB+ modtager med datalink

Raspberrypi som Bluetooth adapter

Indledende undersøgelse af datalink og muligheder:

Datalink er et forholdsvis komplekst, serielt 2vejs kontrolsystem, brugt i Beomaster og Beocenter produkter, fra starten af firserne, samt deres tilhørende periferi enheder, betjent via fjernbetjening.

Datalink apparater se:   Datalink: The Groundbreaking Digital Language by Bang & Olufsen - Beoworld

Funktionsmåde: Serielt enkelt signal kabel, koblet til ben 6 eller 7, i din stik, måling med ocilloscop viser et 8 bit signal ud, ca. 300 baud 1 start bit, dvs. 7 bit data, hvilket giver 128 muligheder, der er ca. + 5V på udgangs benet også i standby, og signalet går mod 0, jeg har valgt at læse de 7 bit som høj = 1, lav = 0, antallet af bytes variere, en kommando som CD gentages en gang, numeriske taster giver flere bytes, afhængig af antal cifre, (ikke undersøgt nærmere). Følgende funktioner er aktive: PHONO, CD, A.TAPE, PLAY, RECORD (A.TAPE), OFF, enkelt og dobbelt pile samt numeriske taster, 2vejs muliggør tænd af master fra periferi enhed.

Opfølgning: I forbindelse med brug af numeriske taster, ser det ud til at signalet skal læses som 6 bit data med 1 start bit og 1 stop bit, undtagen et enkelt tilfælde, nemlig indledningen til et numerisk taste tryk, hvor der ikke er nogen stop bit, det giver ikke nogen problem, i forhold til den måde jeg har valgt, at implementere de forskellige funktioner. Bemærk: Det er ikke alle der har numerisk ud, f eks. Ouverture der kun har et AUX stik.

Raspberrypi kort beskrivelse:

Lille men meget anvendelig (Computer), første version fra 2012 består af en enkelt kerne CPU baseret på ARM, med indbygget grafik kraftig nok til at afspille video, og tilslutninger som HDMI, USB, LAN, lyd ud og PSU, samt internt et antal IO tilslutninger, harddisken er et SD kort. Senere versioner har indbygget WIFI og Bluetooth fra 3 og Zero W, 3A+ mangler LAN og Zero mangler lyd bøsning.  Raspberrypi  se: https://www.raspberrypi.org/

Netradio / Internetradio med simpel betjening egnet til ældre og svagtseende:

Ideen til følgende gør det selv projekt opstod for nogle år siden, hvor jeg arbejdede med reparation af ældre B&O apparater, og et større kabel TV firma lukkede for FM, de tilbød godt nok en gratis stueantenne, men det fungerede ikke for mange, og slet ikke for dem der hørte programmer, der kun sender digitalt, der er så den mulighed at anvende en B&O kompatibel tuner, men de er ikke lette at indstille, for ældre mennesker, slet ikke på netradio, med mindre der er børn eller børnebørn tilgængelige.

Start på projekt, tid til tænkehatten og overvejelser:

Kommercielt projekt? Det tror jeg ikke, der er allerede alternativer, selv om det for mange kræver hjælp med opsætning / betjening (display), derimod tror jeg det kan blive et fint gør det selv projekt, for de lidt mere tekniske, evt. for at hjælpe et ældre familie medlem, og som upcycling har det vel også berettigelse, overraskende men jeg støtte på en artikel, hos Dansk design center se: DDC – Danish Design Center | Green transition (Den artikel er desværre slettet men der meget interessant om grøn omstilling) .

For at opfylde målsætningen om et produkt til ældre og svagtseende, giver et display ingen mening, derfor mener jeg, en løsning kan være at installere, de få programmer der typisk er tale om, enten som software eller en fil der læses ved opstart, selve betjeningen kan udføres med få knapper, på en fjernbetjening brugeren kender i forvejen.

Derfor mener jeg en oplagt mulighed er at bruge en Raspberry Pi i headless mode dvs. uden display og keyboard, den bruger et SD kort som harddisk, hvor der i standard opsætning, er en dos partition, et oplagt sted at placere en fil med programmer, desværre er boot tiden lidt lang ca. 1 minut, operativsystemet er Linux.

Linux! Ups derfor kommer vi nu til et vigtigt punkt i projektet, forudsætninger:

Lodning på ret følsom elektronik (statisk elektricitet) og meget småt (smd).

Kendskab til Linux og programmering i C eller python, der vil være program eksempler sidst i artiklen, men det er ikke færdige stabile programmer, de kan potentielt også gøre skade!

Netradio med Raspberrypi 3A+:

Hvorfor 3A+? Billigste med 4 kerne CPU, hurtig boot, lyd ud bøsning, 4 polet kan bruges som seriel ind, ikke HIFI men rimelig lyd. For alle modeller gælder, at der kan monteres et print med en DAC, de findes med rigtig god lyd for små penge.

Som det første, skal vi have et serielt kontrolsignal, ind til et GPIO ben på Raspberry Pi, det er en 40 pins header, med mange forskellige tilslutninger direkte til CPU, der er også stel og forsyning 3,3V og 5V, så pas på det er utroligt nemt at brænde CPU af. Ind / ud ben max 3,3V også kortvarigt (statisk elektricitet), kortslutning mellem ind / ud, kortslutning til stel eller forsyning, der er ingen beskyttelse så pas på. En meget elegant løsning er den 4 polet lyd bøsning, det følgende er kun en kort beskrivelse for professionelle:

Lige bag jack bøsning sidder en dobbelt diode smd, på benet ind mod bøsning, er der forbindelse til det ekstra ben på bøsning, forbindelsen er brugt som video ud, derfor er det nok en god ide, at afbryde denne, det kan gøres ved at fjerne den meget lille smd komponent mellem bøsning og camera stik, det er nok de færreste der bruger video ud, du er selv ansvarlig for at kontrollere at det ovenstående gælder for din Raspberry Pi, jeg kan ikke garantere noget, nu mangler der kun en forbindelse, fra bøsning til et indgangs ben på 40 pins header så er raspberrypi klar, så mangler vi kun et kabel, det nemmeste er nok at købe et jack kabel med et 4 ben jack i hver ende, og et 7 ben din stik, forbindelsen i din stikket er stel ben 2, venstre kanal ben 3, højre kanal ben 5, og kontrol ben 7, PHONO uden RIAA, CD og A.TAPE, vigtigt tilslutning gennem en 2,2k modstand, tilslutningen på dobbelt dioden i Raspberrypi begrænser til 3,3V, og direkte tilslutning kan brænde master af, husk det er helt på eget ansvar, og er du i tvivl om dobbelt smd diode osv. Så er det ovenstående absolut ikke for dig beklager.

Den lidt sikrere hardware på en Raspberrypi 3A+:

Denne bruger en god gammel transistor med ben, typen er ikke så vigtigt bare det er en NPN, f.eks. BC547, tilslutning til Raspberrypi 40 pin header kan med fordel udføres med hun til hun jumber ledninger, kan købes hvor de sælger Raspberry Pi, transistoren skal bruges sammen med 2 modstande, til en converter mellem 5V logik og 3,3V på Raspberrypi som max tåler 3,3V på sine interne indgange, meget vigtigt.

Nu skal der bruges 2 jumber ledninger, dvs. vi skal bruge 3 hun stik, klip dem af men behold lidt ledning på hver, start med at lodde en til transistorens collekter, og en til emitter sammen med en 1k modstand og den sidste til den frie ende af 1k modstand, og til sidst en 3,9k modstand til transistorens base, den frie ende af modstanden skal loddes til signal kablet. Nu har du et lille kredsløb der kan tilsluttes til pin header, der er 40 små pinde så hver forsigtig, i den ene ende er der 5V tilslutninger, så der er det bedst at holde sig fra, find evt. et skema på nettet, ben 1 er normalt markeret med en firkantet lodde terminal på undersiden af printet, start altid med stel, ben 39 det er den ende udfor USB bøsning, forbindes med 1k modstand, derefter collector til pin 17 3,3V, og til sidst emitter til indgang GPIO 22 pin 31, så har du et kredsløb, hvor signalet går ind gennem 3,9k modstand, (strømbegrænsning) værdi ikke kritisk, til base af transistor, via emitter til indgang på Raspberry Pi, der er fra samme pin en pull down modstand til stel, collektor er forbundet til 3,3V, derfor kan indgangsspænding ikke overstige 3,3V. så mangler vi kablet til master, hvis du vil slippe for lodde jack stik, kan du købe et jack til jack kabel og klippe det over, lyd tilslutningen i 7 pol din stik er standard, stel ben 2, venstre kanal ben 3, højre kanal ben 5 og kontrol ben 7, PHONO uden RIAA, CD og A.TAPE, evt. gennem en 2,2k modstand til beskyttelse. Sidste punkt og nok så vigtigt, kontroller selv de ovenstående oplysninger evt. på nettet, jeg begår mindst lige så mange fejl som alle andre, der er ingen garanti, og fejl kan nemt koste dig en Raspberry Pi.




Hvis der er en ekstra ledig indgang, kan et standard 3,5mm jack til 5 ben din kabel, bruges som lyd signal kabel, + et 2 leder til en ledig indgang.

En Raspberrypi Zero W kan også bruges:

Men den har ikke indbygget lyd, og boot tiden er betydelig længere, W betyder WIFI og bluetooth indbygget, lyd kan klares med f.eks. pHAT DAC, men der skal loddes, husk også pin header, den er ikke inkluderet se: https://raspberrypi.dk/produkt/phat-dac/ fremgangsmåden med hensyn til converter og kabel er den samme som den foregående, hvis du bruger pHAT kan de ekstra komponenter loddes på pHAT, jeg tror ikke de pågældende pinde er brugt, men kontrol er altid godt, lyd kan også klares med et filter se: https://learn.adafruit.com/adding-basic-audio-ouput-to-raspberry-pi-zero/pi-zero-pwm-audio .

Zero W med PHATDAC og spæmdings konverter, monteret på lodde terminaler.

Software:

Operativsystemet giver næsten sig selv Raspberrypi OS, til en headles installation er lite fint, der er ikke brug for nogen desktop, hentes hos https://www.raspberrypi.org/downloads/raspberry-pi-os/ . der er opskriften på installation også, det er ret nemt, det mindste mikro SD kort du kan få, eller har liggende skulle være nok ca. 4 GB, hvis du vil undgå monitor og keyboard, kan du oprette en tom fil og navngive den ssh, filen skal ligge i boot partitionen, så kan du oprette forbindelse over netværk med f.eks. Putty, der er så lige et problem, hvis du bruger en Raspbeerypi uden LAN eller adapter, skal WIFI opsættes ved hjælp af en wpa_supplicant.conf fil i boot partition, den skal indeholde :

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1

country=DK

network={

ssid="YOUR_NETWORK_NAME"

psk="YOUR_PASSWORD"

key_mgmt=WPA-PSK

}

Indsæt dit ssid og password, nu kan du indsætte SD kortet i Raspbeery Pi, og isæt strømforsyning så starter den, der er ikke nogen tænd knap, brug evt. en IP scanner til at finde adressen.

Bemærk: Password kan ses i wpa_supplicant.conf filen, der findes en procedure for at skjule det, men det er lidt omstændeligt se: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

Hvis du har mulighed for at tilslutte monitor og keyboard under opsætning, så er det lidt nemmere, du kan også bruge et TV med HDMI. Når du har forbindelse, kan du starte opsætning med:  sudo raspi-config der kan du ændre password (en god ide), sætte lyd udgang og WIFI. Som jeg skrev i indledningen, så kræver projektet kendskab til Linux, hvis det ovenstående ikke giver mening, så bliver det nok noget op af bakke.

Som det næste skal vi installere noget software, start med at opdatere styresystem: sudo apt-get update , sudo apt-get upgrade, derefter skal vi bruge en lyd afspiller, jeg bruger mpc mpd, vlc kan også bruges, men det følgende er baseret på mpc mpd, installer med: sudo apt-get install mpc mpd . Nu kan du teste om lyd fungere, og den kan afspille en radiokanal, f.eks. P2 klassisk: mpc add http://live-icy.gslb01.dr.dk:80/A/A04H.mp3  derefter: mpc play 1 . Hvis det fungere, kan vi afspille en kanal, du kan ændre volume med mpc volume 0-100, eller alsamixer. Hvis du ikke kan få lyd ud af lydbøsning, kan det være pga. problem med lyd ud valg, i maj udgaven af Raspberry Pi OS, august udgaven ser ud til at være OK. Vi kunne fortsætte med de øvrige kanaler, men det er ikke så smart, mpd har også en tendens til at smide kanaler efter sluk tænd uden nedlukning, derfor har vi brug for en loader der kaldes efter boot, jeg bruger rc.local til dette, den software jeg arbejder med, kan skifte mellem 9 kanaler, de 9 kanaler har jeg valgt at lægge i en txt fil placeret i boot, derved indlæses de ved boot og det er nemt at udskifte kanaler, en kanal pr. linje, afslut med tom linje, se program eksempel: loader_f2

Bemærk: December 2021 udgaven giver et problem med -lyd i mpd, i sudo nano /etc/mpd.conf  skal havelåge foran  linje 232 - 235 og  238 - 240 fjernes, samt linje 238: mixer_control  "PCM" , ændres til mixer_control "Headphone" , du kan også bruge legacy udgaven, den skulle fungere.

Opdatering: Oktober 2023 udgaven fungere ikke med mpc mpd, men legacy fungere med ovenstående ændring af mpd.conf, endnu en god grund til at bruge et lydkort, se et billigt gør det selv her.

Netradio link: 

Link eller URL, i netradio sammenhæng, adressen på den stream, som stationen sender på nettet, for det meste i mp3 format f.eks. DR P2 klassisk:  http://live-icy.gslb01.dr.dk:80/A/A04H.mp3  Kan findes på dr.dk, det er mere problematisk, med de kommercielle stationer, de foretrækker at man bruger afspilleren, på deres hjemmeside eller app, så de kan vise lidt flere reklamer, et stort problem, efter at Tyskerne har overtaget en del af dem, men her er en liste med dem jeg har fundet: netradioLink

Med det på plads kan vi komme videre med den sjove del: Kanalskift med f.eks. Beomaster:

Og hvordan kan det fungere, en oplagt mulighed er at bruge serielt input, men pga. signalets opbygning har jeg ikke lykkedes med en stabil funktion. Den løsning jeg har fået til at fungere nogenlunde, er en while løkke, der venter på et negativt gående signal, og derefter omsætter serielsignalet til en numerisk værdi, og kalder en funktion, der dekoder værdien til et system kald, som f.eks. mpc play 1.

I første omgang har jeg ikke brugt dobbelt pil tasterne og numeriske taster, men CD, PHONO, A.TAPE, PLAY, STOP og OFF. CD og PHONO bruger ens koder, A.TAPE har et andet sæt koder, der er også forskel på koden, når man trykker f.eks. CD fra OFF, eller den er ON, koden kommer 2 gange når man trykker en knap på fjernbetjeningen. De numeriske koder er mere komplekse, så dem har jeg valgt ikke at bruge i denne omgang. Tryk på f.eks. CD starter afspilning af programplads 1, STOP stopper afspilning, PLAY starter afspilning igen på 1, det er samme kode som f.eks. CD, pil tasterne vælger mellem de 9 programpladser, OFF stopper stream så den ikke belaster nettet i stand by, se program eksempel bo_kont .

Bemærk: PHONO indgang kan ikke bruges, hvis den har indbygget RIAA forstærker.

Her er så alligevel et forsøg med numeriske taster 1 - 9, det baserer sig på delay funktionen, for at pille koden for tasterne ud af et længere pulstog, med koder både før og efter, det giver en noget vakkelvorn funktion, og lidt forsinkelse på nummer tasterne, se program eksempel bo_kont_n .

Det var software for denne gang, men der mange flere muligheder, bl.a. er den indbyggede bluetooth ikke udnnyttet, det strider måske også lidt mod konceptet, måske vender jeg tilbage med en opdatering.

Pga. vi bruger en head les konfiguration, og vi skal kunne indlæse evt. ændrede kanaler, skal loader program og hoved program startes ved boot, det klares ret nemt med en fil der hedder rc.local, og er placeret i directory etc, ændringer kan skrives med sudo nano /etc/rc.local. Indsæt to linnier før exit 0

/home/pi/./loader_f2

/home/pi/./bo_kont &

eller /home/pi/./bo_kont_n &

Derefter skal Raspberrypi rebootes med: sudo reboot , efter et ½ til 1½ minut skulle den være klar til afprøvning.

Normalt skal en computer nedlukkes, før man afbryder strømmen, med f.eks: sudo shutdown now , det er lidt svært i denne konfiguration, heldigvis ser det ud til at styresystemet er ret stabilt, men igen der er ikke nogen garanti.

Styring af DAB tuner med datalink.

Ja det er jo også en mulighed, nu hvor vi har noget software til datalink, udfordringen er at det skal tilpasses til den tuner der skal bruges. Det følgende er baseret på en Hama DT60, den lyder godt til prisen, men volume regulering skal stå på max, ellers kan der være noget støj/brum, og den har fjernbetjening , så den kan betjenes med fjernbetjenings koder.

Hardware: 

Raspberrypi zero den billigste uden netværk er nok, et mikro SD kort 4 GB er rigeligt, nogle små komponenter og stumper ledning.

Bemærk: I dette projekt strømforsynes Raspberrypi  fra DAB tuner, for at holde prisen nede. Det skal du være helt sikker på, at du har den fornødne erfaring med, det er ikke et begynder projekt, samtidig vil alle producenter fraråde at du modificere deres produkt, du er selv ansvarlig for brandsikkerhed, husk efterlad aldrig et modificeret produkt uden opsyn, frakobbel strømforsyning fra stikkontakt, når du er færdig med at bruge den.

Montering af hardware: Der er rigeligt plads i tuneren til Raspberrypi, jeg har loddet et par ledning på, i nærheden af USB stikket, og til et stel punkt på hovedprintet i tuneren, +  har jeg taget på afbryderen, gennem en standard diode, strømforsyningen giver 6V, så det er 1V for meget, diodens 0,7V burde være OK, men ellers kan du bruge en 7805. Du skal regne med at det setup, udrydder så samtidig også enhver garanti på tuner og Raspberrypi. Betjeningen af tuneren kobles til IR modtageren, det er en standard 3 benet sag, stel, 3,3V og ud, 3,3v det er heldigt, men brug en serie modstand ca. 1K, så sker der ikke nogen ulykker, en IR modtager er normalt opbygget med en aktiv lav udgang, og en intern pullup modstand til forsyning, derfor kan fjernbetjening og raspberrypi fungere samtidig. Signal ind foregår som tidlige beskrevet i netradioen, der er mange GPIO tilslutninger der kan bruges ind og udgange, men brug dem der foreslået i softwaren, det er nemmest. Den sidste forbindelse, er fra et punkt på hovedprintet med højt niveau når tændt, og lavt når slukket, det er nødvendigt pga. tænd og sluk er samme kode, jeg fandt en stor smd kondensator i nærheden af den store IC hvor der er 2,6V når tændt, også serie modstand her ca. 1K.

Test uden fastgørelse af Raspberrypi

Software:

Software delen bygger på anvisningen ovenfor, uden opsætning af netværk og netradio afspiller, c programmet er en udvidelse af det tidligere omtalte bo_kont_n. IR modtageren i tuneren læser NEC format, det sendes som først en 8 bit adresse derefter adressen inverteret, så 8 bit kontrol derefter kontrol inverteret, derfor kan programmet kun bruges med den her brugte tuner. Udvidelsen består af en ekstra funktion serOut, der omsætter en binær adresse eller kode til et pulstog, der fra pin 35 føres til IR modtager ud, der er også ændret en del i decode, for at tænd og sluk fungere korrekt, er det nødvendigt at bruge en ekstra indgang til at se om tuneren er tændt. CD, PHONO eller A.TAPE tænder tuner OFF slukker, dobbelt pile vælger program, PLAY = SELECT, enkelt pile vælger mellem  9 fastindstillinger, det samme gælder 1 - 9 men er ikke i funktion på alle apparater, se program eksempel bo kont dab .

Arduino kan også bruges, f. eks. uno eller nano, så slipper du for boot tid, se sketch eksempel bo_kont_dab.ino  Bemærk: der er 5V på ind og udgange, derfor passer indgang men brug en 1k modstand i serie, udgang skal omsættes til 3,3V, det ser ud til at det kan fungere, med en 1k modstand i serie, der er sandsynligvis en clamping diode, i tunerens cpu indgang fra IR modtageren, så absolut ingen garanti! En bedre løsning er den føromtalte med en transistor i indgangen, den nye raspberrypi pico er selvfølgelig også en mulighed, den er i hvert fald billig, men ser ud til at være lidt vanskeligere, i opsætning af programmerings miljø, men det kan være jeg prøver en dag ;-).

Pico er lidt omstændelig, men det kan klares forholdsvis nemt, hvis man installere tool chain og eksempler på en Raspberrypi, og installere følgende program ved siden af eksempler, der er også CMakeLists nederst bo_kont_dab_pico  . Bemærk 3,3 V

Raspberrypi som DAB/DAB+ modtager med datalink:

Det er også en mulighed, dog ikke med zero den er for svag. DAB softwaren er dab-cmdline, af Jan van Katwijk fra hans projekt på GitHub se:  dab-cmdline  Der er mange andre spændende projekter mest om SDR (Software Defined Radio), bla. en rigtig god DAB modtager til Raspberrypi, den er desvære ikke anvendelig i dette projekt, derimod er dab-cmdline anvendelig, den kan styres fra kommando linje, funktionen er den samme som de tidligere netradioer, med en playliste i en dos fil i boot partitionen, det er desværre meget eksperimentel software, der kun er beregnet som eksempler på anvendelse af et software libriary, han har skrevet til brug i forskellige programmer, så forvent ikke for meget, så bliver du ikke skuffet!

Advarsel: Det følgende projekt kræver at man skal ind og rette i source filer, og det er ret ustabilt pt, så du skal måske overveje om det er noget du vil bruge tid på.

Hardware: 

Se ovenstående eksempler til Raspberrypi 3A+, og en USB tuner, jeg har brugt en gammel DVB tuner, den slags man brugte til at se TV via antenne på PC før det blev ændret til T2, de er ret billige og der ligger sikkert mange, der ikke kan bruges til TV længere, dog skal det være en type med rtl 2832 chip, jeg har en Sandberg og en AGK der fungere til DAB.

Software:

Operativsystem: Se ovenstående eksempler, dab-cmdline example-5 hentes på GitHub, git clone https://github.com/JvanKatwijk/dab-cmdline.git  hvis du får en fejl, så er git muligvis ikke installeret sudo apt-get install git det er også en god ide at opdatere: sudo apt-get update, resten af installationen kan du se her: Readme det er example-5 der skal bruges, det er den eneste jeg har haft held med, så cd example-2 skal ændres til cd example-5, du kan springe sudo make install og cd ../ ../ .. over , vi skal blive i build mappen. Nu kan vi teste installationen, med: sudo ./dab-rtlsdr-5 -C 11C -G 98 -P "DR P1" , (-C 11C) angiver kanalen, 11C bruges af DR i Nordsjælland, (-G 98) gain 98 angiver forstærkningen i USB tuner, 0 - 100 ifølge dokumentation, men 98 giver max på mine 2, og det er nødvendigt de fleste steder med en indendørs antenne, prøv evt. med -Q flaget det er beskrevet som autogain, men i de beskrivelser af USBtuner jeg har set  er det mere en funktion der skal forhindre overstyring af ADC, bemærk Dab modtages med lodret antenne for det meste, hvis lyden hakker er signalet for kraftigt prøv med -G 60, (-P "DR P1")  angiver programmet, inden du forlader build mappen skal dab-rtlsdr-5 kopieres til pi med: sudo cp dab-rtlsdr-5 /home/pi/ .
Hvis alting er gået godt under installationen (det sker næsten aldrig for mig ;-) ), vil du se en masse tekst på skærmen, der slutter med:

 
we have now DAB+
        startaddress    = 138
        length          = 54
        subChId         = 4
        protection      = 2
        bitrate         = 72


Tillykke hvis du ser ovenstående, du har muligvis også lyd men kun på en monitor med HDMI, der har været et problem med omstilling til jack udgang, siden maj 2020 udgaven af lite tror jeg nok, det kan rettes med: sudo rpi-update e1050e94821a70b2e4c72b318d6c6c968552e9a2 genstart og ny indstilling i raspi-config, testet med december 2020 udgaven. Hvis ikke så må vi i gang med lidt fejlfinding, start med: sudo ./dab-rtlsdr-5 , hvis du ser: dab_cmdline V 1.0alfa example 5 og en liste med cmdline flag, er DAB programmet installeret korrekt, ellers må du prøve at gennemgå installationen igen, jeg går ud fra du stadig er i build mappen. Nå så langt så godt, derefter prøv med: sudo ./dab-rtlsdr-5 -C 11C -G 98 -P "DR P1" , og se på de øverste linier efter Copyright, der står oplysninger om USB tuner, type, frekvens og føromtalte gain, hvis det er der så er driveren installeret korrekt, hvis ikke så kontroller, det er afsnittet i readme med RTL.
Derefter kommer der mange linier med oplysninger om lyd, hvor den vælger default, jeg har aldrig oplevet problemer her, hvis tuneren  har et godt nok antenne signal, skal der være en ensemble liste, liste med programmer på kanalen, f. eks. DR P1, hvis ikke er det sandsynligvis et problem med antennen, jeg har gode erfaringer med et stykke stiv 1.5 kvadrat ca. 60 cm, direkte til midter polen i bøsningen husk lodret, en anden mulighed er at, krystallet i USB tuneren ligger så skævt i frekvens, at der ikke kan opnås synkronisering, hvis du har adgang til en anden USBtuner så prøv med den, der kan også forekomme en del temperatur drift, prøv evt. at køle eller varme den forsigtigt! Efter ensemble listning kommer, enten we try to start program DR P1, we have now DAB+ godt, eller we try to start program DR P1, sorry  we cannot handle service DR P1, sandsynligvis  problem med antenne eller synkronisering, listener is running henviser til en lille funktion i main, der reagerer med program skift, når man taster på enter.
Næste spørgsmål er så hvorfor jeg ikke bare bruger listener, der er flere årsager: Den fungere kun på en kanal, jeg har ikke fundet en funktion til at skifte kanal uden at genstarte, og funktionerne til at styre det fra datalink, skal skrives i main, den er skrevet i c++, det har jeg ikke så meget erfaring med, heller ikke c som det nok fremgår ;-).  
Så mangler vi kun programmet der skal omsætte seriel koden fra datalink til en kommando linje, og starte DAB programmet med denne, se eksempel her: bo_kont_nd   start med at flytte dab-rtlsdr-5 op i pi mappen, medens du er i build mappen: sudo cp dab-rtlsdr-5 /home/pi/, og placer bo_kont_nd i pi mappen, for at starte programmet ved boot, skal følgende linje: sudo /home/pi/./bo_kont_nd  placeres sidst i filen .bashrc sudo nano .bashrc , der skal vælges autologin i raspi-config, som det sidste skal playlisten skrives i en fil placeret i boot, dabrd.txt , se eksempel:


-C 11C -G 98 -P "DR P1"
-C 11C -G 98 -P "DR P2"
-C 11C -G 98 -P "DR P3"
-C 11C -G 98 -P "DR P4 København"
-C 11C -G 98 -P "DR P5 Fyn"
-C 11C -G 98 -P "DR P6 Beat"
-C 11C -G 98 -P "DR P8 Jazz"
-C 12C -G 98 -P "_The Voice"
-C 12C -G 98 -P "_myROCK" 

Vigtigt 9 linjer og ikke andet, den skal skrives / rettes på en pc med SD kort skriver (dos fil), reboot og så skulle den være klar til afprøvning.

Funktioner: Tryk på f.eks. CD starter afspilning af programplads 1, STOP stopper afspilning, PLAY starter afspilning igen på sidst valgte (kun første tryk), pil tasterne vælger mellem de 9 programpladser, 1 - 9 vælger program plads, ikke f.eks. Ouverture hvor der kun er AUX bøsning, program skift tager ca. 5 sekunder desværre.

Hvis der ikke er lyd efter ca. 5 sek. prøv igen, men vent lidt mellem hver forsøg, ellers kan programmet låse, og genstart kan være nødvendigt. der kan også være problemer med krystallets nøjagtighed i USB tuneren, det kan derfor være nødvendigt at bruge ppm justering, den er ikke i funktion i example-5, men det kan nemt rettet i main filen, i linje 266 mangler der et p i listen med flag adskilt af kolon, prøv at starte: sudo ./dab-rtlsdr-5 -C 11C -G 98 -p 10 -P "DR P1" med forskellige værdier for lille p, mellem 50 og -50, når den bedste er fundet skal den skrives med i playlissten, eller direkte i mainfilen kan værdien for ppmcorrection ændres i linje: 222, derefter skal den ændrede dab-rtlsdr-5 kopieres op i pi mappen, se vejledningen ovenfor. En anden metode til at finde ppm værdien er at installere Jan van Katwijk's qt-dab program se: https://github.com/JvanKatwijk/qt-dab på en desktop version, der kan man se hvor langt frekvensen er fra center, der er også et spectrumscope og SNR værdi, der kan bruges til antenne justering. Det kan også være en god ide at bruge et USB forlænger kabel, så USBtuneren kommer på afstand af Raspberrypi, enhver form for computer afgiver ret meget elektrisk støj, samtidig letter det placeringen af antennen.

USB tuner med metal afskærmning (hvidblik), bemærk blik stykket der passer ned på krystallet, det mindsker frekvens drift og øger stabiliteten, der skal bruges isolering med varmeoverføring.

Opdatering:

DAB cmdline er opdateret inden for de sidste måneder, det ser derfor ud til at example-2 er et bedre valg, den svigter meget sjældent ved opstart, i forhold til example-5, men den kan ikke starte uden modifikation, den compiler uden fejl, men når man forsøger at starte får man en fejlmelding omkring setLocale, der er sat til en_US.UTF-8, det kan ændres i main filen, men det nemmeste er at sætte localisation i raspi-config, og så skal DAB programmet ændres så det starter dab-rtlsdr-2 se eksempel: bo_kont_nd_v2dp  . Det er en lidt ændret version, hvor jeg har indført valg af fastindstilling 2 og 3 på dobbelt pil tasterne, pga. manglende numerisk ud på datalink på bl.a. Ouverture, resten af installationen er som den oprindelige. 

Hurtig skift med example-5:

I example-5 er der en funktion kaldet listener, der kan skifte mellem programmerne i et ensemble, aktiveres ved tryk på enter, ikke så praktisk i dette setup, men det kan også fungere med fjernbetjening, det kræver godt nok meget arbejde med main.cpp filen, og er lidt af et eksperiment, det fungere med kodelæseren fra de tidligere programmer indsat i listener, og en ud viddet selectNext funktion, der kan skifte op og ned i ensemble, det nemmeste er at udskifte hele den nederste del af filen, med de to funktioner, derefter skal der indsættes / redigeres nogle linjer, jeg har samlet det hele her: main.cpp . Der skal også bruges den ændrede CMakelists.txt fil, dvs. den der ligger i example-5 skal udskiftes, wiringpi skal være installeret: sudo apt-get install wiringpi , der skal også oprettes en fil med: sudo nano /usr/share/cmake-3.16/Modules/FindWiringPi.cmake med følgende indhold:
  
find_library(WIRINGPI_LIBRARIES NAMES wiringPi)
find_path(WIRINGPI_INCLUDE_DIRS NAMES wiringPi.h)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(wiringPi DEFAULT_MSG WIRINGPI_INCLUDE-DIRS)


Derefter almindelig installation fra build mappen med: cmake .. -DRTLSDR=ON og make . Nu skulle det fungere med f.eks. sudo ./dab-rtlsdr-5 -C 11C -G 98 -P "DR P1" og skift på pil tasterne, men da det ikke er helt stabilt er det nok bedst at bruge følgende program eksempel:  bo_kont_nd_v2hs det kan også skifte mellem kanalerne 11C og 12C, det er en lidt ændret version af bo_kont_nd , så der er stadig fast indstillinger med fil i boot til dette, husk dabrd.txt i i boot, men pil tasterne kan ikke bruges til at vælge.

Raspberrypi som Bluetooth adapter:

Siden version 3 er der indbygget Bluetooth sammen med WIFI, der har så været et problem med støj på Bluetooth, når WIFI er aktiv, men i DAB versionen behøver vi ikke WIFI, man kan så sige at en Bluetooth adapter koster ikke mange penge i dag, i forhold til problemerne med installation, og nye versioner af styresystemet, men det kan give mening, hvor man kun har en ledig indgang.

Den installation jeg har haft held med er beskrevet her: https://gist.github.com/mill1000/74c7473ee3b4a5b13f6325e9994ff84c

Start med at installere bluealsa: sudo apt-get install bluealsa python-dbus derefter skal filen main.conf i bluetooth mappen ændres: sudo nano /etc/bluetooth/main.conf  linjen: DiscoverableTimeout = 0 skal være aktiv fjern havelågen. Filen bluealsa.service skal også ændres: sudo nano /lib/systemd/system/bluealsa.service sidste linje skal ændres til: ExecStart=/usr/bin/bluealsa -p a2dp-sink  Næste punkt er selve programmet der klarer opkoblingen, start med at oprette en fil med: sudo nano /usr/local/bin/a2dp-agent  derefter kopieres fil indholdet fra ovenstående gist link, husk at vælge Raw og gør den eksekverbar med: sudo chmod +x /usr/local/bin/a2dp-agent  Fortsæt med de to service filer: sudo nano /etc/systemd/system/bt-agent-a2dp.service  og kopier indholdet ind, opret den i systemctl med: sudo systemctl enable bt-agent-a2dp.service  derefter samme fremgangsmåde med playback filen: sudo nano /etc/systemd/system/a2dp-playback.service  og sudo systemctl enable a2dp-playback.service  genstart:  sudo reboot  .

Nu skulle det være muligt at koble f. eks. en telefon til, hvis du ikke kan se Rasberrypi i listen, så kan problemet være omkring ændringenaf  DiscoverableTimeout, hvis den ikke vil parer, så er problemet nok a2dp-agent programmet, som du kan se i kommentarene på gist linket, så har der været mange problemer, men det ser ud til at fungere nu, med juni 2021 udgaven af styresystemet, hvis der ikke er lyd ud på hovedtelefon stikket, kan det være nødvendigt med: sudo rpi-update e1050e94821a70b2e4c72b318d6c6c968552e9a2  og genstarte samt ændre indstillingen i raspi-config, det skulle rette en fejl på lydsystemet.

December 2021 udgaven giver store udfordringer, brug i stedet legacy udgaven med 2 linjer ændret i a2dp-agent filen: sudo nano /usr/local/bin/a2dp-agent  linje 75: print("RequestAuthorization (%s)" % (device))  ændres til:  print("Authorizing (%s)" % (device))  og linje 76: raise Rejected("Pairing rejected")  ændres til  return , hvis der ikke er lyd ud på hovedtelefon stik, fjern HDMI stik og genstart.


DAB Shield:

DAB Shield er en DAB radio baseret på en Si 4684 chip fra Silicon labs, ca 7 x 7 mm indeholder radio modtager til bånd III og FM, DAB decodning, AAC decodning, digital til analog decodning og SPI bus til styring, i Arduino shield format, se dabshield.com, den bruges sammen med SAMD boards, f.eks Arduino zero og kompatible se dabshield.com/getstartet for installation af software, der er 3 versioner, den jeg bruger er DABApp.ino, den kan styres via terminal (115200 baud), start med at skrive scan, så skriver den en række frekvenser med services under de frekvenser der er aktive, DAB shield har en god følsomhed så det burde fungere på stavantennen (lodret polarisering), ellers prøv at skrive help så svare den med en hjælpe side hvis terminal forbindelsen er OK, så skulle vi gerne kunne få lyd ud, prøv at skrive tune + et frekvens indeks f.eks tune 26, dernæst et service indeks f.eks service 1, så skulle der gerne være lyd på jack stikket, DR P6 her i Nordsjælland.

DAB Shield med datalink: Først diverse advarsler: Dette er ikke et begynder projekt, det er også dyrt, DAB Shield: £60 GBP + forsendelse, Arduino zero: €49 + forsendelse, en B&O compatibel radio ca. det doble, så absolut en dårlig løsning for de fleste!

Software: Baseret på DABApp.ino med tilføjelse af datalink funktioner, der er mulighed for 9 fastindstillinger (presets) vælges med nummertaster eller enkelt pil, samt gennemløb af services på 2 frekvens indeks med dobbelt pil, frekvens indeks er var freq_indexT1 og 2,  presets  står lige under, så du skal være i stand til at forstå, og ændre dette til det der gælder for dit område, eller hvis der sker ændringer i frekvens eller services, bemærk: Det er ikke alle produkter med datalink der har numerisk valg med, dvs. kun valg med pil tast, se eksempel  her, desværre mangler der lidt stabilitet, iøvrigt er DABApp.ino efter min mening et meget fint eksenpel på c++ programmering, så prøv at se om du kan regne ud hvordan det fungere husk .h filen.

Hardware: består kun i at samle Arduino og shield, pas på du får alle de små pins rigtig ind, datalink tilsluttes digital indgang 3, det er en 3,3V indgang! Meget vigtigt husk 5V til 3,3V omsætter, jeg bruger en 3V zener diode mellem stel og indgang, en småsignaldiode fra indgang til datalink, katode mod datalink dvs. i spærre retning, og en 4,7k modstand mellem indgang og 3,3V. Bemærk: du kan finde mange sidder på nettet, om hvordan du skal gøre det anderledes, så der er absolut ingen garanti. 

----------------------------------------------------------------------------------------------------------------------------------------------

Kurt Nielsen 19-10-2024

Bemærk: B&O og datalink er varemærker tilhørende Bang & Olufsen A/S. Denne side har ingen forbindelse med Bang & Olufsen. Raspberrypi er et varemærke tilhørende Raspberrypi Foundation.

Kilder: Div. service manuals, links der henvises til i ovenstående tekst og www.wiringpi.com