Hallo allerseits, da ich mit MOSFETs bisher null Erfahrung habe, würde ich mir meinen Entwurf gern absegnen lassen. Aktuell baue ich ein Modell der U.S.S. Voyager. Dieses wird beleuchtet. Die vier Phaserbänke sind der Anlass für dieses Posting.Die Sequenz für das "Schiessen" soll wie folgt ablaufen. -Auswahl von Bank 1 bis 4 per Zufall -welche der LEDs "feuert" wird ebenfalls per Zufall bestimmt -Lauflicht von der ersten LED der selektierten Bank bis zur "schiessenden" LED (max. 2 LEDs gleichzeitig an) -kurzes "Flackern" der letzten LED per PWM Zur Schaltung: S1 - S5 sind Digital-Ports eines Arduino Mega S6 ist ein PWM-Port des Arduino Mega S7 - S9 sind Digitalports zur Auswahl der Laser-Bänke (Aktivierung mit Durchschalten des MOSFET nach GND) L1 - L5 LEDs Bank 1 L6 - L10 LEDs Bank 2 L11 - L15 LEDs Bank 3 Die Schaltung zeigt nur eine vereinfachte Version der endgültigen Lösung. Wie schon gesagt gibt es 4 Phaserbänke, die dann jeweils 20 LEDs haben sollen. Da selbst der Arduino Mega nicht so viele PWM Ports hat und aufgrund der Zufallsauswahl für jede der 80 LEDs PWM zur Verfügung stehen muss, dieser Entwurf. Sind Eurer Meinung nach Probleme zu erwarten? Bin für jeden Hinweis dankbar.
Weshalb steuerst Du die Gates einer 5er Gruppe nicht nur von einem PWM Port an und verzichtest auf die 3 zusätzlichen Transistoren? Sind die Leds Standard mit max. 20mA? Dann bietet sich ggf. ein einzelner Chip zur Steuerung an.
:
Bearbeitet durch User
[Blödsinn]Dann würden doch alle LEDs mit gleicher Nummer gleichzeitig leuchten. Also alle 1. oder alle 2. oder alle 3. DIe jeweils 1. LED jeder Gruppe hängt an EINEM Port des Arduino. Wenn die alle Masse hätten werden auch alle durch den Port gesteuert. So wird nur die jeweils aktive Bank mit Masse versorgt und die nicht aktiven Bänke bleiben dunkel! Das jedenfalls ist der Plan. [Blödsinn Ende] Stimmt! so viele pWMs hab ich ja grad noch! ;-) Wieder zu kompliziert gedacht. Auch würden weniger Gates parallel geschaltet sein. Hier sehe ich ehrlich gesagt den größten Stolperstein. Oder ist sowas unproblematisch? Sind 20mA SMD 0402 LEDs? Was meinst du mit einzelner Chip?
:
Bearbeitet durch User
IMHO brauchst du für einen PhaserBank 20-30 LEDs um das "Aufladen" zu simulieren... Außerdem würde ich das mit Schieberegister lösen.
:
Bearbeitet durch User
Die Phasersequenz der Voyager ist wie von mir beschrieben. Ein Lauflicht von einem Ende der Phaserbank bis zum Firing Point und dann ein Flackern für die Dauer des Feuerns. Dies weicht von z.B. der Enterprise ab, wo von beiden Enden auf den Firing Point zugelaufen wird. Und wie ich beschrieben habe, sind je Bank 20 LEDs geplant. Bei einer Lösung mit Schieberegister würde sich lediglich die Zahl der Bauelemente vergrößern. Welchen Vorteil sollte mir das/die Schieberegister bringen. Programmiert ist die Lösung viel flexibler nach meiner Meinung. Und der Arduino wird eh verbaut, da noch weitere Funktionen realisiert werden müssen.
:
Bearbeitet durch User
Soll immer nur eine Bank zur Zeit aktiv sein, oder auch mehrere gleichzeitig? Reiner L. schrieb: > Und wie ich beschrieben habe, sind je Bank 20 LEDs geplant damit benötigst du nach deiner bisherigen Lösung 20 normale Ausgänge und 4PWM. Hast du soviele frei? Alternativ gäbe es 16 Kanal led Treiber mit I2C steuerung. Für alle Kanäle brauchst du davon 5. wenn immer nur eine Bank zur Zeit aktiv ist, reichen 2 (bzw. 1,5) und 4 mosfets. Alternativ dazu nimm WS2811, die kann man auch mit 3 gleichen LEDs betreiben.
K. S. schrieb: > Soll immer nur eine Bank zur Zeit aktiv sein, oder auch mehrere > gleichzeitig? Ja, wird immer nur eine Bank per Random ausgewählt. K. S. schrieb: > damit benötigst du nach deiner bisherigen Lösung 20 normale Ausgänge und > 4PWM. Hast du soviele frei? Sollte mit nem Arduino Mega 2560 kein Problem darstellen. K. S. schrieb: > Alternativ gäbe es 16 Kanal led Treiber mit I2C steuerung. Für alle > Kanäle brauchst du davon 5. wenn immer nur eine Bank zur Zeit aktiv ist, > reichen 2 (bzw. 1,5) und 4 mosfets. Die SMD MOSFETs sind schon beschafft, die Verdrahtung ist mehr als simpel und bequem auf ener kleinen Lochrastenplatine unterzubringen, weshalb ich ungern auf eine andere Lösung umschwenken würde. K. S. schrieb: > Alternativ dazu nimm WS2811, die kann man auch mit 3 gleichen LEDs > betreiben. Hier habe ich sogar eine komplette Lösung gefunden. Aber aufgrund der Form der Phaserbank (gebogen) ist eine Stripelösung rein mechanisch nicht so simpel wie sie elektrisch flexibel wäre. Auch wird es hier schwierig, das Licht elegant und gleichmässig nach aussen zu führen. Die LED-Chips wären ja dann verglichen zu 0402 LEDs um Einiges größer. meine SMD-LEDs werden bedrahtet und in ein klitzekleines Loch genau dorthin geklebt, wo das licht sein soll.
Nochmal die konkrete Frage: Muss ich bei 20 parallel geschalteten Gates mit Problemen rechnen? Wenn ich nicht irre, müssen die ja dann bei PWM ständig umgeladen werden. Wären dann beim Arduino 490Hz. Das ist die Stelle, die mir die meisten Bedenken beschert. Es handelt sich um IRLML2502 LogicLevel n-FET.
:
Bearbeitet durch User
Reiner L. schrieb: > Die Phasersequenz der Voyager ist wie von mir beschrieben. Habe früher VFX gemacht, danke ;) Die 20 - 30 LEDs waren als minimum angedacht. https://www.youtube.com/watch?v=bzHxgX7n4lo&t=44s Reiner L. schrieb: > Bei einer Lösung mit Schieberegister würde sich > lediglich die Zahl der Bauelemente vergrößern. Wie das? Wozu brauchst du diese MOSFETs überhaupt? PWM? Wozu? So wird das nicht gemacht. Deine Quelle "Moduliert" nicht. Mit PWM wird das nach "defective" aussehen.
:
Bearbeitet durch User
> Muss ich bei 20 parallel geschalteten Gates mit Problemen rechnen?
Die 20 parallelen MOSFETs sind über wie ein Kropf - kannst du durch
einen ersetzen, oder, wenn du die PWM über die anderen Pins machst, ganz
weglassen.
foobar schrieb: >> Muss ich bei 20 parallel geschalteten Gates mit Problemen rechnen? > > kannst du durch einen ersetzen meinst du ich sollte die LEDs einer Bank alle auf einen MOSFET auflaufen lassen? >oder, wenn du die PWM über die anderen Pins machst, ganz > weglassen. Dann bräuchte ich aber 20 PWM-fähige Pins! Den Controller zeig mir mal. Oder wie soll ich das verstehen?
Richard B. schrieb: > PWM? Wozu? So wird das nicht gemacht. > Deine Quelle "Moduliert" nicht. > > Mit PWM wird das nach "defective" aussehen. S1 - S5 schalten auf 5V, wenn aktiv. Der MOSFET schaltet dann mit PWM-Frequenz den Pfad ein und aus! Das ist nichts anderes, was PWM auch machen würde. Oder wo verstehe ich hier etwas falsch? PWM ist nichts anderes als das Ein- und Ausschalten mit einer bestimmten Frequenz und Pulsweite. Richard B. schrieb: > So wird das nicht gemacht. Wie wird es denn gemacht? Ich frage ja nicht, weil ich die ideale Lösung habe, sondern weil ich Vorschläge möchte, wie das zu realisieren ist!
:
Bearbeitet durch User
>> oder, wenn du die PWM über die anderen Pins machst, ganz weglassen. > > Dann bräuchte ich aber 20 PWM-fähige Pins! Den Bank-Select zu modulieren würde reichen ...
Reiner L. schrieb: > Da selbst der Arduino Mega nicht so viele PWM Ports hat Deine Schaltung ist viel zu viel Aufwand. Reiner L. schrieb: > max. 2 LEDs gleichzeitig an Das schaffen Arduino-Ausgänge ganz ohne extra Transistoren. Reiner L. schrieb: > 80 LEDs Man braucht 9 I/O Leitungen an einem uC, um 80 LEDs ansteuern zu können. https://datasheet.datasheetarchive.com/originals/distributors/Datasheets-18/DSA-359400.pdf Es stehen 20mA zur Verfügung, bei 2 LEDs leuchtet jede die halbe Zeit, also mit effektiv 10mA. Der Rest ist Software. Man braucht keine PWM Hardware. Man muss nur programmieren können.
Sowas baut man nicht mehr diskret mit einem Transistorgrab. Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.: - MAX7219 - MM5450 - HT16K33
foobar schrieb: > Den Bank-Select zu modulieren würde reichen ... Ich versteh nur Bahnhof, genau das macht doch der(die) Bankselect-Pin(s). Peter D. schrieb: > Sowas baut man nicht mehr diskret mit einem Transistorgrab. > Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.: > - MAX7219 > - MM5450 > - HT16K33 Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse. Für meine Lösung brauche ich 2 Random-Aufrufe, eine Zählschleife für das Lauflicht und eine für das "Flackern", fertig ist der Lack. Keine Bitmuster oder dergleichen, die ich berechnen und dann an die ICs senden müsste. Mir ist schon klar, dass es auch elegantere Lösungen gibt. Ich möchte das Ganze aber simpel und vor Allem aus Programmiersicht flexibel haben. Das wirklich Einzige, was mich selbst an meiner Lösung stört ist der immense Verdrahtungsaufwand. Ich muss ja mit 20 Datenleitungen an 4 verschiedene Stellen im Modell. :-( Und wenn ich foobars Vorschlag umsetze (siehe Anhang), dann bleiben 4 Mosfets über, die die 80 LEDs mit PWM steuern können. womit das mit dem Transistorgrab auch erledigt wäre. Dann wird es nur noch ein Lackdraht-Grab :-) Und daran führt aufgrund der Anzahl der LEDs eh kein Weg vorbei.
snooker schrieb: > Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse. Nur wenn man sich standhaft weigern will, Programmieren zu lernen, also das Zerlegen einer Aufgabe in einzelne Teilaufgaben. Hier sind es 2 Tasks, die man unabhängig voneinander implementieren und testen kann. Man legt sich ein Array aus virtuellen LEDs im RAM an, d.h. ein Bit je LED. Eine Task schaltet nun diese virtuellen LEDs in der gewünschten Weise ein und aus. Und die andere Task gibt dieses RAM-Array an die Ansteuer-ICs aus, d.h. schaltet simultan die physischen LEDs an und aus. Fertig ist das Programm. Nur der Anfänger betrachtet Aufgaben als unteilbaren Monolithen und verzettelt sich damit ganz schnell (unflexibel, unwartbar).
Man kann Sachen aber auch unnötig verkomplizieren. So geschehen bei meinem ersten Schaltungentwurf. Ob Anfänger oder nicht: Der Aufwand sollte schon in einem vernünftigen Verhältnis zum Ergebnis stehen. Und dies gilt sowohl für den Programmieraufwand als auch für den Schaltungsaufwand! Meine Lösung wäre ja mittlerweile soweit abgespeckt, dass sich die IC-Lösungen schon fast verbieten! Letzer Vorteil, den ich in den ICs sehe, wäre der Wegfall der LED-Widerstände. Ansonsten kann so eine Lösung kein bischen mehr als mein Ansatz, nur bei weit höherem Aufwand. Was spricht denn gegen eine einfache Programmierung? Nur weil die nicht so hipp ist? Wozu ein simples Lauflicht mit Arrays und sonstigem Schnickschnack aufblähen, wenn es eine Zählschleife auch tut. Weder muss ich zeitkritisch programmieren, noch speichersparend oder hardwarenah. Und hardwareseitig ist die Sache mittlerweile auch in einen vertretbaren Rahmen gerückt. Das Ganze soll nur den gewünschten Zweck erfüllen und keinen Technologie- oder Designpreis gewinnen.
Ein 555er, Zähler, ROM und nen Treiber nach Wahl, mehr brauchts doch nich! Und wenns rein "zufällig" sein darf, gern auch ein "gebrauchtes" ROM. Irgendwo findet man schon ein paar passende Adressen. ;)
Nehmt doch bitte die Lösung mit dem Arduino als gegeben hin. Dieser ist sowieso vorhanden, da noch einige andere Sachen zu steuern sind wie z.B. Positions- und Navigationslichter, der Warpeffekt für die Warpgondeln, Animation für die Bussardkollektoren, Steuerung der allgemeinen Beleuchtung und für den Fall, dass ich noch genügend Ports übrig habe optional eine Soundeffekt-Steuerung. Ich weiß dass es mindestens Dutzende mögliche Ansätze gibt, ich habe mich aber für die programmierbare Lösung entschieden. So muß ich nur ein paar Konstanten korrigieren um andere Timings zu bekommen anstatt z.B. die Dimensionierung eines Timers in Hardware zu ändern. Das Modell wird ja irgendwann zugeklebt, und dann werden Änderungen die komplett in Hardware realisiert sind recht schwierig.
:
Bearbeitet durch User
Reiner L. schrieb: > dann werden Änderungen die komplett in Hardware realisiert sind recht > schwierig. Dann frage ich mich besonders, warum du eine so extrem festverdrahtete Lösung favorisierst in der Änderungen (z.B. wo geht PWM) nur durch umlöten erreichbar sind snooker schrieb: > Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse Offenbar kannst du einfach nicht programmieren und versuchst dem Problem mit Hardwareoverkill aus dem Weg zu gehen, schon simpelste UND-Verknüpfungen und PWM lieber in Hardware zu realisieren statt in Programmlogik.
MaWin schrieb: > Dann frage ich mich besonders, warum du eine so extrem festverdrahtete > Lösung favorisierst in der Änderungen (z.B. wo geht PWM) nur durch > umlöten erreichbar sind Die Stellen wo PWM benötigt wird sind klar definiert. Da muss gar nichts gelötet werden im Nachhinein. MaWin schrieb: > Offenbar kannst du einfach nicht programmieren und versuchst dem Problem > mit Hardwareoverkill aus dem Weg zu gehen, schon simpelste > UND-Verknüpfungen und PWM lieber in Hardware zu realisieren statt in > Programmlogik. Die LEDs sind gegeben, die Vorschaltwiderstände mangels Konstantstromquelle auch. Die Verdrahtung der LED ist auch bei JEDER Lösung notwendig. Die Notwendigkeit des Arduino sollte mittlerweile verständlich dargelegt sein. Hinzu kommen dann 4 kleine Mosfets und 8 Widerstände! Wo bitte siehst du denn da Hardwareoverkill? Die paar Kupferlackdrähte mehr? Was meine Programmierkenntnisse angeht: Ich werde mit Sicherheit hierzu niemanden fragen müssen, genausowenig wie ich mich von Leuten diesbezüglich schief anmachen lassen muss oder mir Sachen unterstellen lassen muss. Wir befinden uns im Forum "Mikrocontroller und Digitale Elektronik". Da ist doch mein Ansatz eigentlich genau das, was man hier thematisch erwarten sollte. Zum letzten Mal: Ich habe diese Lösung gewählt! Wer mir dazu behilflich sein will, gern. Wem die Lösung gegen den Strich geht, der soll sie halt ignorieren. Danke!
:
Bearbeitet durch User
Hallo, snooker schrieb: > Peter D. schrieb: >> Sowas baut man nicht mehr diskret mit einem Transistorgrab. >> Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.: >> - MAX7219 >> - MM5450 >> - HT16K33 > > Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse. Von wegen! Ich habe hier eine Bastelei in Arbeit, bei der 128 LEDs (64 einzelne LEDs und acht Sieben-Segment-Anzeigen) von 2 kaskadierten MAX7219 angesteuert werden. Das sind gerade mal 100 Zeilen einfachster C-Code. Und das bei völliger Flexibilität. rhf
Also die 4 Phaserbänke steuere ich locker mit pi mal Daumen 50 Zeilen Code (vielleicht ein paar mehr oder weniger). Wie gesagt, einmal die Phaserbank auswürfeln, einmal den Endpunkt des Lauflichts auswürfeln, Lauflicht abspielen und zum Schluss die letzte LED einige mal flashen lassen. Lediglich das Timing für Lauflicht und Flash sollten schon flexibel sein. Aber das sind wie gesagt nur Konstanten, die ich variieren muss. Flexibilität ist ansonsten hier nicht wirklich gefordert, da der Ablauf, wie das aussehen soll, ja vorgegeben ist.
Reiner L. schrieb: > Aber das sind wie gesagt nur Konstanten, die ich > variieren muss. Eine Konstante heißt so weil ihr Wert konstant ist. Eine Variable heißt so weil ihr Wert variabel ist.
Jetzt kommen die "ganz Schlauen"! Die Tatsache, dass sich ein Wert während des Programmablaufs nicht ändert (um genau zu sein: sich nicht ändern kann), macht diesen konstant. Das heisst aber nicht daß er unveränderbar ist! Wenn ich eine Blinkfrequenz von 1Hz will, leg ich dies mit einem Wert fest. Wenn mir aber diese Frequenz dann doch nicht zusagt, ändere ich ihn auf z.B. 2Hz. Damit ist das aber bei Programmausführung immer noch der konstante Wert der Blinkfrequenz. Die Änderung passiert ausserhalb der Laufzeit beim Erstellen des Quelltextes!
:
Bearbeitet durch User
Hallo, Reiner L. schrieb: > Die Änderung passiert ausserhalb der Laufzeit beim Erstellen des > Quelltextes! Genau, und das nennt man Konstante. rhf
Roland F. schrieb: > Genau, und das nennt man Konstante. Meine Rede! Verstehe die unnötige Belehrung von magnetus nicht wirklich! Natürlich ist der Wert für eine Konstante variabel, nur eben nicht mehr zur Laufzeit. Wäre er WIRKLICH konstant, wäre die Konstante in die Programmiersprache implementiert und eine Wertzuweisung würde sich erübrigen.
:
Bearbeitet durch User
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.