Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Baudrateregister


von Julian K. (fragenkinsey)


Lesenswert?

Guten Abend Community,

ich habe hier ein Problem vorliegen, welches ich mir nicht erklären 
kann.

Ich arbeite mit Atmel Studio 6.1.

Ich möchte den USART initialisieren.

Wenn ich in das Datenblatt sehe, dann steht darin, dass ich die beiden 
Register UBRRHn und UBRRLn benutzen soll, wenn ich einfach nur USART 
initialisieren möchte.

Wenn ich aber USART MSPIM benutzen will, soll ich das Register UBRRnL 
und UBRRnH gebrauchen.

Ihr seht also den Unterschied - UBRRHn zu UBRRnH und analog dazu das 
BBRL.

Wenn ich aber UBRRHn und UBRRLn ( mit n=1) festlege, dann leuchtet es 
nicht lila auf. Das Atmel Studio erkennt UBRRHn und UBRRLn nicht als 
Register an. Wenn ich dagegen UBRRnH und UBRRnL ( mit n=1) schreibe, 
dann leuchtet es lila auf und somit erkennt das Atmel Studio die 
Register UBRRnH und UBBRnL an. Das wäre genug, wenn ich USART im MSPIM 
Modus betreiben wollte. Stattdessen möchte ich es aber im einfachen 
USART Modus betreiben.

Hatte jmd. von euch schon mal dieses Problem bzw. hat jmd. dafür eine 
Erklärung?

FG
fragenkinsey

von Wolfgang (Gast)


Lesenswert?

Julian Kinsey schrieb:
> Ich möchte den USART initialisieren.

Wessen USART?

von spess53 (Gast)


Lesenswert?

Hi

>Ich möchte den USART initialisieren.

Welcher Controller?

MfG Spess

von Julian K. (fragenkinsey)


Lesenswert?

Den AT90USB1287

Hier der Link zum uC.
http://www.atmel.com/Images/doc7593.pdf

Die Angaben zum einfachen USART stehen auf den Seiten 177 bis 201

Danach folgen die Angaben zum USART im MSPIM.

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich aber UBRRHn und UBRRLn ( mit n=1) festlege,

Da der Controller nur eine USART hat ist das USART0. Eine USART1 gibt es 
nicht.

MfG Spess

von Julian K. (fragenkinsey)


Lesenswert?

Hallo Spess,

deine Antwort ist logisch. Allerdings behebt es nicht mein Problem. 
Selbst wenn ich UBRRH0 und UBRRL0 oder einfach nur UBRRH und UBRRL 
schreibe, ändert sich nichts an dem Problem.

Hier mal mein Auszug aus dem Quellcode

>        // Festlegen Baudrate
>
>   UCSR1C |= (1<<UMSEL10) | (1<<UMSEL11); // überflüssig
>
>   UBRRH0 = (UBRRH_VALUE) ;
>   UBRRL0 = (UBRRL_VALUE) ;
>
>
>
>  UCSR1B = (1<<TXEN1); // Sendenfunktion aktiviert
>
>  // Einstellung des Formats der übertragenen Daten
>
>  UCSR1C = (1<<USBS1); // zwei Stopbits
>
>
>  UCSR1B = (1<< UCSZ12);  //  9 Datenbits
>
>  UCSR1C = (1<< UCSZ11) | (1<< UCSZ10);    //2 Stoppbits

von MWS (Gast)


Lesenswert?

Mit ein ganz klein wenig Assoziatiosvermögen würde man sich Gedanken 
machen, wofür die 1 überall steht, z.B. in UCSR1C.

von spess53 (Gast)


Lesenswert?

Hi

>deine Antwort ist logisch. Allerdings behebt es nicht mein Problem.
>Selbst wenn ich UBRRH0 und UBRRL0 oder einfach nur UBRRH und UBRRL
>schreibe, ändert sich nichts an dem Problem.

Vergiss meine Aussage. Bei dem Controller geht die Zählung anscheinend 
wirklich mit 1 los.

Aber sieh erst mal in der Hilfe zum zum Simulator unter Known Issues 
nach, in wie weit der Controller/USART unterstützt wird.

MfG Spess

von Julian K. (fragenkinsey)


Lesenswert?

Hallo

@Spess: ich habe mal ins "Register Summary" einen Blick geworfen. Dort 
gibt es nur das

UBRR1H und das UBRR1L.

Deshalb gehe ich davon aus, dass der eine Beispielcode für die USART 
Initialisierung etwas ungenau ist.

Ich nehme jetzt als einfach UBBR1H und UBRR1L. Danke für dein Engagement

@MWS:

ich fasse das mal als Hinweis auf, den ich noch verstehen werde.

Schönen Abend euch allen
fragenkinsey

Nachtrag: @ Spess: deinen Ratschlag werde ich befolgen

: Bearbeitet durch User
von MWS (Gast)


Lesenswert?

Julian Kinsey schrieb:
> ich fasse das mal als Hinweis auf, den ich noch verstehen werde.

Die Zahl gibt bei mehreren gleichen internen Funktionseinheiten die 
jeweilige Einheit an, d.h. UBRR1.. gehört zu UCSR1...

Normalerweise geht's bei 0 los, aber wenn man sich nicht schlüssig ist, 
dann sieht man in der Register Summary gegen Ende des DBs nach, eine 
Suche nach UBRR führt dann unmittelbar zum Ergebnis.

von Julian K. (fragenkinsey)


Lesenswert?

@MWS: Wenn du nur das meintest, kann ich beruhigt sein. Mein 
Assoziationsvermögen braucht sich nicht zu verstecken :-)

@ Spess:

spess53 schrieb:
> um Simulator unter Known Issues
> nach

Ist das eine Funktion im Atmel Studio? Wenn du diese Frage bejahst, dann 
suche ich einfach noch Mal gründlicher.

Danke

von Wolfgang (Gast)


Lesenswert?

MWS schrieb:
> Normalerweise geht's bei 0 los, aber wenn man sich nicht schlüssig ist,
> dann sieht man in der Register Summary gegen Ende des DBs nach, eine
> Suche nach UBRR führt dann unmittelbar zum Ergebnis.

Hier ist ausnahmsweise das Datenblatt die falsche Informationsquelle. 
Einzig relevant ist die für den Prozessor vorhandene Header-Datei. Die 
sollte mit dem DB übereinstimmen, muss sie aber nicht.

von spess53 (Gast)


Lesenswert?

Hi

>Ist das eine Funktion im Atmel Studio? Wenn du diese Frage bejahst, dann
>suche ich einfach noch Mal gründlicher.

Selbsverständlich ist die Hilfe eine Funktion des ATMel Studios.

Und dort steht unter:

Help -> View Help -> Simulator -> Known issues in Simulator -> General 
issues

AT90CAN*/ATmega*C*, AT90USB*/ATmega*U*, AT90PWM*, and ATtiny87/167 
devices will never be supported by simulator models, for these devices 
the 8-bit instruction set simulator will have to be used.

Bisher habe ich noch keinen AVR-Simulator erlebt, der die Hardware 
komplett und korrekt abbildet. Gehe mal in deinem Fall auch davon aus.

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.