Forum: Compiler & IDEs Headerdatei für USART / ATMEGA644 gesucht


von Alexander S. (knut740)


Lesenswert?

Hallo,

welche Headerdatei gehört zu einem ATmega644 - P20, wenn man den USART
benutzen möchte? Im Manual steht leider nur von den part specific header 
files.

Die Initialisierung funktioniert nicht, weil schon
UBRRH1 / UBRRL1
(wie es es im Manual steht, im Forum fand ich auch die Bezeichnung
UBRR1H / UBRR1L)
vom Compiler als undeklariert zurückgewiesen wird.

Ich habe also mit der Suchfunktion im Verzeichnis WINAVR20100110 nach
UBRRH1 bzw. UBRR1H gesucht und nichts gefunden.
UBRRH würde ich finden - in Dateien mit iom..., allerdings nicht in 
einer, die iom644 heißt.
Dann habe ich nach uart /usart.h gesucht - nichts (außer an abseitiger 
Stelle uart).

In WinAVR scheint diese Headerdatei (noch?) nicht enthalten sein. Muß 
man sich die Headerdatei aus irgendwelchen anderen Quellen besorgen oder 
alles selbst definieren?

mfg
Alexander

von Hc Z. (mizch)


Lesenswert?

Nach Definitionen für den zweiten UART wirst Du beim 644 lange suchen 
können.  Den hat nur der 644*P*.  Kleiner Buchstabe, große Wirkung.

von Stefan E. (sternst)


Lesenswert?

Alexander Schmeil schrieb:
> welche Headerdatei gehört zu einem ATmega644 - P20, wenn man den USART
> benutzen möchte?
1
#include <avr/io.h>

Alexander Schmeil schrieb:
> Die Initialisierung funktioniert nicht, weil schon
> UBRRH1 / UBRRL1
> (wie es es im Manual steht, im Forum fand ich auch die Bezeichnung
> UBRR1H / UBRR1L)
> vom Compiler als undeklariert zurückgewiesen wird.

Benutze die Bezeichnungen, wie sie im Datenblatt stehen. Wenn es dann 
Fehler gibt, hast du wahrscheinlich beim Compilieren nicht den richtigen 
µC-Typ angegeben.

von Hc Z. (mizch)


Lesenswert?

Hc Zimmerer schrieb:
> Nach Definitionen für den zweiten UART wirst Du beim 644 lange suchen
> können.  Den hat nur der 644*P*.  Kleiner Buchstabe, große Wirkung.

Kleiner Nachtrag:  Dass nach dem Bindestrich ein P steht, macht aus dem 
644 keinen 644P.  Dieses P bezeichnet nur die Gehäuseform.

von Alexander S. (knut740)


Lesenswert?

Stefan Ernst schrieb:
> Benutze die Bezeichnungen, wie sie im Datenblatt stehen. Wenn es dann
> Fehler gibt, hast du wahrscheinlich beim Compilieren nicht den richtigen
> µC-Typ angegeben.


<avr/io.h> ist vorhanden,
UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion,
und in makefile steht
# MCU name
MCU = atmega644.

auf dem µP ist aufgedruckt
ATMEGA644
20PU
0842
(egal, wo das P ist, ich brauche nur einen UART).

Leider funktioniert es nicht.

von Justus S. (jussa)


Lesenswert?

Alexander Schmeil schrieb:
> UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion,

was laut datenblatt aber UBRR0H und UBRR0L heißen müsste...

von Peter D. (peda)


Lesenswert?


von Stefan E. (sternst)


Lesenswert?

Alexander Schmeil schrieb:
> UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion

Die Register heißen UBRR0H und UBRR0L. Die Datenblätter sind leider oft 
nicht konsistent in Bezug auf die Bezeichnungen in den Beispielen oder 
dem Fließtext. Entscheidend sind die Bezeichnungen bei der Beschreibung 
der Register:
1
18.11.5  UBRRnL and UBRRnH – USART Baud Rate Registers
oder in der Registerliste am Ende des Datenblattes:
1
(0xC5)UBRR0H ...
2
(0xC4)UBRR0L ...

von Alexander S. (knut740)


Lesenswert?

Stefan Ernst schrieb:
> oder in der Registerliste am Ende des Datenblattes:(0xC5)UBRR0H ...
> (0xC4)UBRR0L ...

Ich habe es geändert - und die anderen Registerbezeichnungen auch und 
nun mault der Compiler nicht mehr.

Es mußte ein Programm, das auf dem ATMEGA16 lief, auf einen ATMEGA644 
übertragen werden. Leider haben sich dabei manche Register- u. 
BitBezeichnungen geändert.
Außerdem mußte ich feststellen, daß mein Manual nicht konsistent ist 
(Mischung von ATmega644 und ATmega644P; ist inzwischen behoben)

Ist denn wenigstens mein Versuch,
die Übertragung auf asynchr. 8N1 einzustellen, gelungen?
1
 UCSR0C |=  (1<<UCSZ01) |(1<<UCSZ00) ;  // Asynchr 8N1 ???

Gruß
Alexander

von Stefan E. (sternst)


Lesenswert?

Alexander Schmeil schrieb:
> Ist denn wenigstens mein Versuch,
> die Übertragung auf asynchr. 8N1 einzustellen, gelungen?
1
>  UCSR0C |=  (1<<UCSZ01) |(1<<UCSZ00) ;  // Asynchr 8N1 ???

Ja. Ist aber andererseits auch komplett überflüssig. "Async 8N1" ist der 
Default-Inhalt des Registers.

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.