Arduino FM Chipradio RA5807
- pa0fmy
- Berichten: 456
- Lid geworden op: 03 mar 2015, 11:31
- Roepletters: PA0FMY
- Locatie: Vlijmen
- Contacteer:
Arduino FM Chipradio RA5807
Ik ben aan het exprementeren met de Arduino en de RA5807 Ik wil de chip laten omschakelen naar de oost europese FM band en weer terug De chip heeft een aantal frequentiebanden, o.a. Europa, Wereld, Japan en Oost-Europa.
Je kan in Radio, cpp wel een regel veranderen dat is al voorgebakken en zou in register 3 zitten. Maar wat zet ik in het hoofdprogramma om register 3 in de chip aan te passen en wat moet daar in staan. Ik heb al een drukknopje aangesloten waarmee ik het LEDje op de arduino aan en uit kan doen. druk-aan, druk-uit daar moet dus makkelijk een programmerregel aan geplakt kunnen worden.
Je kan in Radio, cpp wel een regel veranderen dat is al voorgebakken en zou in register 3 zitten. Maar wat zet ik in het hoofdprogramma om register 3 in de chip aan te passen en wat moet daar in staan. Ik heb al een drukknopje aangesloten waarmee ik het LEDje op de arduino aan en uit kan doen. druk-aan, druk-uit daar moet dus makkelijk een programmerregel aan geplakt kunnen worden.
-
- Berichten: 791
- Lid geworden op: 10 dec 2014, 21:59
- Roepletters: PA3CQN
- Locatie: Groningen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Volgens de documentatie van de library van mathertel , ervan uitgaand dat je die gebruikt:
...
RDA5807M radio;
...
radio.setBand(<band>)
met voor band de opties:
RADIO_BAND_FM ///< FM band 87.5 – 108 MHz (USA, Europe) selected.
RADIO_BAND_FMWORLD ///< FM band 76 – 108 MHz (Japan, Worldwide) selected.
Maar als je echt de band 50-76 ( 6 meter ) of 65-76 bedoelt dan moet je zelf aan het programmeren. De standaard library
heeft daar geen optie voor. Je moet dan eventueel twee registers wijzigen, en eventueel de kanaalbreedte op 25 kHz zetten.
Afstemmen doe je door de offset van de frequentie tov de laagste frequentie van de band / kanaalbreedte als
channel in te stellen. Maar 6 Meter gebruikt een 20 kHz raster dus dat wordt moeilijk. De standaard module zal ook de verkeerde
filters hebben. En je moet gaan knoeien met de klokfrequentie om toch op de goede frequentie uit te komen.
...
RDA5807M radio;
...
radio.setBand(<band>)
met voor band de opties:
RADIO_BAND_FM ///< FM band 87.5 – 108 MHz (USA, Europe) selected.
RADIO_BAND_FMWORLD ///< FM band 76 – 108 MHz (Japan, Worldwide) selected.
Maar als je echt de band 50-76 ( 6 meter ) of 65-76 bedoelt dan moet je zelf aan het programmeren. De standaard library
heeft daar geen optie voor. Je moet dan eventueel twee registers wijzigen, en eventueel de kanaalbreedte op 25 kHz zetten.
Afstemmen doe je door de offset van de frequentie tov de laagste frequentie van de band / kanaalbreedte als
channel in te stellen. Maar 6 Meter gebruikt een 20 kHz raster dus dat wordt moeilijk. De standaard module zal ook de verkeerde
filters hebben. En je moet gaan knoeien met de klokfrequentie om toch op de goede frequentie uit te komen.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
- pa0fmy
- Berichten: 456
- Lid geworden op: 03 mar 2015, 11:31
- Roepletters: PA0FMY
- Locatie: Vlijmen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Ik heb vanmorgen al zitten zoeken naar andere libraries. Daar vond ik dat commando voor bandomschakeling wel in. De library die ik gebruik kan het wel door een regel te veranderen. Je kan er van maken World, JP, EU_FM, E-EU_FM Dat werkt Denk dat ik nog oude libraries heb. Ga dat vanavond vervangen en kijken of ik dat aan de praat krijg. Leuk werk maar krijg er wel een zere kont van want je bent er lang mee bezig.
-
- Berichten: 791
- Lid geworden op: 10 dec 2014, 21:59
- Roepletters: PA3CQN
- Locatie: Groningen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Wat vaak ontbreekt is goede documentatie. Kijk je in de source dan blijken er veel meer functies te zijn dan in de voorbeelden.pa0fmy schreef:Ik heb vanmorgen al zitten zoeken naar andere libraries. Daar vond ik dat commando voor bandomschakeling wel in. De library die ik gebruik kan het wel door een regel te veranderen. Je kan er van maken World, JP, EU_FM, E-EU_FM Dat werkt Denk dat ik nog oude libraries heb. Ga dat vanavond vervangen en kijken of ik dat aan de praat krijg. Leuk werk maar krijg er wel een zere kont van want je bent er lang mee bezig.
Zelfde trouwens voor de datasheet: registers wel beschreven maar geen nadere uitleg. En dat chinees-engels maakt het er niet makkelijker op.
Dus er gaat veel tijd in zitten .
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
- pa0fmy
- Berichten: 456
- Lid geworden op: 03 mar 2015, 11:31
- Roepletters: PA0FMY
- Locatie: Vlijmen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Ik heb in radio.h ondertussen dit gevonden
private:
unsigned short regs[16];
char rdsStationName[8];
float getFrequency();
void resetStation();
void sendRegister(byte reg);
void decodeRdsMessage();
Die regel heb ik verplaatst naar Public. Dan zeurt de compiler er niet meer over dat dit niet mag. maar nu krijg ik een andere foutmelding als ik dit in de ino file dit zet
radio.sendRegister(waarde 3) voor "waarde" vul ik dan een getal in. Ik heb gevonden wat dat moet zijn voor de verschillende banden. staat in register 3
// Register 3 bits
#define R3_CHANNEL 0xFFC0
#define R3_DIRECT_MODE 0x0020
#define R3_TUNE_ENABLE 0x0010
#define R3_BAND 0x000C
#define R3_BAND_US_EU 0x0000
#define R3_BAND_JP 0x0004
#define R3_BAND_WORLD 0x0008
#define R3_BAND_E_EU 0x000C
#define R3_CHAN_SPACING 0x0003
#define R3_CHAN_SPACE_100K 0x0000
#define R3_CHAN_SPACE_200K 0x0001
#define R3_CHAN_SPACE_50K 0x0002
#define R3_CHAN_SPACE_25K 0x0003
Het complete project staat in de bijlage voor wie zich daarin wil verdiepen.
private:
unsigned short regs[16];
char rdsStationName[8];
float getFrequency();
void resetStation();
void sendRegister(byte reg);
void decodeRdsMessage();
Die regel heb ik verplaatst naar Public. Dan zeurt de compiler er niet meer over dat dit niet mag. maar nu krijg ik een andere foutmelding als ik dit in de ino file dit zet
radio.sendRegister(waarde 3) voor "waarde" vul ik dan een getal in. Ik heb gevonden wat dat moet zijn voor de verschillende banden. staat in register 3
// Register 3 bits
#define R3_CHANNEL 0xFFC0
#define R3_DIRECT_MODE 0x0020
#define R3_TUNE_ENABLE 0x0010
#define R3_BAND 0x000C
#define R3_BAND_US_EU 0x0000
#define R3_BAND_JP 0x0004
#define R3_BAND_WORLD 0x0008
#define R3_BAND_E_EU 0x000C
#define R3_CHAN_SPACING 0x0003
#define R3_CHAN_SPACE_100K 0x0000
#define R3_CHAN_SPACE_200K 0x0001
#define R3_CHAN_SPACE_50K 0x0002
#define R3_CHAN_SPACE_25K 0x0003
Het complete project staat in de bijlage voor wie zich daarin wil verdiepen.
- Bijlagen
-
- Radio-1.2.0.zip
- (140.32 KiB) 221 keer gedownload
Re: Arduino FM Chipradio RA5807
Ik zocht naar de datasheet, maar je hebt de RDA5807?
-
- Berichten: 791
- Lid geworden op: 10 dec 2014, 21:59
- Roepletters: PA3CQN
- Locatie: Groningen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Volgens mij maak je het jezelf te moeilijk:
Als je in de source kijkt ( rda5807m.cpp) zie je daar
je kunt dus gewoon omschakelen naar een andere band door
in het voorbeeld radio.setBand(RADIO_BAND_FM/RADIO_BAND_FMWORLD) aan te roepen.
Daarmee schakel je de band om. De frequentie klopt dan niet omdat het kanaalnummer niet meer klopt.
Dat zou moeten werken door
te gebruiken. Je stelt dan de band in, en de huidige frequentie kopieer je naar de nieuwe band.
In dit geval staat setBandFrequency in radio.cpp, en roept van daar de routines in rda5807m.cpp aan.
NB: dit is een educated guess want ik heb de module zelf niet
Als je in de source kijkt ( rda5807m.cpp) zie je daar
Code: Selecteer alles
// tune to new band.
void RDA5807M::setBand(RADIO_BAND newBand) {
uint16_t r;
RADIO::setBand(newBand);
if (newBand == RADIO_BAND_FM)
r = RADIO_REG_CHAN_BAND_FM;
else if (newBand == RADIO_BAND_FMWORLD)
r = RADIO_REG_CHAN_BAND_FMWORLD;
registers[RADIO_REG_CHAN] = (r | RADIO_REG_CHAN_SPACE_100);
} // setBand()
in het voorbeeld radio.setBand(RADIO_BAND_FM/RADIO_BAND_FMWORLD) aan te roepen.
Daarmee schakel je de band om. De frequentie klopt dan niet omdat het kanaalnummer niet meer klopt.
Dat zou moeten werken door
Code: Selecteer alles
radio.setBandFrequency(RADIO_BAND_FM/RADIO_BAND_FMWORLD,radio.getFrequency());
In dit geval staat setBandFrequency in radio.cpp, en roept van daar de routines in rda5807m.cpp aan.
NB: dit is een educated guess want ik heb de module zelf niet
Laatst gewijzigd door PA3CQN op 06 apr 2020, 16:32, 1 keer totaal gewijzigd.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
-
- Berichten: 791
- Lid geworden op: 10 dec 2014, 21:59
- Roepletters: PA3CQN
- Locatie: Groningen
- Contacteer:
Re: Arduino FM Chipradio RA5807
https://cxem.net/tuner/files/tuner84_RD ... eet_v1.pdfPD1TB schreef:Ik zocht naar de datasheet, maar je hebt de RDA5807?
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Re: Arduino FM Chipradio RA5807
Ah dank! TS had het over de RA5807, kon al niets vinden.PA3CQN schreef:https://cxem.net/tuner/files/tuner84_RD ... eet_v1.pdfPD1TB schreef:Ik zocht naar de datasheet, maar je hebt de RDA5807?
- pa0fmy
- Berichten: 456
- Lid geworden op: 03 mar 2015, 11:31
- Roepletters: PA0FMY
- Locatie: Vlijmen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Bedankt, ik ga het daar eens zoeken. Het is oor mij allemaal nog een vrij nieuwe techniek. Frans.
-
- Berichten: 791
- Lid geworden op: 10 dec 2014, 21:59
- Roepletters: PA3CQN
- Locatie: Groningen
- Contacteer:
Re: Arduino FM Chipradio RA5807
Ik kon het niet laten en heb bij een bestelling van TH-sensors ook een paar rda's mee besteld.
In eerste instantie leek alles te werken maar met het wisselen van de band kwam ik een gek probleem tegen.
Het werkte niet zoals verwacht. Dat was behoorlijk puzzelen maar uiteindelijk bleek er een fout in de library te zitten!!
in rda5807m.cpp staat dit:
Daar ontbreekt iets: het register wordt nooit naar de chip geschreven.
Aan het eind moet nog dit : " _saveRegister(RADIO_REG_CHAN);" om de instelling ook naar de chip te schrijven.
Dit is wat er moet staan, dus de laatste regel aan de functie toegevoegd.
Daarna werkt mijn voorstel "radio.setBandFrequency(RADIO_BAND_FM/RADIO_BAND_FMWORLD,radio.getFrequency());" zoals verwacht en bedoeld.
NB ik heb de library inmiddels aangepast voor 6 en 4 meter en directe afstemming op kHz. Kijken of ik daarmee iets kan ondanks de foute bandbreedte.
Bijvoorbeeld door het met het ruisnivo een opening te signaleren oid.
In eerste instantie leek alles te werken maar met het wisselen van de band kwam ik een gek probleem tegen.
Het werkte niet zoals verwacht. Dat was behoorlijk puzzelen maar uiteindelijk bleek er een fout in de library te zitten!!
in rda5807m.cpp staat dit:
Code: Selecteer alles
void RDA5807M::setBand(RADIO_BAND newBand) {
uint16_t r;
RADIO::setBand(newBand);
if (newBand == RADIO_BAND_FM)
r = RADIO_REG_CHAN_BAND_FM;
else if (newBand == RADIO_BAND_FMWORLD)
r = RADIO_REG_CHAN_BAND_FMWORLD;
registers[RADIO_REG_CHAN] = (r | RADIO_REG_CHAN_SPACE_100);
} // setBand()
Aan het eind moet nog dit : " _saveRegister(RADIO_REG_CHAN);" om de instelling ook naar de chip te schrijven.
Dit is wat er moet staan, dus de laatste regel aan de functie toegevoegd.
Code: Selecteer alles
void RDA5807M::setBand(RADIO_BAND newBand) {
uint16_t r;
RADIO::setBand(newBand);
if (newBand == RADIO_BAND_FM)
r = RADIO_REG_CHAN_BAND_FM;
else if (newBand == RADIO_BAND_FMWORLD)
r = RADIO_REG_CHAN_BAND_FMWORLD;
registers[RADIO_REG_CHAN] = (r | RADIO_REG_CHAN_SPACE_100);
// == deze regel toevoegen
_saveRegister(RADIO_REG_CHAN);
// ==
} // setBand()
NB ik heb de library inmiddels aangepast voor 6 en 4 meter en directe afstemming op kHz. Kijken of ik daarmee iets kan ondanks de foute bandbreedte.
Bijvoorbeeld door het met het ruisnivo een opening te signaleren oid.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________