mikrocontroller.net

Forum: Compiler & IDEs UART mit ATMEGA8535 Problem


Autor: Christoph G. (booty3009)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich habe mit dem programmieren von Mikrocontrollern erst vor kurzem 
angefangen, doch
jetzt habe ich ein Problem. Ich benutze zum Programmieren das STK500 und 
den Mikrocontroller
ATMEGA8535.
Mit dem unten stehenden Programm möchte ich, den Buchstaben x über rs232 
an den PC senden, doch da
kommt nix an. Könnt Ihr mir anhand des Programmes sagen was ich falsch 
mache.
Danke!




#include <stdint.h>
#include <avr/io.h>




#ifndef F_CPU
#define F_CPU           4000000
#endif
#define UART_BAUD_RATE 9600



UBRR = F_CPU / (UART_BAUD_RATE * 16L) - 1;




int main(void)
{
UCSRB |= (1<<TXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0);


while (!(UCSRA & (1<<UDRE)));
UDR = 'x';
return 0;
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UBRR = F_CPU / (UART_BAUD_RATE * 16L) - 1;
Das geht so nicht. Das UBRR kann (zumindest beim Mega8535) nicht als 
ganzes angesprochen werden. UBRRH und UBRRL müssen getrennt geschrieben 
werden, weil die Register im I/O-Space nicht hintereinander liegen.

Abgesehen davon:
Läuft der µC auch wirklich mit den angegebenen 4 MHz? (Fusebits richtig 
gesetzt?)

Autor: Christoph G. (booty3009)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort!
Wie muss dann das Programm aussehen, wenn ich das ändere?
Der Controller läuft mit 1MHz, mein Fehler.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define UART_BAUD_RATE 9600

#define BAUD (F_CPU / (UART_BAUD_RATE * 16L) - 1)

int main(void)
{
UCSRB |= (1<<TXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0);

UBRRH = BAUD >> 8;
UBRRL = BAUD;

//...usw...
}

BTW:
Zuweisungen an Register und Variablen sind nur innerhalb von 
Funktionen erlaubt. Das was Du oben versucht hast, müsste eigentlich 
mindestens zwei Fehlermeldungen beim Compilieren verursacht haben!

Autor: Christoph G. (booty3009)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke nochmal, hat alles funktioniert!

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.