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] Przesyłanie danych przez UART z użyciem przerwań: konfiguracja układu atmega328P

24 Paź 2020 08:45 591 5
REKLAMA
  • #1 18996376
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #2 18996422
    tmf
    VIP Zasłużony dla elektroda
    Tak, możesz tak zrobić i zadziała to poprawnie. Ale napisz co chcesz osiągnąć. Bo może prosciej jest skorzystać z przerwania odbiornika UART - jest ono generowane w chwili odebrania bajtu danych przez UART i nie ptrzeba korzystać z rozwiązania jakie wymyśliłeś.
  • REKLAMA
  • Pomocny post
    #3 18996468
    krzysiek_krm
    Poziom 40  
    tmf napisał:
    może prosciej jest skorzystać z przerwania odbiornika UART - jest ono generowane w chwili odebrania bajtu danych przez UART

    To nie jest prościej, to jest jedyne sensowne rozwiązanie.
  • REKLAMA
  • Pomocny post
    #4 18996503
    ex-or
    Poziom 28  
    Pyt 1:
    Tak.
    Jeśli nie ma innych wskazań żeby koniecznie korzystać z INT1 to w m328p można uaktywnić przerwanie PCINT na pinie Rx, wtedy nie potrzebaa żadnych dodatkowych połączeń między pinami. Pewna niedogodność jest taka, ze przerwania PCINT reagują na oba zbocza oraz wektor przerwań jest wspólny dla całego portu.
    Pyt 2:
    Tak. Nie.
    Można to sobie teoretycznie rozkminić na podstawie informacji jak próbkowany jest sygnał UART (opisane w datasheetcie) i szybkości zegara jak się bardzo chce :-). A z praktyki: zrobiłem coś takiego dla 38400 bodów i zegara 8MHz, co więcej przerwanie PCINT na pinie Rx budzi procka z głębokiego uśpienia (na marginesie to był jedyny powód zastosowania przerwania ale to nie ma znaczenia bo UART jest niezależny od rdzenia). Gubienia danych nie stwierdzono.
  • REKLAMA
  • #5 18996580
    tmf
    VIP Zasłużony dla elektroda
    krzysiek_krm napisał:
    To nie jest prościej, to jest jedyne sensowne rozwiązanie.

    Niekoniecznie.
    tmf napisał:
    Ale napisz co chcesz osiągnąć. Bo może prosciej jest skorzystać z przerwania odbiornika UART

    Są sytuacje, w których rozwiązanie autora jest sensowne. Np. wykrywanie ruchu na magistrali RS485. Potrzeba przerwania od opadającego zbocza sygnału, bo przerwanie RXC pojawia się dopiero po odebraniu całej ramki, a to już jest zbyt późno, aby np. powstrzymać się od nadawania w celu zapobieżenia kolizji. Innym przykłądem jest wybudzenie procka, jeśli nie obsługuje asynchronicznego wybudzania przez UART. Dlatego wszystko zależy od tego co robi autor. Zakładam, że może mieć jakiś sensowny powód takiego działania.
  • #6 18996682
    Konto nie istnieje
    Poziom 1  
REKLAMA