Guten Morgen, ich fange zur Zeit mit einem neuen Projekt an und stehe noch am Anfang der Planung, bei der Basisfrage welche Hardware. Nun erstmal zu meinem Projekt... Ich widme mich dem schon oft behandelten Thema LEDs via PWM via DMX dimmen. Das ganze geht in Richtung von RGB-Panels bzw RGB-Matrixen. Meine Grundidee sind kompakte Module mit 4x4 RGB-Leds. Jetzt stehe ich ich vor der ersten Entscheidung: - Die Leds direkt über einen Treiber ansteuern - Die Leds per Multiplexing ansteuern - Die Leds mit Treibern ansteuern die zB am I²C Bus hängen Soo, alle Varianten haben ihre Vor- und Nachteile. Die erste Vari. brauch sehr viele Ports, die zweite brauch weniger Ports aber mehr Hardware und ist langsamer(???) und die Dritte fand ich am Scnhönsten, wobei ich dann doch einen Schock bekam als ich bei Maxim den Preis für diese Treiber gesehen habe. Dort war es ein 24 Kanal Treiber der seriell angesteruert wird, diese kostesn bis 24 Stück aber rund 29 Dollar pro Stück. Also fällt die Dritte schon mal raus, leider. Ich bin mir nicht mehr genau sicher ob ich das mal richtig verstanden habe, aber wäre das Multiplexing hier noch ratsam oder ist es wirklich zu langsam? Weiter will ich ein relative hohe PWM-Auflösung erreichen, sprich nicht die oft gesehenen 8Bit sonder eher 10-16bit, umso mehr umso besser. Mit PWM habe ich noch keine Erfahrung, deswegen kann ich den mehr Aufwand nicht einschätzen, darum frag ich nun auch hier ;-) Was ich nun hier erwarte? Erwarten erstmal nichts, ich hoffe das mir ein paar der µC- und Elektronik-Gurus hier mir ein paar Starthilfen geben können. Mich etwas beraten können was die Hardware angeht und Denkanstöße für die Software. Hochachtungsvoll Philipp PS.: Die Schaltungen von Henne ( hölscher ) kenne ich bereichts und benutze ich selber schon ;-)
AT90PWM2 bzw. AT90PWM3 haben 12-bit PWM. Gelten aber als schwer beschaffbar.
Guten Morgen, ich habe ganz vergessen genau zu sagen wie viele Kanäle es dann sind. Also 4x4 RGB also 48 Leds müssen unabhängig von einander gedimmt werden
@Sebastian Hardwareseitig sind es dort auch "nur" 4 bzw. 6 PWM-Kanäle und insgesamt muss ich auf 48 hoch. Sprich da müsste ich dann auch wieder via Software PWMen, also habe ich doch keinen Vorteil darauß oder sehe ich das falsch?
Software-PWM ist nur eine Frage der Rechenleistung bzw. Ausführungsgeschwindigkeit. In einer Timer-Interruptroutine müssen eben die hier dann softwaremäßigen "Compare-Register" mit dem Zählerstand verglichen werden und die Ausgänge ggf. geschaltet. Bei 48 Kanälen kann aber, wie an anderer Stelle igrendwann mal erwähnt, ein CPLD sinnvoll sein, um die PWM-Logik aus dem Mikrocontroller auszulagern. Erhöht den Aufwand aber wesentlich. Wenn es kein Atmel sein muß... ein MSP430F147 (oder F149, wenn man mehr Speicher braucht) kann immerhin 10 Kanäle bei 16 Bit, durch zwei Counter mit zusammen 10 Compare-Registern.
Hey, also ich würde sehr gerne im Atmel-Lager bleiben, da ich dort schon ein wenig Erfahrung habe. Es gibt auch große Atmegas mit 6 und mehr PWM Kanälen. Aber die Hardware PWMs haben doch nur den Vorteil das ich diese nicht mehr per Software machen muss, oder? Sprich bei 8 Hardware-PWMs muss ich nur noch 42 via Software machen oder?
was spricht gegen Multiplexing? Da brauchst du nur 12 Ports. 48 LEDS direct an nen µC zu hängen ist der toatale Overkill. ich würde 4 spalten and den µC hängen (je nach Strom natürlich einen Treiber dazwischen) und die 4 Zeilen (auf jedenm Fall über Treiber) über ein shift register ansprechen, wo du eine 1 durchwandern lässt. macht dann 14 Ports. Bei nur 4 Zeilen könntest du aber auch direkt an den µC hängen, da brauchst du 16 Ports Bei insgesammt nur 16 LEDs könntest du aber auch immer nur eine mit 3 Ports ansprechen und die selection mit 2 gekoppelten Shiftregistern machen. da reichen sogar 5 Ports. musst halt je nach Variante die Vorwiderstände anpassen, aber auch auf den spezifizierten maximalen Pulse-Strom der LED achten. Als treiber würde ich dir den uln2003A (hat leider nur 7 chanäle, aber die 8er variante ist unverhältnismäßig teurer, oder kaum zu bekommen) und für die andere Seiten den udn2981 (oder TD62783AP, ist baugleich aber billigeR) empfehlen. Schieberegister 74X164 (am besten HCT, LS tuts aber auch) http://www.reichelt.de/?ARTICLE=22008 http://www.reichelt.de/?ARTICLE=22069 http://www.reichelt.de/?ARTICLE=3332 Alles sehr günstig, aber eine Bestellung nur deswegen lohnt sich halt nicht.
Moin, also ist das was ich da im Hinterkopf habe, das das Multiplexing langsamer ist falsch?
Zusatz, was hast du davon, wenn du leds mit einer größeren PWM als 8bit ansprichst? dein Computer zeigt die normalerweise auch nur 256 Helligkeitswerte pro Farbe. die zusätzlichen zwischenstufen bei einer 10,12 oder 16nit PWM siehst du bei LEDs sowiso nicht. Noch was zum Thema SoftwarePWM: Langsamer schon, aber das is relativ, (keine ahnung was du noch machen willst. wenn du 150Hz erreichen willst mit 4 Multiplexkanälemusst muss deine Timer ISR etwa 600Hz haben (mehr schaded nie;) bei 8Mhz Taktfrequenz: 8000000Hz/256 = 31250Hz (bei 256 läuft der Timer über und die IST wird aufgerufen) Das heißt du kannst einen Timer Prescaler von 32 nehmen (falls es den gibt) dann würde die ISR 8000000Hz/32/256 = 976 mal pro sek aufgerufen also alle 8192 Takte, die IST braucht schätzungsweise höchstens 300Takte, das heißt die bleiben 8000 Takte zwischen 2 ISR aufrufen. Das macht eine auslastung von 300*976/80000000 = 0,036 = < 3% Die Pwm ist ganz simple: nc = anzahl Multiplexkanäle ledpmc = anzahl LEDs pro Multiplexkanal du setzt einen Timer auf, der mindestens 150Hz*nc hat außerdem brauchst du einen globalen uint8 Zähler (nenen wir in uint8 pwmStep = 0; ) für die PWM dann einen globalen Zähler für den aktuellen multiplex-kanal uint8 plex = 0; sowie für jede LED einen PWM Vergleichswert uint8 ledDutycycle[AnzahlLEDs]; der mit dem PWM-Wert beschrieben werden muss die ISR sollte dann so aussehen: (Beispiel 8bit PWM) plex inkrementieren wenn plex>=nc dann plex = 0; 1 in shiftregister schieben: shift-reg data pin auf 1 pwmStep incrementieren (überlauf nicht abfangen) sonst shift-reg datapin auf 0 shift-reg clock pin auf 1 und wieder zurück für alle LEDs pro multiplex-kanal schaeun, ob der wert größer oder kleiner dem PWM wert ist udn ab oder anschalten. for(i=0;i<ledpmc ;++i) switchOnSpalte(i, ledDutycycle[ledpmc * plex + i]<pwmStep);
@ Philipp (Gast) >Ich widme mich dem schon oft behandelten Thema LEDs via PWM via DMX >dimmen. Hab ich mal gemacht, 20 Kanäle per Soft-PWM über DMX gesteuert. Ein ATmega16war das Arbeitstier. >Ich bin mir nicht mehr genau sicher ob ich das mal richtig verstanden >habe, aber wäre das Multiplexing hier noch ratsam Ja, aber nicht zwingend. > oder ist es wirklich >zu langsam? Nein. >Weiter will ich ein relative hohe PWM-Auflösung erreichen, sprich nicht >die oft gesehenen 8Bit sonder eher 10-16bit, umso mehr umso besser. Jaja, dise Jugend . . . ;-) >beraten können was die Hardware angeht und Denkanstöße für die Software. Ein guter Kompromiss sind die TLC5921 & Co. Die kosten um die drei Euro, sind relativ gut beschaffbar und können 16 LEDs per 12 Bit PWM steuern. Was will man mehr. Dann reicht ein kleiner ATtiny2313 als DMX Empfänger, der dann die TLC per SPI füttert. MFG Falk
Moin, mhm ok an sowas dachte ich am Anfang ja auch, war lediglich von dem Preis bei Maxim etwas geschockt. Das nächste Problem wäre dann nun, das ich mit SPI noch weniger gemacht habe, was heißt garnichts ;-) Kannst du mir grob sagen wie eine Ansteuerung der Treiber grob aussehen würde?
ich werfe mal den MBI5030 in die Runde. schon zu hunderten verbaut und arbeiten sehr gut. lg, markus
@ Philipp Weber (jppweber) >Kannst du mir grob sagen wie eine Ansteuerung der Treiber grob aussehen >würde? Sehr einfach, die Daten werden seriell in den IC getaktet. Etwa so. AVR-Tutorial: Schieberegister Das Datenbaltt sagt es dir genau. MFg Falk
Hey Leute, hat jemand sich schon mal weiter damit beschäftigt? Also sprich mit dem MBI5030 in Verbindung mit dem Atmega und DMX. Gibts da was neues? Wie ist der aktuelle Stand? Mfg Chris
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.