V
V
Vadimm10012018-08-06 16:02:42
C++ / C#
Vadimm1001, 2018-08-06 16:02:42

Can't read/write register with nrf24l01+?

Here is the code itself:

unsigned char r_register(unsigned char a)//чтение байта из озу. a-адрес байта
{
  ClearBit(PORTB,CSN);//Прижимаем вывод CSN(SS) МК к земле, тем самым сообщаем о начале обмена данных.
  SPDR=a;
  while(BitIsClear(SPSR,SPIF));//ожидаем когда освободится SPI для последующей записи байта
  
  SPDR=NOP;
  while(BitIsClear(SPSR,SPIF));
  SetBit(PORTB,CSN);//Вывод CSN(SS) МК к питанию, обмен данных завершен.
  return SPDR;
}//uint8_t a=r_register(CONFIG);

void w_register(unsigned char a,unsigned char b)//а-адрес регистра, b-что пишем в регистр.
{
  a=a | W_REGISTER;//накладываем маску
  ClearBit(PORTB,CSN);
  SPDR=a;
  while(BitIsClear(SPSR,SPIF));
  SPDR=b;
  while(BitIsClear(SPSR,SPIF));
  a=SPDR;//это для сброса флага SPIF
  SetBit(PORTB,CSN);
}//W_REGISTER (CONFIG,0b00000110);

int main(void)
{
  lcd_init();
  DDRB=0b101101;
SPCR = (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0);
SPSR = (0<<SPIF)|(0<<WCOL);
  w_register(0x11,0b11);
  lcd_dat(r_register(0x11));
  while(1);
  
}

Here I write 0b11 to the register at 0x11, then I read it, but the value is still 0.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question