Arduino Alternative f. LED Projekt

OP (Firma: Privat) #3392092
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é
Angehängte Dateien:
#3392102
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.
Gast #3392921
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.
Gast #3392984
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" ...
#3393041
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
}
#3393053
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
}
OP (Firma: Privat) #3393379
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
Gast #3394577
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.
#3394638
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren