ATMega8 i USART

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:(
Reply to
T.M.F.
Loading thread data ...

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 :/

Reply to
Sebastian Bialy

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:(

Reply to
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:)

Reply to
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.

Reply to
T.M.F.

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

Reply to
grze

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

Reply to
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.

Reply to
T.M.F.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.