-         

Ergebnis 1 bis 5 von 5

Thema: USART baud-problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43

    USART baud-problem

    Anzeige

    Guten Tag,
    ich habe noch recht wenig Erfahrung mit µcs. Nun habe ich ein Problem mit der Baudrate. Ich verwende einen ATmega8 und wollte eigendlich mit einer Frequenz von 8 Mhz und einer Baudrate von 9600 über den USART senden. Doch bei 8 Mhz kommt nur Schrott an. Wenn ich es aber auf 1 Mhz laufen lasse funktioniert es gut.

    Da ich in C programmiere beziehe ich den UBRR-Wert über die Include-Datei "setbaud.h".
    Code:
    #define F_CPU 1000000 // bzw. 8Mhz
    #define BAUD 9600
    #include <util/setbaud.h>
    
    void usart_init(void)   
    {
       UBRRH = UBRRH_VALUE;
       UBRRL = UBRRL_VALUE;
       #if USE_2X
       #warning "U2X wird genutzt"
       UCSRA |= (1 << U2X);
       #else
       UCSRA &= ~(1 << U2X);
       #endif
       UCSRB |= (1<<TXEN);  // UART TX einschalten
       UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1
    }
    Aber laut den Rechnungen die ich auf "www.mikrocontroller.net" gefunden habe habe ich bei 8 Mhz eine geringere Abweichung (unter 1%) als bei 1 Mhz (über 1%). Es wird bei 1 Mhz auch der U2X-Modus genutzt.

    Nun Frage ich mich natürlich was da Falsch läuft. Ich stelle natürlich auch immer den intern Takt um, wenn ich die Frequenz im Code ändere.

    Ps.: Da ich gelesen habe, dass es in den meisten Fällen um Hardware Probleme geht, wenn es zum USART kommt, habe ich den Post einfach mal hier gemacht.

    Vielen Dank,
    Flo

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Hallo Flo!
    ... 8 Mhz und einer Baudrate von 9600 ... kommt nur Schrott ... auf 1 Mhz ... gut ...
    Ich interpretiere mal aus Deinen Angaben, dass Du ohne Quarz fährst, mit dem internen Prozessortakt. Der weicht erfahrungsgemäß deutlich vom genau(er)en Quarztakt ab, sodass Deine fehlerhaften Ergebnisse schon erstmal einen glaubhaften Hintergrund haben. Es kommt aber auch auf das Übertragungsverfahren an - ich fahre bis in die Gegend von 600MBd (<= die MBd sind schlichte Kilobaud) mit nem 20 MHz-Quarz mit einem Ringspeicher und interruptgetriebener UART-Routine.

    Vermutung: mach nen Quarz dran (mit entsprechenden Kondensatoren und Fusebits), dann wirds gehen. Besonders sinnvoll sind spezielle Quarze mit "krummen" Frequenzen, die Vielfache der Übertragungsraten sind . . .

    Nachtrag: mit Megabaud, siehe oben, sind natürlich die tausendmal langsameren Kilobaud gemeint - sorry.
    Geändert von oberallgeier (13.10.2013 um 14:55 Uhr) Grund: Übertreibung richtig gestellt
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der Mega8 nutzt bei 1 MHz bzw. 8 MHz einen anderen internen Oszillator (neuere Chips wie Mega88 haben nur einen Teiler). Da kann der 8 MHz Oszillator mehr daneben lieben als der interne 1 MHz Takt, auch zusammen mit dem Rundungsfehler. Für einen zuverlässige UART sollte man einen Quarz benutzen, oder wenigstens den Oszillator bei der genutzten Spannung abgleichen.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43
    Danke für eure Antworten,
    ich hab jetzt erst mal ein 8 Mhz Quarz drann gemacht und es läuft einwandfrei.
    Ich werde gleich morgen noch ein Baudratenquarz kaufen gehen.

    Vielen Danke
    Flo

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    ... ich hab jetzt erst mal ein 8 Mhz Quarz drann gemacht und es läuft einwandfrei ...
    Schön dass Du Erfolg hattest - und das trotz meiner übertriebenen Angabe von oben (da meinte ich mit "über 600MBd" nämlich die taustendmal langsamere Rate von Kilobaud :.-./ ).
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. ATxmega128 USART Problem
    Von Wsk8 im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 26.11.2012, 13:37
  2. USART Problem
    Von kremsy im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 19.05.2012, 17:14
  3. USART - Atmega8 Problem...
    Von Just_Indes im Forum C - Programmierung (GCC u.a.)
    Antworten: 14
    Letzter Beitrag: 17.04.2010, 22:56
  4. ATMega32 USART Problem
    Von dEx82 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 18.07.2009, 17:08
  5. UART Problem 115200 Baud
    Von Peter_M im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 25.04.2007, 20:50

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •