NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Hej
Mam zagwozdkę i chciałem Was zapytać czy mój to rozumowania jest poprawny. Chciałbym uruchomić transmisję dwóch układów NRF24L01+, bez używania przerwań wiem że jest taka możliwość. I tak może ktoś mi sprawdzić następujące ustawienia zarówno dla odbiornika ?
Odbiornik:
Ustawiam:
CONFIG: PRIM_RX, PWR_UP,
RX_PW_P0 na 32
I to tyle potem sprawdzam wartość rejestru
STATUS a dokładnie RX_DR
Jeżeli jest 1 to odbieram dane z rejestru R_RX_PAYLOAD
Potem kasuję flagę RX_DR
W jakim stanie ma być pin CE ?
Mam zagwozdkę i chciałem Was zapytać czy mój to rozumowania jest poprawny. Chciałbym uruchomić transmisję dwóch układów NRF24L01+, bez używania przerwań wiem że jest taka możliwość. I tak może ktoś mi sprawdzić następujące ustawienia zarówno dla odbiornika ?
Odbiornik:
Ustawiam:
CONFIG: PRIM_RX, PWR_UP,
RX_PW_P0 na 32
I to tyle potem sprawdzam wartość rejestru
STATUS a dokładnie RX_DR
Jeżeli jest 1 to odbieram dane z rejestru R_RX_PAYLOAD
Potem kasuję flagę RX_DR
W jakim stanie ma być pin CE ?
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
W odbiorniku trzymasz CE w stanie wysokim tak długo, jak długo chcesz coś odbierać. Gdy CE będzie w stanie niskim, odbiornik przejdzie do stanu "standby". A propos zdarzenia RX_DR. Gdy wychwycisz RX_DR, musisz odebrać dane komendą RX_R_PAYLOAD, a następnie sprawdzić, czy w FIFO są jeszcze jakieś odebrane ramki. Jeśli są, one również muszą zostać odczytane.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ok a w przypadku nadajnika :
CONFIG: PWR_UP
FEATURE: EN_DYN_ACK
Czyszczę bufor FLUSH_TX
Wrzucam dane do W_TX_PAYLOAD_NO_ACK
Stan niski na pinie CE przez 10 us
CONFIG: PWR_UP
FEATURE: EN_DYN_ACK
Czyszczę bufor FLUSH_TX
Wrzucam dane do W_TX_PAYLOAD_NO_ACK
Stan niski na pinie CE przez 10 us
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Na pinie CE ma być stan WYSOKI na co najmniej 10µs. Gdy paczka wyjdzie z nadajnika, pojawi się TX_DS. Tę flagę należy skasować (i użyć do własnych celów, o ile potrzebujesz)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ok teraz mam pytanie:
Czy to jest poprawne wysyłanie pojedyńczych znaków(wersja testowa)
Czy to jest poprawne wysyłanie pojedyńczych znaków(wersja testowa)
Kod: Zaznacz cały
Send_String("NRF24L01+ TX");
NRF24L01P_PowerCmd(NRF24L01P_State_Enabled);
SET_EN_DYN_ACK();
DIGITAL_IO_SetOutputHigh(&ChSe);
int32_t I;
while(1U)
{
DIGITAL_IO_SetOutputLow(&ChSe);
DIGITAL_IO_SetOutputLow(&CSN);
SPI_WriteReadByte( FLUSH_TX);
DIGITAL_IO_SetOutputHigh(&CSN);
DIGITAL_IO_SetOutputLow(&CSN);
SPI_WriteReadByte(W_TX_PAYLOAD_NO_ACK);
SPI_WriteReadByte('B');
SPI_WriteReadByte('A');
SPI_WriteReadByte('R');
SPI_WriteReadByte('T');
DIGITAL_IO_SetOutputHigh(&CSN);
DIGITAL_IO_SetOutputHigh(&ChSe);
for(I = 10000; I; I--)
{
}
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Moim zdaniem coś tu masz źle. Przede wszystkim pin CSN służy do uruchamiania komunikacji przez SPI. Gdy już prześlesz komendy przez SPI, może jakieś dane, czy coś, pin CSN idzie w górę, co ma zakończyć komunikację przez SPI. Kolejnym krokiem (pod warunkiem, że wszystko już masz poustawiane), jest wystawienie na co najmniej 10µs stanu wysokiego na pin CE. Nie myl go, proszę, z pinem CSN. Niepokoi mnie ta sekwencja czynności w pętli głównej. Machasz w niej pinem CSN, a pin CE ustawiasz w stan niski, co powoduje, że nadajnik pozostaje w trybie standby. Aha, w jakim celu non stop czyścisz TX FIFO?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Wspomniałeś na czacie, bym Ci ogarnął ten kawałek softu, ale nie widząc reszty trudno jest coś modyfikować. Mam jednak inną propozycję. Wrzucę Ci baaaardzo wczesne wersje softów do nadajnika i odbiornika, a Ty to sobie pooglądasz, ok? W razie czego podpytasz o jakieś niezrozumiałe drobiazgi.
Spakowane projekty:
Spakowane projekty:
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ok
Jak zwykle kolego Antystatyczny dzięki za pomoc. Twój soft był bardzo pomocny.
Błędów było kilka:
Niepotrzebne czyszczenie flagi TX FIFO,
Złe sterowanie pinem CE,
Niepoprawny sposób odczytu i zapisu danych z rejestru FIFO,
To by było tyle odnośnie takich poważniejszych błędów.
Podziękowania składam również koledze mokrowskiemu, za pomoc z formatowaniem tekstu (porzuceniem funkcji strcat na rzecz snprintf)
Odbiornik:
ATmega 32
Nadajnik:
XMC1100-Q024F0064
HTS221
Sterownik ładowania akumulatorów
Akumulatorki
Przetwornica Step-UP
Jak zwykle kolego Antystatyczny dzięki za pomoc. Twój soft był bardzo pomocny.
Błędów było kilka:
Niepotrzebne czyszczenie flagi TX FIFO,
Złe sterowanie pinem CE,
Niepoprawny sposób odczytu i zapisu danych z rejestru FIFO,
To by było tyle odnośnie takich poważniejszych błędów.
Podziękowania składam również koledze mokrowskiemu, za pomoc z formatowaniem tekstu (porzuceniem funkcji strcat na rzecz snprintf)
Odbiornik:
ATmega 32
Nadajnik:
XMC1100-Q024F0064
HTS221
Sterownik ładowania akumulatorów
Akumulatorki
Przetwornica Step-UP
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
A NRF puściłeś z przerwaniami, czy ręcznie monitorujesz status?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ręcznie monitoruję rejestr STATUS-u. Co wiążę się z tym, że transmisja jest blokująca.
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ok, rozumiem. Jeśli nie masz zbyt wysoko ustawionego parametru MAX_RT, to nie powinno być problemów. Gdybyś jednak chciał wykorzystać przerwania, to możemy nad tym popracować
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
To miło, że oferujesz pomoc
Mam jeszcze jedną zagwozdkę i nie wiem czy Ty kolego też tak masz mianowicie, gdy wysyłam cały czas stringa BARTEK a następnie wgram od nowa program z taką uwagą, że chcę wysyłać string BARTOSZ to po wgraniu, kilka pierwszych odebranych stringów to BARTEK dopiero potem zaczynam odbieram nowy string w tym wypadku BARTOSZ. Dodam, że fizycznie po wgraniu nowego programu nie resetuję modułów czy to normalne ? Czy Ty Anty też tak masz w swoich modułach ?
Mam jeszcze jedną zagwozdkę i nie wiem czy Ty kolego też tak masz mianowicie, gdy wysyłam cały czas stringa BARTEK a następnie wgram od nowa program z taką uwagą, że chcę wysyłać string BARTOSZ to po wgraniu, kilka pierwszych odebranych stringów to BARTEK dopiero potem zaczynam odbieram nowy string w tym wypadku BARTOSZ. Dodam, że fizycznie po wgraniu nowego programu nie resetuję modułów czy to normalne ? Czy Ty Anty też tak masz w swoich modułach ?
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Najprawdopodobniej wysyłają Ci się jeszcze pakiety zgromadzone w 3 poziomach FIFO, choć pewności nie mam. Po wgraniu nowego softu NRF wymaga pełnej inicjalizacji, a to znaczy, że musiałbyś zrobić Flush TX, pokasować flagi przerwań itd... Masz go przywrócić do stanu "tuż po włączeniu zasilania". U mnie było tak, że po wgraniu softu moduł głupiał, blokował się. Przyczyną były niepokasowane flagi.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Ok kasowanie bufora zniwelowało ten problem, najrozsądniej i tak będzie moim zdanie sterować zasilaniem tego modułu z procesora.
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: NRF24L01+ Transmisja jeden do jednego bez przerwań jak zrealizować ?
Przy zasilaniu bateryjnym raczej nie będzie takiej potrzeby, bo każda wymiana baterii spowoduje zresetowanie NRF'a.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Wróć do „Programowanie AVR w C”
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości