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

Odbiór danych w przerwaniu od UART-a

LosRabinos 15 Cze 2011 18:55 2618 8
REKLAMA
  • #1 9616201
    LosRabinos
    Poziom 10  
    Witam
    Próbuję odebrać na komputerze (w programie bray terminal) dane, tzn. konkretnie temperaturę z termometru LM35. Niestety mam problem z odbiorem danych w przerwaniu od UART-u.
    Poniżej przedstawiam kod programu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zastanawiam się czy wywołanie funkcji:UART_Wyslij(temperatura); powinno być w programie głównym, czy w przerwaniu?
    NIe bardzo wiem też jak co zrobić, żeby zmienną temperatura zamienić z typu int na char. Wiem że stosuje się np funkcję sprintf, którą też umieściłem w komentarzu programu, ale czegoś na pewno tu brakuje bo program w terminalu wyświetla mi zamiast konkretmej wartości jakiś czareny prostokąt.
    Na koniec mam jeszcze pytanie: czy gdy używa się przerwania od ADC i UARTA jednocześnie to należy umiescić jedno w drugim czy osobno?
    Z góry dziękuję za jakiekolwiek wskazówki.
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 9616281
    Fredy
    Poziom 27  
    Chcesz odebrać dane w PC a pytasz o przerwanie od UARTU. Aby wysłać dane do komputera po RS232 nie trzeba używać przerwania. Masz w programie procedurę obsługi przerwania od UARTU tylko jej nigdzie nie odblokowujesz. WYkasuj ją. Wogóle na początek zrezygnuj z sei bo nie potrzebujesz przerwań.
  • REKLAMA
  • #3 9617051
    LosRabinos
    Poziom 10  
    Skoro przerwanie ISR(USART_RXC_vect) używa się, gdy do mikrokontrolera przesyłamy dane z urządzenia zewnętrzengo, to w moim programie zastosowanie przerwania od nadawania: ISR(USART_TXC_vect) byłoby na miejscu? (być może jest to zupełnie niekonieczne, ale jestem ciekawy czy dobrze rozumuję).
  • Pomocny post
    #4 9617098
    janbernat
    Poziom 38  
    Nie jest to zwykle konieczne bo gdy oczekujesz na dane to nie wiesz kiedy nadejdą.
    Dlatego przerwanie- zdarzenie- nie wiadomo kiedy się pojawi.
    A nadawanie sam kontrolujesz- kiedy chcesz to wysyłasz.
    To teraz niech komputer się martwi jak na to się przygotować- a nie procesor.
  • REKLAMA
  • #5 9617205
    LosRabinos
    Poziom 10  
    Dziękuję za odpowiedzi.
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #6 9627063
    Fajfer2
    Poziom 20  
    Przerwanie, w którym wysyła się znaki do bufora portu UART, czyli UDRE oraz przerwanie kończące całą procedurę - TXC (zakończenie fizycznego wysyłania znaków), może być potrzebne w już nieco bardziej "zaawansowanych" metodach komunikacji PC-uP etc.

    Jeśli napiszesz program na PC i w nim ustawisz port, tak aby przerwał oczekiwanie
    na nadejście kolejnego znaku po zbyt długiej przerwie, to taki ww. tryb jest najczęściej konieczny.
  • #7 10197663
    adasb
    Poziom 14  
    Ja mam podobny problem. Mam pytanko czy jeżeli już wykorzystam procedurę przerwania od UART Receive to odczyt tablicy znaków powinienem umieścić w obsłudze przerwania czy wystawić flagę która będzie sprawdzana w programie głównym.
    Aktualnie odczytuje dane w przerwaniu a cały string zapisuje do tablicy. Wysyłam napis w celu kontroli (czy dobrze odebrałem) na UART w obsłudze przerwania i jest OK - dostaje na terminalu to co wysłałem do mikroprocka. Problemem jest gdy w programie głównym chce wysłać to samo na terminal. Nie jestem w stanie tego zrobić. Send(s) - wysyłam tablice (*s) wskaźnik na nią.

    Z góry dzieki za ospowiedź
  • #8 10198953
    Konto nie istnieje
    Konto nie istnieje  
  • #9 10201893
    adasb
    Poziom 14  
    Tablicę deklaruje jako volatile

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