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

[atmega16][C] Problem z UARTEM

czeladzian 21 Kwi 2010 00:13 1143 5
REKLAMA
  • #1 7985538
    czeladzian
    Poziom 11  
    Witam wszystkich. Chciałem napisać program który odbierze znak po rs232 i go odeśle. Kod pochodzi z datasheeta atmegi16. Port w komputerze jest dobrze skonfigurowany. Do komunikacji używam terminala v1.8. Atmega niestety nie odpowiada.
    
    #include <avr/io.h>
    
    
    #define F_CPU 8000000L // zegar w Hz
    #define RS_BAUD 4800
    #define RS_UBRR F_CPU / 16 / RS_BAUD - 1
     
    void USART_Init( unsigned int ubrr)
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(ubrr>>8);
    UBRRL = (unsigned char)ubrr;
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL)|(1 << UCSZ0) | (1 << UCSZ1);
    }
    
    void USART_Transmit( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Put data into buffer, sends the data */
    UDR = data;
    }
    
    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }
    
    
    void USART_STRING(const char *s )
    {
    	while (*s) 
    		USART_Transmit(*s++);
    }
    
    
    int main(void)
    {
    	uint8_t c;
     
    	USART_Init(RS_UBRR);
     
    	USART_STRING("ATMega16 UART test\r\n");
    	USART_STRING("mikrokontroler.info\r\n");
     
    	while(1)
    	{
    		c = USART_Receive();
    		USART_Transmit(c);
    	}
    }

    Czy ktoś ma jakieś sugestie?
  • REKLAMA
  • Pomocny post
    #2 7985544
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 7985559
    czeladzian
    Poziom 11  
    Nie nic :/
  • REKLAMA
  • Pomocny post
    #4 7985606
    rpal
    Poziom 27  
    kodu nie analizowałem ale proponuję sprawdzić czy kolega ma w ogóle poprawnie wykonane połaczenia. Masz tam pewnie wsadzony jakiś max232 jeśli zewrzesz jego wyjście z wejściem od strony atmeg-i musisz otrzymac echo na pc-cie kiedy będziesz z ręki wklepywal znaki. Jeśli echa nie będzie masz jak w banku złe podłaczenie między pc-tem a max 232.
  • REKLAMA
  • Pomocny post
    #5 7985873
    elonica
    Poziom 12  
    Witam,
    Ustawiłeś fuse bity na zegar wewnętrzny 8 Mhz ? Na pewno taktujesz z tą częstotliwością ?

    The device is shipped with CKSEL = “0001” and SUT = “10”. The default clock source setting is therefore the 1 MHz
  • #6 7985879
    czeladzian
    Poziom 11  
    Wszystko już działa :). rpal miał racje wina była po stronie sprzętowej. Dziękuje wszystkim za pomoc.
REKLAMA