wonderland
Guest
Thu Jul 05, 2007 7:50 am
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
William
Guest
Thu Jul 05, 2007 8:10 am
wonderland napisał(a):
Quote:
Witam. Prbowa ju moe kto softowego UARTA na atmega8 ?
Dostaem takie zadanie i nie jestem pewny, czy pocignie tak
prdkoo. A wiadomo, e nie warto siada jeli kto ju definitywnie
poleg :-)
Jeli podkrc procesor do 16 MHz to wychodzi mi ca. 130 cykli na bit.
Doczytaem sobie , e powinno si prbkowa 8 razy wic zostanie koo
16 cykli na prbk.
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 ?
Bogdan G
Guest
Thu Jul 05, 2007 8:30 am
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?
J.F.
Guest
Thu Jul 05, 2007 8:33 am
On Wed, 04 Jul 2007 23:50:49 -0700, wonderland wrote:
Quote:
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.
A ten procesor ma cos jeszcze robic oprocz czekania na nadejscie znaku
?
J.
Robert Zemła
Guest
Thu Jul 05, 2007 12:17 pm
Użytkownik "wonderland" <bartek_grzes@wp.pl> napisał w wiadomości
news:1183618249.719270.209000@m36g2000hse.googlegroups.com...
Witam. Próbował już może ktoś softowego UARTA na atmega8 ?
Quote:
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 :-)
Ściągnij noty aplikacyjne atmela AVR304 i AVR305 tam masz gotowe
rozwiązania - może pomogą.
pozdrawiam
wonderland
Guest
Thu Jul 05, 2007 8:55 pm
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.
wonderland
Guest
Thu Jul 05, 2007 8:58 pm
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.
ELP
Guest
Thu Jul 05, 2007 9:46 pm
Dnia Thu, 05 Jul 2007 21:55:44 +0200, wonderland <bartek_grzes@wp.pl>
napisał:
Quote:
Zastanawiam się mocno czy nie lepiej byłoby jednak wziąć megę 162 z
dwoma UART-ami, ale jak na razie sugerowaną opcją jest atmega8.
No, ale, przecież atmega128 ma dwa UARTy....
Chyba, że czegoś nie rozumiem
ELP
Guest
Thu Jul 05, 2007 9:49 pm
Quote:
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
Adam Dybkowski
Guest
Thu Jul 05, 2007 11:14 pm
Bogdan G pisze:
Quote:
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.
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:
http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.