panowie chce polaczyć zasilacz (sterowany mikrokontrolerem ATMega) z komputerem przez złacze RS232. działałby na zasadzie wysylania z komputera odpowiednich kodów w ASCII a mikrokontroler by sobie je odpowiednio dekodował i ustawiał według tego napiecie czy prąd ew. wysyłał aktualne wartości na komputer. tyle że nie do końca rozumiem sposob obsługi tego łącza w mikrokontrolerze (a szczegolnie nie jestem pewien sposobu adresowaia między rej. UBRRH i UCSRC).rozpoczałem od:
i właśnie załączając ukałd on mi sie po pierwszej petli zawiesza (bez obsługi RS wszystko dziala bez problemu, po jej dodaniu do pętli zatrzymuje się)-gdzies staje a do RS nic nie wysyłam zaciski sa nie podłaczone i teraz nie jestem do końca pewien czy te procedury sprawdzania błedow FE i DOR są prawidłowe-one powinny wykrywać błędy w nadawanej informacji a skoro skoczył do procedury obsługi RS to powinien cos przyjąc a tam nic na razie nie ma-piny RS-a są nie podłaczone. i teraz nie wiem czy nie działa sprawdzanie tych błedow (FE i DOR) czy może coś źle robie już przy inicjalizacji RS-a. jeśli ktoś ma jakies doswiadczenie z komunikacja szeregową to proszę o pomoc.
Przeniesiono z Programowanie Ogólne. - arnoldziq
inicjacjaUSART: ;inicjacja USART
ldi temp,0b00000000
out UBRRH, temp ;załadowanie do UBRRH zera-adresowanie UBRRH
ldi temp,0b01000111
out UBRRL, temp ;zaladowanie do UBRRL baud=71 co daje f_clk/16(UBRR+1)=9600bodów
ldi temp,0
out UCSRA, temp ;transfer normalny(/16)
ldi temp,0b00011000
out UCSRB, temp ;zał odbiornika i nadajnika USART
ldi temp,0b10000110
out UCSRC,temp ;załadowanie do UCSRC(pierwsza"1"),tryb asynchroniczny transmisja 8-bit
clr rs232
;układ bedzie mial przyjmować komendy i wysyłać wiec załaczyłem nadajnik i odbiornik-niestety nie wiem czy mozna razem czy kazdy z osobnaczy mozna razem, ale próbowalem i osobno i to co jest poniżej i nie działało
;poźniej znajduje sie petla programu i w niej sprawdzenie RS:
USART: ;obsługa RS232-w momencie przyjecia danej z RS powinna ustawić sie flaga, więc:
sbic UCSRA,RXC ;skocz o 2 jeśli bit wyzerowany, jeśli ustawiony to znaczy-USARt przyjął daną
call przyj_danych ; skok do procedury obsługi danej
clr rs232 ;po wyjściu z procedury zeruje rejestr-potrzebny jako flagowy w procedurze
;reszta petli
;najpierw sprawdza czy nie wystapia błędy, w razie czego powinbien wychodzić z procedury,
przyj_danych: ;ustawienie RXC oznacza przyjecie do UDR danej po odczycie RXC zeruje się
clr temp
sbic ucsra,FE ;jeśli bit wyzerowany(ustawiany gdy błąd ramki) to skok o 2
rjmp błąd_usart ;jeśli był ustawiony to skok do końca
sbic ucsra,dor ;sprawdza czy nie ma błędu nadpisania
rjmp błąd_usart ;jeśli jest to wyjście z procedury
;przejscie tutaj oznacza że nie ma żadnych błedów w przesyle
sbrc rs232,7 ;przeskocz o 2 jeśli bit7 w rs232 jest zerowany-oznacza że nie dotyczy pradu
rjmp prąd ;jeśli bit był ustawiony to dojdzie tu i skok
;i tak dalej-reszta to procedura obróbki przyjętej prawidłowo danej-po jej odpowiednim przeliczeniu następuje powrot do pętli
błąd_usart: ;gdy tu doszło to oznacza że wystapił po drodze błąd i zeruje
clr rs232 ;wszystkie rejestry odpowiedzialne za komunikacje RS232
clr r5
clr r6
clr r7
clr r8
clr r9
reti właśnie załączając ukałd on mi sie po pierwszej petli zawiesza (bez obsługi RS wszystko dziala bez problemu, po jej dodaniu do pętli zatrzymuje się)-gdzies staje a do RS nic nie wysyłam zaciski sa nie podłaczone i teraz nie jestem do końca pewien czy te procedury sprawdzania błedow FE i DOR są prawidłowe-one powinny wykrywać błędy w nadawanej informacji a skoro skoczył do procedury obsługi RS to powinien cos przyjąc a tam nic na razie nie ma-piny RS-a są nie podłaczone. i teraz nie wiem czy nie działa sprawdzanie tych błedow (FE i DOR) czy może coś źle robie już przy inicjalizacji RS-a. jeśli ktoś ma jakies doswiadczenie z komunikacja szeregową to proszę o pomoc.
Przeniesiono z Programowanie Ogólne. - arnoldziq