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 sopuZałą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