mikrocontroller.net

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


Autor: Hansi Cardell (honsey)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Fabi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Hansi Cardell (honsey)
Datum:

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

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.