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

[Rozwiązano] [Bascom] Odbiór zmiennej 8 bajtowej przez UART w trybie szesnastkowym

mlassota 30 Lis 2019 15:52 633 6
REKLAMA
  • #1 18310957
    mlassota
    Poziom 18  
    Szanowni koledzy!

    Czujnik ozonu wysyła po UART taką ramkę

    FF 2A 04 00 00 3E 27 10 5D

    z czego
    FF to bajt startu
    2A - rodzaj gazu (03)
    00 - cyfry dziesiętne ( nie istotne)
    00 - stężenie gazu - bajt starszy
    3E - stężenie gazu bat młodszy
    reszta nie istotna (choć znana)

    Jak w Bascom odebrać te dane do tablicy zmiennych?
    Zwykle odbierałem cyfry dziesiętne a nie HEX

    Będę wdzięczny za pomoc
    Maciek
  • REKLAMA
  • Pomocny post
    #2 18311523
    BlueDraco
    Specjalista - Mikrokontrolery
    Zawsze odbierasz przez UART dane binarne. Możesz je tylko sobie wyświetlić lub wypisać jako znaki, liczby dziesiętne lub szesnastkowe. Odbierasz bajty, masz z nich złożyć daną 16-bitową, np. tak:
    wartosc = bajt_mniej_znaczący + bajt_bardziej znaczący * 256
  • REKLAMA
  • Pomocny post
    #3 18311545
    Kolaczka
    Poziom 9  
    BlueDraco napisał:
    Zawsze odbierasz przez UART dane binarne. Możesz je tylko sobie wyświetlić lub wypisać jako znaki, liczby dziesiętne lub szesnastkowe. Odbierasz bajty, masz z nich złożyć daną 16-bitową, np. tak:
    wartosc = bajt_mniej_znaczący + bajt_bardziej znaczący * 256

    Szybciej będzie
    wartosc = bajt_mniej_znaczący + SHIFT bajt_bardziej_znaczący,LEFT 8
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #5 18311920
    tomaszdko
    Poziom 12  
    Ja robiłem podobnie do twojego tyle że zamiast "waitkey" używałem "inkey" w przerwaniu .

    Odbior:
    B = Ischarwaiting()
    If B = 1 Then
    C = Inkey()
    If C = "Q" Then
    Inputbin Aa(1) , Aa(2) , Aa(3) , Aa(4) , Aa(5) , Aa(6)
    End If
    End If
    Return

    Czyli Q robi u mnie za bajt startu a resztę danych przypisuję zmiennym . W programie głównym obrabiam te zmienne.

    ps:
    Do tworzenia zmiennej dwu bajtowej możesz użyć MAKEINT , odpowiednik tego co napisał BlueDraco
  • #6 18312496
    BlueDraco
    Specjalista - Mikrokontrolery
    Bascoma nie znam, ale moim zdaniem ten kod działa zupełnie przez przypadek i zupełnie inaczej, niż wyobraża to sobie Autor. Co jest w pętli, a co poza pętlą? To powinno być zrobione w automacie - na początku pętli pobieramy bajt patrzymy, co to za jeden i co to może oznaczać.

    Offtop: jeśli w Bascom x * 256 jest wolniejsze od shift x left 8, to nie należy tego Bascoma w ogóle używać.
REKLAMA