Skocz do zawartości

nRF24l01+, problem z nadawaniem


RybaSG

Pomocna odpowiedź

Cześć,
Zrobiłem urządzenie z nadajnikiem opartym na chipie nRF24L01+. Problem jest taki, że każda drobna zmiana wykonywana (chodzi o czas wykonywania, który się wtedy zmieni) w pętli głównej programu wpływa na nadawanie. Dla przykładu: w zamieszczonym przeze mnie kodzie poprawnie nadawane są dane o akutalnym napięciu (XPotVoltage, YPotVoltage) natomiast komenda TX, którą wysyłam nie zostaje nadawana wcale. Jednak dodając wewnątrz funkcji nRF24L01+ opóźnienie rzędu 10us wszystko zaczyna działać poprawnie do momentu dodania obsługi wyświetlacza OLED, wtedy dane o napięciu są wysyłane poprawnie, ale komenda TX wysyłana jest losowo przy poruszaniu joystickiem, z którego czytam napięcie.

Poprawność działania testuję na terminalu, do którego trafiają dane z odbiornika. Używałem też analizatora stanów logicznych, funkcja nadająca "TX" w ogóle jakby się nie wykonywała.

Korzystam z tej biblioteki: https://forum.atnel.pl/topic11377.html

@EDIT: co ciekawe inicjalizacja OLED powoduje całkowite niedziałanie nadawania.

while(1)
{
        if ( nRF_Flag == 0)
        {
            XPotentiometerVoltage = measurement(PA1);
            memset(Buffer, '\0', strlen(Buffer));
            sprintf(Buffer, "Xaxis%d", XPotentiometerVoltage);
            nRF_SendDataToAir(Buffer);

            YPotentiometerVoltage = measurement(PA0);
            memset(Buffer, '\0', strlen(Buffer));
            sprintf(Buffer, "Yaxis%d", YPotentiometerVoltage);
            nRF_SendDataToAir(Buffer);

            memset(Buffer, '\0', strlen(Buffer));
            sprintf(Buffer, "TX");
            nRF_SendDataToAir(Buffer);
                 }

        OLED_SendString(0, 35, "Voltage: " ,1, 1, 0);
        OLED_SendInt(0, 35, IntegerPart, 1, 1, 0);
        OLED_SendString(0, strlen("Voltage: ")+1, "." ,1, 1, 0);
        OLED_SendInt(0, strlen("Voltage: ")+2, FractionPart, 1, 1, 0);
        OLED_SendString(0, 35, "                             " ,1, 1, 0);

        OLED_Display();
}

Z góry dziękuję za podpowiedzi,
Pozdrawiam

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.