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

AT32 - jak wysłać ramkę w formacie 16-stkowym?

Bartek.k.k 06 Paź 2014 12:30 1191 10
REKLAMA
  • #1 14019138
    Bartek.k.k
    Poziom 21  
    Cześć, siedzę i się głowie w jaki sposób wysłać taką ramkę:

    5AA5 05 82 0010 0003


    przez uarta. Jest to ramka w formacie szesnastkowym. Jest to ramka, która zmienia wartość zmiennej o adresie 0x0010 w lcd DGUS. Próbowałem czegoś takiego:

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


    Ale niestety wysyła mi to jako string w ASCII, a potrzebuje ramkę wysłać jako hex. Jest jakiś łatwy sposób aby wysłać to szesnastkowo? Pozdrawiam Bartek!
  • REKLAMA
  • Pomocny post
    #2 14019154
    Samuraj
    Poziom 35  
    Nie podałeś jak wygląda funkcja uart_puts()
    Zapewne ciąg rozkładany jest w niej na znaki i wysyłane są pojedynczo.
    Mam podobne funkcje i u mnie to wygląda tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    w main zrobił bym to tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 14019164
    Bartek.k.k
    Poziom 21  
    Dziękuje kolego za pomoc. Funkcja działa tak jak chciałem. Pozdrawiam Bartosz!

    Dodano po 1 [godziny] 56 [minuty]:

    Dobrze, że nie zamykałem tematu, bo natrafiłem na kolejny problem. Czy szanowni koledzy może wiedzą jak podstawić tutaj zmienną zamiast wartości stałej, w tym przypadku 03?

    USART_Transmit(0x08);

    Potrzebuje wysłać coś takiego:

    USART_Transmit(0xmoja_zmienna);
  • REKLAMA
  • #4 14019486
    Samuraj
    Poziom 35  
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Pamiętaj tylko iż jako parametr przyjmowana jest zmienna typu char.
    Jak chcesz wysłac np int'a to musisz go rozbić:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 14019495
    Bartek.k.k
    Poziom 21  
    Zadziałało coś takiego:

    USART_Transmit(licznik);

    Wg. mnie nie powinno, bo licznik jest intem. Czy kolega ma może funkcję do odbioru danych z UART'a? Potrzebuje odebrać teraz taką ramkę:

    #5A#A5 #06 #83 #00#10 #01 #00#03(dla testów)

    Interesuje mnie tak naprawdę jedynie wartość #00#10 oraz #00#03
    tj; adres zmiennej oraz jej wartość.
  • #6 14019531
    Samuraj
    Poziom 35  
    Bartek.k.k napisał:
    Zadziałało coś takiego:

    USART_Transmit(licznik);

    Wg. mnie nie powinno, bo licznik jest intem.

    Zadziałało lecz wysyłasz tylko ostatni bajt zmiennej int i w rezultacie wysyłasz char.

    Przy odbiorze danych nie jest już tak łatwo. Bo trzeba wiedzieć który bajt odbierasz w danym momencie.
    Odebrac można i tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    lecz jest to mało efektywne, najlepiej na przerwaniach lecz tutaj to wyższa szkoła.
  • REKLAMA
  • #7 14021706
    Bartek.k.k
    Poziom 21  
    Skleiłem coś takiego:

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


    Następnie w while mam:

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


    Na lcd h44700 otrzymuje jakieś znaki, lecz nie są one takie same jak na wyświetlaczu DGUS. W jaki sposób mogę obrobić odbiór tej ramki, aby wyciągnąć tylko te dane, które potrzebuje?
  • #8 14048225
    Bartek.k.k
    Poziom 21  
    Przewertowałem internet z informacjami u UARC'ie i napisałem to tak jak należy. Wszystko działa. Pozdrawiam Bartek!
  • #9 14048245
    dondu
    Moderator na urlopie...
    Bartek.k.k napisał:
    Przewertowałem internet z informacjami u UARC'ie i napisałem to tak jak należy.

    Może spróbuj zrobić jeszcze lepiej na przerwaniach i tablicy bufora danych, jak radzi:

    Samuraj napisał:
    ... najlepiej na przerwaniach lecz tutaj to wyższa szkoła.

    wcale nie tak trudne: http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html

    ... nie mogę patrzeć na te pętle oczekujące jedna po drugiej :D
  • #10 14048261
    Bartek.k.k
    Poziom 21  
    Naturalnie, wszystko już działa na przerwaniach. Biblioteka do obsługi wyświetlaczy DGUS jest dostępna na githubie więc jakby ktoś potrzebował to śmiało może korzystać. Bardziej doświadczonych kolegów zachęcam do poprawek kodu, może czegoś więcej się nauczę :) Pozdrawiam Bartosz!
REKLAMA