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

atmeg8 +uart +problem z tansmisją do kompa.

sebus_1985 03 Wrz 2008 10:28 1666 7
  • #1 5501822
    sebus_1985
    Poziom 11  
    Witam. Mam problem z transmisją do kompa. Przeglądałem forum ale nie moge znaleść odpowiedzi na moje pytanie. Atmega ma wysyłać po rs do kompa znaki ale nic w teminalu sie nie pojawia. Mam ustawioną predkość transmisji na 19200. Kwarc 12MHz.

    kod wygląda tak:
    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <string.h>
    
    #define F_CPU 12000000UL
    
    /*UART*/
    void USART_Transmit_String(char *tekst);
    void USART_Init( unsigned int baud );
    void USART_Transmit( unsigned char data );
    unsigned char USART_Receive( void );
    
    
    int main(void)
    {
    	USART_Init(38);
    	while(1)
    	{
    		USART_Transmit('a');
                                    USART_Transmit(13);			
    	}
    
    }
    void USART_Init( unsigned int baud )
    {
    	UBRRH = (unsigned char)(baud>>8);			/* Set baud rate */
    	UBRRL = (unsigned char)baud;	
    	UCSRB = (1<<RXEN)|(1<<TXEN);		/* Enable Receiver and Transmitter */	
    	UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);	/* Set frame format: 8data, 2stop bit */
    }
    
    void USART_Transmit( unsigned char data )
    {
    while ( !( UCSRA & (1<<UDRE)) );   /* Wait for empty transmit buffer */
    UDR = data;						/* Put data into buffer, sends the data */
    }
    
    unsigned char USART_Receive( void )
    {
    	while ( !(UCSRA & (1<<RXC)) );				/* Wait for data to be received */
    	return UDR;									/* Get and return received data from buffer */
    }


    Może mam coś źle napisane, a jestem troche zielony w tym temacie. Inicjalizacjjie wziąłem z datasheet.
  • #3 5501846
    sebus_1985
    Poziom 11  
    RX w avr do Tx w kompie
    Tx w avr do rx w kompie
    przez konweter napięć ktory działa na 100% bo był sprawdzony na innym układzie.

    Dziwi mnie jeszcze jedna sytuacja. Mianowiecie po zmianie kawru na 4MHz i zmianie baud na 12 układ wysyła ale jakieś śmieci, tzn same xx, albo ox
  • #4 5501857
    kulmar
    Poziom 31  
    sebus_1985 napisał:
    RX w avr do Tx w kompie
    Tx w avr do rx w kompie.


    Port szeregowy w komputerze PC wymaga odpowiednich poziomów sygnałów wejsciowych. Przy połączeniu procesora typu ATMEGA do układu RS w komputerze PC wymagany jest konwerter poziomów, taki ja np. MAX232. Na razie analizowanie Twojego programu nie ma sensu, bo problem jest na poziomie połączenia układu. Poczytaj w internecie o poziomach sygnałów stosowanych w standardzie RS232 i układzie MAX232.

    Pozdrawiam
    Mariusz
  • #5 5501863
    sebus_1985
    Poziom 11  
    Mam podłączony konwerter napięć. działa on napewno, sprawdzony na innym układzie i tam było wszytko ok.

    może problem leży w ustawieniu fusebit?

    Chyba już sobie poradziłem. Odpowiednio ustawiłem fusebity.
  • #6 5708481
    Tomer
    Poziom 15  
    Podepne sie może pod ten temat. Mój problem jest następujący. Projektuje układ do podłączenia atmegi8 z pc. Narazie pracuje nad przesyłaniem danych w strone pc. Do projektowania używam programu proteus i wirtualnego portu com.
    Czy na liniach rs232 powinienem miec odwróconą logikę ? Patrząc na max232 zawiera on w sobie inwerter. Jednak wpinając terminal zauważyłem, że działa on tylko kiedy jest 'normalna', czyli jeżeli wpinam go prosto do atmegi, albo przez com, ale przed max232 daje jeszcze negator. Tyle że wszystkie rozwiązania jakie znalazłem w sieci tego nie mają.
  • #7 5708718
    KWARZ
    Poziom 10  
    [/quote]

    Port szeregowy w komputerze PC wymaga odpowiednich poziomów sygnałów wejsciowych. Przy połączeniu procesora typu ATMEGA do układu RS w komputerze PC wymagany jest konwerter poziomów, taki ja np. MAX232. Na razie analizowanie Twojego programu nie ma sensu, bo problem jest na poziomie połączenia układu. Poczytaj w internecie o poziomach sygnałów stosowanych w standardzie RS232 i układzie MAX232.

    Pozdrawiam
    Mariusz[/quote]\

    Bzdura port w kompie odbierze nawet z poziomami 0-4 volt i to na znaczną odległość. jak dobrze ustawic w avr uart to mozna bezposrednio nadawanie do kompa,
    Podpatrywałeś oscyloskopem wyjsciowy sygnał?
  • #8 5710993
    kasaidolar
    Poziom 19  
    A masz w terminalu ustawione dwa bity stopu?

    
       UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);   /* Set frame format: 8data, 2stop bit */ 
    
REKLAMA