Forum: Mikrocontroller und Digitale Elektronik Register einen Wert zuweisen; Arduino Due, SAM3X8E, in Atmel-Studio 7 / lvalue-Assignment


von Matze (Gast)


Lesenswert?

Hallo,

Ich stehe grade auf dem Schlauch... möchte einem Register einen Wert 
zuweisen.

dazu habe ich folgenden Code:
1
#include "sam.h"
2
3
4
int main(void)
5
{
6
    /* Initialize the SAM system */
7
    SystemInit();
8
  PIO_PER_P2 = 0x04000000;  //PIO-Enable
9
  PIO_OER_P2 = 0x04000000;  //Output-Enable
10
  PIO_SODR_P2 = 0x04000000;  //Set Output-Data
11
  PIO_OWER_P2 = 0x04000000;  //Output-Write-Enable
12
    /* Replace with your application code */
13
    while (1) 
14
    {
15
    PIO_SODR_P2 = 0x04000000;  //Set Output-Data
16
    PIO_CODR_P2 = 0x04000000;  //Clear Output-Data-Reg
17
    }
18
}

Problem:
lvalue required as left operand of assignment
--> Bei allen zuweisungen...

Ziel wäre es eine am Pin PortB_26 --> Arduino-Pin22
hängende LED zu schalten...

Stehe grade echt auf dem Schlauch, wäre super wenn mich jemand über den 
scheinbar offensichtlichen Fehler aufklären könnte ;)

von dadie (Gast)


Lesenswert?

Ich denke dir fehlt der Port:
PIOB->PIO_PER = 0x04000000;

Bin aber selber Neuling!

von STM Apprentice (Gast)


Lesenswert?

Matze schrieb:
> Stehe grade echt auf dem Schlauch, wäre super wenn mich jemand über den
> scheinbar offensichtlichen Fehler aufklären könnte ;)

Wenn du mit Atmel Studio unterwegs bist dann nimm mal die
Datei <arduino_due_x.h>, darin sind die für dich relevanten
Defines vorhanden.

Ansonsten hat dir  dadie  bereits auf die "richtige" Art der
Zuweisung hingewiesen.

Beim Due gibt es PIOA...PIOD, aber das wirst du durch Studieren
der Header files (sam3x8e.h) selbst herausfinden.

von Matze (Gast)


Lesenswert?

dadie schrieb:
> Ich denke dir fehlt der Port:
> PIOB->PIO_PER = 0x04000000;
>
> Bin aber selber Neuling!

Vielen Dank :)

Das ist zumindest ein Teil der Lösung, es kann Compiliert werden.
leider kann zeigt die angeschlossene LED jedoch keine Reaktion...
1
#include "sam.h"
2
int main(void)
3
{
4
    /* Initialize the SAM system */
5
    SystemInit();
6
  PIOB->PIO_WPMR = 1;
7
  PIOB->PIO_PER = 0x04000000;  //PIO-Enable
8
  PIOB->PIO_OER = 0x04000000;  //Output-Enable
9
  PIOB->PIO_SODR = 0x04000000;  //Set Output-Data
10
  PIOB->PIO_OWER = 0x04000000;  //Output-Write-Enable
11
    /* Replace with your application code */
12
    while (1) 
13
    {
14
    PIOB->PIO_SODR = 0x04000000;  //Set Output-Data
15
    PIOB->PIO_CODR = 0x04000000;  //Clear Output-Data-Reg
16
    }
17
}

Sind (so ziemlich) meine ersten Gehversuche mit Cortex Controllern.

Wäre super wenn mir noch jemand zu einem ersten "Pinumschalten" 
verhelfen könnte :)

STM Apprentice schrieb:
> Wenn du mit Atmel Studio unterwegs bist dann nimm mal die
> Datei <arduino_due_x.h>, darin sind die für dich relevanten
> Defines vorhanden.

Hört ich interessant an, aber wo bekomm ich die her?
Ich finde hier:
http://asf.atmel.com/docs/latest/sam.drivers.adc.adc_temp_sensor_example.arduino_due_x/html/arduino__due__x_8h.html
nur die Doku zu den Headern...

von STM Apprentice (Gast)


Lesenswert?

Matze schrieb:
> Hört ich interessant an, aber wo bekomm ich die her?

Ist im Atmel Studio dabei.

Hältst du es nicht für notwendig mal selbst danach zu suchen?

Empfehlung: Beginne erst mal mit einem neuen Atmel Studio Projekt
mit Arduino Board als Einstieg. Damit bekommst du sehr viel
fertig vorgesetzt.

von dadie (Gast)


Lesenswert?

Sollte für die Onboard LED funktionieren
1
#include "sam.h"
2
3
4
int main(void)
5
{
6
    /* Initialize the SAM system */
7
    SystemInit();
8
  int Pinnumber= 27;
9
  PIOB->PIO_PER = 0x1 << Pinnumber;
10
  PIOB->PIO_OER = 0x1 << Pinnumber;
11
  PIOB->PIO_SODR= 0x1 << Pinnumber;
12
  int waittime= 1000000;
13
    /* Replace with your application code */
14
    while (1) 
15
    {
16
    PIOB->PIO_SODR=0x1<<Pinnumber;
17
    for (int i=0; i<waittime; i++)
18
    {
19
      
20
    }
21
    PIOB->PIO_CODR=0x1<<Pinnumber;
22
    for (int i=0; i<waittime; i++)
23
    {
24
      
25
    }
26
    }
27
}

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.