forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
nRF24L01+ v multiciever režimu 1x PRX - více PTX

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR
 
Šebi
Častý přispěvatel
Častý přispěvatel


Založen: 12.4.2007
Příspěvky: 39

PříspěvekZaslal: 24 duben 2019, 12:26    Předmět: nRF24L01+ v multiciever režimu 1x PRX - více PTX Citovat

Zdravím. Zase se trápím s komunikací s více vysílači s nRF24L01+. Když si povídají jen dva mezi sebou, tak je všechno v pohodě, ale jak chci si povídat s více členy (PTX) tak mi to přijímá data pořád jen z jednoho. A to z toho, který je nastaven v adresovém registru RX_ADDR_P1. Z jiných mi to prostě nejde. Když adreso v RX_ADDR_P1 změním na jinej PTX, tak si to povídá s ním. Knihovnu pro komunikaci s modulem jsem si našel na netu a postupně poupravil. Přijímací adresy mám povolený všechny a Auto acknowlege taky. Přikládám výtah fcí pro náběh procesoru a nastavení nrf24L01+, v příloze jsou celé soubory. Někde mám nějakou krpu a už nevím kde. Procházel jsem snad všechno několikrát a zaboha nejsem schopnej to najít. Poradil by někdo jestli jsem jen slepej a něco přehlížím, nebo bl...

Main:
kód:
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>

#include "../nrf24.h"
#include "../uart.h"


/* ------------------------------------------------------------------------- */
uint8_t temp;
char buf[8];
uint8_t q = 0;
uint8_t tmp = 0;
uint8_t data_array[5];
uint8_t data_pipe;
uint8_t master_address[5] = {0xD7,0xD7,0xD7,0xD7,0xD7};   // master
uint8_t slave1_address[5] = {0xE7,0xE7,0xE7,0xE7,0xE7};   // levý terč
uint8_t slave2_address[5] = {0xE7,0xE7,0xE7,0xE7,0xA7};   // pravý terč
uint8_t slave3_address[5] = {0xE7,0xE7,0xE7,0xE7,0xE9};   //
uint8_t slave4_address[5] = {0xE7,0xE7,0xE7,0xE7,0xEA};   //

/* ------------------------------------------------------------------------- */
int main()
{
    /* init the software uart */
    uart_init(UART_BAUD_SELECT(19200,F_CPU));
   sei();

    /* simple greeting message */
    uart_puts_P("\r\n> TX device ready\r\n");
   
    /* init hardware pins */
    nrf24_init();
   
    /* Channel #108 , payload length: 5, master */
    nrf24_config(108,5,1);

    /* Set the device addresses */
    //nrf24_tx_address();
   nrf24_rx_address(RX_ADDR_P0, master_address);
    nrf24_rx_address(RX_ADDR_P1, slave1_address);   
   nrf24_rx_address(RX_ADDR_P5, slave2_address);
   
   PORTC |= _BV(PINC0) | _BV(PINC1);      //nastavení pro zkušební tlačítka
   
   uart_puts_P("RX_ADDR_P1 ");      // kontrola zapsání adresy
   nrf24_readRegister(RX_ADDR_P1,slave4_address,5);
   utoa(slave4_address[4],buf,10);
   uart_puts(buf);
   uart_puts_P("\r\n");
   
   uart_puts_P("RX_ADDR_P2 ");      // kontrola zapsání adresy
   nrf24_readRegister(RX_ADDR_P2,slave4_address,1);
   utoa(slave4_address[0],buf,10);
   uart_puts(buf);
   uart_puts_P("\r\n");


    while(1)
atd...



nastavovací rutiny v nrf24.c
kód:
/* configure the module */
void nrf24_config(uint8_t channel, uint8_t pay_length, uint8_t master)
{
    /* Use static payload length ... */
    payload_len = pay_length;
   
   // CRC enable, 1 byte CRC length
   nrf24_configRegister(CONFIG,nrf24_CONFIG);   // #define nrf24_CONFIG ((1<<EN_CRC)|(0<<CRCO))
   
    // Auto retransmit delay: 1000 us and Up to 15 retransmit trials
    nrf24_configRegister(SETUP_RETR,(0x04<<ARD)|(0x0F<<ARC));

    // Set RF channel
    nrf24_configRegister(RF_CH,channel);
   
   // 1 Mbps, TX gain: 0dbm
   nrf24_configRegister(RF_SETUP, (0<<RF_DR)|((0x03)<<RF_PWR));

   //if (master == 1)
   //{
      // Auto Acknowledgment
      nrf24_configRegister(EN_AA,(1<<ENAA_P0)|(1<<ENAA_P1)|(1<<ENAA_P2)|(1<<ENAA_P3)|(1<<ENAA_P4)|(1<<ENAA_P5));

      // Enable RX addresses
      nrf24_configRegister(EN_RXADDR,(1<<ERX_P0)|(1<<ERX_P1)|(1<<ERX_P2)|(1<<ERX_P3)|(1<<ERX_P4)|(1<<ERX_P5));
      
      // Dynamic length configurations: No dynamic length
      nrf24_configRegister(DYNPD,(0<<DPL_P0)|(0<<DPL_P1)|(0<<DPL_P2)|(0<<DPL_P3)|(0<<DPL_P4)|(0<<DPL_P5));
      
      // Set length of incoming payload
      nrf24_configRegister(RX_PW_P0, payload_len); // Auto-ACK pipe ...
      nrf24_configRegister(RX_PW_P1, payload_len); // Data payload pipe
      nrf24_configRegister(RX_PW_P2, payload_len); // Data payload pipe
      nrf24_configRegister(RX_PW_P3, payload_len); // Data payload pipe
      nrf24_configRegister(RX_PW_P4, payload_len); // Data payload pipe
      nrf24_configRegister(RX_PW_P5, payload_len); // Data payload pipe

nrf24_powerUpRx();
}



a fce pro zjišťování zda přišla zpráva ( nevxužívám přerušení)
kód:
/* Checks if data is available for reading */
/* Returns 1 if data is ready ... */
uint8_t nrf24_dataReady(uint8_t* pipe)
{
    // See note in getData() function - just checking RX_DR isn't good enough
    uint8_t status = nrf24_getStatus();

    // We can short circuit on RX_DR, but if it's not set, we still need
    // to check the FIFO for any pending packets
    if ( status & (1 << RX_DR) )
    {
      *pipe = (status & MASK_RX_P_NO) >> 1;      //#define MASK_RX_P_NO   0x0E
        return 1;
    }

    return !nrf24_rxFifoEmpty();;
}



nrf24L01+.rar
 Komentář:

Stáhnout
 Soubor:  nrf24L01+.rar
 Velikost:  14.12 kB
 Staženo:  11 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Šebi
Častý přispěvatel
Častý přispěvatel


Založen: 12.4.2007
Příspěvky: 39

PříspěvekZaslal: 06 květen 2019, 20:13    Předmět: Citovat

To tu není nikdo, kdo si hrál s tímto modulem a neporadil by kde můžu mít chybu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Divous
Profesionál
Profesionál


Založen: 24.4.2009
Příspěvky: 235
Bydliště: Valašsko

PříspěvekZaslal: 07 květen 2019, 7:12    Předmět: Citovat

Je mi líto, ještě jsem se k němu nedostal, i když jej mám již koupený. Sad
_________________
AVR Studio 4.18 + WinAVR, AVR Studio 6.2
Elnec T51prog, ASIX PRESTO, AVR MKII
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Billy Bob Bean
Profesionál
Profesionál


Založen: 21.9.2009
Příspěvky: 317
Bydliště: OLOMOUC - BRNO

PříspěvekZaslal: 07 květen 2019, 13:53    Předmět: Citovat

Mám jich 12 a ještě jsem se k tomu nedostal. Chtěl jsem mít jeden master, kterej by přijímal data z 11x slave.
_________________
Stavím UPSky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2019 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)