Atmega <> PC błędy w komunikacji po porcie szeregowym

Apr 22, 2007 5 Replies

Witajcie



Od rana męczę UARTa w atmedze8. Doszedłem już do tego, że coś działa :] Mega robi za echo. To co jej się wyśle przysyła z powrotem, dodatkowo wyświetla otrzymany kod na 8 ledach. Kody odberane przez atmege są poprawne, na diodkach wyświetla się co trzeba. Natomiast zwracane z powrotem wartosci są dziwnie zakłócone... Nie wierzyłem HyperTerminalowi, więc napisałem własny programik, sterujący każdym bitem w ramce. I w kierunku Atmegi wszystko jest OK, natomiast z powrotem pojawia się na najbardziej znaczącej pozycji jedynka, której być nie powinno, i całość się przesuwa o 1 pozycję. Czyli:



10101010 (wysłane z kompa, prawidłowo odebrane i wyświetlone na ledach)
11010101 (odebrane przez kompa).

albo:



00000000 (wysłane z kompa)
10000000 (obebrane na kompie...)

Co to może być?



Szczegóły techniczne: atmega8-16 @ 14,74MHz



4800 baud, 7 bit, brak kontroli parzystości, 1 bit sopu


Załączam program, może coś wyłapiecie:



.include "m8def.inc" .def temp =R16 .org 0x00 rjmp reset .org 0x0b rjmp dane ;usart rx complete reset: ;konfiguracja coma ldi temp,191 ;4800 baud (parametr wyciagniety z datasheeta) out UBRRL,temp clr temp out UBRRH,temp clr temp out UCSRA,temp



ldi temp, (1<<TXEN)|(1<<RXCIE)|(1<<RXEN) out UCSRB,temp ;włączenie tx i rx, przerwania ldi temp,(1<<UCSZ1)|(1<<UCSZ0)|(1<<URSEL) out UCSRC,temp ;8 bit



ldi temp,0b00111111 out DDRC,temp ldi temp,0b00000011 out DDRB,temp ;nie mam calego wolnego portu na diody wic taka rzezbe odstawilem sei main: rjmp main


dane: in temp,UDR c: nop sbis UCSRA,UDRE rjmp c ;ta petelka pilnuje, zeby nadajnik byl gotowy out UDR,temp com temp ;to zeby sie ladnie na diodkach wyswietlalo out PORTC,temp lsr temp lsr temp lsr temp lsr temp lsr temp lsr temp out PORTB,temp reti



Użytkownik "scx" snipped-for-privacy@wu-pe.pe-el> napisał w wiadomości news: snipped-for-privacy@40tude.net...

Hmm :-)

A policzyłeś sobie ile bitów twój ATmega wysyła ? Chyba 7 różni się od 8 ?

Pozdrawiam

Jarek Grolik

Witam. Mialem podobny problem z atthiny2313. Jeżeli nie uzywasz kwarca, a wewnętrzny generator rc to sprawdź napięcie zasilania. Dodaj jakiś elektrolit przed stabilizatorem. Ostatecznie użyj kwarca.

Pozdrawiam Paweł

Użytkownik "Jarosław Grolik" napisał w wiadomości news:f0g3rl$3ec$ snipped-for-privacy@nemesis.news.tpi.pl...

wyglada jak bit parzystosci zawsze 1 lub ustawianie nieparzystosci. H.D.

Ustaw, żeby procesor wysyłał 8 bitów - inaczej po siedmiu wystawiana jest jedynka.

Jarosław Grolik <grolikNO snipped-for-privacy@chemia.uj.edu.pl> napisał(a):

A o ustawieniu wskaźnika stosu , też zapomniałeś ? ;)

Piotrek

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required