J'ai un programme serveur qui fonctionne avec une Mega2560 et que j'essaye de passer sur un ProMini.
Ce programme utilise un transceiver. J'ai mis en commentaires les instructions d'affectations de pins aux sorties SPI puisque j'utilise directement les trous spécialisés de la carte .
Mon programme reçoit en permanence des données intempestives.
J'ai pris la précaution de vider le buffer de réception à la fin du setup().
J'affiche des chiffres dans le setup() pour voir où se produit le blocage.
Résultat :
le setup() s'éternise et quand il se termine, le moniteur m'affiche une foule interminables de caractères reçus alors que le client n'est pas branché.
micol:
Ce programme utilise un transceiver. J'ai mis en commentaires les instructions d'affectations de pins aux sorties SPI puisque j'utilise directement les trous spécialisés de la carte .
micol:
J'ai un programme serveur qui fonctionne avec une Mega2560 et que j'essaye de passer sur un ProMini.
Ce programme utilise un transceiver. J'ai mis en commentaires les instructions d'affectations de pins aux sorties SPI puisque j'utilise directement les trous spécialisés de la carte .
Merci pour vos réponses.
Ça me donne une piste : je vais mettre CE et CS à Vcc et voir ce que ça donne.
Le code n'est pas en cause puisqu'il fonctionnait sur la mega 2560. Le problème est d'ordre plus général : passage de la mega à la pro-mini, quelque soit le programme avec transceiver.
C'est pas obligatoire si il n'y a qu'un seul périphérique sur le bus SPI.
Mais bon avec ce serait mieux, d'autant plus que la lib Mirf s'attend à pouvoir accéder à cette broche.
C'est pas obligatoire si il n'y a qu'un seul périphérique sur le bus SPI.
Mais bon avec ce serait mieux, d'autant plus que la lib Mirf s'attend à pouvoir accéder à cette broche.
rahan:
Normalement le nrf24l01 s'alimente en 3.3v
Je pense que ton arduino mini pro ne te sort que du 5v.
Il faudra convertir tout ça.
Merci.
Ce montage est en stand-by car je me suis lancé dans les afficheurs ILI9340C.
Pour l'alim du transceiver, j'avais bien mis un step-down converter réglé sur 3 volts.
J'ai tout branché et pourtant j'ai toujours des messages bidons. Il n'y a pas d'autre système en service, donc celui-ci ne devrait rien recevoir. Le fenêtre du moniteur série défile rapidement avec "on a reçu : xxx" dans lequel xxx représente tantôt rien tantôt des caractères comme le y avec tréma.
Je sais que ça arrive quand le transceiver est absent donc il semble ne pas être reconnu.
J'ai fait un programme d'essai juste pour tester.
Voici mon code et mon branchement.
/* _Pro_Mini_et_NRF24L01
Ce programme envoie juste un message quand il est prêt
et affiche ce qu'il reçoit */
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
byte messageClient[] = ".........."; // 10 caractères
byte messageDemarrage[] = "C'est moi!";
void setup(){
Serial.begin(9600);
Mirf.cePin = 5;
Mirf.csnPin = 6;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 12;
Mirf.payload = 10 ;
Mirf.setTADDR((byte *)"clie1");
Mirf.setRADDR((byte *)"plot1");
Mirf.config();
// vider buffer de réception
while(Mirf.dataReady() )
Mirf.getData((byte *) NULL);
Serial.println("Programme _Pro_mini_et_NRF24L01 du 06/02/2014.");
Mirf.send((byte *)&messageDemarrage);
Serial.println("Init Ok...");
}
void loop(){
if (Mirf.dataReady() ) {
Mirf.getData((byte *) &messageClient);
Serial.print("On a recu : ");
for ( int i = 0 ; i<10 ; i++) {
Serial.write(messageClient[i]);
}
Serial.println();
}
}
Il m'est arrivé la même chose y'a pas longtemps, effectivement si CS est mal branché/configurer c'est la punition. Vérifie tes branchements / configuration de pin (je sais que ça fait très con mais perso j'avais eu beau avoir vérifier 10x mon montage, et bien je m'étais quand même viandé ...).
Vérifie en prenant le fil de CS et en le branchant physiquement, tantôt au GND tantôt au +5V, et en observant les réactions sur moniteur série
J'ai passé l'après-midi d'hier à vérifier mes fils, à essayer de mettre CE ou CSN à la masse ou au VCC sans que ça ne change grand'chose.
J'ai fait la modif de programme préconisée par Skywodd.
J'ai aussi modifié la partie "affichage" pour encadrer les caractères reçus par des "|" et afficher le code du premier reçu.
void loop(){
if (Mirf.dataReady() ) {
Mirf.getData((byte *) &messageClient);
Serial.print("On a recu : |");
for ( int i = 0 ; i<10 ; i++) {
Serial.write(messageClient[i]);
}
Serial.print("| ");
Serial.println(messageClient[0]);
}
}
Pour les chaines non vides, ça donne ça :
On a recu : |ÿÿÿÿÿÿÿÿÿÿ| 255
Pour les chaînes vides (copier-coller impossible), le code affiché est tantot 0 tantot 14.
J'aurais dû y penser plus tôt puisque la solution se rapproche de celle du problème rencontré sur un autre montage qui a fait l'objet d'un autre fil.
Le courant fourni par la sortie VCC du ProMini est insuffisant pour faire fonctionner le transceiver.
En alimentant le régulateur par une alim indépendante, ça a l'air de marcher.
Il me restera à vérifier en faisant bavarder ce montage avec un autre. C'est différé pour cause de panne de mon autre PC ou plutôt de son chargeur dont j'ai l'intention d'ouvrir le ventre pour autopsie ou peut-être résurection.