Forum: Mikrocontroller und Digitale Elektronik 56x PWM + Serielle Kommunikation mit PC


von Hansi C. (honsey)


Angehängte Dateien:

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 :(

von Fabi (Gast)


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...

von Hansi C. (honsey)


Lesenswert?

du meinst also beim ersten ISR durchlauf LED 1 – 10, beim zweiten 
durchlauf 11 – 20, etc. ?

von Michael W. (wiebel42)


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

von Fabi (Gast)


Lesenswert?

>du meinst also beim ersten ISR durchlauf LED 1 – 10, beim zweiten
>durchlauf 11 – 20, etc. ?

Ja sowas in der art. aber genau hab ich mir da keine gedanken gemacht;) 
aber klingt doch gut...

Lg & n8 Fabi

von gast (Gast)


Lesenswert?

Naja jeder Sprung in einen Interupt verbrät einige Takte. Ich denke mal 
mit kurz aber dafür öfter mal in die isr springen ist nicht immer 
günstig.

von Johann L. (gjlayde) Benutzerseite


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

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.