avr - uart działa, ale nie do końca

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Witam,

Taki oto problem się urodził:
Atmega8, taktowana kwarcem 8MHz, wykorzystany sprzętowy uart do  
komunikacji z innym urządzeniem, również z komputerem przez rs232.
Transmisja 115200, 8, N, 1. Wszystko działa gdy wysyłam/odbieram kilka  
(około 6-8) bajtów, przy większych ilościach (np. mam do odebrania przez  
atmegę ciąg 64-bajtowy) pojawiają się bzdury - jakieś 20-30 pierwszych  
bajtów jest poprawne, potem pojawiają się przekłamania, a kolejne takie  
"pakiety" są tylko coraz gorsze.
Wygląda to tak, jakby w trakcie transmisji następowała jakaś  
desynchronizacja, tylko nie wiem co zrobić z tym fantem. Linie tx/rx  
skrócone do minimum (teraz to są przewody na płytce prototypowej o dł.  
2cm każdy). Gdy miałem przez chwilę oscyloskop podglądałem przebiegi -  
wygląda bardzo ładnie, bez żadnych zakłóceń, czasy prawidłowe, ładne  
"ostre" prostokąty. Kombinować z rejestrem OSCCAL?

--  
Pozdrawiam
Jakub Rakus

Re: avr - uart działa, ale nie do końca
On 2012-12-30 21:02, Jakub Rakus wrote:
Quoted text here. Click to load it

8.5% / 3.5% błędu przy tej prędkości i kwarcu 8MHz, czyli najwyższy  
możliwy jaki się tylko dało przy tej prędkości :).

Higher error ratings are acceptable, but the Receiver will have less  
noise resistance when
the error ratings are high, especially for large serial frames

Zerknij sobie w tabelki 53 i 54 w pdfie:

http://www.atmel.com/images/doc2486.pdf

Być może powinieneś zacząć od zmiany kwarcu na jakiś uartowy żeby  
wyeliminować ten problem.

Re: avr - uart działa, ale nie do końca
W dniu 30.12.2012 21:12, Sebastian Biały pisze:

Quoted text here. Click to load it

Oooo, wstyd, patrzyłem na te tabelki, wydawało mi się że te kilka  
procent to nie powinno robić takiego syfu, ale tego zdania o długich  
ramkach jakoś nie doczytałem. To może dużo wyjaśniać, jak dorwę jutro  
jakiś bardziej odpowiedni kwarc to obadam.

--  
Pozdrawiam
Jakub Rakus

Re: avr - uart działa, ale nie d o końca
Quoted text here. Click to load it

Pamiętaj, że pod względem wielkości błędu lepszy kwarc to nie kwarc
szybszy,  
tylko ten, którego częstotliwość ładnie dzieli się przez prędkość  
transmisji. Dlatego bardzo lubię kwarce 3686400 Hz.


--  
Grzegorz Niemirowski
http://www.grzegorz.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: avr - uart działa, ale nie do końca
W dniu 30.12.2012 21:30, Grzegorz Niemirowski pisze:

Quoted text here. Click to load it

Wypróbowałem dzisiaj kwarce 11,0592 i 14,7456. Z tym 11,0592 jest  
tragicznie, prawie same błędy. Przy 14,7456 jest tak samo jak było do  
tej pory, pierwsze kilkanaście bajtów jest w porządku, potem się  
wszystko rozjeżdża.

--  
Pozdrawiam
Jakub Rakus

Re: avr - uart działa, ale nie d o końca
Quoted text here. Click to load it

Więc to nie jest wina kwarca. Sprawdź fusebity, czy ta ATmega z tego kwarca  
w ogóle korzysta. Pokaż też kod odpowiedzialny a UART. Albo go źle  
inicjalizujesz albo źle obsługujesz nadchodzące dane, np. przepełnia Ci się
 
bufor.

--  
Grzegorz Niemirowski
http://www.grzegorz.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: avr - uart działa, ale nie do końca
On 2012-12-31 18:00, Jakub Rakus wrote:
Quoted text here. Click to load it

a) nie zapomniales o masie ?

b) wina softu. robisz przerwania czy w petli?

Re: avr - uart działa, ale nie do końca
W dniu 01.01.2013 13:43, Sebastian Biały pisze:

Quoted text here. Click to load it

Nie. Masy są połączone.

Quoted text here. Click to load it

Całość mam napisane w Bascomie. Program działa tak, że wysyłam z mcu  
jeden bajt (komenda żądania konkretnych danych), a następnie  
kilkadziesiąt razy powtarza się sekwencja: wysłanie bajtu o wartości FF  
na co urządzenie odpowiada mi kolejnym pojedynczym bajtem danych. Całość  
wykonuje się w pętli umieszczonej w pętli głównej programu.
W tzw. międzyczasie mcu obsługuje dwa kanały ADC (obsługa w przerwaniu  
timer0) i zespół wyświetlaczy 7seg (obsługa w przerwaniu timer1 - zespół  
ma swoją "logikę" i wysyła się mu liczbę do wyświetlenia, numer  
wyświetlacza, a potem zatrzaskuje).
Na czas wysyłania uart-em bajtu FF i odbioru bajtu profilaktycznie  
wyłączam przerwania, ale zauważyłem że nie ma to wpływu na komunikację.

--  
Pozdrawiam
Jakub Rakus

Re: avr - uart działa, ale nie do końca
On 2013-01-01 18:48, Jakub Rakus wrote:
Quoted text here. Click to load it

Jak sprawdzasz podczas wyslania, ze wolno już zapisac nowe dane do UDR?  
Czekasz na odbiór i wtedy wysylasz ? Morze podziel sie petla komunikacyjna.

Jak na jakosc wplynie wstawienie opoznienia podczas wysylania pomiedzy  
znakami?

Podczas odczytu sprawdz bity Frame Error i Data OverRun i wystaw na  
jakies ledy w celu upewnienia sie czy to wina hard czy software.

Re: avr - uart działa, ale nie d o końca
no to spróbuj wstawić generator zamiast kwarcu i sprawdź...


Re: avr - uart działa, ale nie do końca
On Sun, 30 Dec 2012 21:12:55 +0100, Sebastian  
Quoted text here. Click to load it

Nigdy z atmega nic nie robilem, tylko PIC, ale nie da się w atmedze  
używać usarta z wew. oscylatorem? To ma być jakieś zegarek, że kwarc  
wymagany?
Dla niektórych to co teraz powiem to herezja, ale ja z picami nigdy  
kwarca nie używałem, a większość urządzeń jakie robilem komunikuja  
się że sobą przez usart (inny mcu, PC, moduly gsm, mcu z usb na wew.  
osc.) i nigdy żadnych problemow (przekłamań) komunikacyjnych nie  
miałem. Ba, nawet kiedys popełniłem moduł komfortu na CANie do  
samochodu kolegi, zaprojektowany owszem z kwarcem, ale rok temu  
potajemnie koledze wyłączylem kwarc w module przełączając mcu na wew.  
oscylator, tak z ciekawości czy będzie coś się działo. I nic, rok już  
jeździ z tym modulem i żadnych problemow nie zauważył (i zima przy  
-20 i latem przy 30) więc, po co komu kwarc? ;)
Nie wierzę, że ten problem z usartem związany jest z kwarcem, no  
chyba ze wlasnie problem w tym, że zostal użyty;).

A tak ja poważnie, to chętnie bym się przyjrzał dyskusji na temat  
zasadnosci stosowania kwarca w projektach  
hobistyczno-polprofesjonalnych.
Nawet sam Microchip w serii J np.18f25j50 podpial wew. oscylator do  
taktowania USB jako jedna z opcji (poprzednie wersje 2550 wymagały  
kwarca, jeśli chciało się użyć usb bo  wew. oscylator nie mógł  
taktowac usb), więc można. I faktycznie w J działa usb bez problemu  
na wew. osc.

--  
Marek

Re: avr - uart działa, ale nie do końca
W dniu 31.12.2012 14:11, Marek pisze:

Quoted text here. Click to load it

Tylko z tego co kojarzę układ "przygotowania" i rozprowadzania sygnału  
zegarowego w PICkach ;) jest trochę inny od tego w AVR - IMHO  
pewniejszy, dokładniejszy i bardziej "elastyczny" dla użytkownika.

--  
Pozdrawiam
Jakub Rakus

Re: avr - uart działa, ale nie do końca
wrote:
Quoted text here. Click to load it
sygnału  
Quoted text here. Click to load it

W datasheetach PICkow w większości przypadków (nie kojarzę w tej  
chwili innych wartości) podawane jest dokładność wew. oscylatora 1%.  
Ale jestem zdziwiony, że atmega  różni się "technologicznie", dotąd i  
atmegi i picki traktowałem jako konkurencyjne procesory: oba tak samo  
dobre.

--  
Marek

Re: avr - uart działa, ale nie do końca
W dniu 2012-12-31 17:57, Marek pisze:
Quoted text here. Click to load it
Tu nie chodzi o dokłądność oscylatora. Chodzi o to, że do taktowania  
UARTu musisz ustawić dzielnik (a w zasadzie wartość startową licznika).  
Ustawić do jego rejestru możesz wszystko z zakresu 0-255, i dla  
niektórych ustawień - nijak nie wychodzi równy podział, bo np wpis 4 = o  
wiele za szybko, a wpis 5 - już znacznie za wolno...


--  
| Bartłomiej Kuźniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org/
We've slightly trimmed the long signature. Click to see the full one.
Re: avr - uart działa, ale nie do końca
Quoted text here. Click to load it
taktowania  
Quoted text here. Click to load it
licznika).

Ale przecież bgr  ze swoimi dzielnikami musi umożliwić prawidłowa  
częstotliwość taktowania dla częstotliwości dla jakich mcu został  
zaprojektowany lub częstości zalecanych. Czy nie wystarczy użyć  
kwarcu na częstotliwość taka dla  jakiej znajdziemy odpowiedni  
dzielnik dla bgr dla oczekiwanej prędkości usarta?

--  
Marek

Re: avr - uart działa, ale nie do końca
W dniu 2012-12-31 18:49, Marek pisze:
Quoted text here. Click to load it
Dla dowolnych? Niestety, ale nie. Dowolna to od 0 do np 16MHz, ale  
dzielnik (licznik) da się tylko dla niektórych par (prędkość bps,kwarc)  
dobrać idealnie, dla niektórych w granicach błędu, a dla niektórych nie  
da się.


Quoted text here. Click to load it
 > znajdziemy odpowiedni dzielnik dla bgr dla oczekiwanej prędkości usarta?
Tak, oczywiście, są kwarce które dają prawie całkowite pokrycie  
wszystkich prędkości. Popatrz w tabelki na stronie:  
http://www.wormfood.net/avrbaudcalc.php
dla 3.6864 Mhz - masz wszystkie prędkości (poza 300 i 600bps) z idealnym  
bps (0% odchyłki)
dla 7.3728 Mhz - to samo, ale odpadają najwolniejsze 300,600 i 1200
dla 11.0592 Mhz - to samo, poza 300,600,1200 i 2400bps
itp.
A dla kwarców równych liczbowo, np 8MHz, jak się ktoś uprze je  
zastosować, to też może sobie znaleźć taką prędkość usartu, by to  
działało prawidłowo (by rozjazd był poniże 1%) - np dla tego naszego z  
wątku 8MHZ (oraz 8MHz z wewnętrznego oscylatora, gdy kwarcu nie ma) -  
bez problemu chodzi na 2400-19200bps oraz na 38400bps, 28800 i 57600 to  
loteria (>2%błędu), a reszta odpada.


--  
| Bartłomiej Kuźniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org/
We've slightly trimmed the long signature. Click to see the full one.
Re: avr - uart działa, ale nie do końca
Quoted text here. Click to load it
bps,kwarc)  
Quoted text here. Click to load it
nie  
Quoted text here. Click to load it

Oczywiście ze nie dla dowolnych, po prostu nie rozumiem czemu po  
prostu nie użyć kwarcu dla którego uzyska sie oczekiwana prędkość  
usarta z jak najmniejsza stopa błędów.

--  
Marek

Re: avr - uart działa, ale nie do końca
W dniu 2013-01-03 09:32, Marek pisze:
Quoted text here. Click to load it
Też nie rozumiem upartego stosowania np 8MHz, skoro 7.3728 da niewiele  
wolniejszego procka, i zero problemów z komunikacjami.

--  
| Bartłomiej Kuźniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org/
We've slightly trimmed the long signature. Click to see the full one.
Re: avr - uart działa, ale nie do końca
W dniu 2013-01-03 11:46, BartekK pisze:
Quoted text here. Click to load it

Może potrzebuje jakiejś okrągłej wartości przy przerwaniu z timera.

--  
pozdrawiam
MD

Re: avr - uart działa, ale nie do końca
Quoted text here. Click to load it
niewiele  
Quoted text here. Click to load it

A kto broni użyć  takiego kwarca? BTW ja nigdy nie miałem żadnych  
problemow z usartem przy osc. wew 8Mhz w pickach (fosc 32/4), o  
tabeli % stopy błędów w dokumentacji producenta przypomniałem sobie  
podczas tej dyskusji, nigdy na to nie zwracałem uwagi, pewnie  
dlatego, ze uznałem to za jedynie ciekawostkę przyrodnicza :-)

--  
Marek

Site Timeline