Forum: Mikrocontroller und Digitale Elektronik Anfänger mit Problemen im AVR GCC-Tutorial


von Andreas K. (totem)


Lesenswert?

Sodale, erst mal ein herzliches "Grüß Gott" an das Forum.

Seit einer Woche habe ich die Aufgabe, mich in das Thema µControler 
einzuarbeiten. Nachdem ich es bei diesem Kaltstart hinbekommen habe, das 
Bord zu "bedienen", und mit den Beispielprogrammen zu beschreiben kommt 
jetzt das Übel des Erstellens eigenen Codes.
Neben diversen Online-Tutorials (u.a. auch die auf der ATMEL-HP) und 
Forums-Leserei verzweifle ich langsam, da ich trotz C-Kenntnissen nicht 
mal die einfachsten Befehle zum Laufen bekomme.
Hier unser Equipment:

HW: STK600 mit ATMEGA2560 Karte, JTAGICE MKII
SW: AVR Studio5

Nun das konkrete Problem:
Bereits das AVR-GCC Tutorial hier auf der Homepage, Punkt 6, 
Einführungsbeispiel kann ich nicht umsetzen.
*****************************************************
#include <avr/io.h>          // (1)

int main (void) {            // (2)

   DDRB  = 0xFF;             // (3)
   PORTB = 0x03;             // (4)

   while(1) {                // (5)
     /* "leere" Schleife*/   // (6)
   }                         // (7)

   /* wird nie erreicht */
   return 0;                 // (8)
}
*****************************************************
Also eigentlich Easy-Pisi, aber sowohl für (3) als auch für (4) bekomme 
ich beim Compilen Fehlermeldungen. "DDRB undeclared (first use in this 
function)" und "incompatible types when assigning to type PORT_t from 
type int". In den Beispielprogrammen, die ich mir angesehen habe, wird 
der Befehl DDRx auch benutzt und funktioniert, möchte ich den Befehl 
jedoch in einem leeren Projekt umsetzen, gibt es Fehler. Genutzte 
Drivers: IOPORT, UTILITY, GPIO, Includes (aus Verzweiflung):
#include <asf.h>
#include <stk600/rc064x/stk600_rc064x.h>
#include <avr/io.h>
#include <gpio.h>
#include <asf/common/utils/interrupt.h>
#include <asf.h>
#include <config/conf_board.h>
#include <stdio.h>

Meine Frage:
Kann mir jemand erklären, woran die Nicht-Nutzbarkeit der Befehle liegt?
Gibt es für µC-Noobs geeignete Tutorials, die auch auf solche 
Fragestellungen eingehen?


Mein Ziel ist erst mal die High-down-Schaltung einzelner Pins. Zuerst 
durch Tastendruck, dann bei Spannungsabfall durch Unterbrechung einer 
Lichtschranke. Doch auch mit dem Befehl gpio_set_pin_high/low gibts 
Probleme. Keine Fehlermeldungen, jedoch keine Reaktion auf dem Board....

Das war jetzt viel Text, für Unterstützung wäre ich aber sehr dankbar!
P.S.: Übrigens auch für Tipps, die das Einarbeiten erleichtern... :)

Beste Grüße

Andreas

von Bernd S. (bernd_s)


Lesenswert?

Hi,

vielleicht liegt dein Problem in AVRSTudio 5?

Die meisten Tutorials dürften mit AVRStudio 4 + winavr gemacht worden 
sein....

von Daniel V. (danvet)


Lesenswert?

Das vermute ich auch, denn avr/io.h müsste für die Registerzugriffe 
reichen, siehe auch:
http://de.wikibooks.org/wiki/C-Programmierung_mit_AVR-GCC/_Register

von Dietrich L. (dietrichl)


Lesenswert?

Ist bei dem Projekt auch der richtige Prozessor angegeben bzw. wird der 
auch unterstützt?

Gruß Dietrich

von Oliver (Gast)


Lesenswert?

Andreas König schrieb:
> DDRB undeclared (first use in this
> function)

sagt dir, daß der Compiler mit DDRB nix anfangen kann. Das wird über 
avr/io.h definiert. Entweder findet der Compiler io.h nicht (dann sollte 
es dazu aber eine Fehlermeldung geben), oder du hast keinen oder auch 
einen ungültigen mmu-Typ eingestellt.

Ob Studio 4 oder 5, ist egal, da steckt überall der gleiche Compiler 
dahinter.

Oliver

von Andreas K. (totem)


Lesenswert?

Ok, jetzt wird's das erste Mal peinlich.
Beim Nachschlagen des Devices taucht da ein ATxmega256A3 statt des 
ATmega2560 auf...
Bei den Beispielprojekten war das korrekte gewählt.

Vielen Dank für die Idee!

Kann es sein, dass dann die Verwendung von Studio5 nicht so 
empfehlenswert ist? Wenn ich ein normales leeres Projekt starte, dann 
kann ich keine Driver hinzufügen - ist anscheinend ein bekannter Bug. 
Unter den ATMEL BOARDS ist nur das STK600 mit 2 ATxmega-Chips aufgeführt 
- das 2560 fehlt. Bleibt als letzte Möglichkeit unter AVR Studio5 nur, 
ein Beispielprogramm zu laden, zu leeren / modifizieren und dann zu 
nutzen?

Beste Grüße

Andreas

von Andreas K. (totem)


Lesenswert?

Jetzt muss ich aber gleich noch einmal einhaken:

Ist das ok, dass ich weder unter einem geladenen Example-Projet, noch 
unter einem neuen "leeren" Projekt dann Drivers hinzufügen kann?
Ist diese Option für ATMEGA2560 generell nicht verfügbar?

von Bernd S. (bernd_s)


Lesenswert?

AVRStudio 5 ist halt noch relativ neu. Das könnte ein Grund sein, warum 
das noch nicht so viele (mich eingeschlossen) ausprobiert haben.

von Andreas K. (totem)


Lesenswert?

Hallo Bernd,

ja das scheint mir auch so, zumal die Stimmen zu Ver5 eher skeptisch 
sind...
Danke soweit für die Unterstützung, nur zum Thema "Drivers" bräuchte ich 
noch Hilfe. Gibt es Quellen, wo ich mich einlesen kann?

Guten Start in die Woche!

von Karl H. (kbuchegg)


Lesenswert?

Mir ist nicht klar, was du mit Drivers meinst?

(Hab ein bischen recherchiert, da ich auch die Ver5 noch nicht 
verwende). Kann es sein, dass du Device meinst, aber Driver sagst?

von Andreas K. (totem)


Lesenswert?

Also auf mein Vokabular will ich noch nicht schwören...
Aber im Tutorial auf der ATMEL-HP wird für die Verwendung der GPIO-IO 
Befehle bei einem xplain-Board unter AVR Studio 5 im Menü "Project" der 
Punkt "Select Drivers from ASF" ausgewählt. Dort stehen mehrere Drivers 
zur Auswahl, um eben beispielsweise spezielle Counterfunktionen oder 
GPIO-Funktionen erst nutzen zu können. Meine ersten Erfahrungen waren 
die, dass ich die entsprechenden .h Files erst nach Einbinden der 
Treiber einbinden konnte. Ansonsten war "File not Found" zu sehen.

Wenn ich in meinem Fall das "korrekte" Board Mega2560 auswähle, ist 
diese Option im Menü jedoch grau hinterlegt. Am Anfang gab es bei 
Studio5 wohl Bugs, die das sporadisch verursachten. Wähle ich bspw. den 
(falschen) xMega256A3, kann ich nämlich Treiber auswählen. Vielleicht 
kann/braucht aber der mega2560 gar keine Drivers...

Ich bin da aus dem Stadium der Verwirrung noch nicht ganz raus, sorry.

von Daniel V. (danvet)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Mir ist nicht klar, was du mit Drivers meinst?
>
> (Hab ein bischen recherchiert, da ich auch die Ver5 noch nicht
> verwende). Kann es sein, dass du Device meinst, aber Driver sagst?

Ich hab die Version5 auch nicht, aber es scheint so etwas zu sein wie 
beim DAvE von Infineon...???

von Daniel V. (danvet)


Lesenswert?

Andreas König schrieb:

> Dort stehen mehrere Drivers
> zur Auswahl, um eben beispielsweise spezielle Counterfunktionen oder
> GPIO-Funktionen erst nutzen zu können. Meine ersten Erfahrungen waren
> die, dass ich die entsprechenden .h Files erst nach Einbinden der
> Treiber einbinden konnte. Ansonsten war "File not Found" zu sehen.
>
> Ich bin da aus dem Stadium der Verwirrung noch nicht ganz raus, sorry.

Um spezielle Funktionen eines Controllers zu nutzen brauchst du bestimmt 
keine Drivers. Allerhöchstens erleichtern die dir die Verwendung (oder 
tragen zur Verwirrung bei :-) ). Mal schön das UserManual lesen und die 
Verwendung der GPIOs verstehen. Dann geht das auch ohne Drivers.

von Karl H. (kbuchegg)


Lesenswert?

Der Mega2560 ist doch ein ganz normaler Mega (nicht aber der XMega). 
D.h. die Tutorials hier
AVR-Tutorial
AVR-GCC-Tutorial
sind vollinhaltlich sinngemäss anwendbar.

Wozu brauchst du da Device-Driver?

von Andreas K. (totem)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wozu brauchst du da Device-Driver?

:D Du greifst damit meine Frage: "Was ist ein Device-Driver und was 
macht der" auf :D

Ich habe eben noch keine Ahnung was das so genau ist. Bis dato sind 
meine C-Projekte immer nur von Verschiedenen eingebundenen .h-Files 
abhöngig gewesen. µCs sind für mich neu, Driver deshalb auch...

von Daniel V. (danvet)


Lesenswert?

Andreas König schrieb:
> Karl Heinz Buchegger schrieb:
>> Wozu brauchst du da Device-Driver?
>
> :D Du greifst damit meine Frage: "Was ist ein Device-Driver und was
> macht der" auf :D
>
> Ich habe eben noch keine Ahnung was das so genau ist. Bis dato sind
> meine C-Projekte immer nur von Verschiedenen eingebundenen .h-Files
> abhöngig gewesen. µCs sind für mich neu, Driver deshalb auch...

meinst du sowas:
http://asf.atmel.com/docs/latest/

µCs sind für mich nicht neu, Drivers aber schon. Du kannst µC 
programmieren ohne Drivers.

von Andreas K. (totem)


Lesenswert?

Ja benau das meinte ich. Wenn ich weiß, dass das ein Feature anderer 
Controller ist, reicht mir das jetzt vollkommen aus. Dann kann ich die 
Drivers erst mal vernachlässigen!
Danke!

von Karl H. (kbuchegg)


Lesenswert?

Andreas König schrieb:
> Karl Heinz Buchegger schrieb:
>> Wozu brauchst du da Device-Driver?
>
> :D Du greifst damit meine Frage: "Was ist ein Device-Driver und was
> macht der" auf :D

Soweit ich das verstanden habe, ist das einfach nur eine Sammlung von 
Funktionen, mit denen man Standardaufgaben einfach erledigen kann. Dies 
deshalb, weil bei einem XMega die Dinge nicht mehr so einfach sind wie 
bei den Megas.

Aber ob du jetzt eine Funktion richtig aufrufst, die dir an einem I/O 
Port die gewünschten Pins auf Ausgang stellst, oder ob du (auf einem 
Mega) einfach die Konfiguration ans DDRx Register zuweißt, ist doch 
gehupft wie gesprungen. Die Konfiguration einer UART ist bei einem 
normalen Mage ziemlich straight forward: Baudrate ins richtige Register 
schreiben und in einem anderen Register das Bit für "Transmitter ein" 
setzen und schon läuft der UART. Das mag beim XMega nicht mehr ganz so 
einfach sein und dann ist es schon gut, wenn man eine Funktionssammlung 
hat, die einem das abnimmt.

Was natürlich bei solchen Drivern toll ist: Man entkoppelt damit das 
Programm besser von der aktuellen Hardware. Denn der Aufruf ist dann bei 
allen Prozessoren (theoretisch) immer gleich, unabhängig davon was dann 
tatsächlich zu tun ist.

> meine C-Projekte immer nur von Verschiedenen eingebundenen .h-Files
> abhöngig gewesen. µCs sind für mich neu, Driver deshalb auch...

Persönlich denke ich, du gehst da jetzt in die falsche Richtung. 
#include avr/io.h und wenn der Prozessor im Projekt richtig eingestellt 
ist, hast du damit fürs erste alles verfügbar, was du brauchst.
So einen Mega zu programmieren ist keine große Hexerei, die man ohne 
Untertützung durch vorgefertigte Funktionen nicht hinkriegen würde.

von Andreas K. (totem)


Lesenswert?

Das beruhigt mich! Vielen Dank für die Unterstützung!!!

von Daniel V. (danvet)


Lesenswert?

Andreas König schrieb:
> Ja benau das meinte ich. Wenn ich weiß, dass das ein Feature anderer
> Controller ist, reicht mir das jetzt vollkommen aus. Dann kann ich die
> Drivers erst mal vernachlässigen!
> Danke!

Das hängt nicht vom Controller ab! Es liegt daran, dass diese Frameworks 
erstmal jemand zusammenstellen muss und in die Entwicklungsumgebung 
integrieren muss. Da aber verschiedene Controller sich in ihren 
Porbelegungen unterscheiden passt eben nicht jede Funktion für jeden 
Controller. Du kannst sicherlich auch XMegas ohne Driver programmieren. 
Wenn welche da sind, heißt das aber nicht, dass damit alle Funktionen 
dieses Controllers ausgeschöpft sind.

Das AVR-Tutorial ist da sicherlich ein guter Einstieg.

Edit: uups, ich war zu langsam

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.