Skocz do zawartości

Ciekawy problem z modułami nrf34l01


minio7

Pomocna odpowiedź

Witajcie

Testuje sobie właśnie dwa moduły nrf na płytce stykowej i mam pewien dosyć poważny problem, który postaram się tu nakreślić, a może ktoś już kiedyś się z nim spotkał.

Mianowicie problem polega na tym, że o ile moduły na płytce odbierają elegancko dane itp to w momencie w którym chcę za ich pomocą coś wysłać (np. stale wysyłam ramkę 4 bajty) dociera to tylko raz i jakby się zawiesza.

używam takego zestawu bibliotek jak w załączniku.

Co ciekawe posiadam też płytkę uniwersalną z kwarcem, podłączoną Atmegą16 i modułem nrf, która po wgraniu programu wysyła dane normalnie bez zawieszania. Gdy kopiuje połączenia na płytkę stykową, używam tej samej Atmegi co do płytki uniwersalnej z tym samym programem w środku to wszystko dziczeje i dane są wysłane tylko raz a potem wszystko się zawiesza i już nie chce ze sobą gadać. Poniżej zamieszczam kod dla odbiornika i nadajnika

ODBIORNIK

# define F_CPU 8000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <stdio.h>
#include <avr/io.h>
#include "mirf.h"
#include "mirf.c"
#include "spi.h"
#include "spi.c"
#include "uart.h"
#include "uart.c"
#include <util/delay.h>

uint8_t tx_address[5] = {0x63,0x6c,0x69,0x65,0x31};

uint8_t rx_address[5] = {0x73,0x65,0x72,0x76,0x31};


char recieve[20];	



int main(void)
{
DDRD =0xFF;
mirf_init();
_delay_ms(50);
sei();

mirf_set_RADDR(tx_address);
mirf_set_TADDR(rx_address);


mirf_config();

recieve[0]=254;
recieve[1]=254;
recieve[2]=254;
recieve[3]=254;

   while(1)
   {
PORTD &= (~(1<<PD6));
while(!(mirf_data_ready()));

mirf_get_data(recieve);
PORTD |= (1<<PD6);
_delay_ms(50);


   }
}

NADAJNIK

#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "uart.h"
#include "mirf.h"
#include "spi.h"

char data_array[4];

uint8_t tx_address[5] = {0x63,0x6c,0x69,0x65,0x31};

uint8_t rx_address[5] = {0x73,0x65,0x72,0x76,0x31};


int main(void)
{





mirf_init();

_delay_ms(50);

sei();


mirf_set_RADDR(rx_address);
mirf_set_TADDR(tx_address);


mirf_config();





for(;;)
{
       data_array[0] = 0xFF;
       data_array[1] = 0x00;
       data_array[2] = 0xFF;
       data_array[3] = 0x00; 




	mirf_send(data_array, mirf_PAYLOAD);

	_delay_ms(1000);




}

}

Jeżeli byłby w tanie mi ktoś pomóc byłbym bardzo wdzięczny za sugestie co moze być nie tak, czy jest szansa, że jest to wina braku kwarcu? nic innego nie przychodzi mi na myśl ;/

NRF24L01.zip

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.