' Configuration pour le Test RX-TX ' -------------------------------- ' Config - PRX=0(recepteur), PWR_UP=1, CRC 2bytes, CRC active : ' [Config_nrf] = $0F (7) ' Adresse d'émission ' [Tx_addr] = $34/$43/$10/$10/$01 (52/67/16/16/1) ' Adresse de réception du "pipe0" ' [Rx_addr_p0] = $34/$43/$10/$10/$01 (52/67/16/16/1) ' Activation de "auto ACK" pour le "pipe0" ' [En_aa] = $01 (1) ' Active l'adresse de réception du "pipe0" ' [En_rxaddr] = $01 (1) ' Choix du canal radio ' [Rf_ch] = 40 ($28) ' Fixe la taille de la charge utile de réception pour le pipe0 ' [Rx_pw_p0] = 5 ($05) ' Config de la radio ' Puissance de sortie = 0dbm, Débit = 2Mbps & Ampli activé ' [Rf_setup] = $0F (15) ' Configuration RX ' PRX=1(récepteur), PWR_UP=1, CRC 2bytes, CRC activé ' [Config_nrf] = $0F (15) ' Configuration TX ' PRX=0(Emetteur), PWR_UP=1, CRC 2bytes, CRC activé ' [Config_nrf] = $0E (14) = Exemple Pgm RX Bascom ======================================================== Print "***** Recepteur *****" ' Identification sur le terminal Call Lecture(status , 1) ' Lecture du registre de status Reset Ce ' Désactivation de la radio pouraccéder au SPI Gosub Setup_rx ' Programme le mode réception du nRF24L01+ Waitms 2 ' Pause de stabilisation du nRF24L01+ Set Ce ' Active le mode réception Do ' Début de la boucle infinie If Irq = 0 Then ' Test si une intéruption active la broche IRQ Reset Ce ' Désactivation de l'émetteur pour effectuer la lecture sur le SPI Do ' Boucle jusqu'a ce que le buffer de réception soit vide Call Lecture(rd_rx_pload , 5) ' Lecture de 5 octets dans le buffer de réception ' Affiche les 5 valeurs de la charge utile Print "Octets reçus : " ; E(1);"/";E(2);"/";E(3);"/";E(4);"/";E(5) Call Lecture(fifo_status , 1) ' Lecture du registre "FIFO_STATUS" dans la variable E(1) Loop Until E(1).0 = True ' Boucle jusqu'à ce que la valeur du bit "RX_EMPTY" soit à 1 (Buffer RX vide) ' Efface l'interuption "RX_DR" du registre "STATUS" S(1) = Write_reg + Status S(2) = &B01000000 Call Ecriture(2) Set Ce ' Réactive le récepteur Waitms 2 ' Petite pause de stabilisation End If ' Fin du test d'intéruption Loop ' Fin de la boucle infinie END ' Fin du programme = Exemple Pgm TX Bascom ======================================================== Print "***** Emetteur *****" ' Identification sur le terminal Reset Ce ' Désactivation de la radio pouraccéder au SPI Waitms 2 ' Pause de stabilisation du nRF24L01+ Gosub Setup_tx ' Passage en mode émetteur ' Effacement du buffer d'émission S(1) = Flush_tx Call Ecriture(1) ' Effacement des bits IRQ S(1) = Write_reg + Status S(2) = &B00110000 Call Ecriture(2) Gosub Dump_registers ' Affichage de tous les registres Do ' Début de la boucle infinie Incr Packet_count ' Incrémentation du compteur de paquets If Packet_count > 200 Then Packet_count = 0 ' remise à zéro du compteur de paquet si valeur max pour un octet Gosub Setup_tx ' Passage du nRF240L01+ en mode émetteur ' Définition des octets à envoyer puis envoi dans le buffer d'émission S(1) = Wr_tx_pload S(2) = Packet_count S(3) = Packet_count + 2 S(4) = Packet_count + 5 S(5) = Packet_count + 7 S(6) = Packet_count + 11 Call Ecriture(6) Waitms 2 ' Tempo de stabilisation du nRF24L01+ ' Impulsion positive de 1 ms sur la broche CE pour effectuer l'émission du paquet stocké dans le buffer Set Ce Waitms 1 Reset Ce Waitms 2 ' Petite pause pour stabiliser le circuit 'Gosub Dump_registers ' Si besoin affichage de la valeur des registres W = 0 ' Remise à zéro du compteur de "Time-Out" Do ' Boucle d'attente de l'ACK If Irq = 0 Then ' Si la broche IRQ est "activée" Call Lecture(status , 1) ' Lecture du Statut (Résultat dans E(1)) Temp = E(1) And &B01110000 ' Extraction des 3 bits d'intéruption dans la variable temp Select Case Temp ' Test sur les différentes possibilités d'IRQ Case Max_rt ' S'il s'agit de l'intéruption "MAX_RT" (Nbre max de tentatives d'émission atteint) Print "Nbre maximal d'essais d'émission atteint, éffacement du buffer d'émission !" ' Effacement du buffer d'émission S(1) = Flush_tx Call Ecriture(1) ' Effacement de l'intéruption "MAX_RT" S(1) = Write_reg + Status S(2) = &B00010000 Call Ecriture(2) Exit Do ' Sortie de la boucle d'attente de l'ACK Case Tx_ds ' S'il s'agit de l'intéruption "TX_DS" (ACK reçu) Print "Paquet " ; Packet_count ; " envoyé et ACK reçu." ' Effacement de l'intéruption "TX_DS" S(1) = Write_reg + Status S(2) = &B00100000 Call Ecriture(2) Exit Do ' Sortie de la boucle d'attente de l'ACK Case Else ' S'agit-il d'une autre intéruption Print "Autre IRQ " ; Bin(temp) ' Effacement du buffer d'émission S(1) = Flush_tx Call Ecriture(1) ' Effacement des interruptions S(1) = Write_reg + Status S(2) = &B01110000 Call Ecriture(2) End Select ' Fin du test des différentes possibilités d'IRQ End If ' Fin du test de la broche IRQ Waitms 1 ' Attente de 1ms pour activer le "Time Out" à 100ms Incr W ' Incrémentation du compteur de "Time Out" If W > 100 Then ' Si le temps d'attente dépasse 100ms Print "Pas d'irq venant du récepteur dans les 100ms" Exit Do ' Sortie de la boucle d'attente des 100ms End If ' Fin du test de "Time out" Loop ' Fin de la boucle d'attente de l'ACK Wait 2 ' Délais de 2 secondes pour faciliter la lecture sur le terminal Loop ' Fin de la boucle infinie END ' Fin du programme ================================================================================