115k softwarowy UART na Atmega8

Jul 05, 2007 9 Replies

Witam. Próbował już może ktoś softowego UARTA na atmega8 ?



Dostałem takie zadanie i nie jestem pewny, czy pociągnie taką prędkoość. A wiadomo, że nie warto siadać jeśli ktoś już definitywnie poległ :-)



Jeśli podkręcę procesor do 16 MHz to wychodzi mi ca. 130 cykli na bit. Doczytałem sobie , że powinno się próbkować 8 razy więc zostanie koło



16 cykli na próbkę.

Zasadniczo nie widać przeciwwskazań, ale nie widziałem na żadnej grupie informacji o takim rozwiązaniu.



Dzięki za odpowiedzi :-)


wonderland napisał(a):

IMHO wystarczy próbkowanie 3 razy w oknie 50% czasu. Większym problemem może być tylko precyzja odmierzania czasu. Możesz sobie pozwolić na poświecenie 1 timera i 1 linii z przerwaniem ?

Je¶li podkrêcê procesor do 16 MHz to wychodzi mi ca. 130 cykli na bit. Doczyta³em sobie , ¿e powinno siê próbkowaæ 8 razy wiêc zostanie ko³o

16 cykli na próbkê.

Je¶li mo¿esz wykorzystaæ jeden timer to sprawdzaj stan lini w jego przerwaniu (do¶æ czêsto). Jak wykryjesz bit startu to ustawiasz go na 0,5 bitu. Sprawdzasz ponownie czy to faktycznie bit stopu. A potem ustawiasz timer na 1 bit i odczytujesz gdzie¶ w okolicach ¶rodka kolejne bity. To jest chyba najprostsze rozwi±zanie. Czy to jest zadanie teoretyczne, czy ¿ycie Ciê zmusi³o?

A ten procesor ma cos jeszcze robic oprocz czekania na nadejscie znaku ?

J.

U¿ytkownik "wonderland" <bartek snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news: snipped-for-privacy@m36g2000hse.googlegroups.com... Witam. Próbowa³ ju¿ mo¿e kto¶ softowego UARTA na atmega8 ?

¦ci±gnij noty aplikacyjne atmela AVR304 i AVR305 tam masz gotowe rozwi±zania - mo¿e pomog±. pozdrawiam

Dzięki za informacje Problem jest mocno życiowy, bo mamy zaprojektować układ, w którym transmisja danych będzie buforowana w tej atmedze. Transmisja idzie z jednej strony na 115 k, i dobrze byłoby, coby nie zwalniała na atmedze. Zastanawiam się mocno czy nie lepiej byłoby jednak wziąć megę 162 z dwoma UART-ami, ale jak na razie sugerowaną opcją jest atmega8.

Układ będzie li i jedynie buforował informacje.

Znaczy się też, że właściwie mam do dyspozycji wszystkie porty i wszystkie timery... Na UARTA założyłem już nóżkę zewnętrznego przerwania.

Dnia Thu, 05 Jul 2007 21:55:44 +0200, wonderland <bartek snipped-for-privacy@wp.pl napisał:

No, ale, przecież atmega128 ma dwa UARTy.... Chyba, że czegoś nie rozumiem :-)

Sorki :-( Nie wiem skąd wzięłą mi się ta 128`ka.

Przepraszam za zaśmiecanie :-( Pozdrawiam

Bogdan G pisze:

Bit startu najlepiej wykryć przerwaniem zewnętrznym zamiast pollingiem. Reszta się zgadza. Warto wykorzystać tryb timera z automatycznym resetowaniem po dojściu do zadanej wartości (patrz Output Compare Register) żeby automat nie był wrażliwy na jitter obsługi przerwań timera.

Przykład takiego UARTa realizowanego programowo można znaleźć w bibliotece avrlib:

formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required