Wlasnie mecze sie od dwoch dni z portem szeregowym w tym procku. Taktuje go 12MHz, kwarc. Przy 9600 wysylam cyklicznie znaki AA, co ktorys (co 3 lub 4) przychodza smieci zamiast AA. Zmniejszylem predkosc do 1200bodow, jest moze lepiej, bo juz tylko srednio co 8 to smieci. Na wewnetrznym oscylatorze RC 8MHz ten sam problem. Wczesniej bawilem sie
90S2313 na 8MHz i nigdy mi sie nie zdarzaly bledy transmisji. Co ciekawe jesli wysylam znak po znaku (taki burst) to bledow jest praktycznie 100%, jak wysylam co sekunde to tylko 10-15%. Z obliczen wychodzi mi, ze przy 12MHz blad nie przekracza 0,1%, a wiec powinien byc swietnie tolerowany przez USART. Pomozcie, bo rece mi opadaja z tym prockiem:(
Didn't find your answer? Ask the community — no account required.
A
Artur Starz
Witam.. z 1200 bodów bedzies na pewno mial bledy - UART tak nisko nie zejdzie z kwarcem 12MHz po 9600 powinno bez problemów hulac.. Sprawdz czy na pewno wszystkio w porzadku z kwarcem, maxem232 itp. Duzo robie na mega8 i z rs'em raczej nie ma problemów
Pozdrawiam Artur Starz
S
Sebastian Bialy
Program napisany dla 2313 po kompilacji pod ATmega8 i kosmetycznych zmianach - ruszył u mnie od razu poprawnie. Więc raczej nie szukałbym błędu w sofcie, jesli jesteś pewny swoich umiejętności na 2313.
Co do problemów - jako że miałem kiedyś podobne (zbyt wolna transmisja powodowała błędy) to zapytam o MAX232 - czy jestes pewny poprawnego wlutowania kondensatorów do niego ? To najczęstsze źródło błędów. Pomierz nogi tego procka, względem masy powinieneś uzyskać coś w granicach +8V i -8V na niektorych.
U mnie powodem była raz odłaczenie się masy w kabelku - działało tylko kiedy wysyłane było dużo 0 a nie 1 ;) Cholerstwo trudne w diagnozie. Innym razem wsadziem odwrotnie elektrolit i max nie miał pełnego napięcia - efektem było że przechodziło pare znaków a potem mogiła - błędy i cisza. Przy wyzszych transmisjach wszystko było ok (!). I następny dzień stracony w poszukiwaniu błędu w sofcie :/
T
T.M.F.
Przekopiowalem oryginalne procedury inicjalizacji portu i transmisji z pdfa do ATMega8. Sprawdzilem na debuggerze, 100x rzucilem okiem i wszystko jest ok:( Brak pomyslow.
MAX jest na osobnej plytce, po podlaczeniu 90S2313 wszystko dziala. Na stosownych nogach maxa napiecie +/-9V.
Nie wiem, wszystko sprawdzone:(
T
T.M.F.
Zejdzie - laduje mu 623, 2 do UBRRH i 112 do UBRRL. Ale na 9600 ten sam problem.
Z kwarcem chyba tak, bo w koncu ATMega na nim dziala. Nie mam niestety mozliwosci zmierzenia Fosc, moze tu jest problem? Ale przy kwarcu czestotliwosc nie moze przeciez za bardzo odbiegac od nominalnej...
Szczesciarz:)
R
Robercik
U¿ytkownik "T.M.F." snipped-for-privacy@nospam.mp.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@hermes.wizzard...
moze nie zgadzaja sie bity stopu/parzystosci? Jezeli wysyla za duzo bitow to poprostu dane sie "rozjezdzaja"... pozdrawiam
T
T.M.F.
Chyba MAX232 odszedl do krainy wiecznych scalakow. Uzylem go z procem, ktory wczesniej nie dawal bledow i tragedia:( Wali blad za bledem.
G
grze
Uzytkownik "T.M.F." snipped-for-privacy@nospam.mp.pl> napisal w wiadomosci news: snipped-for-privacy@hermes.wizzard... (...)
Ja ostatnio tez pracuje na mega8 i nie mam zadnych poroblemow (dzialam na
115200)
Zapodaj moze ten progra na liste, moze jednak nie wszystko jest OK... Jak nie masz juz pomyslow to moze trzeba siegnac po oscyloskop i macnac co wychodzi na UART i na MAX
T
T.M.F.
Ponizej program. Co ciekawe praktycznie ten sam program dzialal na
90S2313, z tym, ze teraz po podlaczeniu do Max ktorego uzywalem z ATMega nie dziala:( Wiec podejrzenie padlo na maxa - z tym, ze w odpowiednich punktach napiecia sa takie jak podaja w pdfie. Co ciekawe program oprocz wysylania bzdur ma jeszcze jedna ciekawostke. A mianowicie po resecie zgodnie z oczekiwaniem czeka na znak z RS i do chwili otrzymania go nic nie wysyla. Ale wystarczy wyslac jeden znak i koniec, juz bez czekania wysyla w kolko rozne bzdury. A oscyloskopu nie mam:(
RESET: ; Initialize stack pointer LDI R16,high(RAMEND) ; Main program start OUT SPH,R16 ; Set stack pointer to top of RAM LDI R16,low(RAMEND) OUT SPL,R16 ; Initialize watchdog LDI R16, (1<<WDCE)|(1<<WDE) OUT WDTCR, R16 ; Turn off WDT LDI R16, (0<<WDE) OUT WDTCR, R16 ;Initialize RS232(485) port - now obsolete LDI R16,2 ; Set baud rate to 1200bps (12 MHz clock) OUT UBRRH, R16 LDI R16,111 OUT UBRRL, R16 LDI R16, (1<<RXEN)|(1<<TXEN) ; Enable receiver and transmitter OUT UCSRB,R16 LDI R16, (1<<URSEL)|(3<<UCSZ0) ; Set frame format: 8data, 1stop bit OUT UCSRC,R16 LOOP: rcall RSReceiveData rcall RSSendData RJMP LOOP
; Wysyła na RS dane z R16 RSSendData: sbis UCSRA,UDRE rjmp RSSendData ; Wait for empty buffer out UDR,r16 ; Send data ret
;Odbiera dane z rs do R16 RSReceiveData: sbis UCSRA, RXC rjmp RSReceiveData ;Wait for data in r16,UDR ret
G
grze
Przegladalem ponizej watek "ATmega8 + USART/UART" kolegi Mes z 19-03-2005
20:55 Przyszlo mi do glowy ze moze u ciebie tez nie jest ustawiony Fusebit na oscylator zewnetrzny. Nowki ustawione sa na wewnetrzny RC 1MHz. Ty i tak ustawiles baaardzo maly Boudrate wiec jak procek chodzi 12x wolniej to ... (sam wiesz). Ja uzywam do programowania programowania z BASCOMA AVR - STK200/300. Tam sa lepiej opisane Fuse Bity
Co do programu to wyglada OK. Mam zastrzezenia do petli programu, a dokladnie do zachowania sie programu. Widze ze procek stoi w miejscu poki nie otrzyma bajtu na UART i to co otrzmal powinien wyslac i znowu czekac az cos do niego przyjdzie. A jak cos dalej wysyla to znaczy ze cos otrzymuje, wiec moze komp wysyla ECHO tego co on z kolei odebral :-) - ale zakrecilem :))) Sprobuj odpiac kabel w czasie zapetlenia sie progranu i po ponownym podpieciu zobacz czy sie uspokoilo. Ja bym dodal jeszcze machanie noga w procedurze wysylania. To bedziesz widzial jak podepniesz LED czy on dalej cos wysyla sam z siebie (bez poloaczenia z PC). .
T
T.M.F.
Nie, ustawialem go na wewnetrzny RC 8MHz, zewnetrzny kwarc 12MHz, to samo.
Uszkodzony max232. Ten sam program na innym procku, z innym maxem dziala ok.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.