Rispondi a: nrf24l01 e libreria SPI MiKroC

Home Forum FORUM ELETTRONICA RICHIESTE CIRCUITI e PUBLICAZIONI nrf24l01 e libreria SPI MiKroC Rispondi a: nrf24l01 e libreria SPI MiKroC

#2831
ne555
Amministratore del forum
Ciao :) nel codice che tu hai visto vengono usati i seguente sottofunzioni:

void nRF24L01_write(unsigned char d)                //sottoprogramma che simula una scrittura spi
  unsigned char s = 0;

  for(s = 0; s < 8; s++)                            //questo for serve a trasmettere sul pin mosi bit per bit il dato d
  {
    if((d & 0x80) != 0)
    {
      MOSI_pin = 1;                                 //se il bit scandito è 1 trasmetto 1
    }
    else
    {
      MOSI_pin = 0;                                 //altrimenti 0
    }
    d <<= 1;                                        //shifto d per inviare il prossimo bit
    SCK_pin = 1;                                    //creo un clock
    delay_us(8);
    SCK_pin = 0;
    delay_us(8);
  }
}

e quello per la lettura:

unsigned char nRF24L01_read()                        //questo sottoprogramma simula una comunicazione SPI
{
  unsigned char s = 0;                               //variabile per esegguire 8 esecuzioni
  unsigned char msg = 0;

  for(s = 0; s < 8; s++){                            //esegue 8 volte
      msg <<= 1;                                     //shifto msg
      SCK_pin = 1;                                   //attivo il clock
      delay_us(8);                                   //aspetto 8us (f spi 62Kbps)
      if(MISO_pin != 0)                              //se in=0
      {
        msg |= 1;                                    //azzero il bit di msg
      }
      SCK_pin = 0;                                   //disattivo il clock
      delay_us(8);
  }

  return msg;                                       //ritorno il valore letto
}

non credo servi fare un articola a parte, però è utile il tuo consiglio. In partica 
basta inizializzare la comunicazione spi nel main con la seguente stringa 
utilizzando un cristallo di quarzo da 4MHz:

SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

e sostituire alle due sottofunzioni viste prima le seguente sottofunzioni: 

void nRF24L01_write(unsigned char d)                //sottoprogramma  scrittura spi
  SPI1_Write(d);
}

unsigned char nRF24L01_read()                       //questo sottoprogramma lettura SPI
{
msg = 
 take = SPI_Read(buffer);
  return msg;                                       //ritorno il valore letto
}

Probabilmente va inizializzato il char "buffer" all'inizio del codice.
Se hai il circuito già montato su breadboard e testato con il codice da me 
presentato potresti provare la modifica qui suggerita usando la 
libreria spi e vedere se tutto funziona