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 ?
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
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.
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.
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.
– 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Ω.
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.
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.
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.
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 .