Fonctionnement du nRF24L01+
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Fonctionnement du nRF24L01+



  1. #1
    invitea5db0ae5

    Fonctionnement du nRF24L01+


    ------

    Bonjour,

    Je voudrais savoir comment interagir avc le module nRF24L01+. Par exemple pour changer le bit PWR_UP de son registre CONFIG quel commande dois je lui envoyer en spi? Je ne comprend pas car on ne peut pas directement changer les valeurs des registres qui sont prédéfinit dans un µC qu'on ne peut programmer directement. Dans un exemple que j'ai trouvé, le programme envoie les données suivantes pour donner la valeur 1 : spi_Send_Read(0x20);spi_Send_R ead(0x3B);SPI_CE = 1; SPI_CSN = 1; Je ne vois pas le lien avec les données qui sont dans la datasheet. Merci.

    -----

  2. #2
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Salut, nous y sommes, quelle ténacité
    La datasheet du nRF24L01 dit qu'il dialogue en SPI et que :
    - la commande d'écriture d'un registre est 0x20
    - PWR_UP est le bit 1 (donc masque 0x02) du registre CONFIG dont l'adresse est 0x00
    Pour modifier PWR_UP, on envoie donc la commande (0x20 | 0x00), suivie d'un octet dont le bit 1 est soit 0, soit 1 selon la valeur à donner à PWR_UP
    Le bit 1 de 0x3B étant à 1, la commande fait PWR_UP=1, et met à 1 les autres bits 5,4,3,0 du registre CONFIG
    Donne un lien de datasheet et on te dira à quel endroit regarder
    La séquence exacte est :
    Code:
     SPI_CSN = 0;           // activer cs spi
     spi_Send_Read(0x20);   // envoyer commande "écrire" et adresse registre
     spi_Send_Read(0x3B);   // envoyer contenu du registre
     SPI_CSN = 1;           // désactiver cs spi
     SPI_CE = 1;            // activer la hf (en mode réception car PRIM_RX=1)

  3. #3
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Je crois avoir compris. Il y a un registre qui est fait rien que pour ecrire W_REGISTRE et aussi un pour lire R_REGISTRE. Le 0x20 vient de la. Le registre W_REGISTER est constitué de 8 bits donc 5 modifiable selon l'adresse qu'on veut modifier: 001A AAAA. C'est bien de la que vient le 2?

    https://www.sparkfun.com/datasheets/...ation_v1_0.pdf

  4. #4
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Maintenant je suis face à un autre probleme : comment communiquer à partir de l'esclave qui est le nrf24l01+? Car c'est bien beau d'envoyer des données mais ça ne sert à rien si on ne sait pas les recevoir

  5. A voir en vidéo sur Futura
  6. #5
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    La fonction test_SPI() est très intéressante car elle fait des écritures puis des lectures pour vérifier que le dialogue SPI passe bien, sans erreur. C'est pourquoi il l'a placée en début de programme.

  7. #6
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Je crois que c bon pour la communication SPI mais il faut que tu m'eclaircisse sur quelque chose encore Dans l'exemple du code pour envoyer une donnée je ne vois pas tres bien comment il le fait. J'ai bien reconnu la commande (0xA0) pour ecrire le payload mais apres la vraie donnée elle e trouve ou?

  8. #7
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Le nRF24L01 stocke les 2 buffers rx/tx, et des registres de tailles différentes, voir liste registres.
    Il y a des registres de 1 octet, CONFIG, STATUS, ...
    Il y a 12 registres de 1 ou 5 octets, ce sont les adresses tx et rx des 6 nodes, qui permettent de transmettre à 6 correspondants différents.
    Il y a 2 buffers de 32 octets rx et tx, ou sont stockés les payload, dont la taille TP est programmable de 1 à 32.

    On écrit un registre avec la commande W_REGISTER | adr, suivie de n octets data (n = 1 ou 5).
    On lit un registre avec la commande R_REGISTER | adr, suivie de n octets 0xff (n = 1 ou 5). A chaque fois qu'on envoie un 0xff, on reçoit un octet data du nRF24L01.
    Pour le payload c'est pareil sauf que c'est les commandes W_TX_PAYLOAD et R_RX_PAYLOAD, avec n = TP.

  9. #8
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Pour l'envoi il y a 2 modes, soit on met CE à 1, et toute écriture dans le buffer tx, part aussitôt, soit on écrit le buffer tx, puis on lève CE pendant 10us. Pour la réception soit on boucle sur la lecture du registre STATUS, soit on utilise la broche IRQ qui indique que le buffer rx est plein. Ca doit pas être simple à mettre au point, faut éplucher la doc, et l'exemple est bien fait.

  10. #9
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Peut tu me donner un simple exemple de transmission et de reception avec les etapes et avec les adresse de registre stp?

  11. #10
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Je ne peux pas en faire plus, c'est à toi de jouer maintenant. Tu me demandes ce que tu as déjà, je t'ai déjà dit d'utiliser le debugger ou d'analyser le source que tu possèdes, il y a tout dedans.

  12. #11
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Je c'est mais c'est mieu d'avoir le plus de source possible et surtout je pense que je touche au but il me reste à regler le probleme de comment lire les données reçu car dans l'exemple, je ne comprend pas très bien. Peut tu le dire juste si ma démarche est bonne : j'envoie (0xA0) pour écrireet ensuite j'envoie une donnée de 5 bytes et pour la lecture j'envoie (0x61) et ensuite??? chui perdu xD Le programme lit directement ce qu'il y a? je fait comment pour récupérer la donnée?

  13. #12
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Toujours la question "je fais quoi ?"
    Et lui qu'est ce qu'il fait dans test_SPI() ?

  14. #13
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    Je tourne en rond haha xD Merci pour tout je pense que je saurais me débrouiller meme si je risque encore de transpirer un peu

    Juste une derniere chose : Comment savoir si le test spi à fonctionné, je sais pas quoi faire avec les return 1 et return 0

  15. #14
    invite830075ec

    Re : Fonctionnement du nRF24L01+

    Code:
    On écrit un registre avec la commande W_REGISTER | adr, suivie de n octets data (n = 1 ou 5).
    On lit un registre avec la commande R_REGISTER | adr, suivie de n octets 0xff (n = 1 ou 5). A chaque fois qu'on envoie un 0xff, on reçoit un octet data du nRF24L01.
    Je me cite, car je suis pas sur que tu lises les posts.
    Dans test_SPI() il écrit un registre adresse de 5 octets, puis il le lit dans la foulée, et si un des 5 octets n'est pas conforme à ce qu'il a écrit, il sort prématurément du programme, allume la led et rentre dans une boucle while (1) ;
    Durant cette lecture il envoie des 0x00 plutôt que des 0xff, mais cela n'a pas d'importance car c'est l'octet que le pic reçoit qui nous intéresse. Le nRF24L01 n'en a rien à faire des octets qu'il reçoit, mais ils sont nécessaires pour lui faire envoyer ses datas.
    Je te conseille de relire calmement tous les posts que tu as déjà reçus et plusieurs fois.

  16. #15
    invitea5db0ae5

    Re : Fonctionnement du nRF24L01+

    void transmit_data( unsigned char *TX_Data )

    Pourquoi le signe de multiplication avant TX_Data?

Discussions similaires

  1. NRF24L01+ - faible distance de tranmission
    Par mmm999 dans le forum Électronique
    Réponses: 35
    Dernier message: 11/01/2016, 19h12
  2. nrf24l01+ avec pic 18f2520
    Par invitea5db0ae5 dans le forum Électronique
    Réponses: 28
    Dernier message: 14/08/2014, 23h42
  3. NRF24L01 arduino
    Par invitec078c399 dans le forum Électronique
    Réponses: 0
    Dernier message: 28/07/2014, 15h21
  4. Fonctionnement ?
    Par invite243f18c0 dans le forum Électronique
    Réponses: 7
    Dernier message: 21/11/2011, 18h28
  5. Communication entre deux nRF24l01+
    Par invite8699d527 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/10/2011, 07h49
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...