www.mikrocontroller.net

Forum: GCC Atmega 128 USART Problem

Autor: Alois (Gast)
Datum:

Ich habe die uart_puts und uart_putc für meinen Atmega128 eingebunden,
wie hier beschrieben:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Die Registernamen habe ich geändert.

Konfiguration auf 9600, 8 Datenbits, 1 Stopbit, No Parity, Asynchronous.

Am PC ist ein Terminal-Programm eingeschaltet, was für den String
("Hallo") aber nur ‹Ë½!…±ÙoHal¶oHal¶ und noch ein paar mehr wirre
Zeichen ausgibt. Außerdem wundert mich, dass die Zeichen ständig
ausgegeben werden, obwohl keine Schleife implementiert ist. Bei 9600
Baud dürfte das doch eigentlich nicht passieren. Woran kann das liegen?

Hier der Code:
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>

#ifndef F_CPU
#define F_CPU 16000000UL
#endif
  
  

int uart_putc(unsigned char c)
{
    while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich */
    {
    }
 
    UDR0 = c;                      /* sende Zeichen */
    return 0;
}
 
 
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}


 
int main(void)
{                                                   // RS232 Buffer

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600
    UCSR0A=0x00;
    UCSR0B=0x18;
    UCSR0C=0x86;
    UBRR0H=0x00;
    UBRR0L=0x67;

   uart_puts("Hallo");
    return 0;

}
Autor: Stefan B. (stefan) Benutzerseite
Datum:

Wohin führt das return in main und was macht der µC dann? Ist der UART
bei diesem return bereits fertig mit dem Senden?

Bist du sicher, dass

    UCSR0A=0x00;
    UCSR0B=0x18;
    UCSR0C=0x86;
    UBRR0H=0x00;
    UBRR0L=0x67;

dem entspricht?

    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600

Üblicherweise arbeitet man hier mit symbolischen Konstanten oder Makros,
um ohne Datenblattstudium schnell auf Plausibilität prüfen zu können.

Wie gross ist der angegebene Baudratenfehler bei 16 MHz und 9600 Baud
(Tabelle im Datenblatt).
Autor: TechInfo (Gast)
Datum:

Hi Stefan,

guter Einwurf, da fehlt die while-Schleife! Werd ich morgen gleich
ausprobieren.

Der Fehler ist glaub ich 0,5%.
Autor: STK300 (Gast)
Datum:

Fehler: -0,15999 %

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net