Announcement

Collapse
No announcement yet.

Problem mit UART

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new 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
    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

    Comment


    • #3
      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

      Comment


      • #4
        War zuhause, komischerweise gibt es ttyACM0 bei mir auch nicht, aber das versuch ich einmal im Labor, vl gehts dort. Danke

        Comment


        • #5
          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, 19:50.

          Comment


          • #6
            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, 10:04.

            Comment

            Working...
            X