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

[bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?

Juni[]r 26 Mar 2015 08:47 1749 27
  • #1 14562235
    Juni[]r
    Poziom 16  
    Problem mam bo nigdy nie pisałem programów z komunikacją RS232. Mam urządzenie które wysyła dane w postaci 7e fe 00 00 XX 00 00 00 00 00 7e .
    Wartość XX mnie interesuje. Jest w zakresie od 0 do 255 czyli 00-FF. Reszta danych o wartości "00" czasami się zmienia. Są to inne dla mnie nie istotne dane. Chce wyświetlić moja zmienną na LCD i z tym sobie poradzę bez problemu ale nie wiem jak zacząć wysysanie mojej wartości z całego stringa.
  • #2 14562303
    Drake160
    Poziom 17  
    Za pomocą Mid nie da się? Np coś w tym rodzaju:
    Zmienna = Mid(string_uart , 9 , 2)
  • #3 14562324
    Konto nie istnieje
    Konto nie istnieje  
  • #5 14562338
    Konto nie istnieje
    Konto nie istnieje  
  • #6 14567909
    Juni[]r
    Poziom 16  
    Napotkałem na kolejny problem. Gdy któryś z bajtów napotka wartość 7D dodaje kolejny 5E i kolejny 5F

    czyli lecąc po kolei

    7C
    7D 5D
    7D 5E
    7F

    Pokaże to na rysunku.

    [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?

    dodam ze dzieje się to na każdym bajcie od 3 do 10. Tam gdzie na fotce widać zera. Jak to ugryźć

    Musiał bym jakoś liczyć kolejne bajty a jeżeli trafie na 7D to go omijać i czytać kolejny jako poprzedni.
  • #7 14567948
    Konto nie istnieje
    Konto nie istnieje  
  • #9 14606687
    nouki
    Poziom 25  
    Witam.

    Jeśli zrozumiałem to z transmisji aa bb cc dd ee ff gg...

    Chcesz wyciągnąć tylko powiedzmy bb i ff.
    Czy ramka zawsze zaczyna się od aa czy też są inne?

    Pozdrawiam.
  • #10 14606730
    Juni[]r
    Poziom 16  
    Zaczyna się od 7f EF co widać na fotografii wyżej ale zauwazcie ze jeżeli dochodzi do 7D to nie kolejny bajt się zmienia tylko dostaje dodany. Jest o jedna wartość więcej. String się wydłuża a jeżeli poprzednie dwa bajty maja wartość 7D to robi się haos. 5 bajt nas interesuje ale gdy bajt 3 i 4 zmieni wartość na 7D to juz nie 5 jest nasza zmienna tylko 7. Wszystko się przesuwa. Zastanawiał się czy nie łatwiej by to wykonać na Arduino choć tam dopiero zaczynam.

    Pokaże. Interesuje nas wartość 6c. Jest to bajt 5

    [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?

    A na kolejnej force 6c nam uciekło

    [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?
  • #11 14606782
    nouki
    Poziom 25  
    Co do samego odczytu

    Kod: text
    Zaloguj się, aby zobaczyć kod


    A resztę na if-ach pewnie da się rozwiązać

    Coś ta transmisja dziwna.
    Producent sam by sobie utrudniał i wydziwiał...... Wydaje mi się że jest to błąd jakiś.
    Co zmieni bascom ,c czy inne języki czy tam platformy - problem pozostanie taki sam bo sama ramka do odebrania jest jakaś kulawa:)

    Pozdrawiam

    Pozdrawiam
  • #13 14606910
    Wirnick
    Poziom 30  
    Juni[]r napisał:
    Producent tłumaczy to 7D że jest to znak specjalny. Ale nie kumam o co chodzi

    Ale o to chodzi - enigma cycuś?
    A jak pominiesz ten znak szczególny to urządzenie zachowuje się poprawnie?
  • #15 14606926
    nouki
    Poziom 25  
    Więc jeśli wystąpi znak specjalny odczytaj zamiast 3 pozycje 4 jeśli....... i jaki w tym problem?

    Pozdrawiam.
  • #16 14606951
    zumek
    Poziom 39  
    Juni[]r napisał:
    Wszystko jest fajne do czasu jak niema tego 7D

    To ja Ci podpowiem, że tajemnicze podwójne 7D w ramce danych na poniższym obrazku, to zapewne nic innego jak AD1=125 i AD2=125

    [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?[/quote]
  • #17 14607094
    Juni[]r
    Poziom 16  
    Wow naprawdę ???? Niesamowite. Ja nawet wiem co to oznacza. Ale twoja wypowiedź nic nie dodaje do dyskusji. Nouki masz racje tylko takie IF musiało by być z bajtem 2 i 3. I tu mój problem.

    Moderowany przez dondu:

    Profilaktycznie poproszę o nie podgrzewanie temperatury dyskusji. Popatrz na licznik Pomógł pod nickiem kolegi Zumek i miej to na względzie czytając jego posty nawet wtedy, gdy się pomyli.

    Juni[]r napisał:
    Wow naprawdę ???? Niesamowite. Ja nawet wiem co to oznacza.

    Z poprzednich Twoich postów (przed postem, kol Zumek) jakoś nie wynikało byś wiedział.

  • #18 14607424
    Piotr Piechota
    Poziom 22  
    Zamieszanie z 7D to "Byte-stuffing" ułatwiający rozpoznanie początku ramki. 7E zawsze wyznacza granice ramki i dzięki Byte-stuffing nie wystąpi wewnątrz.

    Cytat:
    3. Protocol
    3.1 Byte-stuffing
    3.1.1 Output:
    Byte in frame has value 0x7E is
    changed into 2 bytes: 0x7D, 0x5E
    Byte in frame has value 0x7D is
    changed into 2 bytes: 0x7D, 0x3D
    3.1.2 Input:
    When byte 0x7D is received, discard this
    byte, and the next byte is XORed with 0x20.


    Nie wiem dlaczego kolega nie dopisał, że chodzi prawdopodobnie o nadajnik/odbiornik FrSky. Pewnie to tajny projekt drona szpiegowskiego :D
  • #19 14607679
    Juni[]r
    Poziom 16  
    Piotrze pewnie masz racje bo to bardzo logiczne. Co do "drona" to proszę nie używaj tego słowa jest tak nadużywane a oznacza co innego. Co do FR to masz racje chodzi o samo RSSIrx by wyssać z telemetrii. Chce wykonać tak jak w moich przedpotopowych aparaturach tylko zamiast mA wyświetlacz oled.
  • #20 14607689
    Piotr Piechota
    Poziom 22  
    Tutaj masz kawałek z mojego nadajnika FrSky odbierający telemetrię odbiornika.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #21 14607755
    Juni[]r
    Poziom 16  
    Wszystko super Piotrze ale C to nie mój konik. Rozumiem z tego chyba:

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


    Jak pisałem nie znam C ale szybko się uczę. Możesz zdradzić coś odnośnie swojego nadajnika ? Troszkę się pochwalić.... i jak wykonywałeś projekt, jaki uC może jakaś płytka typu kit jak ardu ? Był bym wdzięczny. Wiem ze mogę kupić FrLCD ale nie o to chodzi. Pokaże ci fotkę resztę sam zrozumiesz.

    [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom? [bascom] Jak wyodrębnić wartość XX z danych RS232 w Bascom?
  • #22 14608068
    Konto nie istnieje
    Konto nie istnieje  
  • #23 14608111
    Juni[]r
    Poziom 16  
    A powiedzcie mi ten terminal w kompilatorze można wykorzystać do testów ? Czy raczej lipton ? Wiem że $sim to tragedia ale dopykam sobie niby wirtualny LCD i będę wiedział co się dzieje.

    Rozumiem ze moją zmienną jest RX czy ta wartość I ? Musze to przeczytać jeszcze z 80 razy albo łyknąć bimberku. Na tyle translator C na bascom wykumałem. Ale.....

    Chyba wykonam prototyp i zobaczę co wyjdzie
  • #24 14608147
    Konto nie istnieje
    Konto nie istnieje  
  • #25 14608827
    Piotr Piechota
    Poziom 22  
    Juni[]r napisał:
    (...) Możesz zdradzić coś odnośnie swojego nadajnika ? Troszkę się pochwalić.... i jak wykonywałeś projekt, jaki uC może jakaś płytka typu kit jak ardu ? (...)


    Zbudowałem nadajnik na bazie nadajnika z Lamy V2 i modułu nadawczego FrSky. Program działał w ATMega644 a czasem ATMega32 (na płytce uniwersalnej). Dane z telemetrii i stan manipulatorów wyświetlane były na wyświetlaczu LCD 64x128. Do tego moduł bluetooth do wysyłania pozycji GPS do smartfona. Nigdy nie powstał schemat układu. Polatałem troszkę qadrocopterem, troszkę szybowcem DLG. Niestety po kilku 'kretach' wynikających z niskiej jakości potencjometrów w drążkach kupiłem Turnigy 9XR i projekt umarł. Jeżeli masz ochotę mogę podesłać źródła programu tyle, że w C.



    Dodano po 4 [minuty]:

    niveasoft napisał:
    (...)Ja bym ramki w przerwaniu nie analizował.
    (...)


    Tak na prawdę nie analizuję ramki w przerwaniu (pomimo komentarza " // analiza ramki") tylko składam do kupy dane co zajmuje procesorowi niewiele cykli.
  • #26 14623516
    Juni[]r
    Poziom 16  
    Przesiadłem się na arduino więc nie wiem cze mogę pisać w tym temacie bo to BASCOM. Uruchomiłem wyświetlacz OLED na szynie I2C. Powiedzcie mi tylko tą zmienną rx jak wstawić jako zmienna zamiast tekstu ?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    A chciał bym tam mieć zmienną rx. Samo wpisanie rx nie działa :(
  • #27 14623613
    Piotr Piechota
    Poziom 22  
    Np. tak: (pierwszy "traf" z google szukając drawstr)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Bardziej jednak potrzebna Ci jest jakaś dobra książka lub kurs "C".

    Powodzenia
REKLAMA