Arduino FM Chipradio RA5807

Alles over zelfbouwprojecten.
Plaats reactie
Bericht
Auteur
Gebruikersavatar
pa0fmy
Berichten: 456
Lid geworden op: 03 mar 2015, 11:31
Roepletters: PA0FMY
Locatie: Vlijmen
Contacteer:

Arduino FM Chipradio RA5807

#1 Bericht door pa0fmy »

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.
Bijlagen
100_8525.JPG

PA3CQN
Berichten: 789
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Arduino FM Chipradio RA5807

#2 Bericht door PA3CQN »

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.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________

Gebruikersavatar
pa0fmy
Berichten: 456
Lid geworden op: 03 mar 2015, 11:31
Roepletters: PA0FMY
Locatie: Vlijmen
Contacteer:

Re: Arduino FM Chipradio RA5807

#3 Bericht door pa0fmy »

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.

PA3CQN
Berichten: 789
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Arduino FM Chipradio RA5807

#4 Bericht door PA3CQN »

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.
Wat vaak ontbreekt is goede documentatie. Kijk je in de source dan blijken er veel meer functies te zijn dan in de voorbeelden.
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
_______________________________________________

Gebruikersavatar
pa0fmy
Berichten: 456
Lid geworden op: 03 mar 2015, 11:31
Roepletters: PA0FMY
Locatie: Vlijmen
Contacteer:

Re: Arduino FM Chipradio RA5807

#5 Bericht door pa0fmy »

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.
Bijlagen
Radio-1.2.0.zip
(140.32 KiB) 218 keer gedownload

PD1TB
Berichten: 26
Lid geworden op: 11 jul 2019, 14:02
Roepletters: PB1TB
Locatie: Groningen

Re: Arduino FM Chipradio RA5807

#6 Bericht door PD1TB »

Ik zocht naar de datasheet, maar je hebt de RDA5807?

PA3CQN
Berichten: 789
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Arduino FM Chipradio RA5807

#7 Bericht door PA3CQN »

Volgens mij maak je het jezelf te moeilijk:

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()
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

Code: Selecteer alles

radio.setBandFrequency(RADIO_BAND_FM/RADIO_BAND_FMWORLD,radio.getFrequency());
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 ;-)
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
_______________________________________________

PA3CQN
Berichten: 789
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Arduino FM Chipradio RA5807

#8 Bericht door PA3CQN »

PD1TB schreef:Ik zocht naar de datasheet, maar je hebt de RDA5807?
https://cxem.net/tuner/files/tuner84_RD ... eet_v1.pdf
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________

PD1TB
Berichten: 26
Lid geworden op: 11 jul 2019, 14:02
Roepletters: PB1TB
Locatie: Groningen

Re: Arduino FM Chipradio RA5807

#9 Bericht door PD1TB »

PA3CQN schreef:
PD1TB schreef:Ik zocht naar de datasheet, maar je hebt de RDA5807?
https://cxem.net/tuner/files/tuner84_RD ... eet_v1.pdf
Ah dank! TS had het over de RA5807, kon al niets vinden.

Gebruikersavatar
pa0fmy
Berichten: 456
Lid geworden op: 03 mar 2015, 11:31
Roepletters: PA0FMY
Locatie: Vlijmen
Contacteer:

Re: Arduino FM Chipradio RA5807

#10 Bericht door pa0fmy »

Bedankt, ik ga het daar eens zoeken. Het is oor mij allemaal nog een vrij nieuwe techniek. Frans.

PA3CQN
Berichten: 789
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Arduino FM Chipradio RA5807

#11 Bericht door PA3CQN »

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:

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()
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.

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()
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.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________

Plaats reactie