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

ATtiny2313, USART nie odbiera danych, konfiguracja i przerwania RXINT

centipede 09 Lut 2006 11:21 1878 4
REKLAMA
  • #1 2279798
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Witam,
    właśnie budują pewien układ, ale napotkałem problem, z którym nie mogę sobie poradzić. Układ poprawnie wysyła wszystko do komputera przez USART, ale nic nie chce odebrać, nie wiem co jest grane, co robię źle.
    tak inicjuję usart:
    
    		ldi		temp, 0x00
    		out		UBRRH, temp
    		ldi		temp, 12
    		out		UBRRL, temp
    		ldi		temp, (1<<RXCIE)|(1<<RXEN)|(1<<TXEN)
    		out		UCSRB, temp
    		sei
    

    a tak próbuję odbierać:
    
    RXINT:
    		in		rxData, UDR
    		cbi		PORTB, REDDIODE
    		reti
    

    przerwanie podczepione jest w następujący sposób:
    
    .ORG	0x07
    		rjmp	RXINT
    

    poniżej przedstawiam schemat, mikrokontroler chodzi na wewnętrznym oscylatorze 8MHz, prędkość USART jest ustawiona na 38400bps
    Pozdrawiam, proszę o pomoc.
    Załączniki:
    • ATtiny2313, USART nie odbiera danych, konfiguracja i przerwania RXINT samp_elektroda.jpg (51.8 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 2284813
    pepisp
    Poziom 12  
    Posty: 11
    Rozumiem że jeżeli nie ustawiasz żadnych bitów w rejestrze UCSRC to format transmisji to: 8 bitów bez bitu parzystości z jednym bitem stopu i takie są ustawienia transmisji w komputerze?.
    Sama inicjalizacja i obsługa USART wygląda ok. Inna jest kolejność pinów w wtyku RS232 niż podane na schemacie ale ich numeracja jest ok. Czyli jeżeli podłączane są wg. numerów na schemacie a nie rysunku wtyczki na schemacie to też powinno być ok.
    Jeśli możesz to podaj jakiego programu do komunikacji używasz i jakie są ustawienia transmisji.
  • REKLAMA
  • #3 2286245
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    A globalną flagę przerwań odblokowałeś?
  • REKLAMA
  • #4 2286305
    sebastian11
    Poziom 16  
    Posty: 266
    Pomógł: 2
    Ocena: 3
    Witam

    pin RxD powienien być ustawiony jako wejscie w rejestrze

    DDRD.0=0 ustawiony jako wejscie
    i
    PORTD.0 =1 podciagamy do gory

    inicjacja powinna być tak jesli coś u Ciebie jest inaczej sprawdz takie ustawienia

    void port_init(void)
    {
    PORTD = 0x03;
    DDRD = 0x02;
    }

    //UART0 initialize
    // desired baud rate: 9600
    // actual: baud rate:9615 (0,2%)
    void uart0_init(void)
    {
    UCSRB = 0x00; //disable while setting baud rate
    UBRRH = 0x00; //set baud rate upper
    UBRRL = 0x19; //set baud rate lower to jest dla Q=4MHz
    UCSRA = 0x00;
    UCSRC = 0x06;
    UCSRB = 0x98; //enable
    }

    #pragma interrupt_handler uart0_rx_isr:8
    void uart0_rx_isr(void)
    {
    //uart has received a character in UDR
    }

    //call this routine to initialize all peripherals
    void init_devices(void)
    {
    CLI(); //disable all interrupts
    port_init();
    uart0_init();
    MCUCR = 0x00;
    GIMSK = 0x00;
    TIMSK = 0x00;
    SEI(); //re-enable interrupts
    }

    na tłumaczenie wprost do asemblera nie powinno byc kłopotu :)

    pozdrawiam
    Seba
  • #5 2286769
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Wszystko okazało się być ok,
    pozatym, że jedna bramka układu max232 była uszkodzona i cały czas na wejściu uC było logiczne 0. Wymieniłem układ i wszystko działa. Bardzo dziękuję wszystkim za wypowiedzi, zamykam temat.
REKLAMA