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
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?
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
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) { } }
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.
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
Hi
> DDRA = 0xFF;
Ein ATXMega besitzt kein DDRA. Teste mal PORTA.DIR oder PORTA_DIR.
MfG Spess
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
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
Ups habe die Seite noch gar nicht Aktualisiert. Ihr habt mir die Lösung ja auf dem Silbertablett präsentiert. Merci :**
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.