NRF24L01 e pic18f4550

7 Anni 5 Mesi fa #36 da mastroebano
Risposta da mastroebano al topic NRF24L01 e pic18f4550
Massimo buongiorno
rispondo con ritardo perche come detto in passato non conosco C e tantomeno Arduino ma ho cercatro di documentarmi e vediamo se posso esserti di aiuto:

noto che nei tuoi listati manca l'istruzione dopo il comando SPI.begin(); di come debbono essere inviati i byt che compongono il byte se dal più significativo o dal meno significativo in parole devi aggiungere l'istruzione SPI.setBitOrder(MSBFIRST) questo su entrambi i listati RX e TX lo richiede la libreria SPI

vedo che non specifichi la variabile del comando ossia tu scrivi
digitalWrite (CSN,LOW);
var = 0x20+0x00;
SPI.transfer (var);
SPI.transfer (B00001011); //setto l'nrf come rx,POWER UP
digitalWrite (CSN,HIGH);

ma non hai indicato la variabile pertanto devi scrivere
digitalWrite (CSN,LOW);
var = 0x20+0x00;
result=SPI.transfer (var);
result=SPI.transfer (B00001011); //setto l'nrf come rx,POWER UP
digitalWrite (CSN,HIGH);
poiche tua hai dichiarato la variabile result e questa sintassi deve essere usata ogni volta che invii un comando di lettura o scrittura

inoltre sempre in RX disabiliterei AUTOACK sul canale 0 pertanto scriverei
digitalWrite (CSN,LOW);// disabilito l'AUTOACK sul canale 0
var = 0x20+0x01;
resuilt=SPI.transfer (var);
result=SPI.transfer (B00000000);
digitalWrite (CSN,HIGH);

ancora il registro config lo configurei così
digitalWrite (CSN,LOW);
var = 0x20+0x00;
result=SPI.transfer (var);
result=SPI.transfer (B00000111); //setto l'nrf come rx,POWER UP
digitalWrite (CSN,HIGH);

ovviamente credo che per i collegamenti hai rispettato la giusta connessione di CLK ,MISO,MOSI e così via questo è per il discorso impostazioni del NRF per il restante codice non riesco ad aiutarti perchè come detto non conosco C
sperando di esserti stato di aiuto ti saluto Antonio

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mastroebano
  • Senior Member
  • Senior Member
Di più
7 Anni 5 Mesi fa #37 da mastroebano
Risposta da mastroebano al topic NRF24L01 e pic18f4550
a prosieguo aggiungo
mi sembra che devi rilevare IRQ che vada basso ,tieni presente che l'out IRQ è un open collector pertanto devi mettere una resistenza di pullup sull'uscita poi dopo aver rilevato che IRQ è andato basso vai ha leggere

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mastroebano
  • Senior Member
  • Senior Member
Di più
7 Anni 5 Mesi fa #38 da mpeino
Risposta da mpeino al topic NRF24L01 e pic18f4550
Grazie per la risposta Antonio comincio con il fare altre prove .

per quanto riguarda la funzione SPI.setBitOrder(MSBFIRST) anche senza quella quando vado a leggere il valore inserito nel registro quando lo vado a leggere con l'ausilio del monitor seriale mi ritrovo con il valore inserito comunque approfondirò la questione.

Ti devo fare una richiesta mi potresti postare un scorcio di codice sia TX che RX dove appunto avviene la trasmissione di un byte
ma soppratutto la ricezione di quel byte dove è presente l'uso del pin CE eventualmente IRQ al momento e soprattutto questa parte non mi è chiara .

Anche in basic l'importante che è commentato.

Se vuoi puoi tralasciare la parte del settaggio dei registri.

massimo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mpeino
  • Elite Member
  • Elite Member
Di più
7 Anni 5 Mesi fa #39 da mpeino
Risposta da mpeino al topic NRF24L01 e pic18f4550

mastroebano ha scritto: a prosieguo aggiungo
mi sembra che devi rilevare IRQ che vada basso ,tieni presente che l'out IRQ è un open collector pertanto devi mettere una resistenza di pullup sull'uscita poi dopo aver rilevato che IRQ è andato basso vai ha leggere


Anche questa è una prova che dovrò fare

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mpeino
  • Elite Member
  • Elite Member
Di più
7 Anni 5 Mesi fa #40 da mastroebano
Risposta da mastroebano al topic NRF24L01 e pic18f4550
Massimo di seguito trovi parte del codice per il RX tieni presente che do sempre per scontato che i toi collegamenti siano corretti questa è la parte di inizializzazione del NRF ci sono alcune istruzioni nuove

' Inizializzo NRF
CSN=0
reg=(0x20+0x00)
i= SPI1_Read(reg) 'istruzione di scrittura del registro CONFIG
i= SPI1_Read(%00000111) 'attivo modalità RX ,power up,2 bytes CRC
CSN=1

CSN=0
reg=(0x20+0x01)
i= SPI1_Read(reg) 'istruzione di scrittura del registro EN_AA
i= SPI1_Read(%00000000) 'disattivo autoack su canale 0
CSN=1

CSN=0
reg=(0x20+0x02) 'abilito ricezione canale 0
i= SPI1_Read(reg)
i= SPI1_Read(%00000001)
CSN=1

CSN=0
reg=(0x20+0x11)
i= SPI1_Read(reg) 'imposto il numero di byte che dovrò ricevere
i= SPI1_Read(%00000011) ' per pacchetto tre
CSN=1

CSN=0
reg=(0xE1) 'cancello il contenuto del TX FIFO
i= SPI1_Read(reg)
CSN=1

CSN=0
reg=0xE2 'cancello il contenuto del RX FIFO
i= SPI1_Read(reg)
CSN=1

questa che segue è l'istruzione per sentire IRQ come vedi testo che vada basso(0) perchè come detto l'out è open collector

CE=1 'abilito ricezione NFR
if IRQ=0 then 'è arrivato un dato IRQ va basso
goto leggo
end if

quello che segue invece è la parte dove decodifico i pacchetti ricevuti


leggo:
CE=0 'con CE basso non ricevo più nessun dato
BZ=1
delay_ms(100)
CSN=0
reg=(0x00+0x07) 'leggo nel reg status
i= SPI1_Read(reg)
controllo=SPI1_Read(%00000000)
CSN=1

if controllo.6=1 then ' controllo se il bit.6 è alto
CSN=0
i= SPI1_Read(0x61) 'leggo il contenuto del pacchetto ricevuto
dato_ricevuto1=SPI1_Read(%00000000) 'questo è il dato che ho ricevuto
dato_ricevuto2=SPI1_Read(%00000000) 'questo è il dato che ho ricevuto
dato_ricevuto3=SPI1_Read(%00000000) 'questo è il dato che ho ricevuto
CSN=1
CSN=0
reg=0x20+0x07 'vado ha scrivere nel reg status
i= SPI1_Read(reg)
i= SPI1_Read(%01000000) 'azzero il bit d'interrupt
CSN=1
BZ=0
end if 'qua finisco il controllo e la lettura del dato

come ben vedi il codice risulta commentato comunque se hai problemi scrvimi ti posto solo la parte del RX se tu mi dici che è tutto chiaro ti posto poi la parte riguardante il TX ..............buon lavoro Antonio

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mastroebano
  • Senior Member
  • Senior Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login