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 :(
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...
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
>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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.