PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : avr-gcc, AT90S2313 und UART



enoritz
07.03.2006, 19:18
Hallo,

kann es sein, das der gcc-Compiler irgendwie bei der Berechnung von Werten in der #define-Direktive Probleme macht?

Ich hab versucht das UART einzustellen und da gabs immer Fehler bei der Übertragung:


#define clock 12000000
#define baud_rate 9600
#define ubbr_value ((clock/(16*BAUD))-1)
/* ... */
UBBR = (unsigned char) ubbr_value;
/* ... */

Der Controller arbeitet (wie zu am Code zu sehen) mit einem Takt von 12MHz.
Ich habs mit und ohne Type-Cast versucht, allerdings hats überhaupt nix gebracht.

Also hab ichs mal mit nem Taschenrechner per Hand (nach obiger Gleichung) berechnet und UBBR auf 77 gesetzt. Dann hats Problemlos funktioniert.

Hat von euch schonmal jemand etwas ähnliches bemerkt? Fand ich nämlich etwas merkwürdig.
Ich hab übrigens das letzte Release von Source-Forge geladen...

linux_80
07.03.2006, 19:44
Hallo,
hast Du genau diese Zeilen oben verwendet ?

Wo kommt das BAUD in dieser Gleichung her :
((clock/(16*BAUD))-1)

:-k

enoritz
07.03.2006, 20:58
BAUD ist baud_rate... Ist im Code selber richtig geschrieben ](*,) ](*,)

SprinterSB
08.03.2006, 13:58
Intern wird mit 16 Bit gerechnet, wenn du nix anderes sagst.

UBRR =? (uint8_t) ((uint32_t) F_CPU/...)