Forum: Mikrocontroller und Digitale Elektronik Arduino Alternative f. LED Projekt


von Rene O. (Firma: Privat) (oelschi)


Angehängte Dateien:

Lesenswert?

Hallo liebes Forum,

ich habe eine Fachfrage und bestimmt habt ihr die passenden Antworten! 
Kurz zur Einleitung, ich habe zusammen mit paar Freunden eine LED Wand 
gebaut, ganz simpler Aufbau. (Laptop mit der Steuerungssoftware 
Gladiator, einem Arduino Duemilanove Controller und dann ganz viele 
einzelne LED Pixel mit WS2801 Chip)

Nun haben wir aber das Problem, dass der Controller zu langsam ist, wenn 
wir mehr als 300 solche Pixel einsetzen.

Meine Frage an euch (Ich bin leider nicht so vom Fach:-) ) was würdet 
ihr uns für einen schnelleren Controller empfehlen ?

Ich würde mich riesig freuen wenn ihr etwas postet.

vielen Dank

René

von Eumel (Gast)


Lesenswert?

Rene Oelsch schrieb:
> Meine Frage an euch (Ich bin leider nicht so vom Fach:-) ) was würdet
> ihr uns für einen schnelleren Controller empfehlen ?

Das liegt nicht am Controller sondern an der Software.

von Karl H. (kbuchegg)


Lesenswert?

kurze Gegenfrage:
das Programm, basiert das auf Arduino-Bibliotheken?


Denn Arduino-Bibliotheken und Laufzeit-Speed sind schon mal 2 Dinge, die 
sich meistens von vorne herein schon beissen. Die Arduino-Bibliotheken 
sind zwar zum schnellen Entwickeln von Software, insbesondere für 
Ungeübte, wunderbar geeignet. Will man aber performante Anwendungen, 
dann sind sie ein Klotz am Bein.

von Harald W. (wilhelms)


Lesenswert?

Rene Oelsch schrieb:

> was würdet ihr uns für einen schnelleren Controller empfehlen ?

Z.B. einen PC?
Gruss
Harald

von Ben W. (ben_w)


Lesenswert?

probier den teensy 3.0

von Nils A. (nonever)


Lesenswert?

Mehrere Artnet zu SPi Umsetzer, Artnet läuft über Ethernet und kann 
einfach geswitched werden. Deine Software unterstützt mehrere Artnet 
Universen, die einzelnen Pixel können dann da draufgemapped werden.

von Old grumpy man (Gast)


Lesenswert?

DJ?

Da kommen ja einem fast die tränen... Wo sind die ganzen Vinyl-mixer 
hin? Heutzutage gibts ja nur noch möchtegern-DJs, die den Bass n 
bisschen hochdrehen und die Beschallung mit ner Verstärkerstufe von MC 
Crypt oder so nem chinakracher machen und dann meinen, sie hätten was 
drauf. Ich kann diesen Virtual-DJ mist überhaupt nicht leiden. Entweder 
man macht`s richtig oder lässt es bleiben.

Sry musste mal raus.

Ich bin der selben Meinung wie Eumel und Karl Heinz.

von Ich (Gast)


Lesenswert?

Komplett fertig, wie der Arduino mit Processing programmierbar:
http://www.heroicrobotics.com/products/pixelpusher

(aus einem Kickstarter-Projekt hervorgegangen: 
http://www.kickstarter.com/projects/1319139499/pixelpusher)

von Conny G. (conny_g)


Lesenswert?

Kann das Problem hier überhaupt das uC Board sein, das hat doch mit 300 
Pixeln überhaupt kein Problem? Ist das nicht eher die Gladiator Software 
oder die Übertragung der Software ans Board?

von SE (Gast)


Lesenswert?

Die LED können mit bis zu 25Mhz getaktet werden.
Hier macht wohl endlich mal ein ARM sinn, oder?

Wenn der Arduino die Daten über die Hardware-SPI sendet ist zumindest 
die Software mal nicht schuld.
Wobei ich selbst kein FAN von den Arduino Bibliotheken bin.
28 Takte für ein "digital write" ...

von Kaj (Gast)


Lesenswert?

Wenn du bei Arduino bleiben möchtest nimm einen Due, der läuft mit 84MHz 
statt deiner 16MHz

von Udo (Gast)


Lesenswert?

SE schrieb:
> 28 Takte für ein "digital write" ...

ich hab über 100 Takte dafür gemessen.

von Conny G. (conny_g)


Lesenswert?

Dann ist ja nicht das Board das Problem, sondern die Software auf dem 
Board.
Allerdings sagte ja oelschi Eingangs, dass er nicht vom Fach ist, also 
bleibt ihm nur ein schnelleres Board.
Bei Arduinos kenne ich mich allerdings nicht aus (und will es auch gar 
nicht).

: Bearbeitet durch User
von Udo (Gast)


Lesenswert?

Rene Oelsch schrieb:
> Meine Frage an euch (Ich bin leider nicht so vom Fach:-) ) was würdet
> ihr uns für einen schnelleren Controller empfehlen ?

Arduino Due
Mehr als doppelt so schnell und kompatibel.

von Tim  . (cpldcpu)


Lesenswert?

Die Software heisst übrigens GLEDIATOR, falls sich jemand wundert.

Ich habe mir mal die "firmware" angeschaut. Unten der relevante 
SPI-Code. Das muss eine der langsamsten Software-SPI Implementationen 
sein, die ich bisher gesehen habe. Unterstützt Arduino kein 
Hardware-SPI?

Blöd ist allerdings, dass die Daten per UART in den Controller gelangen. 
Da lässt sich nicht mehr viel machen...

1
void shift_out_data()
2
{
3
4
  for (int i=0; i<Num_Pixels; i++)
5
  {
6
    byte r = display_buffer[i*3+0];
7
    byte g = display_buffer[i*3+1];
8
    byte b = display_buffer[i*3+2];
9
    
10
    for (byte j=0; j<8; j++)
11
    {
12
       digitalWrite(CKI, LOW);
13
       if (b & (byte)(1<<(7-j))) {digitalWrite(SDI, HIGH);} else {digitalWrite(SDI, LOW);}     
14
       digitalWrite(CKI, HIGH);
15
    }
16
    
17
    for (byte j=0; j<8; j++)
18
    {
19
       digitalWrite(CKI, LOW);
20
       if (r & (1<<(7-j))) {digitalWrite(SDI, HIGH);} else {digitalWrite(SDI, LOW);}     
21
       digitalWrite(CKI, HIGH); 
22
    }
23
    
24
    for (byte j=0; j<8; j++)
25
    {
26
       digitalWrite(CKI, LOW);
27
       if (g & (1<<(7-j))) {digitalWrite(SDI, HIGH);} else {digitalWrite(SDI, LOW);}     
28
       digitalWrite(CKI, HIGH);
29
    }
30
    
31
  }
32
  
33
  digitalWrite(CKI, LOW);
34
  delayMicroseconds(800); //Latch Data
35
36
}

von Cyblord -. (cyblord)


Lesenswert?

Udo schrieb:
> SE schrieb:
>> 28 Takte für ein "digital write" ...
>
> ich hab über 100 Takte dafür gemessen.

Problem erkannt, Problem gebannt. Lass den Arduino Quatsch weg und machs 
direkt in C.

gruß cyblord

von Tim  . (cpldcpu)


Lesenswert?

Arduino digitalWrite, das sind tatsächlich mehr als 2 Taktzyklen.
1
void digitalWrite(uint8_t pin, uint8_t val)
2
{
3
  uint8_t timer = digitalPinToTimer(pin);
4
  uint8_t bit = digitalPinToBitMask(pin);
5
  uint8_t port = digitalPinToPort(pin);
6
  volatile uint8_t *out;
7
8
  if (port == NOT_A_PIN) return;
9
10
  // If the pin that support PWM output, we need to turn it off
11
  // before doing a digital write.
12
  if (timer != NOT_ON_TIMER) turnOffPWM(timer);
13
14
  out = portOutputRegister(port);
15
16
  uint8_t oldSREG = SREG;
17
  cli();
18
19
  if (val == LOW) {
20
    *out &= ~bit;
21
  } else {
22
    *out |= bit;
23
  }
24
25
  SREG = oldSREG;
26
}

von Cyblord -. (cyblord)


Lesenswert?

Tim    schrieb:
> Arduino digitalWrite, das sind tatsächlich mehr als 2 Taktzyklen.

Aber nur um Faktor 50 mehr ;-)

von Rene O. (Firma: Privat) (oelschi)


Lesenswert?

Hallo,

erstmal Danke für die vielen Kommentare. Also wir könnten mit einem 
Arduino Due natürlich viel mehr Adressieren. Könnte es eigentlich sein, 
das unser verwendeter Arduino einfach nur zu wenig RAM hat ?

Ich bin über die Links sehr erfreut :-)
http://www.heroicrobotics.com/products/pixelpusher

Das werden wir uns anschauen, könnte vielleicht noch viel besser sein 
als unsere Lösung.

Über die Einführung von Artnet haben wir auch schon nachgedacht, würde 
bestimmt Sinn machen.
#

Ich steck halt absolut nicht im Code, würdet ihr mir also von der 
Arduino Sache abraten ? Auf der Seite von Glediator (sorry das ich dies 
oben falsch geschrieben habe) wird allerdings keine Firmeware für einen 
Due angeboten. Diese wäre allerdings zur Zeit der schnellste Arduino 
oder ?

Wenn ich natürlich wüsste wie ich die Software Glediator mit dem 
Pixelpusher verbinden kann, dann wäre das meine Favorisierte Lösung. 
Kann mir da jemand einen Tip geben ?

Danke für eure Unterstützung

: Bearbeitet durch User
von SE (Gast)


Lesenswert?

Wie oben deutlich gezeigt ist die Arduino Software nicht sonderlich 
performant.

Also gibt es doch nur vier möglichkeiten:

- Ihr nutzt Hardware-SPI (ich hoffe die Arduino Jungs haben das 
eingebaut)
- Ihr behaltet die Software und nehmt nen schnelleren Controller
- Ihr programmiert in AVR Studio (o.a.). Das erfordert aber mehr kenne 
von dem Mikrocontroller und (ANSI-)C.
  Anstatt "digitalWrite(SDI, HIGH);" --> "PORTB |= (1 << SDI);"
- Ihr schwenkt auf eine komplett andere Plattform um.

Zum UART: Der ATMega--8 untertsützt bis zu 1Mbaud UART.

von Tim  . (cpldcpu)


Lesenswert?

Es gibt auch noch diese Library für Arduino:

http://code.google.com/p/fastspi/

von F. F. (foldi)


Lesenswert?

cyblord ---- schrieb:
> Udo schrieb:
>> SE schrieb:
>>> 28 Takte für ein "digital write" ...
>>
>> ich hab über 100 Takte dafür gemessen.
>
> Problem erkannt, Problem gebannt. Lass den Arduino Quatsch weg und machs
> direkt in C.
>
> gruß cyblord

... ich hätte dich auch vermisst.

von Cyblord -. (cyblord)


Lesenswert?

F. Fo schrieb:
> cyblord ---- schrieb:
>> Udo schrieb:
>>> SE schrieb:
>>>> 28 Takte für ein "digital write" ...
>>>
>>> ich hab über 100 Takte dafür gemessen.
>>
>> Problem erkannt, Problem gebannt. Lass den Arduino Quatsch weg und machs
>> direkt in C.
>>
>> gruß cyblord
>
> ... ich hätte dich auch vermisst.

Haja,
und man schaue sich die gepostete Funktion (shift_out_data()) mal an. 
Das könnte man 1:1 so in reinem C runterschreiben. Es wäre kein bisschen 
komplizierter aber um Größenördungen schneller. Also was soll sowas?

gruß cyblord

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.