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

Wysyłanie komend UART z Mega328P w Bascom nie działa - jak naprawić?

Dariusz Goliński 23 Paź 2019 10:47 645 7
REKLAMA
  • #1 18234590
    Dariusz Goliński
    Poziom 22  
    Witam kolegów I koleżanki

    Mam pewne urządzenie które komunikuje się po UART 3.3 V.
    Aby rozpocząć komunikację muszę do urządzenia wysłać następujące komenty
    Enter
    xon (ASCII)
    Enter
    Po tym urządzenie przesyła dane o które mi chodzi I które bez problem odbieram.
    Do komunikacji z urządzeniem używam Mega328P I Bascom-a.
    Problem w tym że gdy wysyłam powyższe komendy z komputera z użyciem np: putty , to wszystko działa. Gdy użyje uc to nie działa. Urządzenie nie przyjmuje komendy.
    Próbowałem takich rozwiązań jak:

    Print Chr(13)
    waitms 500
    Print "x";
    waitms 500
    Print "o";
    waitms 500
    Print "n";
    print ""
    waitms 500
    Print Chr(13)
    waitms 500

    oraz

    Print Chr(13)
    waitms 500
    Print "xon"
    print ""
    waitms 500
    Print Chr(13)
    waitms 500

    I tak też

    Print Chr(13)
    waitms 500
    Print Chr (120);
    waitms 500
    Print chr (111);
    waitms 500
    Print Chr (110);
    waitms 500
    Print Chr(13)
    waitms 500

    Te waity to po to żeby zasymulować wpisywanie znaków z klawiatury
    xon - nie jest znakiem z tablicy ASCII tylko słowną komendą "xon" (reaguje na małe I duże litery )

    Wysyłałem dane z uc do terminala i działało tak jak powinno.
    Prędkość i reszta parametrów UART jest OK
    Odbieranie informacji tego urządzenia działa dobrze.
    Prędkość komunikacji 115200
    uc na kwarcu 16Mhz.
    komunikacja zrealizowana poprzez Voltage Level Converter oraz robiłem test bezpośrednio na obniżonym napięciu zasilania do 3.3v.

    Ma ktoś może jeszcze jakiś pomysł co mógłbym sprawdzić ?
    Czy terminal gdy wysyła znaki przesyła coś jeszcze czego nie widać ?

    Dzięki za wszelkie sugestie.
  • REKLAMA
  • #2 18234619
    marci4
    Poziom 31  
    Jako enter zwykle wysyła się <CR><LF>, a ty wysyłasz tylko <CR> czyli kursor powraca do poczatku linii, ale nie przechodzi do następnej - tak jakby "niepełny Enter".
    Jak wysyłasz 13 w dec, to wyślij zaraz po niej 10 w dec.

    Przy okazji zawsze możesz się wpiąć z monitorem UART i podsłuchać sobie co tam faktycznie uC wysyła.
  • REKLAMA
  • #3 18234768
    m2c
    Poziom 19  
    Jak używasz średnika na końcu Print to wtedy nie wysyła CRLF.

    Sprawdź jeszcze tak:
    Print Chr(13);
    waitms 500
    Print "xon";
    waitms 500
    Print Chr(13);

    EDIT: Kolega bart-projects był pierwszy, zatwierdziłem edycję dopiero po powrocie ze sklepu i nie zauważyłem że napisał to samo wcześniej ;)
  • REKLAMA
  • #5 18235091
    Dariusz Goliński
    Poziom 22  
    Witam I dzięki za zainteresowanie
    No więc sprawdziłem wasze sugestie ( wszystkie ) i to moje badziewie ciągle nie odpowiada.
    Mam podłączonego na stałe Rigola na którym podglądam czy transmisja idzie.
    Nie mam analizatora. Do układu nie mogę się wpiąć aby podglądać co się przesyła bo są różne punkty zasilania i już raz uwaliłem interfejs komunikacyjny.
    Niby taka prosta rzecz a nnie wiem dlaczego to nie działa.
  • REKLAMA
  • #7 18236039
    Dariusz Goliński
    Poziom 22  
    Dzięki Bart
    Jutro rano przetestuje i dam znać

    Dodano po 9 [godziny] 53 [minuty]:

    No I zrobiłem test. I oczywiście nie działa.
    Żeby generowało się to co chcę musiałem wstawić taki kod

    Print Chr(013);
    wait 2
    Print "x";
    wait 2
    Print "o";
    wait 2
    Print "n";
    wait 2
    Print Chr(013);

    W innym przypadku dokładał jeszcze w Dec 10.

    To może z innej beczki
    Znacie jakiś scalony konwerter 5V - 3V
    Może tu jest problem. Chociaż ani oscyloskop ani monitor który popełniłem tego nie wykazał.
    Do tej pory próbowałem tych tanich konwerterków i tych z tranzystorkami. Zbudowałem jeden z tranzystorem fet i bipolarnym i też nie działał.
    Próbowałem na obniżonym zasilaniu bez konwertera i też nic. Może jakiś scalaczek pomoże.
  • #8 18237271
    trol.six
    Poziom 31  
    Dariusz Goliński napisał:
    Mam podłączonego na stałe Rigola na którym podglądam czy transmisja idzie.

    Masz raptem kilka znaków i nie jesteś w stanie zobaczyć ile sztuk bajtów ten terminal wysyła? W zasadzie możesz sprawdzić wysłanie jednej litery.

    Dariusz Goliński napisał:
    Prędkość komunikacji 115200
    uc na kwarcu 16Mhz.

    Dla tych ustawień jest duży błąd w szybkości transmisji, może zegary sa niezbyt precyzyjne? Masz może kwarc 18432000?

    Dariusz Goliński napisał:
    komunikacja zrealizowana poprzez Voltage Level Converter

    A co to jest? W zasadzie do UART tej szybkości to nawet dwa rezystory (w okolicach 1-2kom) jako dzielnik napięcia powinny dać rade. Chyba że wejście tego urządzenia jest jakieś obłożone pojemnościami, albo ciągniesz to kablem o dużej pojemności.
REKLAMA