Forum: Mikrocontroller und Digitale Elektronik arduino uno board mehrere ausgänge gleichzeitig


von Christian H. (chris_hei)


Lesenswert?

Hallo Leute,

Ich habe mir für mein Projekt ein arduino uno board geholt.
Ich muss 8 leds als lauflicht, 1 led als schwerlich, 1 led
Als Blitzlicht realisieren und das alles gleichzeitig. Jetzt
Meine Frage ist das überhaupt möglich und wenn ja wie
weil alles getrennt funktioniert aber nicht zusammen,
ich weiß auch daß das mit delay() nicht klappt. Hat
Jemand irgendwie eine Idee, danke im voraus.

von Klaus W. (mfgkw)


Lesenswert?

Meine Idee ist, in das Tutorial zu schauben, sihe Links links oben.
Z.B. 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interruptgesteuerter_Programmablauf

von PittyJ (Gast)


Lesenswert?

Der Arduino Uno hat genug Digitalausgänge. Evtl muss man einen Treiber 
dazwischen schalten, falls die LED mehr Strom zieht.

Programmieren sollte man schon können. Dann geht auch alles 
gleichzeitig.
Timer-Interrupts sind möglich. Darauf aufbauend eine (mehrere) State 
Machines. Damit sollte es zu schaffen sein.

Die Frage ist mehr, wie z.B. das Blitzlicht gesteuert wird. Gibt es da 
noch Inputs / Ereignisse von aussen?

von F. F. (foldi)


Lesenswert?

Die Frage ist ja schon mal, wie gleichzeitig soll es sein?
Wenn du in Arduino programmierst, da kann man sicher auch einen ganzen 
Port ansprechen, steht aber in den Büchern die bei so einem Kit dabei 
sind, nicht dabei.
Du kannst die Teile auch in C programmieren und sogar die IDE.
Wenn du anfängst, dann doch gleich in C.
Dazu kann ich dir ein wirklich gutes Buch empfehlen: AVR - 
Mikrocontroller-Kochbuch, von Franzis.
Dazu kaufst du dir noch von Helmut Erlenkötter  das " C Programmieren 
von Anfang an" und du bist gut gerüstet.
Benutze ruhig die Arduino IDE, denn schon nach sehr kurzer Zeit wirst du 
sowieso das Atmel Studio benutzen und deine Hardware selbst bsuen.

Wenn ich dich nicht überzeugen kann, dann frag mal meine hochgeschätzen 
Freund "cyblord", der bekehrt dich ganz sicher. :-)

von Quack (Gast)


Lesenswert?

F. Fo schrieb:
> Wenn ich dich nicht überzeugen kann, dann frag mal meine hochgeschätzen
> Freund "cyblord", der bekehrt dich ganz sicher. :-)

Da seine Vorschlaege genauso wenig zur Loesung beitragen, wie deine, 
wird das wohl nichts werden.

Das "Problem" laesst sich ohne Timer mit 3 klitzekleinen Statemachines 
loesen und ueber die Systemzeit getaktet werden. Einfach mal die 3 
Anforderungen einzeln implementieren, danach nachdenken, wie man die 
zusammen bekommen koennte.

Aber dafuer haette man wahrscheinlich im Unterricht aufpassen muessen. 
Aber hier hat es genuegend Hausaufgabenhelfer, die dem OT bestimmt die 
Arbeit abnehmen.

von Peter D. (peda)


Lesenswert?

Christian H. schrieb:
> ich weiß auch daß das mit delay() nicht klappt.

Kann man so generell nicht sagen.
Was nicht geht ist, daß jede Task ihre eigenen Delays macht.

Man kann aber einfach in der Mainloop ein 10ms Delay machen und danach 
alle zeitgesteuerten Tasks aufrufen. Und diese zählen dann einfach in 
10ms Schritten einen Zähler und machen ihr Ding, wenn der Zähler den 
gewünschten Wert erreicht hat, also die gewünschte Zeit verstrichen ist.

von lehrer specht (Gast)


Lesenswert?

Christian H. schrieb:
> Ich muss 8 leds als lauflicht, 1 led als schwerlich, 1 led
> Als Blitzlicht realisieren und das alles gleichzeitig.

Wer sagt das? Dein Lehrer? Nix für ungut, aber Hausaufgaben werden hier 
nicht gelöst....
Hier im Board gibt es genügend Tutorials. Also, selbst ist der Mann :-)

von F. F. (foldi)


Lesenswert?

Quack schrieb:

>
> Da seine Vorschlaege genauso wenig zur Loesung beitragen, wie deine,
> wird das wohl nichts werden.
>
> Das "Problem" laesst sich ohne Timer mit 3 klitzekleinen Statemachines
> loesen und ueber die Systemzeit getaktet werden.

> Aber dafuer haette man wahrscheinlich im Unterricht aufpassen muessen.
> Aber hier hat es genuegend Hausaufgabenhelfer, die dem OT bestimmt die
> Arbeit abnehmen.

Bei dem "Problem" hilft es sicher nicht und hätte er schon ein Arduino 
Buch durchgearbeitet, würde er dieses "Problem" hier jetzt nicht posten, 
denn das steht es schon nach wenigen Seiten drin, wie man so was macht.
Genau weil ich daraus schließe, dass er noch ganz am Anfang steht, 
wollte ich ihm einen besseren Weg aufzeigen.
Er kann natürlich auch irgend ein fertiges Arduino Script nehmen und 
sich zurecht biegen. Doch aus meiner Sicht führt das in eine Sackgasse.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Hier mal das Prinzip für parallele zeitgesteuerte Tasks:
1
#define  F_CPU   1e6             // 1MHz
2
#include <util/delay.h>
3
#include "sbit.h"
4
5
#define LED0    PORT_B0
6
#define LED0_oe DDR_B0
7
#define LED1    PORT_B1
8
#define LED1_oe DDR_B1
9
10
void statemachine0()
11
{
12
  static int state = 0;
13
14
  switch( ++state ){
15
    case 150: LED0 = 1;
16
              break;
17
    case 300: LED0 = 0;
18
              state = 0;
19
              break;
20
  }
21
}
22
23
void statemachine1()
24
{
25
  static int state = 0;
26
27
  switch( ++state ){
28
    case 400: LED1 = 1;
29
              break;
30
    case 800: LED1 = 0;
31
              state = 0;
32
              break;
33
  }
34
}
35
36
int main()
37
{
38
  LED0_oe = 1;                  // output
39
  LED1_oe = 1;                  // output
40
  for(;;){
41
    _delay_us( 1000 );          // 1ms time base
42
43
    statemachine0();
44
    statemachine1();
45
  }
46
}

von amateur (Gast)


Lesenswert?

Die C't hacks hatte mal so einen 'Multithread fürs Arduino'-Artikel:
https://www.heise.de/artikel-archiv/ch/2013/04/152_Multitasking-mit-Arduino
Ich hoffe das hilft weiter…

von Falk B. (falk)


Lesenswert?

Siehe Multitasking. Geht in jeder Programmiersprache, nicht nur C.

von Christian H. (chris_hei)


Lesenswert?

Erst mal vielen Dank für die schnelle Hilfe,

Ja ich bin erst am Anfang mit der Programmierung, also lauflicht analoge 
ausgänge und so das bekomme ich schon ganz gut hin. Ich werde mir wohl 
auch noch das ein oder andere Buch noch zu legen, danke für den Tipp. 
Danke auch für die links und Beispiel Code. Noch so ne kleine Idee hätte 
ich da. Kann ich alles in verschiedenen Funktionen schreiben und die 
quasi gleichzeitig aufrufen, würde. Das funktionieren?

von Falk B. (falk)


Lesenswert?

@ Christian H. (chris_hei)

>ich da. Kann ich alles in verschiedenen Funktionen schreiben und die
>quasi gleichzeitig aufrufen, würde. Das funktionieren?

Lies den Artikel Multitasking, dort steht (fast) alles drin.

von Christian H. (chris_hei)


Lesenswert?

Ok dann erstmal vielen Dank, werde ich mir heute abend mal anschauen.

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.