• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z NRF24L01
#11
Prędkość portu mam ustawioną na 9600. Ale mi chodzi o transmisję pomiędzy Arduino a Nrf. Port szeregowy ma coś z tym wspólnego?
 
Odpowiedź
#12
A, sorry. Ja chyba jeszcze śpię.
Ale i tak nie zmienia to faktu, że to:
Kod:
    radio.stopListening();
    radio.write (&daneDoWyslania, sizeof(daneDoWyslania));
    radio.startListening();

Powinno trwać około 35 us.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#13
A trwa znacznie dłużej. Tutaj przykład z monitora portu:
13:34:26.895 -> przed
13:34:26.928 -> po

Ten czas już pominąłem bo uznałem, że nie można wykrzesać na arduino i NRF szybszą transmisję, albo biblioteka na to nie pozwala. Ale nawet gdyby już to tyle trwało to jak zabezpieczyć się przed brakiem wysyłki z jakiegoś powodu która notorycznie się powtarza.

Macie tutaj przykład z monitora portu. Na samym końcu monitor portu sugeruje jakby operacja wysłania się nie wykonała:
13:34:23.673 -> przed
13:34:23.708 -> po
13:34:23.775 -> przed
13:34:23.775 -> po
13:34:23.842 -> przed
13:34:23.875 -> po
13:34:23.909 -> przed
13:34:23.943 -> po
13:34:24.010 -> przed
13:34:24.043 -> po
13:34:24.077 -> przed
13:34:24.110 -> po
13:34:24.178 -> przed
13:34:24.212 -> po
13:34:24.246 -> przed
13:34:24.280 -> po
13:34:24.347 -> przed
13:34:24.382 -> po
13:34:24.415 -> przed
13:34:24.449 -> po
13:34:24.516 -> przed
13:34:24.516 -> po
 
Odpowiedź
#14
(30-06-2020, 07:33)leoj napisał(a): Nie jest pusty. Po prostu nie załączyłem tego fragmentu  kodu na forum. Kompilator przecież pokazałby błąd. A nawet gdyby wartości były zerem to też są bajty do wysłania.


A czemu miał by pokazać błąd?? przecież to zmienna która jest w programie zapewnię modyfikowana, wysłanie jednego znaku "0" moze nie być zauważalne  a kilkanaście, kilkadziesiąt juz tak..

Proponował bym przed wysłaniem nrf wysłać to samo na monitor portu..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#15
(30-06-2020, 15:27)Jarewa0606 napisał(a):
(30-06-2020, 07:33)leoj napisał(a): Nie jest pusty. Po prostu nie załączyłem tego fragmentu  kodu na forum. Kompilator przecież pokazałby błąd. A nawet gdyby wartości były zerem to też są bajty do wysłania.


A czemu miał by pokazać błąd?? przecież to zmienna która jest w programie zapewnię modyfikowana, wysłanie jednego znaku "0" moze nie być zauważalne  a kilkanaście, kilkadziesiąt juz tak..

Proponował bym przed wysłaniem nrf wysłać to samo na monitor portu..
Struktura którą wysyłam ma zawsze 6 bajtów, nie ma znaczenia jakie są w niej zapisane liczby. Wysyłam dwie zmienne int oraz dwie byte.
 
Odpowiedź
#16
Sprawdziłem millis() przed i po wysyłce w momencie kiedy monitor portu pokazuje ten sam czas. I okazuje się że monitor portu wprowadza zamieszanie - w millis() zawsze jest różnica około 35 milisekund. Ale czy wysyłka musi aż tyle trwać? Przecież jakbym miał wysłać jakieś większe ilości danych to by to strasznie dużo czasu zabrało.

A jeśli chodzi o tak długi czas wysyłania to było to spowodowane domyślnym włączeniem potwierdzeń. Dopiero jak napisałem radio.setAutoAck (false); to czas wysyłania przy prędkości transmisji 250kbps trwa około 2 milisekundy. Jak nie wyłączyłem potwierdzeń to automatycznie próbował ponawiać domyślną ilość razy wysyłkę bo nie otrzymywał potwierdzenia (bo w odbiorniku nie napisałem warunku który by to robił). Dopiero jak próbował wysyłać ileś razy to się poddawał i przechodził dalej do wykonywania kolejnych operacji.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości