mikrocontroller.net

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


Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmeil schrieb:
> welche Headerdatei gehört zu einem ATmega644 - P20, wenn man den USART
> benutzen möchte?
#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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmeil schrieb:
> UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion,

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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:
18.11.5  UBRRnL and UBRRnH – USART Baud Rate Registers
oder in der Registerliste am Ende des Datenblattes:
(0xC5)UBRR0H ...
(0xC4)UBRR0L ...

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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?
 UCSR0C |=  (1<<UCSZ01) |(1<<UCSZ00) ;  // Asynchr 8N1 ???

Gruß
Alexander

Autor: Stefan Ernst (sternst)
Datum:

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

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

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.