Non fonctionnement du RDA5807M

Bonsoir à tous,

Je galère sur une réalisation qui utilise le circuit RDA5807M, pour ce la j’aurais besoin de vos lumières.

J’ai essayé deux circuits différents, mais hélas ça ne fonctionne pas.

Pouvez-vous me confirmer que l’alimentation est bien de 3,3V et non pas 5V ?

En faisant une recherche d’adresses I2C sur ce circuitn j’obient bien celle de l’afficheur Oled, mais pour le RDA5807M j’en ai jusque 3, est-ce normal ?

Adresse du sujet : Simple récepteur radio FM avec Arduino UNO et RDA5807M | Arduino | Maker Pro

Dans l’attente de vous lire,

Cordialement

Alain

Bonsoir @retraite

Bonne soirée

PS: En principe il n’y a pas de problème pour brancher les 2 périphériques i2C de votre montage. La seule difficulté c’est que le RDA 5807 n’est pas adapté pour les plaques d’essais. Il faut donc jouer du fer à souder pour faire des adaptations :wink:

l’alimentation est bien de 3,3V

Si j'en crois des librairies que j'ai parcourues le RDA5807M répond à 2 adresses

#define I2C_ADDR_DIRECT_ACCESS 0x11 //!< Can be used to access a given register at a time.
#define I2C_ADDR_FULL_ACCESS 0x10 //!< Can be used to access a set of register at a time.

Mais je ne retrouve pas cette info dans les datasheets du composant où seule l'adresse 0x10 apparaît.

Bonjour,

Merci pour votre réponse, celà correspond à ce que j’avais vu sur le programme test.

Cependant, j’ai essayé deux RDA5807M, sans succés, ce programme ne fonctionne toujours pas.

Soit il se reboute en permanence, soit il affiche un petit “0” en haut à droite de l’afficheur.

Le programme de test du RDA5807M donne deux résultat différents, mais rien de valable.

A vous lire,

Cordialement,

Alain

Bonjour,

Essayez le module radio uniquement avec ce code basic (attention au montage pull-down ou pull-up):

/// |  ATmega328P        |  RDA5807M
/// | -------------------| -------------------|
/// | 3.3V (rouge)       | VCC                |
/// | GND (noir)         | GND                |
/// | A5 or SCL          | SCLK               |
/// | A4 or SDA          | SDIO               |

// VCC pin 7
// GND pin 8

#include <Arduino.h>
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <RDSParser.h>

// déclaration des boutons poussoirs
constexpr byte recherchePlus = 2;
constexpr byte rechercheMoins = 3;
constexpr byte volumePlus = 4;
constexpr byte volumeMoins = 5;

int volume = 3;

// Initialise les variables du RDA5807M
#define FIX_BAND     RADIO_BAND_FM
#define FIX_STATION 10130
#define FIX_VOLUME  3

RDA5807M radio;    // Cree une instance de la classe RDA5807M

void setup() {

  // Initialise la Radio
  radio.init();

  // active les informations du port série
  //radio.debugEnable();

  // Paramétre toutes les valeurs du RDA5807M
  radio.setBandFrequency(FIX_BAND, FIX_STATION);
  radio.setVolume(FIX_VOLUME);
  radio.setMono(false);
  radio.setMute(false);

  // initialise les boutons
  pinMode(recherchePlus, INPUT);  // pin 4 (D2)
  pinMode(rechercheMoins, INPUT); // pin 5 (D3)
  pinMode(volumePlus, INPUT);     // pin 6 (D4)
  pinMode(volumeMoins, INPUT);    // pin 11 (D5)

} // Fin  setup

void loop() {

  if (digitalRead(rechercheMoins)) {
    radio.seekDown();
    delay(200);
  }

  if (digitalRead(recherchePlus)) {
    radio.seekUp();
    delay(200);
  }

  // Verifie si on appui sur le bouton 3
  if (digitalRead(volumePlus)) {
    volume++;
    if (volume > 15) volume = 15;
    radio.setVolume(volume);
    delay(200);
  }

  // Verifie si on appui sur le bouton 4
  if (digitalRead(volumeMoins)) {
    volume--;
    if (volume < 0) volume = 0;
    radio.setVolume(volume);
    delay(200);
  }
}

ou celui-ci :

// Selon  Matthias Hertel, http://www.mathertel.de pour les librairies

/// |  ATmega328P        |  RDA5807M
/// | -------------------| -------------------|
/// | 3.3V (rouge)       | VCC                |
/// | GND (noir)         | GND                |
/// | A5 or SCL          | SCLK               |
/// | A4 or SDA          | SDIO               |

// VCC pin 7
// GND pin 8
// Condensateur de découplage sur 7 et 8 de 100nF

#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>

// Cree une instance de la classe RDA5807M
RDA5807M radio;

// déclaration des boutons poussoirs
constexpr byte recherchePlus {2};   // pin 4 (D2) - pull-down
constexpr byte rechercheMoins {3};  // pin 5 (D3) - pull-down
constexpr byte volumePlus  {4};      // pin 6 (D4) - pull-down
constexpr byte volumeMoins {5};     // pin 11 (D5)- pull-down



// Initialise les variables du RDA5807M
constexpr int rtl {10130};
int volume {3};

void setup() {

  // Initialise la Radio
  radio.init();

  // Paramétre toutes les valeurs du RDA5807M
  radio.setBandFrequency(RADIO_BAND_FM, rtl);
  radio.setVolume(volume);
  radio.setMono(false);
  radio.setMute(false);

  // initialise les boutons
  pinMode(recherchePlus, INPUT);  // pin 4 (D2) - pull-down
  pinMode(rechercheMoins, INPUT); // pin 5 (D3) - pull-down
  pinMode(volumePlus, INPUT);     // pin 6 (D4) - pull-down
  pinMode(volumeMoins, INPUT);    // pin 11 (D5) - pull-down
  // pin 1 - pull-up (reset)

}

void loop() {

  // Verifie si on appui sur le bouton rechercheMoins
  if (digitalRead(rechercheMoins)) {
    radio.seekDown();
    while (digitalRead(rechercheMoins)) {
      delay(100);
    }
  }

  // Verifie si on appui sur le bouton recherchePlus
  if (digitalRead(recherchePlus)) {
    radio.seekUp();
    while (digitalRead(recherchePlus)) {
      delay(100);
    }
  }

  // Verifie si on appui sur le bouton volumePlus
  if (digitalRead(volumePlus)) {
    if (volume < 15) radio.setVolume(++volume);
    while (digitalRead(volumePlus)) {
      delay(100);
    }
  }

  // Verifie si on appui sur le bouton volumeMoins
  if (digitalRead(volumeMoins)) {
    if (volume > 0)  radio.setVolume(--volume);
    while (digitalRead(volumeMoins)) {
      delay(100);
    }
  }
}

J'ai utilisé ce code pour l'utilisation avec un 328p "standalone"
Vous pouvez utiliser INPUT-PULLUP plutôt que INPUT avec le code adéquat pour les BP et avec par exemple une Arduino UNO...
Je ne vous garantie pas le code car il remonte à plusieurs années mais vous avez de quoi résoudre votre problème de fonctionnement du module radio. C'est juste pour tester votre module. Vous avez juste à télécharger les librairies :

Dans le dernier lien vous avez un exemple de code joint à la librairie.

Bonjour,

Merci à tous, je vais de ce pas dessiner un typon pour faire les essais de vos programmes et je reviens vers vous.

Cordialement,

Alain

Bonjour @retraite

Si ça peut vous aider :


Est-ce vraiment le fonctionnement prévu ?

A moins que ce ne soit pour tester les fusibles de sortie d'alimentation Vcc.

Qu'on soit bien clairs.
Lorsque tu parles de circuits tu parles de circuits intégrés RDA5807M que tu aurais câblés toi-même ou tu parles de modules du commerce intégrants un RDA5807M?

A noter, ces modules n'ont pas résistances de pullup. Il faut en ajouter pour rendre la liaison plus robuste.

Il y a deux schémas différents :

– le premier, plus simple, avec un jack et un seul BP visible , où le pull-down est classique (entrée -> R de 10 kΩ -> GND, et le bouton relie l’entrée à VCC).

– le second, plus complet avec en plus des HP, où EasyEDA rend la zone des BP moins lisible.

Dans les deux cas, le principe est le même : l’entrée du 328p est à GND via 10 kΩ au repos, et passe à VCC lorsqu’on appuie. Il n’y a pas de court-circuit direct VCC–GND, seulement 0,5 mA à travers 10 kΩ.

Je ne sais pas, mais quand je vois ça :

Quand le contact est au travail, il y a bien un court-circuit franc entre le Vcc et la masse.

Oups :

La broche 4 est une broche mécanique NC, comme la broche 3.

EasyEDA les affiche, mais dans le vrai composant elles ne sont reliées à rien en interne.

Seules les broches 1 et 2 forment le contact.

Donc même si la 4 est reliée à un net (VCC) dans le schéma, cela n’a aucun effet électrique et ne crée aucun court-circuit.

Je suis désolé, mais la représentation est fausse.
Le schéma est faux.

Un schéma se doit de pouvoir être lu sans être obligé de lire quatre pages d'erratas.

@68tjs

Vous avez raison sur un point : la représentation n’est pas bonne.
EasyEDA inclut les pattes 3 et 4 dans le symbole, mais ces deux broches sont « NC » dans la datasheet Omron (ce sont des pattes mécaniques sans connexion interne).
Dans mon schéma, seule la broche 3 est reliée à VCC, mais comme 3 et 4 ne sont connectées à rien en interne, il n’y a évidemment aucun court-circuit.
Électriquement, seules les broches 1 et 2 forment le contact du bouton, reliées respectivement à l’entrée du microcontrôleur et à la résistance de 10 kΩ vers GND.
Je suis d’accord que pour une lisibilité parfaite sans avoir la datasheet sous les yeux, je corrigerai le symbole pour ne connecter que 1 et 2 et laisser 3–4 flottantes.

... dans ce cas il s'agit d'un contact permanent

Bonjour @5_cylindres ,
Le petit trait entre 1 et 2 ne représente pas un contact permanent, mais le symbole interne du B3F-4055 tel qu’il est dessiné dans EasyEDA (reprise du schéma Omron).
Le contact n’est fermé qu’à l’appui, conformément à la datasheet : broches 1 et 2 = NO (normally open).
Au repos, 1 et 2 ne sont pas reliées électriquement.
L’entrée du microcontrôleur est donc bien à GND via 10 kΩ au repos, et passe à VCC uniquement quand on appuie.

Je reconnais que la représentation EasyEDA prête à confusion ; je modifierai le symbole pour qu’il soit plus clair dans une prochaine version.

Désolé mais sur la doc Omron (page 6) on a ceci, qui correspond bien au symbole utilisé dans EasyEDA.


Tu peux expliquer comme tu veux sur le schéma lorsqu'on ferme le poussoir, on relie 3 et 1 avec 3 qui est à Vcc et 1 qui est à GND on a donc un court-circuit.
La connexion du 1 devrait aller de l'autre coté de la résistance.

regarde bien le schéma que tu as fourni : 1 et 2 sont reliées en interne d'après le symbole ... qui correspond bien à celui d'Omron.

pour le reste, @68tjs et @fdufnews soulèvent un problème de câblage évident...

page 3, au tableau “Ratings / Characteristics” :

  • Contact form : SPST-NO
  • SPST-NO signifie :
    Single Pole -> un seul circuit interne
    Single Throw -> un seul contact possible
    Normally Open -> ce contact est ouvert au repos

Donc, par définition, le B3F ne contient qu’un seul contact électrique interne, et ce contact ne peut relier que deux broches : celles indiquées dans le schéma interne (les broches 1 et 2).
La vue “Terminal Arrangement / Internal Connections (Top View)” montre bien que :
la lamelle de contact n’existe qu’entre 1 et 2
3 et 4 ne sont pas connectées en interne (elles servent uniquement de pattes mécaniques de maintien du switch dans le PCB)
C’est cohérent à la fois avec le schéma interne et avec la spécification SPST-NO.

Le contact unique relie la paire 1,2 à la paire 3,4

1 et 2 sont reliés en permanence, de même que 3 et 4 de leur côté

facile à vérifier au multimètre

cette disposition avec 4 bornes pour un contact unique est assez fréquente , elle facilite le matriçage de boutons pour former un clavier, le dédoublement des extrémités du contact unique n’ont pas pour fonction unique le maintien du poussoir .