logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Obsługa klawiatury UDP ENC28j60 od Mirekk36

opamp 30 Paź 2011 20:09 3867 18
  • #1 10082834
    opamp
    Użytkownik obserwowany
    Witam
    Mam plobrem z odpaleniem w pełni możliwości programu z płyty DVD naszego kolegi pana Mirka. Plobrem polega na tym po naciśnięci klawisza na module ATB nie przychodzi informacja do programu TestyUDP. Obsługa LCD LED i Test portów daje transmisje 2 kierunkową.
    -Po naciśnięciu klawisza zapala się kontrolka na karcie ENC RX/TX.
    - Zapora i antywirus wyłączone; System XP , Połączenie przez router z wyłączoną zaporą.
    - IP komputera 192.168.0.10 - statyczne
    - Brama 192.168.0.1
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 10083782
    piotrva
    VIP Zasłużony dla elektroda
    Sprawdzałeś czy coś leci po sieci jakimś monitorem, np. WireShark?
  • #3 10083876
    opamp
    Użytkownik obserwowany
    Tak, przy przycisku sprawdź mam komunikacje nadawanie i odbieranie. A przy klawiszy z płytki cisza. Na pingi też odpowiada.
  • Pomocny post
    #4 10084078
    piotrva
    VIP Zasłużony dla elektroda
    opamp napisał:
    Tak, przy przycisku sprawdź mam komunikacje nadawanie i odbieranie. A przy klawiszy z płytki cisza. Na pingi też odpowiada.

    Nie do końca rozumiem wypowiedź, pokaż więc raport z wiresharka, co się dzieje.
  • Pomocny post
    #5 10084572
    mirekk36
    Poziom 42  
    opamp napisał:
    Witam
    Mam plobrem z odpaleniem w pełni możliwości programu z płyty DVD naszego kolegi pana Mirka. Plobrem polega na tym po naciśnięci klawisza na module ATB nie przychodzi informacja do programu TestyUDP. Obsługa LCD LED i Test portów daje transmisje 2 kierunkową.
    -Po naciśnięciu klawisza zapala się kontrolka na karcie ENC RX/TX.
    - Zapora i antywirus wyłączone; System XP , Połączenie przez router z wyłączoną zaporą.
    - IP komputera 192.168.0.10 - statyczne
    - Brama 192.168.0.1
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    w tej funkcji nie ma żadnego, nawet najmniejszego błędu i działa ona w 100% poprawnie. Wykorzystywany jest tu mechanizm "UDP CLIENT" i warto sobie prześledzić chociaż raz i zrozumieć jak to działa od podstaw, żeby posługiwać się sprawnie na przyszłość tymi funkcjami ze stosu TCP, którego omawiam w książce.

    Problem że nie widać komunikacji zwrotnej w postaci dowolnie wygenerowanej ramki u autora tematu nie występuje tylko w przypadku tej funkcji którą przytoczył, jest jeszcze jedno miejsce w całym programie, w którym następuje użycie klienta UDP. Chodzi o odpowiedź na wysłanie zapytania na jeden z portów sterownika - poniżej fragment:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W programie na PC pojawia się na pewno tylko jeden z napisów widocznych powyżej czyli:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    ale już nie pojawia się spontanicznie wysłana kolejna ramka:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i ma to dokładnie to samo podłoże z tym co dzieje się w tych funkcjach wywoływanych z obsługi klawiszy.

    ROZWIĄZANIE: jest proste - kolega autor nie ustawił w programie adresu swojego komputera PC, który przecież dla wysyłania żądań klienta UDP jest potrzebny. A procek wysyła ramki do konkretnego IP a nie na adres rozgłoszeniowy. Chodzi o te linijki podstawowej konfiguracji, które są przecież omawiane w książce wyraźnie, ale i z komentarzy też widać mniej więcej o co chodzi, oto te linijki w programie:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    przecież widać, że tworzymy jakąś przykładową tablicę dla wywołań klienckich, w których podajemy adresy IP innych urządzeń z którymi będziemy chcieli się komunikować po UDP w tym także za pomocą klienta UDP. A typ wyliczeniowy

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    jasno sugeruje, że akurat w tym miejscu ustawiłem czy ustawiamy adres IP własnego komputera w sieci lokalnej z którym za pomocą kilenta UDP czyli od początku preparowanych ramek, będziemy się komunikować.

    dlatego żeby działało to wszystko poprawnie z testowym programem na PC to trzeba przecież podać w pierwszym elemencie tej tablicy adres IP komputera na którym odpalony jest program testowy:

    Cytat:
    static uint8_t farip[2][4] = { {192,168,0,10}, {192,168,0,180} };


    i wtedy bez żadnych zmian czy poprawek w programie (bo są niepotrzebne) - wszystko zacznie działać. Można sprawdzić.
  • #6 10084804
    opamp
    Użytkownik obserwowany
    piotrva napisał:
    opamp napisał:
    Tak, przy przycisku sprawdź mam komunikacje nadawanie i odbieranie. A przy klawiszy z płytki cisza. Na pingi też odpowiada.

    Nie do końca rozumiem wypowiedź, pokaż więc raport z wiresharka, co się dzieje.


    Po naciśnięciu klawisza z płytki nic nie wysyła.
    Mirekk36 czytałeś mój post? Bo widzę że nie :)
    [C] Obsługa klawiatury UDP ENC28j60 od Mirekk36
  • Pomocny post
    #7 10084865
    mirekk36
    Poziom 42  
    No czytałem post i to dokładnie, napisałeś , że po naciśnięciu klawiszy zapala się kontrolka Tx/Rx LED - zatem pakiet jest generowany i lata.

    Ale czy ty przeczytałeś moją odpowiedź i czy ustawiłeś adres IP swojego komputera ? w tych linijkach ???? o których napisałem na końcu w rozwiązaniu ??? Bo mi się wydaje że nie. A przynajmniej nic na to nie odpowiedziałeś.
  • #8 10084874
    opamp
    Użytkownik obserwowany
    opamp napisał:
    IP komputera 192.168.0.10 - statyczne

    Oto mi chodzi. Pierwszy post.
  • Pomocny post
    #9 10084888
    mirekk36
    Poziom 42  
    no dobrze (tylko spokojnie) - a ja pytam się ciebie jeszcze raz - czy ustawiłeś ten adres w tej linii swojego programu w AVR ???????



    static uint8_t farip[2][4] = { {192,168,0,10}, {192,168,0,180} };
  • #10 10084893
    opamp
    Użytkownik obserwowany
    Ten adres 192.168.0.10 miałem w programie od ciebie i się ja do niego dostosowałem :)
    PS: Zanim pan to powiedział 1 post i log jest :)
  • Pomocny post
    #11 10084985
    mirekk36
    Poziom 42  
    poniżej screenshot z działania dokładnie całego programu jaki mi nadesłałeś na maila tyle że poprawiłem sobie swój adres IP komputera i działa:

    [C] Obsługa klawiatury UDP ENC28j60 od Mirekk36

    a NIC INNEGO w twoim programie nie zmieniałem dla jasności.

    Dodano po 2 [minuty]:

    Zatem jeśli to u ciebie nie działa to nie ma innego wyjścia jak jakaś zła konfiguracja wyjątków w zaporze windows albo w antyvirusie. Nie ma innej możliwości.

    Możesz dodać do wyjątków zapory Windows samą aplikację tzn ten mój program do testowania UDP - może to ci pomoże. Albo sprawdzić inne zapory.

    Dodano po 1 [minuty]:

    Bo jeszcze raz powtórzę - skompilowałem tylko i wyłącznie ten projekt który ty mi podesłałeś na maila. Czyli zobacz u mnie działa a u ciebie nie ? z czego to może wynikać ???? no na pewno też nie z tego że zaraz się będziesz domyślał że ja mam może inny i poprawiony ten program na PC. Bo akurat włączam ten program z płytki DVD dołączonej do książki.
  • #12 10085037
    opamp
    Użytkownik obserwowany
    Ok, u cb działa zwracam honor. Tylko czemu nie mnie. Antywirus całkowicie wyłączony. Zapora XP wyłączona. Pokazać rzut może? Coś jeszcze mogę zrobić? ;)
  • #13 10085064
    mirekk36
    Poziom 42  
    No a jak pierwszy raz startowałeś ten program - to windows nie zakrzyczał, że program chce mieć dostęp przez UDP z pytaniem czy go zablokować ? może tam kliknąłeś coś źle. Tyle że w WinXP łatwo można to odkręcić ... hmm tylko teraz nigdzie nie mam pod ręką WinXp używam wszędzie i od dawna Win7....

    Dodano po 40 [sekundy]:

    ale zaraz - mam WinXP na maszynie wirtualnej - zaraz sprawdzę

    Dodano po 9 [minuty]:

    ok odpaliłem na XP, oczywiście przy starcie programu wybrałem opcję żeby windows nie blokował aplikacji. A komunikat zgłosił się pomimo to że zapora i tak była wcześniej wyłączona.

    [C] Obsługa klawiatury UDP ENC28j60 od Mirekk36

    prosta sprawa - zmień nazwę aplikacji i odpal ją ponownie - windows znowu krzyknie taki komunikat jak niżej widać, i wtedy wybierz to co zaznaczyłem na czerwono:

    [C] Obsługa klawiatury UDP ENC28j60 od Mirekk36

    a jak to nie pomoże - to weź sprawdź to sobie na innym windowsie a tego ew przeinstaluj od nowa bo może już żyje własnym życiem.
  • #14 10085129
    opamp
    Użytkownik obserwowany
    Zmieniłem nazwę i zapytał mnie i wziąłem Odblokuj i to samo jest. Zostaje mi inny komputer :/
  • #15 10085163
    mirekk36
    Poziom 42  
    Jest jeszcze jedna rzecz - czy przypadkiem nie masz wyłączonej opcji "Autosave" w Eclipse ???? bo może prowadzasz zmiany w kodzie programu (adresy IP) i nie robisz ręcznie SAVE, więc po kompilacji masz to co przed wprowadzeniem zmian.
  • #16 10085183
    opamp
    Użytkownik obserwowany
    IP w programie nie zmieniałem.
  • #17 10085216
    mirekk36
    Poziom 42  
    opamp napisał:
    IP w programie nie zmieniałem.


    aha ok - no to niestety mi się już kończą pomysły - musisz sprawdzić z innym kompem albo świeżo wygenerowanym windowsem. Bo ja nie po raz pierwszy ani nie drugi - zrobiłem teraz specjalnie dla ciebie testy i na twoim kodzie - zarówno w Win7 jak i w WinXP i za każdym razem działa.
  • Pomocny post
    #18 10086156
    piotrva
    VIP Zasłużony dla elektroda
    A czy przypadkiem to nie kod trzeba dostosować do sieci, a nie na odwrót?
    Pokaż jakie masz ustawienia maski podsieci na routerze.
  • #19 10086165
    opamp
    Użytkownik obserwowany
    Nowe wieści działa.
    Rozwiązanie w programie Atmegi ustawiać IP_PC takie same jak bramkę.
    [C] Obsługa klawiatury UDP ENC28j60 od Mirekk36
REKLAMA