Forum: Mikrocontroller und Digitale Elektronik 'DDRA' undeclared (first use in this function)


von Basil K. (verbinden)


Lesenswert?

Hallo alle

Ich habe mir eine Hardware aufgestellt mit der ich das Programmieren der 
Schnittstellen übel will. Nun wollte ich mal einen Ausgang setzt damit 
ich sehen kann ob das Programmieren auch wirklich korrekt von statten 
geht.
Jetzt Reklamiert mein Controller aber immer. Er erkennt den Befehl DDRA 
oder auch DDRB nicht.

'DDRA' undeclared (first use in this function)

Dies ist die Fehler Meldung die er raus gibt. Als ich Herrn Google frage 
was das Problem ist, sagte er mir ich soll überprüfen ob ich den Chip 
richtig definiert habe. Dies ist also nicht Fall. Und das <avr/io.h> 
habe ich auch includet.

Weis jemand von euch was ich falsch mache oder eben nicht mache?

Danke und Gruss

von Peter II (Gast)


Lesenswert?

Basil K. schrieb:
> Weis jemand von euch was ich falsch mache oder eben nicht mache?

Hast du den Prozessor als MCU definiert? Arbeitest du mit eine Makefile? 
Welche Umgebung verwendest du?

von Dennis S. (eltio)


Lesenswert?

Was schreibst du denn da für ein Durcheinander?

Welchen Controller nutzt du?
Wie sieht deine Entwicklungsumgebung aus?
Wie sieht dein Quellcode aus?

Dein Controller "reklamiert" gar nichts.. eher eines deiner Programme in 
der benutzten Toolchain (Compiler, Linker).

Gruß
Dennis

von Basil K. (verbinden)


Lesenswert?

Ich Arbeite neuerdings mit dem Atmel Studio 7. Ich benutzte den 
Atxmega128A3U.

Mein Programm (wen man das so nennen kann) sieht momentan vollendender 
Massen aus:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>

#define MCU = AVR_ATXMEGA128A3U
#define F_CPU 4000000UL


int main(void)
{
    DDRA = 0xFF;
    while (1)
    {
    }
}

von Peter II (Gast)


Lesenswert?

Basil K. schrieb:
> Mein Programm (wen man das so nennen kann) sieht momentan vollendender
> Massen aus:

wenn du die CPU erst nach der io.h festlegst bringt das recht wenig.


MCU und F_CPU sollten nicht in einer Quelldatei stehen, das sollte in 
den Projekteinstellungen hinterlegt werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Basil K. schrieb:
> Ich Arbeite neuerdings mit dem Atmel Studio 7. Ich benutzte den
> Atxmega128A3U.

Dann solltest du dir mal im Datenblatt deines Controllers ansehen,
wie die Peripherieblöcke dort aufgebaut sind.

Auch wenn ein Xmega im Kern ein AVR ist, die Peripherie ist völlig
anders als bei den alten AVRs.  Ein „DDRA“ gibt es da einfach mal
nicht.

> #define MCU = AVR_ATXMEGA128A3U

Mit der Programmiersprache C solltest du auch noch ein wenig üben.

Diese Zeile schadet zwar gewiss nichts – aber sie ist auch völlig
nutzlos.

: Bearbeitet durch Moderator
von spess53 (Gast)


Lesenswert?

Hi

>    DDRA = 0xFF;

Ein ATXMega besitzt kein DDRA. Teste mal PORTA.DIR oder PORTA_DIR.

MfG Spess

von Felix A. (madifaxle)


Lesenswert?

Beim XMega sind es:

PORTA.DIR (Richtung)
PORTA.OUT (Ausgabe)
PORTA.IN  (Einlesen)

Dann noch einige Spezialitäten, die ich mittlerweile klasse finde:
PORTA.DIRSET = 0x00110000 (setzt nur Bits 4 und 5, andere bleiben 
gleich)
PORTA.DIRCLR = 0x00110000 (Löscht nur Bits 4 und 5, andere bleiben 
gleich)

Dementsprechend noch für die Ausgabe:
PORTA.OUTSET
PORTA.OUTCLR

von Basil K. (verbinden)


Lesenswert?

Okay ich sehe ein das ich etwas Kopflos in die Sache gegangen bin...
Habe nun das Datenblatt noch mal etwas genauer unter die Lupe genommen, 
und jetzt habe ich erhaus gefunden wie man die I/O`s definiert.

Danke für die Hilfe
Gruss

von Basil K. (verbinden)


Lesenswert?

Ups habe die Seite noch gar nicht Aktualisiert. Ihr habt mir die Lösung 
ja auf dem Silbertablett präsentiert. Merci :**

von spess53 (Gast)


Lesenswert?

Hi

>Habe nun das Datenblatt noch mal etwas genauer unter die Lupe genommen,
>und jetzt habe ich erhaus gefunden wie man die I/O`s definiert.

Das passende A_Manual ist noch weit informativer als das Datenblatt:

http://www.atmel.com/Images/Atmel-8331-8-and-16-bit-AVR-Microcontroller-XMEGA-AU_Manual.pdf

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.