Results 1 to 6 of 6

Thread: Problem mit UART

  1. #1
    Principal
    Join Date
    Jan 2010
    Posts
    34
    Thanks
    15
    Thanked 8 Times in 5 Posts

    Problem mit UART

    Ich versuche gerade UART zu initialisieren um anschließend Zeichen zu senden. Leider erhalte ich am PC im GtkTerm nichts.
    Der Code schaut momentan so aus:

    Code:
    #define F_CPU       (16000000UL)
    #define BAUD		(9600UL)
    #define UBRR_VAL	(F_CPU / (16 * BAUD)-1)
    
    
    #include <avr/io.h>
    
    
    void uart_init(void)
    {
    	UBRR0H = UBRR_VAL >> 8;
    	UBRR0L = UBRR_VAL;
    
    
    	UCSR0B |= (1<<TXEN0)|(1<<RXEN0);
    	UCSR0C |= (1<<UCSZ01) | (1<<UCSZ01);
    }
    
    
    int main(void)
    {
    	uart_init();
    
    
        while(1)
        {
            while ( !( UCSR0A & (1<<UDRE0)) );
    	
    		UDR0 = 'a';
        }
    
    
    	return 0;
    }
    Also eingestellt ist eine Baudrate von 9600 und der Modus 8N1. Dasselbe ist auch im GtkTerm eingestellt, ich habe auch alle ttyS-Ports aufprobiert. Müssen am Board auch irgendwelche Switches aktiviert werden? Wo kann der Fehler liegen?

    Danke im voraus!

  2. #2
    Dipl.Ing
    Join Date
    Apr 2009
    Location
    Meidling
    Posts
    1,179
    Thanks
    34
    Thanked 151 Times in 120 Posts
    Quote Originally Posted by cs3000 View Post
    Also eingestellt ist eine Baudrate von 9600 und der Modus 8N1. Dasselbe ist auch im GtkTerm eingestellt, ich habe auch alle ttyS-Ports aufprobiert. Müssen am Board auch irgendwelche Switches aktiviert werden? Wo kann der Fehler liegen?

    Danke im voraus!
    Zuhause oder im Lab? Wenn zuhause mit dem USB2Serial ist es wohl ttyACM0!
    Am Board musst du die Switches RX-A und TX-A oder wie die jetzt genau heissen aktivieren!
    (sollte in der UART Aufgabe beschrieben sein, falls nicht reklamieren, bin grad auf Kurzurlaub)

    Im übrigen gibts da ne coole Tabelle wo übliche Baudraten für bestimmte CPU Takte mit Fehlerraten angegeben sind.
    (will nur darauf aufmerksam machen)

    Thomas
    Mathematiger

  3. #3
    Principal
    Join Date
    Oct 2009
    Posts
    30
    Thanks
    7
    Thanked 1 Time in 1 Post
    es gibt auch ein macro in der avrlibc dafür, doku beginnt bei seite 334 im manual

    #include <util/setbaud.h>

    die switches sind PE0/PE1 vom SW13

  4. #4
    Principal
    Join Date
    Jan 2010
    Posts
    34
    Thanks
    15
    Thanked 8 Times in 5 Posts
    War zuhause, komischerweise gibt es ttyACM0 bei mir auch nicht, aber das versuch ich einmal im Labor, vl gehts dort. Danke

  5. #5
    Principal
    Join Date
    Oct 2009
    Posts
    30
    Thanks
    7
    Thanked 1 Time in 1 Post
    probier mal ttyUSB0, das funktioniert bei mir mit CuteCom

    Edit: also mit gtkterm und dem usb2serial am laptop (expresscard usb3 anschluss, am einzig verbliebenen internen usb hängt das board dran)
    funktioniert es bestens
    Last edited by pUnk; 05-04-2012 at 19:50.

  6. #6
    Baccalaureus
    Join Date
    Dec 2009
    Location
    Vienna/Oberwart (Burgenland)
    Posts
    771
    Thanks
    45
    Thanked 28 Times in 21 Posts
    Ist Busy-Waiting wie im Code oben verwendet eigentlich erlaubt oder müssen wir für den UART Interrupts verwenden?

    EDIT: Hab das Ganze jetzt auch mal mit 1 Stopbit und 9600 Baud ausprogrammiert. Merkwürdigerweise funktionierts mit USART0 und bei USART 3 nicht (gleicher Code, nur bei allen Registern 3 statt 0 - gtkterm zeigt nichts an)... Woran kann das liegen?
    Last edited by Abschreiber; 10-04-2012 at 10:04.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •