Forum: Mikrocontroller und Digitale Elektronik XmegaA1 ATAVRSBIN1-Acceleration Sensor


von Deniz S. (denz)


Lesenswert?

Hi,

ich hoffe dass ihr mir helfen könnt.

Derzeit versuche ich mit dem XmegaA1 den Acceleration-Sensor (ATAVRBIN1) 
zum laufen zu bringen, allerdings komme ich nicht sehr weit. Dazu sollte 
ich vielleicht noch erwähnen, dass ich ziemlich unerfahren mit dem 
programmieren von Microcontrollern bin.

Soweit ich dass alles verstanden habe, lässt sich mit ASF die benötigte 
Software soweit zusammen setzten, dass man im main.c "nur noch" seine 
Funktionen aufrufen muss und man sich die Werte von dem Sensor auslesen 
kann.

Derzeit sieht man Code so aus:
1
#include <asf.h>
2
3
int main (void)
4
{
5
    
6
sensor_platform_init();
7
  
8
sensor_t  accel_dev;        // device descriptor 
9
sensor_data_t accel_data;      // acceleration data from device 
10
  
11
//Sensor initialization 
12
13
sensor_attach (&accel_dev, SENSOR_TYPE_ACCELEROMETER, 0, 0); 
14
15
//Sensor read 
16
17
accel_data.scaled = true;      // read values in milli-g 
18
sensor_get_acceleration (&accel_dev, &accel_data); 
19
20
//Use data in application 
21
22
int32_t  app_x_value   = accel_data.axis.x; 
23
int32_t  app_y_value   = accel_data.axis.y; 
24
int32_t  app_z_value   = accel_data.axis.z; 
25
uint32_t app_read_time = accel_data.timestamp; 
26
27
}

Wenn ich dann das ganze Debuggen möchte, erscheinen 4 Error meldungen:
Error  1/2/3/4  lvalue required as unary '&' operand  ...

Die Error Meldungen sehen alle gleich aus nur die Zeilen ändern sich.
Wenn man dan zu der Zeile hinspringt kommt man zum folgenden Code:
1
#ifdef  INCLUDE_AK8975          // AKM 3-axis electronic compass
2
    SENSOR_HAL_DESC (SENSOR_TYPE_COMPASS, ak8975),
ak8975 ist nicht definiert und ist mit schwarzer Schrift.

Was muss ich ändern? Wieso ist der nicht definiert?
Hilfe?!

von mevi (Gast)


Lesenswert?

Welche Studio Version benutzt du denn?
Neueste ist die 6.

Werde in den nächsten Tagen auch etwas mit den beiden Platinen BIN1 und 
BIN2 etwas herumexperimentieren.
Kann dir danach evtl. etwas besser weiterhelfen.

Bis dahin kann ich dir nur empfehlen, im Studio 6, dir folgendes 
anzusehen:

Im Solution Explorer: die Dateistruktur und dabei besonders das config 
Verzeichnis, main.c ruft da zuerst das clock...c auf, in asf.h sind die 
vom ASF benötigten header.h files gelistet.
config_board.h beinhaltet die spezielle Hardwarenutzung.
Das erste board spezielle, von main.c aufgerufene file ist "init.c" mit 
dem header.c, hier ist alles für die definition der pins und board clock 
usw. definiert, da es sich um eine I2C-Schnittstelle handelt, muß auch 
dort die betreffende definition der entsprechenden pins und 
initialisierung stehen

Im ASF Explorer(mein wichtigstes Hilfsmittel): hier findest du alle 
benutzten AFS-Treiber mit einer guten Beschreibung, hier solltest du 
alles nötige herauslesen können, wie Functions und benötigte Parameter.
im conf*.h und *.h findest du auch die entsprechenden Pin Definitionen 
und Bezeichnungen

Bei Atmel kann man sehr gut nach den Datenblattbezeichnungen gehen, sie 
werden fast immer 1 zu 1 übernommen, Konstanten groß geschrieben, 
variablen_namen mit Unterstrichen separiert, Speicher- und Register-Bits 
gemischt.

Bei der Fehleranzeige kann es manchmal schwierig werden, den Fehler 
einzukreisen, da nur ein einziges vergessenes oder nicht definiertes 
symbol schon zig Fehlermeldungen verursachen kann.
Da hilft nur eins, suchen suchen, aber gut zu wissen, erst die 
schwerwiegenden Fehler ansehen, Zeilennummer merken und dort im main.c 
ansehen, dann findet man es in der Regel schnell.

Es ist schon gewaltig, wie viele einzelne Files und Verzeichnisse in nur 
einem kleinen Projekt benötigt werden und es ist nicht ganz einfach, da 
den Überblick zu behalten. Auch mir geht es da noch nicht viel anders, 
da ich eher gewohnt bin in Assembler zu programmieren.

Hoffe immerhin etwas zur weiteren Fehlersuche geholfen zu haben

von mevi (Gast)


Lesenswert?

noch etwas, ohne es jetzt selber weiter nachgeprüft zu haben:

sensor_get_acceleration (&accel_dev, &accel_data);

das scheint schon mal falsch zu sein, denn das ist noch nicht bestimmt.
Damit kann main.c noch nichts anfangen, ist nur der Prototype?
In diese function müssten erst noch die richtigen Parameter eingetragen 
werden.
Bei den beiden Parametern handelt es, so viel ich weiß, nur um 2 Pointer 
variablen, die erst noch bestimmt werden müssen.
Wie schon gesagt, müsste sich dann um GROßSCHREIBUNG oder ZAHLEN als 
Parameter handeln.
Ich kenne aber diese Bezeichningen noch nicht.
Im AFS-Explorer oder dessen Beschreibung, solltest du aber fündig 
werden.

von Denz (Gast)


Lesenswert?

Hi,

vielen Dank für die Antwort. Derzeit benutze ich die aktuelle Version 
6.0 von Atmel Studio. Den ASF explorer hab ich auch schon etwas durch 
gekaut, bin aber leider erfolglos geblieben.

Der Funktionsaufruf: sensor_get_acceleration (&accel_dev, &accel_data);
ist am Anfang des Codes definiert.

eigentlich sollte das Programm so funktionieren...eigentlich....,aber 
soweit meine Fehlersuche verlaufen ist endet es immer bei einer 
Fehldefinition des sensors.

Kann das Programm gerne per email verschicken, um die Fehlersuche 
vielleicht etwas einfacher zu gestalten.

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.