eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › arduino :-D
Ilość wypowiedzi w tym wątku: 9

  • 1. Data: 2018-08-25 15:43:51
    Temat: arduino :-D
    Od: Michał Czarkowski <m...@p...onet.pl>

    Hejka.
    Fragment kodu:

    digitalWrite(pin, HIGH);
    Serial.print(dane);
    digitalWrite(pin, LOW);

    Czyli ustawiam stan wysoki na pinie, wysyłam jakieś dane na sprzętowy
    port szeregowy, ustawiam stan niski na pinie. Chcę by stan wysoki na
    pinie był obecny przez czas trwania transmisji przez port szeregowy, a
    nie, jak się domyślam, tylko podczas pisania do bufora (stan wysoki jest
    tylko przez chwilę, podczas gdy dane wysyłane są przez uart dalej).
    Jak to zrobić programowo?


  • 2. Data: 2018-08-25 16:36:30
    Temat: Re: arduino :-D
    Od: Atlantis <m...@w...pl>

    On 25.08.2018 15:43, Michał Czarkowski wrote:

    > pinie był obecny przez czas trwania transmisji przez port szeregowy, a
    > nie, jak się domyślam, tylko podczas pisania do bufora (stan wysoki jest
    > tylko przez chwilę, podczas gdy dane wysyłane są przez uart dalej).
    > Jak to zrobić programowo?

    Arduino ma pod spodem zwyczajny toolchain AVR od Atmela. Wciąż możesz
    używać nazw rejestrów mikrokontrolerów z tej rodziny. Napisz więc sobie
    kilka podstawowych funkcji, odwołujących się bezpośrednio do rejestrów.

    Najpierw coś w rodzjaju:

    void uart_putc (char data) {
    BUFOR_NADAWCZY = data;
    while (REJESTR_STANU_UART & MASKA_PINU_STANU_NADAJNIKA);
    }

    a potem:

    void uart_puts (char *str) {
    while (*str) {
    uart_putc(*str);
    str++;
    }
    }

    Oczywiście nazwy rejestrów musisz podmienić na te odpowiadające
    konkretnemu UART-owi w mikrokontrolerze użytym w danym Arduino.

    Potem po prostu w programie wywołujesz uart_puts.


  • 3. Data: 2018-08-25 19:31:54
    Temat: Re: arduino :-D
    Od: Piotr Dmochowski <i...@p...onet.pl>

    W dniu 2018-08-25 o 15:43, Michał Czarkowski pisze:
    > Hejka.
    > Fragment kodu:
    >
    > digitalWrite(pin, HIGH);
    > Serial.print(dane);
    > digitalWrite(pin, LOW);
    >
    > Czyli ustawiam stan wysoki na pinie, wysyłam jakieś dane na sprzętowy
    > port szeregowy, ustawiam stan niski na pinie. Chcę by stan wysoki na
    > pinie był obecny przez czas trwania transmisji przez port szeregowy, a
    > nie, jak się domyślam, tylko podczas pisania do bufora (stan wysoki jest
    > tylko przez chwilę, podczas gdy dane wysyłane są przez uart dalej).
    > Jak to zrobić programowo?
    >
    Siemanko
    A kolega to cokolwiek przeczytał w dokumentacji?
    https://www.arduino.cc/en/Serial/Flush
    https://forum.arduino.cc/index.php?topic=487082.0

    --
    Pozdrawiam
    Piotrek


  • 4. Data: 2018-08-25 20:34:40
    Temat: Re: arduino :-D
    Od: Michał Czarkowski <m...@p...onet.pl>

    W dniu Sat, 25 Aug 2018 19:31:54 +0200, użytkownik Piotr Dmochowski
    napisał:

    > W dniu 2018-08-25 o 15:43, Michał Czarkowski pisze:
    >> Hejka.
    >> Fragment kodu:
    >>
    >> digitalWrite(pin, HIGH);
    >> Serial.print(dane); digitalWrite(pin, LOW);
    >>
    >> Czyli ustawiam stan wysoki na pinie, wysyłam jakieś dane na sprzętowy
    >> port szeregowy, ustawiam stan niski na pinie. Chcę by stan wysoki na
    >> pinie był obecny przez czas trwania transmisji przez port szeregowy, a
    >> nie, jak się domyślam, tylko podczas pisania do bufora (stan wysoki
    >> jest tylko przez chwilę, podczas gdy dane wysyłane są przez uart
    >> dalej). Jak to zrobić programowo?
    >>
    > Siemanko A kolega to cokolwiek przeczytał w dokumentacji?
    > https://www.arduino.cc/en/Serial/Flush
    > https://forum.arduino.cc/index.php?topic=487082.0

    Cześć.
    Cokolwiek przeczytałem, owszem. :-D Wygląda na to, że nie wszystko... :-D
    Działa. Do tej pory do niczego nie było mi to potrzebne. Dziękuję za
    podpowiedź. W ostateczności miałem ,,załatwić" to sprzętowo, ale
    podejrzewałem, że to musi się dać łatwo zrobić programowo.
    Dobrze, że tu teraz zerknąłęm w przerwie w czytaniu o usarcie w pdfie od
    microchipa :-D - temat zacny, ale użycie Serial.flush jest łatwiejsze.
    Pozdrawiam.


  • 5. Data: 2018-08-25 20:40:41
    Temat: Re: arduino :-D
    Od: Michał Czarkowski <m...@p...onet.pl>

    W dniu Sat, 25 Aug 2018 16:36:30 +0200, użytkownik Atlantis napisał:

    >
    > Arduino ma pod spodem zwyczajny toolchain AVR od Atmela. Wciąż możesz
    > używać nazw rejestrów mikrokontrolerów z tej rodziny. Napisz więc sobie
    > kilka podstawowych funkcji, odwołujących się bezpośrednio do rejestrów.
    >
    > Najpierw coś w rodzjaju:
    >
    > void uart_putc (char data) {
    > BUFOR_NADAWCZY = data;
    > while (REJESTR_STANU_UART & MASKA_PINU_STANU_NADAJNIKA);
    > }
    >
    > a potem:
    >
    > void uart_puts (char *str) {
    > while (*str) {
    > uart_putc(*str);
    > str++;
    > }
    > }
    >
    > Oczywiście nazwy rejestrów musisz podmienić na te odpowiadające
    > konkretnemu UART-owi w mikrokontrolerze użytym w danym Arduino.
    >
    > Potem po prostu w programie wywołujesz uart_puts.

    Dzięki za podpowiedź. Właśnie zrobiłem sobie przerwę w czytaniu pdf od
    microchipa i kolega w poscie poniżej naprowadził mnie na Serial.flush().
    To rozwiązuje mój mały problem.


  • 6. Data: 2018-08-26 18:51:33
    Temat: Re: arduino :-D
    Od: Pszemol <P...@P...com>

    Piotr Dmochowski <i...@p...onet.pl> wrote:
    > W dniu 2018-08-25 o 15:43, Michał Czarkowski pisze:
    >> Hejka.
    >> Fragment kodu:
    >>
    >> digitalWrite(pin, HIGH);
    >> Serial.print(dane);
    >> digitalWrite(pin, LOW);
    >>
    >> Czyli ustawiam stan wysoki na pinie, wysyłam jakieś dane na sprzętowy
    >> port szeregowy, ustawiam stan niski na pinie. Chcę by stan wysoki na
    >> pinie był obecny przez czas trwania transmisji przez port szeregowy, a
    >> nie, jak się domyślam, tylko podczas pisania do bufora (stan wysoki jest
    >> tylko przez chwilę, podczas gdy dane wysyłane są przez uart dalej).
    >> Jak to zrobić programowo?
    >>
    > Siemanko
    > A kolega to cokolwiek przeczytał w dokumentacji?
    > https://www.arduino.cc/en/Serial/Flush
    > https://forum.arduino.cc/index.php?topic=487082.0
    >

    Flush zawsze służył do asynchronicznego opróżnienia buforów portu
    szeregowych w przygotowaniu na nową transmisję.

    Dziwna to dla mnie decyzja zmiany tej funkcjonalności i wykorzystanie
    istniejącej funkcji do drastycznie innego celu...
    Nie lepiej było dodać nową funkcję biblioteczną o nazwie np.
    waitTXbuffempty(int timeoutSeconds) z argumentem w postaci timeoutu?
    Co, jeśli transmisja jest z handshake CTS/RTS i jest zablokowana sygnałem
    CTS i program zwiśnie na zawsze??


  • 7. Data: 2018-08-26 22:47:55
    Temat: Re: arduino :-D
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    Pszemol <P...@P...com> napisał(a):
    > Flush zawsze służył do asynchronicznego opróżnienia buforów portu
    > szeregowych w przygotowaniu na nową transmisję.
    > Dziwna to dla mnie decyzja zmiany tej funkcjonalności i wykorzystanie
    > istniejącej funkcji do drastycznie innego celu...
    > Nie lepiej było dodać nową funkcję biblioteczną o nazwie np.
    > waitTXbuffempty(int timeoutSeconds) z argumentem w postaci timeoutu?
    > Co, jeśli transmisja jest z handshake CTS/RTS i jest zablokowana sygnałem
    > CTS i program zwiśnie na zawsze??

    Jak najbardziej racja. To typowy przykład wynajdywania przez Arduino koła na
    nowo. A potem ludzie się dziwią, że miało być prościej a jest trudniej :)

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 8. Data: 2018-08-29 00:06:03
    Temat: Re: arduino :-D
    Od: q...@t...no1 (Queequeg)

    Pszemol <P...@p...com> wrote:

    > Flush zawsze służył do asynchronicznego opróżnienia buforów portu
    > szeregowych w przygotowaniu na nową transmisję.

    Wejściowych.

    Domyślam się, że zachowanie jest podobne do fflush(3).

    http://man7.org/linux/man-pages/man3/fflush.3.html

    For output streams, fflush() forces a write of all user-space
    buffered data for the given output or update stream via the stream's
    underlying write function.

    For input streams associated with seekable files (e.g., disk files,
    but not pipes or terminals), fflush() discards any buffered data that
    has been fetched from the underlying file, but has not been consumed
    by the application.

    --
    https://www.youtube.com/watch?v=9lSzL1DqQn0


  • 9. Data: 2018-08-29 00:07:48
    Temat: Re: arduino :-D
    Od: q...@t...no1 (Queequeg)

    Queequeg <q...@t...no1> wrote:

    >> Flush zawsze służył do asynchronicznego opróżnienia buforów portu
    >> szeregowych w przygotowaniu na nową transmisję.
    >
    > Wejściowych.

    A jednak miałeś rację, wyjściowych też :)

    https://linux.die.net/man/3/tcdrain

    #v+
    tcdrain() waits until all output written to the object referred to by fd
    has been transmitted.

    tcflush() discards data written to the object referred to by fd but not
    transmitted, or data received but not read, depending on the value of
    queue_selector:
    #v-

    Czyli powinni nazwać drain, a nie flush...

    --
    https://www.youtube.com/watch?v=9lSzL1DqQn0

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: