Forum: Mikrocontroller und Digitale Elektronik Suche schnellen µC


von David (Gast)


Lesenswert?

Guten Abend Forum.

Ich hoffe, hier kann mir jemand weiterhelfen.

Ich programmiere momentan mit den Avr's rum (M8,M16...)

Nun wollte ich fragen, ob es irgendwelche µC's gibt, die man auch in ASM 
programmieren kann, die aber mindestens doppelt oder dreimal so schnell 
wie die Avr's sind... so 50MhZ

Ich steuere momentan 16 RGB Leds über mehrere Schieberegister an, mit 
dem Atmega 8 kein Problem(@ 16MhZ). Ich möchte aber das ganze auf 32 Rgb 
Leds ausbauen und da kommt mein zeitliches Problem.... der M8 ist fast 
nur mehr mit dem rausschieben der Bits beschäftigt. Die Software für das 
rausschieben der Bits ist sehr gut optimiert. Und irgendwie muß ich ja 
noch die neuen PWM Daten berechnen. Ich verwende dabei 256 
Helligkeitsstufen, die ich auf keinen Fall verringern möchte.
Multiplexen kommt für mich auch nicht in frage, da das ja auch keine 
Rechenzeit spart.

Gibts da irgendetwas in einer normalen Preisklasse, was man in Asm 
programmieren kann?

ARM oder sowas hab ich mal gehört... Oder gibts da was besseres?

Wäre sehr dankbar für Eure Hilfe.

David

von Benedikt K. (benedikt)


Lesenswert?

Bist du sicher, dass die Software optimal ist ?
Ich steuere ein LCD mit 384 Pixel mit 32 Stufen an oder auch 1280 LEDs 
mit 16 Graustufen. Beides mit einem mega8.
Wenn ich das auf 256 Stufen hochrechne, dann sollten mindestens 70 LEDs 
mit 256 Stufen möglich sein.
Beides mit Software die in C geschrieben ist. Soviel zu deiner sehr gut 
optimierten Software...

Außer den SX Prozessoren fällt mir nicht wirklich viel ein. Vielleicht 
die Propeller uC mit mehreren Cores ?

von Jörg B. (manos)


Lesenswert?

Wenn 16 RGB derzeit kein Problem sind nimm zur Not 2 Mega8. Die Software 
ist dann schon fast fertig...

von thekilla (Gast)


Lesenswert?

Hallo!

Ich kann mir leider nicht ganz vorstellen, dass dein Vorhaben nicht mit 
einem Mega8 zu realisieren ist. Poste doch deinen ASM-Code, wenn du 
Hilfe willst, weil sonst ist es schwer nach zu vollziehen. Ausserdem 
benötigt der Atmega nur 2 Takte (oder wenn warens 4 -.-) für einen 
Schiebebefehl. Das sind rein rechnerisch 4 bzw 8 Millionen 
Schiebebefehle in der Sekunde o.O.

Mfg
thekilla

von tubie (Gast)


Lesenswert?

Muß es denn wirklich über ein Shift Register laufen? Wie währe es mit 
mehreren '373 + Adress Dekoder '138 das wäre 1x Out für die Adresse und 
ein 2. Out für die Daten von 8 LED's

Also ADDR 0..11 Setzen auf PortA
Daten D0..D7    Setzen auf PortB
und noch einmal Strobe / wr und es sollte gehen.

Was ich mir natürlich auch vorstellen könnte, allerdings noch nicht 
probiert habe einen Mega mit ext. RAM Funktion und die '138 + '373er + 
Adress/Data Latch an die RAM Schnittstelle und einfach den "RAM" 
beschreiben. Der mem_wr puls steuert den entsprechenden Treiber durch 
und gut ist. Somit währen vorausgesetzt die Daten liegen fertig vor 
gerade mal 12 Ram Schreibbefehle nötig. Der Rest geht von selbst.

Muß natürlich noch mal alles überdacht werden aber von prinzip könnte es 
so gehen.

Gruß,
Tubie

von David (Gast)


Angehängte Dateien:

Lesenswert?

Hi.

Sorry, ich dachte, das die Software schon ganz gut ist.

Habe sie leider auch nur aus diesem Forum geklaut. Die Grundstruktur von 
der Software stammt von Hagen.

SPI ist in diesem Fall von Software geschrieben.

Dazu habe ich 6 Stück 8 bit Schieberegister (4094).
Jeweils 2 Stück sind immer für die Farben zuständig. Also 2 Stück geben 
nur das rot aus, die nächsten nur das grün und die letzten 2 nur das 
blau.

Bei dieser Software SPI komme ich ca auf 300 Takte für die Berechnung 
der einzelnen Pixel und für die ausgabe an die Shiftregister.

Ich hoffe, das Hagen da jetzt nichts dagegen hat, aber könnte man das 
besser machen?

Software im Anhang

David

von tubie (Gast)


Lesenswert?

siehst Du,

mit 12 8-Bit Treibern sind es:

12* out PortX     12 Cycles
12* out PortY     12 Cycles
12* inc addr      12 Cycles
12* sbi           24 Cycles
12* cbi           24 Cycles
-----------------------------
                  84 Cycles
für 32 RGB LED's. Vorausgesetzt du hast 12 Register noch offen, um die 
Daten zu Puffern. Am besten ohne Schleife programmieren das spart 
nochmal etwas.

Gruß,
Tubie

von Falk (Gast)


Lesenswert?

@David

> nur mehr mit dem rausschieben der Bits beschäftigt. Die Software für das
> rausschieben der Bits ist sehr gut optimiert. Und irgendwie muß ich ja

Denkst du.

> noch die neuen PWM Daten berechnen. Ich verwende dabei 256
> Helligkeitsstufen, die ich auf keinen Fall verringern möchte.
> Multiplexen kommt für mich auch nicht in frage, da das ja auch keine
> Rechenzeit spart.

Meinst du? Irrtum.

32 RGB LEDs (=96 einzelne LEDs) kann man wunderbar mit 6 + 16 Pins 
ansteuern. 16 Pins schreit nach zwei normalen 8 Bit Ports, 6 Pins finden 
sich irgendwo auf nem anderen Port. Das Ganze ist mit 3 (DREI) OUT 
Befehlen komplett schaltbar, nix mit dutzend Bits durchklappen.
Dabei schläft der AVR fast ein.

> Gibts da irgendetwas in einer normalen Preisklasse, was man in Asm
> programmieren kann?

Wer nur einen Hammer hat, sieht überall nur Nägel. ;-)
Anstatt den uC aufzubohren, sollte man den vorhandenen erstmal richtig 
nutzen lernen.

> ARM oder sowas hab ich mal gehört... Oder gibts da was besseres?

Ja, Brain 2.0

MFG
Falk

von Matthias (Gast)


Lesenswert?

Hallo

Haben kürzlich auch eine Uhr aufbaut mit 4 mal 16RGB Leds. Die 
Ansteuerung wurde parallel ausgeführt (Einblenden im SRAM) und dauert so 
für alle LED's nur ca 25µs (AtMega128@16Mhz).
Also:
Lass die Schieberegister weg und gibs einfach parallel aus....

Gruß

von David (Gast)


Lesenswert?

Hi.

Danke für die Zahlreichen antworten.

@Falk
>32 RGB LEDs (=96 einzelne LEDs) kann man wunderbar mit 6 + 16 Pins
>ansteuern. 16 Pins schreit nach zwei normalen 8 Bit Ports, 6 Pins finden
>sich irgendwo auf nem anderen Port.

Das klingt eigentlich sehr gut.

Verstehe ich das richtig, das man dann mit den 16 Pins die PWM Daten 
parallel an ein "latch"<--(stimmt das?) ausgibt und mit den anderen 6 
Pins die latches ansteuert, welcher gerade die Daten annehmen soll.

Was für eine Hardware würde ich da brauchen? Hat da schon jemand 
Erfahrung damit?


Dann wäre also das ausgeben an die latches ein klax für den µC und ich 
müßte nur mehr die PWM Daten berechnen.

von Matthias (Gast)


Lesenswert?

Hallo David.

Ja das siehst du richtig. Du gibst einfach die 12 mal 8bits (=96) also 
12Byte auf ein Latch aus. Du musst dir allerdings überlegen, ob du wie 
bei Falks Vorschlag:
2 Latches mit je 8bit verbaust, und die ausgabe über die (zusätzlichen) 
6bits (drei würden auch reichen) dann gemultiplext ausgibst, hier musst 
du allerdings schneller ausgeben, weil dieses multiplexen ja noch 
"untergebracht" werden muss..

oder,

ob du, wie ich es meinte 12latches verbaust, somit hättest du mit jeder 
Ausgabe (per interrupt??) nur 12Bytes zu lesen und zu speichern 
(24Befehle)

Das kommt aber auf dein konkretes Porblem an..
Als Latch würde ich in jedem Fall den 74HC573 empfehlen..

Gruß

von AVRFan (Gast)


Lesenswert?

>Ich verwende dabei 256 Helligkeitsstufen

Oder sind es doch nur 8? ;-)

Da dem Helligkeitsempfinden von Augen eine logarithmische Charakteristik 
zu eigen ist [*], entspricht der Schritt von einer Helligkeitsstufe zur 
nächstniedrigeren einem Halb-so-lange-Einschalten der LED.  256 kannst 
Du genau 8 mal sukzessive halbieren, bis Du bei 1 angekommen bist.

[*] Siehe sog. Weber-Fechner-Gesetz: "Die subjektive Stärke von 
Sinneseindrücken verhält sich logarithmisch zur objektiven Intensität 
des physikalischen Reizes."
http://de.wikipedia.org/wiki/Weber-Fechner-Gesetz

Deshalb sieht das richtige Schema, um eine LED zeitlich linear 
"helligkeits-gleichmäßig" hochzudimmen, so aus:

LED aus
LED für kurze Zeitspanne t mit "1/256"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/128"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/64"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/32"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/16"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/8"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/4"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/2"-PWM ansteuern
LED mit Dauerstrom ansteuern

Das sind acht Stufen zwischen "ganz aus" und "ganz ein".

Machst Du es dagegen "falsch" mit (vermeintlichen) 256 Stufen so...

LED für Zeit t mit "1/256"-PWM ansteuern
LED für Zeit t mit "2/256"-PWM ansteuern
LED für Zeit t mit "3/256"-PWM ansteuern
LED für Zeit t mit "4/256"-PWM ansteuern
LED für Zeit t mit "5/256"-PWM ansteuern
...
LED für Zeit t mit "253/256"-PWM ansteuern
LED für Zeit t mit "254/256"-PWM ansteuern
LED für Zeit t mit "255/256"-PWM ansteuern
LED mit Dauerstrom ansteuern

...wirst Du das Ergebnis eindeutig als nicht befriedigend empfinden, und 
zwar erscheint die LED dann als "komisch-zu-schnell-hell" (überzeuge 
Dich im Selbstversuch davon). Ein Unterschied von beispielsweise 238/256 
und 239/256 der Zeit eingeschaltet lassen ist nämlich physiologisch 
praktisch nicht wahrnehmbar und entspricht deshalb nicht einer ganzen 
Helligkeitsstufe sondern nur einem kleinen Bruchteil davon.

von Benedikt K. (benedikt)


Lesenswert?

@ AVRFan
Kennst du eine Lösung um eine LED ohne 256 PWM Stufen mit 8 optisch 
korrekten Helligkeitsstufen anzusteuern ?

@David
Wiso verringerst du nach jeder LED den PWM Zähler.

von Falk (Gast)


Lesenswert?

@David

> >32 RGB LEDs (=96 einzelne LEDs) kann man wunderbar mit 6 + 16 Pins
> >ansteuern. 16 Pins schreit nach zwei normalen 8 Bit Ports, 6 Pins finden
> >sich irgendwo auf nem anderen Port.

> Das klingt eigentlich sehr gut.

> Verstehe ich das richtig, das man dann mit den 16 Pins die PWM Daten
> parallel an ein "latch"<--(stimmt das?) ausgibt und mit den anderen 6
> Pins die latches ansteuert, welcher gerade die Daten annehmen soll.

Fast.

> Was für eine Hardware würde ich da brauchen? Hat da schon jemand
> Erfahrung damit?

Du brauchst keine extra Latches. Dein AVR ist das Latch. Alles was du 
brauchst sind 16+6=22 NPN Transistoren, BC337 oder als SMD BC848. Plus 
ein paar Widerstände.

> Dann wäre also das ausgeben an die latches ein klax für den µC und ich
> müßte nur mehr die PWM Daten berechnen.

Ja eben. Aber wie gesagt, du brauchst keine Latches, einfach auf den 
Port ausgeben und fertig.
Nochmal nach dem Stichwort Multiplexen googlen und drüber nachdenken.

@matthias

> ob du, wie ich es meinte 12latches verbaust, somit hättest du mit jeder
> Ausgabe (per interrupt??) nur 12Bytes zu lesen und zu speichern
> (24Befehle)

Das änder nixt an dem Bearbeitungsaufwand. Es steigert nur den 
Bauteilaufwand. Und der arme AVR langweilt sich nochmehr.

> Das kommt aber auf dein konkretes Porblem an..
> Als Latch würde ich in jedem Fall den 74HC573 empfehlen..

Ich würde sie schlicht und einfach weglassen.

MfG
Falk


von Falk (Gast)


Lesenswert?

@ Benedikt K.

> Kennst du eine Lösung um eine LED ohne 256 PWM Stufen mit 8 optisch
> korrekten Helligkeitsstufen anzusteuern ?

Ganz einfach, eine PWM mit 8 Stufen, nur dass die eben nichtlinear 
verteilt sind. Wie AVRFan das schon sehr deutlich dargestellt hat.

MFG
Falk

von Benedikt K. (benedikt)


Lesenswert?

Wenn die PWM Stufen nicht linear verteilt sind, muss der uC aber totzdem 
schnell genug sein, um eigentlich alle linearen Stufen erzeugen zu 
können, sonst kann er die feinste Stufe nicht.
Oder verstehe ich was falsch ?

von Falk (Gast)


Lesenswert?

> schnell genug sein, um eigentlich alle linearen Stufen erzeugen zu
> können, sonst kann er die feinste Stufe nicht.

Ja.

Mfg
Falk

von Falk (Gast)


Angehängte Dateien:

Lesenswert?

So, hier mal auf die Schnelle ein Designvorschlag für 32 RGB-LEDs, 
Common Anode. Die Standardbeschaltung für den AVR fehlt noch, dürfte 
aber nicht das Problem sein.

MFG
Falk

von Richard (Gast)


Lesenswert?

kurze Überschlagsrechnung:
angenommene PWM-Frequenz: 100Hz -> 10ms Periodendauer
angenommene 8Bit-PWM: 10ms/256 = 39us, d.h. die Schaltflanken können 
alle 39us kommen. Das ist die Zeit zwischen 2 Timerinterrupts. (z.B. bei 
1/256-Ansteuerung). Das halte ich schon für reichlich knapp, wenn der uC 
noch anderes nebenher machen soll.

Jetzt kommt noch dein Multiplex dazu. D.h. es kann maximal eine aus 
sechs LEDs "gleichzeitig" leuchten. Durch höheren Strom kannst du die 
verringerte Helligkeit (wg. kürzerer Ansteuerung) wieder ausgleichen - 
das zeitliche Problem bleibt aber. -> 39us/6 = 6,5us. Also wieder alle 
6.5us müsste der Timerinterrupt kommen.
Habe ich mich verrechnet oder kommt das so hin?
Viel geht da nebenher aber nicht mehr, oder?!?

von matthias (Gast)


Lesenswert?

Ungeachtet der verschiedensten Lösungsvorschläge würde mich doch mal 
interessieren, ob konsumfreundliche Mikrocontroller für 50 MHz und mehr 
existieren.

von A.K. (Gast)


Lesenswert?

Was ist für dich konsumfreundlich?

Unabhängig davon ob diese Aufgabe hier nun sinnvoll gelöst ist oder 
nicht: für diesen Job wäre der Parallax-Propeller wahrscheinlich 
geeignet.

Anonstens sind natürlich die ARMs passende Kandidaten. LPC2103 mit 70MHz 
und sehr schnellem Pinwackeln.

von rene (Gast)


Lesenswert?

Die Schieberegister sind schon gut, aber man sollte sie am SPI port 
anhaengen und nicht bitbangen. Alternativ kann man ein Parallel zu SPI 
interface in einem CPLD bauen und das schieben dann mit dem CPLD machen. 
Ein schnellerer Prozessor macht wenig bis gar keinen Sinn.

rene

von Simon K. (simon) Benutzerseite


Lesenswert?

Äh Moment: Schieberegister?

Benutz das On-Board SPI Modul, dann brauchst du die sachen nicht 
herausschieben. Den SPI Bus kannst du mit max Fclk/2 laufen lassen..
Das ganze noch Interruptgesteuert und dein Mikrocontroller hat fast 100% 
seiner Rechenleistung für Kaffeekochen frei.

von matthias (Gast)


Lesenswert?

@ A.K.: Mhm das ist doch schonmal ganz nett. Konkretes Ziel von mir (mit 
dem Hintergrundgedanken, ob das überhaupt realisierbar ist) wäre eine 
Laufzeitmessung von Licht mit einer Genauigkeit von <1cm. Also zwei 
Stationen, die mit einer Auflösung von 1 ns und weniger einen 
Lichteinfall bemerken und protokollieren.

von Fred (Gast)


Lesenswert?

Hallo zusammen,

@matthias:
Da die Lcihtgeschwindigkeit für viele Anwendungen hinreichend genau 
bekannt ist, würde ich empfehlen, anstelle der Laufzeitmessung lieber 
den Zollstock rauszukramen und die Strecke abzumessen.
Wenn es Dir auf genaue und genaueste Streckenmessung ankommt, dann 
probier das ganze per Ultraschall oder für die supergenaue Messung mit 
einem Interferrometer. Wäre dann nur noch die Frage, wie genau und 
welche Maximalwerte Du Messen willst (Die Länge Deines Autos muss nicht 
auf nm genau sein und die Dicke des Lacks wird kaum über den mm-Bereich 
gehen).
Gruß

Fred

von Falk (Gast)


Lesenswert?

@matthias

Und wieso glaubt alle Welt, jeden Mist mit nem uC in Software machen zu 
müssen? Für solche Sachen gibt es zugeschnittene Hardware.

MFG
Falk

von Falk (Gast)


Lesenswert?

@ Richard

> kurze Überschlagsrechnung:
> angenommene PWM-Frequenz: 100Hz -> 10ms Periodendauer
> sechs LEDs "gleichzeitig" leuchten. Durch höheren Strom kannst du die
> verringerte Helligkeit (wg. kürzerer Ansteuerung) wieder ausgleichen -
>das zeitliche Problem bleibt aber. -> 39us/6 = 6,5us. Also wieder alle
>6.5us müsste der Timerinterrupt kommen.

Richtig. Aber

a) Bei 16 MHz sind das immerhin 104 Takte. Plenty of time.
b) Wenn man sinnvollerweise die nichtlineare PWM von AVRFan mit 8 Stufen 
implementiert, dann ist spätestens nach der 2. oder 3. Stufe viiiiiel 
Zeit für den uC, andern Kram zu machen.
c) Wer partou ne normale 8 Bit PWM machen will sollte darüber 
nachdenken, die  PWM in einen CPLD zu verlagen und nur noch das MUXen im 
uC zu machen. Der hat dann aber wirklich nix mehr zu tun.

Viele Wege führen nach ROM. Oder ins LED Land ;-)

MFG
Falk

von Aufreger deluxe (Gast)


Lesenswert?

> Und wieso glaubt alle Welt, jeden Mist mit nem uC in Software machen zu
> müssen?

Weil es meistens die günstigste, flexibelste und am leichtesten 
beschaffbare Lösung darstellt.

von matthias (Gast)


Lesenswert?

@ Fred:
Würd ich gerne, ist aber nicht möglich. Ziel ist eine Blitzortung. 
Blitze senden elekromagnetische Strahlen aus, die auf einem bestimmten 
Frequenzband empfangbar sind. Diese breiten sich bekanntermaßen mit 
Lichtgeschwindigkeit aus. Ziel ist es jetzt, mit 3 bzw. 4 Messstationen 
im Abstand von einem Meter die Position des Blitzeinschlages 
herauszufinden. Aber ich möchte hier jetzt eigentlich nicht das Thema 
des Threads verändern, ich habe nur die Gunst der Stunde genutzt um in 
diesem Thread nach solchen schnellen Prozessoren zu fragen.

von Falk (Gast)


Lesenswert?

@matthias

UNd du glaubst, dass diche ine 50 oder meinetwegen 100 MHz scheller 
PRozessor der Lösung des Problems näher bringt? Deine 1 meter 
entferneten Messtationen haben einen Laufzeitunterschied von knapp 3ns. 
Ausserdem sind die elektromagnetischen Impulse der Blitze irgendwo im 
Mittelwellenbereich angesiedelt, ich hab da so meine Zweifel, ob man da 
mit um 1m versetzten Messpunkten sinnvolle Ergebnisse bekommt. 
(Wellenlänge im Bereich mehrere Meter).

@ Aufreger deluxe

> > Und wieso glaubt alle Welt, jeden Mist mit nem uC in Software machen zu
> > müssen?

> Weil es meistens die günstigste, flexibelste und am leichtesten
> beschaffbare Lösung darstellt.

Jaja, die Generation Nintendo. Einen Horizont wie eine knieende Ameise 
und Scheuklappen noch dazu. Wo man früher nen Bimetall-Schalter zur 
Steuerung ner Kaffeemaschine eingebaut hat ist heute ein embedded 
Webserver drin.
Und wenn der mit 20 MHz zu langsam ist, schreit man nach nem P4. Ist ja 
auch praktisch, da ist das Heizelement integriert. ;-)

MFG
Falk

von Aufreger deluxe (Gast)


Lesenswert?

Ich verstehe jetzt zwar den Zusammenhang zw. Bimetall-Schalter und PWM 
nicht, aber ist auch egal. Gehörst wohl auch zu der Generation, die, nur 
weil sie löten kann, der Meinung ist, voll die Peilung in Sachen 
Elektronik zu haben. Kommt hier neu ins Forum und will gleich mit den 
Großen pissen gehen...

Kaffeemaschine und Webserver, hab ich noch nie gesehen. Bleibe bitte bei 
der Realität.

von Falk (Gast)


Lesenswert?

@ Aufreger deluxe

> Ich verstehe jetzt zwar den Zusammenhang zw. Bimetall-Schalter und PWM
> nicht, aber ist auch egal. Gehörst wohl auch zu der Generation, die, nur

Es ging auch nicht um PWM, sondern den mal wieder vollkommen 
verkrampften Versuch, jegliche Dinge mittels (schnellem) uC zu lösen.

> weil sie löten kann, der Meinung ist, voll die Peilung in Sachen
> Elektronik zu haben. Kommt hier neu ins Forum und will gleich mit den

Keine Bange, ich hab schon ein klein wenig mehr Ahnung von Elektronik, 
als nur zu wissen welches Ende vom Lötkolben man anfassen sollte . . 
.;-)

> Großen pissen gehen...

Meiner ist trotzdem länger . . .

> Kaffeemaschine und Webserver, hab ich noch nie gesehen. Bleibe bitte bei
> der Realität.

Tu ich. Dir sagen der Begriff Ironie und Satire etwas?
Ausserdem, du hast das übersehen.

;-)

MFG
Falk

von Aufreger deluxe (Gast)


Lesenswert?

> Meiner ist trotzdem länger . . .

LOL :)

von Unwissender (Gast)


Lesenswert?

Und ich hab den grössten! 23 cm, kein Witz!
Also regt euch ab Jungs und geht wieder spielen.

von David (Gast)


Lesenswert?

Hi

Hätte da noch ein paar fragen.

@Falk
Dein Schaltplan sieht echt gut aus.

1. Muß ich da nicht noch Widerstände vor den leds verbauen, oder kann 
man da was mit dem IRF machen?

2. Wenn ja, kann ich da kleinere Widerstände nehmen, da sie ja nur mit 
1/6 gepulst werden. 20m mA x 6 = 120 mA. Überleben das die Leds?

3. Wo kann ich in Eagle den IRF7341 finden?


@AVRFan
Ich habe 2 Methoden versucht.

erstens meine:

LED für Zeit t mit "1/256"-PWM ansteuern
LED für Zeit t mit "2/256"-PWM ansteuern
LED für Zeit t mit "3/256"-PWM ansteuern
LED für Zeit t mit "4/256"-PWM ansteuern
LED für Zeit t mit "5/256"-PWM ansteuern
...
LED für Zeit t mit "253/256"-PWM ansteuern
LED für Zeit t mit "254/256"-PWM ansteuern
LED für Zeit t mit "255/256"-PWM ansteuern
LED mit Dauerstrom ansteuern

Hab Dabei ein pwm Register von 0 auf 255 raufgezählt und wieder runter.
Die Led dimmt schön ein und aus.

Und bei Deiner Version:

LED aus
LED für kurze Zeitspanne t mit "1/256"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/128"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/64"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/32"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/16"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/8"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/4"-PWM ansteuern
LED für kurze Zeitspanne t mit "1/2"-PWM ansteuern
LED mit Dauerstrom ansteuern

Wenn ich so eine Led ein und ausdimmen lasse, dann sieht das ganze sehr 
ruckelig aus. Also sie dimmt nicht schön ein sondern es schaut beim 
eindimmen so abgehackt aus, da es ja nur 8 verschiedene Helligkeiten 
sind.

Oder hab ich da was falsch verstanden?

Gruß David

von Falk (Gast)


Lesenswert?

@ David

> 1. Muß ich da nicht noch Widerstände vor den leds verbauen, oder kann
> man da was mit dem IRF machen?

Wozu? Die 16 Transistoren T7..T22 sind, man schaue in den Schaltplan, 
Konstantstromquellen. Da braucht es keine weiteren Widerstände.

> 2. Wenn ja, kann ich da kleinere Widerstände nehmen, da sie ja nur mit
> 1/6 gepulst werden. 20m mA x 6 = 120 mA. Überleben das die Leds?

Wenn die MUX immer muxt und nicht stehen bleibt, JA.

> 3. Wo kann ich in Eagle den IRF7341 finden?

AFAIK gar nicht. Selber machen ist angesagt. SO-8 Gehäuse und P-Kanal 
Mosfet Symbol.

MFG
Falk

von David (Gast)


Lesenswert?

Hallo Falk.

Das sind also Konstantstromquellen. Also lassen die immer nur 130mA 
durch?

Und wie ist das mit den Volt? Die roten Leds benötigen ja nur 2V und die 
blauen und grünen benötigen 3,6V. Steuert das der BCP von selbst?

Achja, beim Multiplexen..

Wenn ich die Leds mit 100Hz ansteuern will, dann muss ich so 
rechnen...stimmt das?

100Hz x 256 Helligkeiten x 6 Multiplexen = 153600 Hz

Also müßte man dann bei 16MhZ alle 104 Takte die Leds ansteuern. Stimmt 
das so?

Gruß David

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Ich weiß nicht, ob hier Stromquellen notwendig sind, du hast doch ne 
feste SPannung von 5Volt, da kannst du doch jede Farbe auf einen 
Multiplexer nehmen und die Vorwiderstände exakt ausrechnen. Und nimm die 
"oberen" Transistoren NPN Typen in Kollektorschaltung, da sparst du dir 
die Basiswiderstände...

Entscheidend für die Hardware ist aber auch die Organisation des 
Videospeichers..
evtl so:
uint8_t rot[4] ;
uint8_t grün[4];
uint8_t blau [4];
somit ist jedem Bit eine Farbe einer LED zugeordnet.
rot[0]: bit0..7 gleich LED1..8 rot,
rot[1]: bit0..7 gleich LED9..16 rot,
..

Hier ein beispiel: siehe anhang

von David (Gast)


Lesenswert?

Hallo Mathias.

Naja, bei Deiner Schaltung brauch ich wieder 96 Stück Widerstände, darum 
würde ich die Variante von Falk bevorzugen.

Aber nochmal zu vorherigen Frage:

>100Hz x 256 Helligkeiten x 6 Multiplexen = 153600 Hz

>Also müßte man dann bei 16MhZ alle 104 Takte die Leds ansteuern. Stimmt
>das so?

Kann mir das jemand beantworten?

von Falk (Gast)


Lesenswert?

@ David


> Das sind also Konstantstromquellen. Also lassen die immer nur 130mA
> durch?

Genau, Nomen est Omen.

> Und wie ist das mit den Volt? Die roten Leds benötigen ja nur 2V und die
> blauen und grünen benötigen 3,6V. Steuert das der BCP von selbst?

Das ist ja der Trick der Konstantstromquelle!

> Wenn ich die Leds mit 100Hz ansteuern will, dann muss ich so
> rechnen...stimmt das?
> 100Hz x 256 Helligkeiten x 6 Multiplexen = 153600 Hz
> Also müßte man dann bei 16MhZ alle 104 Takte die Leds ansteuern. Stimmt
> das so?

Ja, stimmt. Ist ja auch schondreimal vorgerechnet wurden im Thread ;-)

MFG
Falk

von Falk (Gast)


Lesenswert?

@  Matthias

> Ich weiß nicht, ob hier Stromquellen notwendig sind, du hast doch ne
> feste SPannung von 5Volt, da kannst du doch jede Farbe auf einen
> Multiplexer nehmen und die Vorwiderstände exakt ausrechnen. Und nimm die

Das glaube ich kaum, denn sowohl durch die Matrixsteuerung als auch die 
Common Kathode/Anode Beschaltung der üblichen RGB-LEDs ist es Essig mit 
separaten Vorwiderständen für R/G/B. Ausserdem ist dir hoffentlich 
bekannt, dass die Flusspannung der LEDs a) mit der Temperatur als auch 
b) mit der Herstellungscharge schwankt?! Wo ist das Problem mit den 
Stromquellen?

Ausserdem, deine Schaltung ist ein wenig komisch. Du brauchst für 3 RGB 
LEDs (=9 Einzel-LEDs) 3+3 Transistoren + 9 Widerstände + 3 Pins?

Macht bei 32 RGB-LEDs (und das war ja die Aufgabenstellung)

32/3 = 11

11 * 6 = 66 Transistoren
11 * 9 = 99 Widerstände
11 * 3 = 33 Pins für die RGB Ansteuerung

So ne richtige Matrix ist das aber nicht, vor allem sehe ich nicht ganz 
den Multiplex-Faktor?

> Entscheidend für die Hardware ist aber auch die Organisation des
> Videospeichers..

Erstmal ne gescheite LED-Matrix, dann die Software.

MfG
Falk



von Falk (Gast)


Lesenswert?

@  Matthias

Ach ja, auch auf die Gafahr hin mich zum hundertsten Mal zu wiederholen.

Schaltpläne als GIF oder PNG speichern!

Und wenn mans auf Teufel komm raus in PDF umwandeln will, dann dort 
bitte als verlustfrei komprimierte Bild einblenden. Ja, gescheiten 
PDF-Generatoren kann man das sagen.

MFG
Falk

von Matthias (Gast)


Lesenswert?

Also: pdf ging schneller als irgendein Bild.

@Falk:
Der Multiplexfaktor ist da, man muss ihn nur finden..

Ihr könnt gern die LED's irgendwie an irgendwelche WAHLLOSEN Ports 
anklemmen, und die Multiplexleitungen auch gerne irgendwelche beliegigen 
PINS verwenden..
Ihr werdet euch dann "freuen" wenn ihr dann sinnvolle Ausgaben 
(Zeichensätze..oder so, weiß ja den Zweck nicht) programmieren wollt und 
jedes Bit (für jede Farbe) an irgendwelche wahllosen Stellen kopieren 
dürft...
Deshalb heißt es bei mir nicht zwingend: soviel Funktionalität wie 
möglich in die Software packen, sondern auch mal etwas in Hardware 
aufbauen. Damit nicht  sinnlos Klimmzüge in der SOftware gemacht werden 
müssen.

Wir haben kürzlich 64RGB-Leds (LATB T66C) mit klassischen 
Vorwiderständen verwendet und können keine Unterschiede in der 
Helligkeit feststellen..


Aber das ist ja ein Forum zum Meinungsaustausch, habe ja nur meine 
Erfahrungen hier zum Besten gegeben.. Diese können von anderen verwendet 
oder verworfen werden.. Ich fahre mit diesem Konzept ziemlich gut, aber 
andere können gern meine Erfahrungen nachholen..

Gruß

von David (Gast)


Angehängte Dateien:

Lesenswert?

Habe jetzt mal versucht, die Software zu schreiben, für den Schaltplan 
was Falk gezeichnet hat.

Also ich lege meine PWM Daten im S-Ram ab.

Dabei ist:

0x0060 die 1'te rote Led
0x0061 die 1'te grüne Led
0x0062 die 1'te blaue Led
0x0063 die 2'te rote Led
0x0064 die 2'te grüne Led
...
...
...
0x00be die 32'te grüne Led
0x00bf die 32'te blaue Led

Ich finde, daß man so am einfachsten die Bits manipulieren kann.

Im Multiplexbetrieb gebe ich dann die pwm Daten folgender Maßen aus:


ld    temp1,x
cp    pwm, temp1
adc    temp2,temp2
adiw        xh:xl,6

als erstes hole ich mir das erste byte von 0x0060
dann vergleich ich es mit meinem pwm Register
falls das carrybit gesetzt ist, schiebt er es in temp2
dann noch zu 0x0060 6 dazuaddieren, damit ich zur nächsten roten Led 
komme

In meinem Timer muß ich dann die 4 oberen Befehle 16mal durchlaufen 
lassen.
Ich verwende dazu keine Schleife, das spart mir ein paar Takte.

Ganz zum Schluß lade ich mir noch von 0x00c0 bis 0x00c5 die Daten für 
den IRF und gib dann alle 3 bytes auf den jeweiligen Port aus.

Bild im Anhang.

Nun meine Frage. Könnte man das noch irgendwie schneller oder besser 
machen, oder kann man das so lassen?

@ Falk
Also den BCP und den IRF hab ich bei Reichelt gefunden.

Laut Datenblatt brauch ich ja dann nur 2 IRF, weil in einem 2 
Transistoren verbaut sind.

Bei den BCP52 werd ich aus dem Datenblatt nicht schlau.
Liefert der immer 130mA oder kann man das mit den Vorwiderständen 
regeln?
Es könnte nämlich sein, das ich vielleich mal mehrere Leds verbaue.


Wie kann ich dann die mA verändern.

Gruß David

von David (Gast)


Lesenswert?

Kennt sich den keiner mit den BCP52-16 aus?

Gruß David

von Falk (Gast)


Lesenswert?

Moin Moin

Bin nach der Silvesterfeier wieder ansprechbar ;-)

@ Matthias

> Also: pdf ging schneller als irgendein Bild.

Eagle kann direkt PNG exportieren.

> @Falk:
> Der Multiplexfaktor ist da, man muss ihn nur finden..

Suchet, so werdet ihr finden.

Ich habs immer noch nicht so ganz kapiert. Wie MUXt du denn deine LEDs 
nun?

> Ihr könnt gern die LED's irgendwie an irgendwelche WAHLLOSEN Ports
> anklemmen, und die Multiplexleitungen auch gerne irgendwelche beliegigen
> PINS verwenden..
> Ihr werdet euch dann "freuen" wenn ihr dann sinnvolle Ausgaben
> (Zeichensätze..oder so, weiß ja den Zweck nicht) programmieren wollt und
> jedes Bit (für jede Farbe) an irgendwelche wahllosen Stellen kopieren
> dürft...

Auch wenn du damit im Prinzip Recht hast, darfst du davon ausgehen, dass 
auch andere Leute einschliesslich mir darüber nachgedacht haben.

> Deshalb heißt es bei mir nicht zwingend: soviel Funktionalität wie
> möglich in die Software packen, sondern auch mal etwas in Hardware
> aufbauen. Damit nicht  sinnlos Klimmzüge in der SOftware gemacht werden
> müssen.

Das hat niemand behauptet oder vorgeschlagen.

> Wir haben kürzlich 64RGB-Leds (LATB T66C) mit klassischen
> Vorwiderständen verwendet und können keine Unterschiede in der
> Helligkeit feststellen..

Unterschied zu was? Na klar geht es auch mit normalen Vorwiderständen, 
aber eben mit höherem Bauteilaufwand und ggf. kleineren funktionalen 
Einschänkungen.

> Aber das ist ja ein Forum zum Meinungsaustausch, habe ja nur meine
> Erfahrungen hier zum Besten gegeben.. Diese können von anderen verwendet
> oder verworfen werden.. Ich fahre mit diesem Konzept ziemlich gut, aber
> andere können gern meine Erfahrungen nachholen..

Ja. Aber es darf dann doch bitte auch über Vor- und Nachteile von 
Lösungen gesprochen werden bzw. sachlich Kritik geübt werden.

@ David

> Im Multiplexbetrieb gebe ich dann die pwm Daten folgender Maßen aus:

> Ganz zum Schluß lade ich mir noch von 0x00c0 bis 0x00c5 die Daten für
> den IRF und gib dann alle 3 bytes auf den jeweiligen Port aus.

> Nun meine Frage. Könnte man das noch irgendwie schneller oder besser
> machen, oder kann man das so lassen?

Naja, die Frage ist, ob man die PWM-Daten ständig online berechen will 
oder nur einmal und diese dann im SRAM einfach ablegt und per Timer 
einfach ausgibt. Die MEGAs haben ja ne Menge SRAM, und wenn man die 
nichtlineare PWM von AVRFan implementiert, hält sich der Speicherbedarf 
auch in Grenzen (8x6x2 = 96 Bytes)

> Also den BCP und den IRF hab ich bei Reichelt gefunden.

Das war Absicht. ;-)

> Laut Datenblatt brauch ich ja dann nur 2 IRF, weil in einem 2
> Transistoren verbaut sind.

Du brachst drei, wenn du 16x6 MUXen willst.

> Bei den BCP52 werd ich aus dem Datenblatt nicht schlau.
> Liefert der immer 130mA oder kann man das mit den Vorwiderständen
> regeln?
> Wie kann ich dann die mA verändern.

Die drei Widerstände bestimmen den Strom. Wenn du den ändern willst, 
musst du im wesentlichen nur den 2,2 Ohm Widerstand ändern. Am bestem 
mit Pspice aufbauen und simulieren, hab ich auch gemacht.

MFG
Falk

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>Liefert der immer 130mA oder kann man das mit den Vorwiderständen
>regeln?

Der liefert nur dann 130mA, wenn er auch Konstantstromquelle beschaltet 
ist, so wie in diesem Fall.

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.