56x PWM + Serielle Kommunikation mit PC

OP #1262158
Lesenswert?

Schönen guten Tag!

Ich versuche mich gerade ein einem Projekt, bei dem ich 56 LEDs über die 
Serielle Schnittstelle aus steuern kann.

Als Mikrocontroller fungiert ein MEGA1280. Die Kommunikation mit dem 
Rechner ist kein Problem, aber die Software PWM macht Probleme – vor 
allem in Kombination mit der Seriellen Kommunikation… Bei 56 LEDs 
scheint mein Programm einfach zu lange in der ISR zu hängen.

Wie geht man normalerweise bei so einem Problem vor? 56 LEDs, PWM, 
steuerbar per PC. Kann der MEGA1280 das überhaupt leisten?

Ich bin dankbar für jeden Tipp, deshalb im vorraus: Merci!

Hans

PS: Ich habe zwei Varianten ausprobiert. Einmal eine generelle 
Ansteuerung, hier aus der Codesammlung. Klappt problemlos mit bis zu 22 
LEDs (auf 3 Bänken). Darüber hinaus flackert aber alles… ich muss 10 
Bänke ansteuern :(
Angehängte Dateien:
Gast #1262184
Lesenswert?

vielleicht so:
1:
Nimm die Schnellste art und weise aus dem Tutorium und bau irgendwie 
einen Laufparameter ein, mit dem dann nur ein Teilbereich der 
"LED-Laufzeiten" Refresht werden. Das würde zwar sdie refresh rate der 
gesammten schaltung schwächen, aber es würde evtl. nicht so viel zeit in 
der ISR verschwendet...
#1262265
Lesenswert?

Es gibt doch Treiber für sowas, z.B. der auf dem LED-Painter eingesetzte 
TLC5940. http://www.brilldea.com/product_LEDPainter.html
4 von denen und einen kleinen Controller für die Kommunikation. - wiebel
Ansonsten könnte der Propeller das mit ein paar Schieberegistern auch 
schaffen. Mit einem einzelnen AVR wird das aber auf jeden Fall eine 
Herausforderung, naja damit aber natürlich auch ein Spass. -wiebel
Persönliche Seite #1263728
Lesenswert?

Honsey Kk schrieb:
> Schönen guten Tag!
>
> Ich versuche mich gerade ein einem Projekt, bei dem ich 56 LEDs über die
> Serielle Schnittstelle aus steuern kann.
>
> Als Mikrocontroller fungiert ein MEGA1280. Die Kommunikation mit dem
> Rechner ist kein Problem, aber die Software PWM macht Probleme – vor
> allem in Kombination mit der Seriellen Kommunikation… Bei 56 LEDs
> scheint mein Programm einfach zu lange in der ISR zu hängen.

räusper

Das wundert dich jetzt nicht wirklich, oder? Wenn man sich den Code so 
anschaut, dann bist du locker zu 90% damit beschäftigt, Werte aus dem 
RAM
hin- und herzuschieben... Schau dir einfach mal den generierten Code an.

> Wie geht man normalerweise bei so einem Problem vor? 56 LEDs, PWM,
> steuerbar per PC. Kann der MEGA1280 das überhaupt leisten?

Kommt auf die PWM-Frequenz an, die du haben willst. Ansonsten gilt 
natürlich, möglichst wenig Zeit vertrödeln.

Das Hauptproblem ist die bedingte Adressierung der zig Ports.

Dazu würde ich ein kleiner 7-Byte-Array ausfbauen, in dem jedes Bit 
einer LED entspricht. Die Ausgabe/Verteilung dieses Arrays auf die 
entsprechenden Ports wird hart codert (von mir aus auch parametrisiert 
über Makros), damit möglichst viel der Berechnungen und Portzuordnungen 
zur Compilezeit erledigt werden können.

Die Ausgabe des Arrays erforder geschätzte (2*8+3)*7 also 62 Ticks, wenn 
man es richtig angeht, das ist weniger als einer deiner ISR-Frames...

Bei 128k Code kannst du aus dem vollen schöpfen und zB auch Schleifen 
aufrollen nach Herzenslust (spart Sprünge und bei bekannter 
Iterationszahl die Zählvariable), aber versuch möglichst ohne indirekte 
Adressierung auszukommen, auch wenn's elegant aussieht in Quelle.

Johann

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