Skocz do zawartości

Software'owy UART


Pomocna odpowiedź

Witam,
Potrzebuje napisać transmisje UART, lecz nie wykorzystując portów RxD i TxD atmegi. Chciałbym to zrobić na dowolnym innym pinie poprostu zmienijąc jego stan (TxD) lub odczytując stan pin (RxD). Wszystkie znalezione przez mnie kody są robione na rejestrach UART'a, czy da się jakoś prostu zrobić to bez korzystania z nich?

Chciałbym również nie korzystać z timerów tylko wyłącznie z opóźnień czasowych _delay_ms();

Bardzo proszę o pomoc.

Link to post
Share on other sites

Moim zdaniem jest to niemożliwe przy warunku wykorzystania delay'ów, ponieważ oczekując jakiś czas przy na przykład wysyłaniu blokujesz sobie całą pracę uC (w tym odbieranie). Więc delay moim zdaniem przekreśla software'owy UART, jeśli chodzi o równoczesne nadawanie i odbieranie.

Jeśli jednak naprawdę chcesz to zrobić, to nie powinno być takie trudne, chyba, że coś przeoczyłem. Co prawda będzie to totalnie nieefektywne, ale skoro się upierasz... Otwierasz jakąś specyfikację transmisji UART i do dzieła. Na przykład tutaj są ładne obrazki 🙂

TUTAJ!

Link to post
Share on other sites

Podstawowe pytanie - po co potrzebujesz to zrobić w ten sposób?

W teorii jest to możliwe, ale bez analizatora stanów logicznych lub oscyloskopu nie podejmowałbym się takiej zabawy, bo można życie stracić.

Inna kwestia, że jeżeli cokolwiek innego (trochę czasochłonnego) dzieje się w tle to jest to od razu skazane na niepowodzenie.

Link to post
Share on other sites

Szkoda że kolega nie napisał jaka ATMega, bo są wersje ATMegi z 2 USARTAmi sprzętowymi, wiec może się okazać że wystarczy podmienić chip i po sprawie. USI bodaj też umie symulować USART ?

Programowo na upartego też wykonalne, tylko wymaga znania zaawansowanych metod programowania, ogólnie musi to działać w jakiś przerwaniach Timera, w czasie rzeczywistym. To właściwie eliminuje problem co tam się dzieje obok, bo taki USART działa w przerwaniach, niezależnie od wątku głównego. Przy czym wtedy ciężko będzie przeskoczyć szybkość 19200b/s, ale to zależy jak bardzo zajęty system będzie innymi rzeczami.

Link to post
Share on other sites

Wykonalne jest to na pewno, bo widziałem kiedyś bibliotekę umożliwiającą programową obsługę UART'a pod Arduino. Jak dobrze poszukać pod C też pewnie coś się znajdzie.

Link to post
Share on other sites

Pod arduino masz biblioteke NewSoftSerial, ale pewnie ktoś zrobił port pod zwykle c-avr. Sama biblioteka działa bez zarzutów - testowałem wielokrotnie:) jedyne z czym jest problem to z przerwami, tzn nie można ich używać - ale to dość oczywiste, bo inaczej się posypie timing.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.