Forum: Mikrocontroller und Digitale Elektronik Welcher Atmel für PWM+DMX


von Philipp (Gast)


Lesenswert?

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 ;-)

von Sebastian (Gast)


Lesenswert?

AT90PWM2 bzw. AT90PWM3 haben 12-bit PWM. Gelten aber als schwer 
beschaffbar.

von Philipp (Gast)


Lesenswert?

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

von Philipp (Gast)


Lesenswert?

@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?

von Sebastian (Gast)


Lesenswert?

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.

von Philipp W. (jppweber)


Lesenswert?

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?

von vlad (Gast)


Lesenswert?

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.

von Philipp W. (jppweber)


Lesenswert?

Moin,

also ist das was ich da im Hinterkopf habe, das das Multiplexing 
langsamer ist falsch?

von vlad (Gast)


Lesenswert?

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);

von vlad (Gast)


Lesenswert?

IST = ISR ;)

von Falk B. (falk)


Lesenswert?

@  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

von Philipp W. (jppweber)


Lesenswert?

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?

von Markus C. (ljmarkus)


Lesenswert?

ich werfe mal den MBI5030 in die Runde.

schon zu hunderten verbaut und arbeiten sehr gut.


lg, markus

von Falk B. (falk)


Lesenswert?

@  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

von Chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.