logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

komputer-mikrokontroler prze RS

lukaspaw 29 Kwi 2004 00:58 2816 6
REKLAMA
  • #1 617754
    lukaspaw
    Poziom 12  
    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:
    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
    	ret


    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
  • REKLAMA
  • #2 618372
    _MST_
    Poziom 14  
    A nie prościej napisać to w Bascomie?
  • REKLAMA
  • #3 620897
    lukaspaw
    Poziom 12  
    niestety wszystko juz napisałem w asemblerze i zostało mi tylko to
  • REKLAMA
  • #4 621735
    BoskiDialer
    Poziom 34  
    mógłbyś zażucić cały kod oraz typ procesora?
    z obliczeń wiem że kwarc to 11,0592MHz
  • REKLAMA
  • #5 621876
    lukaspaw
    Poziom 12  
    procesor to ATMega 16 a kod jest w pliku.na poczatku inicjalizacja a potem dalej obsługa(ktorej do końca nie jestem pewien bo nie moge jak na razie sprawdzić)
  • #7 622042
    BoskiDialer
    Poziom 34  
    1-brakuje tam dużo linijek kodu (ret) oraz definicji podrpogramów..
    2-nieużywaj polskich fontów w asm
    3-kod nieprzejrzysty, komentarze są w różnyh miejscach...
    
    (...)
    odczytADC: 
    	movw r1:r0,uh:ul	;przepisanie wyników napięcia i pradu do rej by można było 
    	movw r13:r12,ih:il	;porównać czy coś sie zmieniło po kolejnym odczycie
    	call obl_petli	;skok do procedury obliczajacej ilość wykonywanych pętli-co druga petla jest odczyt wartosci ADC
    	cpi r19,12		;podczas 12 i 1 petli bedzie odczytywane ADC (pętle liczone do 20)
    	breq odczyt		;jeśli rowne to odczyt
    	cpi r19,1		;sprawdzenie czy to 1 pętla
    	brne obsł_pot2	;jeśli nie to pomija odczyt z przetwornika
    odczyt:	
    	call przetw_U ;tego niema
    	call przetw_I ;tego równierz niema
    ;------ tu powinno być ret
    ;gwiazdki niewstawiają ret i program leci dalej..
    ;przez wszystkie fragmenty kodu..
    ;**************************************************************
    obsł_pot2:
    	sbis pina,7	;na 5 nast stan niski spow przełacznikiem w lewo
    	call BB ;niema tej funkcji
    	sbis pina,6	;na 4 nastapił stan niski spow przełącznikiem w prawo
    	call AA ;tej tesz
    ; tutaj też brakuje ret
    wysłanieLCD:
    	cpi r19,1
    (...)
    
REKLAMA