Radio DAB+

Build your own DAB+/FM Radio !!!
MY DAB+ radio !
It has now been over 12 years since I built the Elektor DSP radio which used the Si4735 chip from Silicon Labs (now Skyworks). This was the first time an FM radio was built using a DSP circuit to receive and decode RDS from an FM station.
I wanted to reissue this radio by adapting it to the new DAB+ radio standard.
In my area, I receive more than 80 DAB stations perfectly with excellent sound quality.
So I turned to the "successor" of the Si4735 chip which is called Si4684.
I used a card integrating the SI4684 chip from AVIT Research.
I programmed the application on an ESP32 Wroom-32D processor (ESPRESSIF''s ESP32 Dev kit).
I connected a color TFT screen and an 82C256 EEPROM linked to the I2C bus.
The user interface uses 7 keys.
I wrote a complete software to manage FM and DAB+, including full station name management (both FM and DAB+) allowing sorting and alphabetical display of stations.
Therefore, the selection of the different stations is very pleasant, without any dead time in the display, and the HMI interface is very reactive.
A lot of information is displayed in real time (Intensity and quality of the frequency signal, automatically updated time, etc.).
The sound quality is there, and on my prototype I even added two small class D amps with an output power of 3W RMS. Bluffing when plugged into good speakers!
Do not hesitate to reproduce my prototype and be sure to use the latest version of the software (currently april-2023 version 1.70) because many improvements are regularly integrated!
Good listening !!!
It has now been over 12 years since I built the Elektor DSP radio which used the Si4735 chip from Silicon Labs (now Skyworks). This was the first time an FM radio was built using a DSP circuit to receive and decode RDS from an FM station.
I wanted to reissue this radio by adapting it to the new DAB+ radio standard.
In my area, I receive more than 80 DAB stations perfectly with excellent sound quality.
So I turned to the "successor" of the Si4735 chip which is called Si4684.
I used a card integrating the SI4684 chip from AVIT Research.
I programmed the application on an ESP32 Wroom-32D processor (ESPRESSIF''s ESP32 Dev kit).
I connected a color TFT screen and an 82C256 EEPROM linked to the I2C bus.
The user interface uses 7 keys.
I wrote a complete software to manage FM and DAB+, including full station name management (both FM and DAB+) allowing sorting and alphabetical display of stations.
Therefore, the selection of the different stations is very pleasant, without any dead time in the display, and the HMI interface is very reactive.
A lot of information is displayed in real time (Intensity and quality of the frequency signal, automatically updated time, etc.).
The sound quality is there, and on my prototype I even added two small class D amps with an output power of 3W RMS. Bluffing when plugged into good speakers!
Do not hesitate to reproduce my prototype and be sure to use the latest version of the software (currently april-2023 version 1.70) because many improvements are regularly integrated!
Good listening !!!
Updates from the author
ybourdon 2 years ago
Update : Software v1.70 : please use this updated version !
Regards.
Yves
In some regions and for some ensembles, the order of stations changes at each tuning, i.e. the station gets a different index each time, and the index stored in the EEPROM at time of scanning is no longer valid.
In this case, tuning by using Dab.tune(ensemble) and Dab.set_service(service) does not work correctly, but tuning has to be done via the ServiceID using Dab.tuneservice(ensemble, serviceid, compid).
For this, ServiceID & CompID are now also stored in the EEPROM (uint32_t, i.e. 4 bytes each).
!!!! Thank you Michael for being able to fix this problem !!!!
eengineer1982 2 years ago
ybourdon 2 years ago
FR0117207ID 2 years ago
je suis aussi le projet U_Green carte Si4684 et support I2S sur raspberry.
Cdt. Jean-marc.
ybourdon 2 years ago
Cordialement.
Yves
ybourdon 2 years ago
In this case, tuning by using Dab.tune(ensemble) and Dab.set_service(service) does not work correctly, but tuning has to be done via the ServiceID using Dab.tuneservice(ensemble, serviceid, compid).
For this, ServiceID & CompID are now also stored in the EEPROM (uint32_t, i.e. 4 bytes each).
!!!! Thank you Michael from Swizerland for being able to fix this problem !!!!
qzdfqsdf qsdfqsfqfqz qegvqwfvqeg 2 years ago
joel14 5 months ago
Tout d'abord Bravo et merci pour votre travail sur ce projet de Dab+ radio.
De mon coté, Je suis électronicien à la retraite . Pour redonner vie aux vielles TSF, vous avez 2 solutions, module Bluetooth ou Dab radio. j'ai opté pour la solution la plus difficile. Vu le prix du Dab_shield, J'ai réalisé mon PCB DAB Shield sur la base du schéma https://www.verical.com/datasheet/silicon-labs-transceiver-si4684-a10-gm-5698338.pdf. voir schéma et photo dans le fichier zip
je rencontre un problème au niveau de la procédure begin
Dab.setCallback(ServiceData); // DAB Setup Dab.begin(DAB_band, intdabpin, resetDABpin, pwen);
J'ai une erreur quand la procédure arrive à la fonction si468x_init_dab()
---------------------------------------static void si468x_init_dab()
{
si468x_flash_load(0x6000);
si468x_boot();
si468x_set_freq_list();
//Set up INTB
si468x_set_property(0x0000, 0x0010);
si468x_set_property(0x1710, 0xF83E);
si468x_set_property(0x1711, 0x01A4);
si468x_set_property(0x1712, 0x0001);
si468x_set_property(0x8100, 0x0001); //enable DSRVPCKTINT
si468x_set_property(0xb400, 0x0007); //enable XPAD data
Serial.println("");
Serial.println("si4684 DAB_setup done");
}------------------------------------ci dessous le fichier log que j'ai réalisé en ajoutant plusieurs serial.print dans la fichier dabshiels .cpp. en pièce jointe
log file : si erreur elle est donnée dans la fonction responseN(5). tout se passe bien jusqu'à la fonction si4684 DAB_flash_load - adress : 24576
-------------------------
DAB initialisation Start:
-------------------------
si4684 DAB_power_up:
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_load_init:
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 508
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 1016
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 1524
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 2032
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 2540
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 3048
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 3556
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 4064
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 4572
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 5080
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 5588
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_Host_load - index: 5796
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_load_init:
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_flash_set_property : 1 , value : 10000
N0 0 N1 128 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_OK:
si4684 DAB_flash_load - adress : 24576
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_boot_load:
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 set_freq_list:
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 0 , value : 16
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 5904 , value : 63550
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 5905 , value : 420
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 5906 , value : 1
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 33024 , value : 1
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_set_property : 46080 , value : 7
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_setup done
si4684 DAB_get_part_info
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_get_part_info - ChipRevision : 0
si4684 DAB_get_part_info - RomID: 0
si4684 DAB_get_part_info - PartNo : 1876
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_CTS_error : 128
si4684 DAB_get_part_info
N0 0 N1 192 N2 0 N3 0 N4 128 N5 0 responseN(5) end
si4684 DAB_get_part_info - VerMajor : 0
si4684 DAB_get_part_info - VerMinor : 0
si4684 DAB_get_part_info - VerBuild : 0
-------------------------
DAB is KO - Si4684:check connections
-------------------------
J'ai lu dans la AN649-programming guide page 14 que la Flash Load est uniquement supportée après ajout d'un patch du bootloader.
j'utilise actuelle la bibliothèque Dabshield v1.5.3 .
Quelle version avez vous utilisé pour faire fonctionner votre module?
Connaissez vous ce patch du bootloader?
Autre question. savez vous si la mémoire externe qui se trouve que le dabshield doit etre alimentée par la tension VIO ou la tension VMEM? j'ai un doute sur ce point.
dès que tout cela voudra bien fonctionner , je mettrai à disposition le dossier Kicad complet du PCB dabshield pour ceux qui me le demanderont. il fait 12 Mo zippé donc trop gros pou erte mis ici.
Merci pour vos réponses.