mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART-Baudrate falsch


Autor: M. M. (mamue110)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab hier ein komisches USART-Problem.
Habe jetzt ermittelt dass die Baudrate um den Faktor 16 höher ist als 
die laut Formel gültige (bei definierten 1200Baud empfange ich die 
Zeichen am PC bei 19200Baud richtig), d.h. UBR_VAL ist um den Faktor 16 
zu niedrig.
Dieser Faktor schreit geradezu nach einem Konfigurationsproblem, jedoch 
konnte ich im Datenblatt nichts auffälliges finden und die Formel ist 
laut Datenbaltt für den asynchronen Betrieb richtig.


Prozessor:  ATMEGA32
Oszillator: Quarz mit 16MHZ
FUSE-Bits: siehe Screenshot
Code:
...
  #define F_CPU 16000000UL
...
#define BAUD 1200UL
#define UBR_VAL ((F_CPU/(16*BAUD))-1)
...
UCSRB|= (1<<RXEN)|(1<<TXEN);
UCSRC|= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UBRRH = UBR_VAL >> 8;
UBRRL = UBR_VAL & 0xFF;


Kann jemand den Fahler entdecken oder mich mit nem Tritt zum richtigen 
Beitrag befördern?

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der erste Fehler, den ich erkenne, ist dass du die |= zu = 
umwandeln solltest. Mit UCSRC |= machste nämlich nen Fehler (du liest 
UBRRH ein und setzt dann zusätzlich in diesem Wert die drei Bits).

Hast du diese Fuse-Bit Ansicht auch erst "geladen"? Also nach dem öffnen 
nen "Read"-Access durchgeführt?

Den richtigen Quarz drin?

Das richtige include für den Prozessor benutzt? Ist im Makefile auch m32 
angegeben?

Autor: M. M. (mamue110)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...|= zu = -> hab ich korrigiert

Fuse-Bits wurden neu geladen, Quarz stimmt schon 
(Funk-AVR-Evaluations-Board von Pollin).

Mit m32 meinst du wahrscheinlich "MCU=atmega32". m32 bewirkt afaik dass 
das ganze in 32bit kompiliert wird.

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Atmega32 ist 8 bittig ! einseinseinself!!!
Das 32 im Namen steht afaik für 32k Flash

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>UBR_VAL ist um den Faktor 16 zu niedrig.

Da könnte man doch glatt vermuten das F_CPU irgendwo auf 1MHz
umdefiniert wird. Irgend welche Warnings beim compilieren?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder ändere die Baudrate mal auf 2400 Baud.
Dann müsste sie bei dir auf 38400 Baud arbeiten.
Oder bewirkt die Änderung evtl. gar nichts?

Autor: M. M. (mamue110)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hab ich wohl den Wald vor lauter Bäumen nicht mehr gesehen.
Ich mach ein #ifndef F_CPU (was ich hier nicht erwähnt habe), binde 
zuvor aber schon die delay.h ein, welche den Wert auf 1mhz setzt....

Danke für die Hilfe!

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.