Skocz do zawartości

Przesył danych: LabView Teensy 3.6 HC-11


Pomocna odpowiedź

Napisano

Witam Wszystkich 🙂

Mam mały problem który jest zapewne banalny i nie raz bez problemu rozwiązywałem podobne, niestety tym razem poległem...

Mój problem polega na wysyłaniu danych z dwóch Teensy 3.6 za pomocą modułu HC-11 do modułu HC-11 podłączonego do komputera, a przez to do Labview. Algorytm jest taki: Labview wysyła "1" czeka przez 3 sekundy na dane, a później wysyła "2" i znowu czeka na dane. I tak cały czas w kółko. Jedno Teensy sprawdza czy jest "1" i wysyła dane, a drugie Teensy sprawdza czy jest "2" i wysyła dane. Mam nadzieję, że można się domyślić jak to działa.

Ubiegając pytania:

Wszystko działa z prędkością 57600

LabView wysyła dane, sprawdziłem podłączając jeden modem HC-11 do drugiego komputera i podejrzałem za pomocą CoolTerm

Sprawdziłem połączenie modułu z Teensy. Jest podłączony do Serial1

Program:

int d;
void setup() 
{
   Serial1.begin(57600); 
   analogReadResolution(13);
}
void loop() 
{
// część programu 

//Serial1.setTimeout(10000);  <-- To też próbowałem dawać
if (Serial1.available() > 0) 
        {
             d = Serial1.parseInt()
             if (d==1)
            {
             //Wysyła dane
            }
       }
}

Jakiekolwiek pomysły?

Żeby te moduły widziały się wzajemnie, po stronie radiowej muszą mieć ustawione ten sam kanał częstotliwości i ten sam adres. Czy tak jest? Sprawdzałeś AT+RX?

Poza tym swoje rozróżnienie węzłów robisz na warstwie danych a to zły pomysł gdy nie wiesz nic o protokole na warstwie fizycznej. Dlaczego nie skorzystasz z możliwości adresowania wbudowanego w moduły? Ustawiając inny adres każdemu węzłowi slave (AT+A) masz zapewnione rozróżnianie ich już na najniższej warstwie. Wtedy wysyłasz do każdego to samo, ale wcześniej programujesz w masterze inny adres.

Teraz jesteś w kropce, bo każdy slave odbiera każdy komunikat mastera a nie wiesz co robi dalej w radiu. Być może wysyła potwierdzenie odebrania komunikatu a dwie ramki wysłane na raz z dwóch różnych transceiverów rozwalają komunikację.

Moduły siebie widzą. Sprawdziłem adresy i kanały. Wszystko jest takie same.

Właśnie, najlepiej było by zrobić to master i dwa slavy, tylko w dokumentacji jest jak dla mnie mała nieścisłość. Jeżeli moduły mają siebie widzieć to adres i kanał musi być taki sam, a więc jak ustawić slavy?

Może jest tak, że Master ma mieć adres 000, Slave1 adres 001 oraz Slave2 adres 002. Tylko wtedy pytanie jest jak te adresy wysłać nie w bloku danych tylko w najniższej warstwie w LabView

Ustawiając inny adres każdemu węzłowi slave (AT+A) masz zapewnione rozróżnianie ich już na najniższej warstwie. Wtedy wysyłasz do każdego to samo, ale wcześniej programujesz w masterze inny adres.

Co w tym jest niejasne? Jeden slave ma jeden adres, drugi slave ma drugi, a master przełącza się między nimi w zależności od tego do którego chce wysyłać.

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...