mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht mit 28! Led´s


Autor: Günter Tholen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte in eine Deckenlampe ein Lauflicht mit 28 LED´s einbauen. Die
Übergänge sollen weich erfolgen. 5 Led´s sollen leuchten, wovon die in
der Mitte mit 100%, die beiden angrenzenden mit z.B. 70% und die
äußeren mit 40% Helligkeit (genaue Werte müssen noch ermittelt werden)
leuchten sollen. Das ganze soll auf der Rundbahn der Led´s mit
langsamer Geschwindigkeit laufen.

Wer hat so etwas schon gemacht, weiß ob es so etwas schon fertig gibt,
kann mir einen Überblick vermitteln, wie groß der Programmieraufwand
wird, wenn ich selbst progrmmieren muß?

Schreibt mal bitte Eure Meinungen.

Danke
Günter Tholen

Autor: bla0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

dürfte nicht soviel aufwand sein (kommt noch auf spezialeffekte an :))
mit einer Porterweiterung

gibt schon irgendwo so einen artikel. mit google müßte sich was finden
lassen

mfg bla

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt nach ner 28 * 8Bit Software-PWM.

Dafür sollte ein ATMega8515 ausreichen (35 Portpins).


Peter

Autor: Schoasch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich habe so etwas ähnliches schon gemacht. Bei meinem Programm kam ich
dann halt doch schon auf einige Programmzeilen... aber im grunde ist es
nicht schwer.
Der weiche Übergang er gibt sich bei automatisch, da das Menschliche
auge etwas langsamer ist... dadurch fällts nicht so auf.
Ich zeige dir mal ein Bild davon.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe soetwas auch schon einmal umgesetzt. Habe 28 Kanäle
angesteuert, wobei ein Kanal aus 18 Luxeon III-LEDs bestand. Ich habe
es mit einem AtMega8 und 4 Schieberegister gelöst. War zwar etwas
aufwendig, doch es hat funktioniert und sieht auch toll aus!

mfg Andy

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Überschrift hat mich erschreckt als ich 28! las.
Ich dachte Du willst 28 Fakultät LEDs ansteuern ;)
Das wären so viel:
304888344611713860501504000000

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol

Autor: Günter Tholen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Danke für die Antworten.
Ich habe mal ein Bild angehängt, damit Ihr Euch eine Vorstellung von
der Dimension machen könnt. Die Platte hat eine Länge von 176cm und der
Abstand der LED´s ict 10cm.

Schoasch,
bei Dir sehe ich 4 Segmente auf der Kreisbahn. Sind diese Segmente
parallel geschaltet oder kann man die Led´s auch einzeln ansteuern.

Gruß
Günter

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

3 Dinge:

erstens, willst du sowas schon fertig haben uns suchst hier nach einer
kauflösung?

zweitens, kommt selber bauen, sprich platine entwickeln, controller
programmieren und hardwareplanung in frage?

drittens, wenn zweitens zutrifft:

    erstens, ein controller mit ausreichend portpins ist vorteilhaft:

          da: hardwareeinsparungen, für jede led ein transistor,
          keine weitren externen register, zähler,multiplexer usw...

    einen kleinen controller, mit weniger port pins

          problem: höherer hardwareaufwand, da du die pwm dann über
          externe erweiterungen auf 28 kanälen erzeugen musst..

          problem: höherer softwareaufwand, da du die ansteuerung der
          externen hardware noch zusätzlich zu der pwm als software
          mit implementieren musst

viertens: ansonsten ist der aufwand für eine 28kanal pwm absehbar, und
zum einsteigen oder ausprobieren durchaus denkbar.

Maddin

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
28-Kanal PWM ?

Ich dachte gelesen zu haben, dass je nach Geschicklichkeit des
Programmieres ein Controller mit 10 Software-PWM schon gut ausgelastet
sein kann.

Sicherlich könnte man da überlegen, PWM mit nicht allzu hoher Auflösung
zu verwenden, nur sind dem auch Grenzen gesetzt, da das menschliche Auge
die Helligkeit einer LED ja nicht linear empfindet.

Sorry, aber ein "zum einsteigen oder ausprobieren durchaus denkbar"
halte ich für leicht übertrieben ...

Autor: Günter Tholen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Maddin,

also kaufen kann jeder!
Ich will es selbst bauen, programmieren, etc. Grundsätzliche Kenntnisse
über Elektronik bzw. Mikrocontroller habe ich. Was ich brauche ist nur
der Anstoß, wie ich soetwas umsetzen kann.
Wie setzt man eine Pulsweitenmodulation im Programm um, damit ich die
Led´s hochdimmen kann. Ich habe hier noch keine Erfahrung.
Habe jetzt schon mehrfach gelesen, daß der ATmega8 wohl geeignet ist.

Gruß Günter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich dachte gelesen zu haben, dass je nach Geschicklichkeit des
>  Programmieres ein Controller mit 10 Software-PWM schon gut
> ausgelastet sein kann.

Wenn alle gleichzeitig aktiv sind. Nach Günters Beschreibung sollen
aber immer nur 5 gleichzeitig an sein. Im Prinzip ist es also eher aine
5-Kanal-PWM, bei der die Kanäle halt durchrotiert werden.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so wirds gemacht!

stelle dir einen zähler vor, der zählt in einer endlos schleife von
0...99, wenn er bei 99 angekommen ist startet er wieder bei 0....

weiterhin existiert eine variable in der deine helligkeit abgelegt ist
auch von 0-99 (%) (achtung bei leds nicht linear zur pwm) aber zum
erklären sollte das reichen.

in der schleife addierst du die beiden werte und guckst ob sie größer
100 sind, wenn ja, schaltest du den pin ein, wenn sie kleiner 100 sind
schaltest du den pin aus.

bsp.

beinhaltet die variable den wert 50 und die schleife dann sind die
zählerwerte von 0-49 blei in addition mit der 50 kleiner 100, der pinne
ist also aus,
wird der zähler größer 49 (49-99) sind die werte in addition mit der 50
größer 100 und der pinne ist an.

daraus resultiert eine 50-50 Pwm, die stellvertretend für die
helligkeit steht.

maddin.

ps.: der ansatz zu sagen ich mache eine 5 kanal pwm, und verschiebe
dann die 28 kanäle ist sicher der beste :-)

Autor: Schoasch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir kann man jede einzeln ansteuern. Wie du richtig erkannt hast,
besteht es aus 4 Segmenten. Du musstest halt dann bei den Übergängen
der Segmente etwas aufpassen.

Ich persönlich würde das ganze dann zb mit einem PIC18LF6620 machen..
denn der Kostet bei Reichelt gerade einmal 2.95Euro.. und hat 54
IO-Pins und 5 PWM-Module.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:

bsp.

beinhaltet die variable den wert 50 und die schleife die
zählerwerte von 0-49 dann sind die werte in addition mit der 50 kleiner
100, der pinne
ist also aus,
wird der zähler in der schleife größer 49 (50-99) sind die werte in
addition mit der 50
größer 100 und der pinne ist an.

daraus resultiert eine 50-50 Pwm, die stellvertretend für die
helligkeit steht.

maddin.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn alle gleichzeitig aktiv sind. Nach Günters Beschreibung sollen
> aber immer nur 5 gleichzeitig an sein. Im Prinzip ist es also eher
> aine 5-Kanal-PWM, bei der die Kanäle halt durchrotiert werden.

Ups du hast recht, das hatte ich übersehen.

Also bräuchte man im einfachsten Falle einen Controller mit genug
I/O-Pins und ein 5-fach Software-PWM, dass dann einfach auf die
entsprechenden Pins umgelegt wird.
Alternativ hatte ich auf der Atmel-Seite auch mal Controller mit 8
Hardware-PWMs gesehen, allerdings habe ich keine Ahnung, wo man die
herbekommt.

Softwarebeispiele für PWM oder Prinziperklärungen gibt es in den
Datenblättern oder unter Benutzung der Suche zu genüge ...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex

> Ich dachte gelesen zu haben, dass je nach Geschicklichkeit des
>  Programmieres ein Controller mit 10 Software-PWM schon gut
> ausgelastet sein kann.

Nö.

Bei hoher Kanalzahl bietet sich die Tabellenmethode an.
Benötigt zwar etwas SRAM und die Einsortierung geänderter Einträge ist
etwas tricky.

Bei 28 Kanälen hat man max 29 Änderungen + 1 Eintrag zum Einfügen = 30
Einträge.

Jeder Eintrag enthält die nächste Wartezeit (1Byte), das Ausgabemuster
(28 Ausgänge = 4Byte) und den Zeiger auf den nächsten Eintrag (2Byte).

Macht also 30 * (1 + 4 + 2) = 210 Byte SRAM.

Als Prescaler nimmt man 64, d.h. die PWM-Frequenz ist 16MHz  64  255
= 980Hz.

Die CPU-Auslastung ist unter 29/255 = 11%


Peter

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich dachte gelesen zu haben, dass je nach Geschicklichkeit des
> Programmieres ein Controller mit 10 Software-PWM schon gut
> ausgelastet sein kann.

Bei einem Prescaler von 64 hast du von einem Timer Overflow
zum nächsten 16320 Takte Zeit. Das wird ja wohl reichen
um 28 unsigned char durchzugehen und zu entscheiden ob der
zugehörige Pin auf 0 oder 1 gesetzt werden muss.

unsigned char Channels[28];
unsigned char PWMCounter;

ISR( TIMER0_OVF_vect)
{
  unsigned char i;

  PWMCounter++;
  if( PWMCounter == 101 )
    PWMCounter = 0;

  for( i = 0; i < 28; ++i ) {
    if( PWMCounter < Channel[i] )
      // Setze Portpin auf 1
    else
      // setzte Portpin auf 0
  }
}

und das war dann im Prinzip schon die PWM für 28 Kanäle.
Ev. kann es sinnvoll sein für jeden zu bedienenden Port
eine eigene Schleife aufzusetzen, da dann das Pin-setzen
einfacher wird und man das setzen und löschen ... ach was solls

ISR( TIMER0_OVF_vect)
{
  unsigned char i;
  unsigned char Mask;
  unsigned char PortA = 0, PortB = 0, PortC = 0, PortD = 0;

  PWMCounter++;
  if( PWMCounter == 101 )
    PWMCounter = 1;

  // die ersten 8 PWM Kanäle sind auf Port A
  Mask = 0x01;
  for( i = 0; i < 8; ++i ) {
    if( PWMCounter < Channel[i] )
      PortA |= Mask;
    Mask = Mask << 1;
  }
  PORTA = PortA;

  // die PWM Kanäle 8 bis 15 sind auf Port B
  Mask = 0x01;
  for( ; i < 16; ++i ) {
    if( PWMCounter < Channel[i] )
      PortB |= Mask;
    Mask = Mask << 1;
  }
  PORTB = PortB;

  // die PWM Kanäle 16 bis 23 sind auf Port C
  Mask = 0x01;
  for( ; i < 24; ++i ) {
    if( PWMCounter < Channel[i] )
      PORTC |= Mask;
    Mask = Mask << 1;
  }
  PORTC = PortC;

  // und schlussendlich: die PWM Kanäle 24 bis 27 sind auf Port D
  Mask = 0x01;
  for( ; i < 28; ++i ) {
    if( PWMCounter < Channel[i] )
      PortD |= Mask;
    Mask = Mask << 1;
  }
  PORTD = PortD;
}


Ich hab das jetzt nicht ausprobiert (meine LED PWM funktioniert
nach diesem Prinzip mit 10 Leds macht aber noch wesentlich mehr
im Interrupt), aber für den unwahrscheinlichen Fall, dass das da
oben mehr als sagen wir mal 10000 Takte braucht, könnte man
immer noch hergehen und bei jedem Timer-Overflow Interrupt eine andere
8-er Gruppe bearbeiten. Bei 16 Mhz bist dann immer noch
über 200 Hz PWM-Frequenz.

Autor: Jankey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CAT310

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl Heinz,

"Bei einem Prescaler von 64 hast du von einem Timer Overflow zum
nächsten 16320 Takte Zeit."


Dann hat aber Deine 100-Stufen PWM:

16MHz  16320  100 = 9,8Hz

und das ist definitiv zu wenig.


Peter

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast recht. Irgendwo hab ich mich da verrechnet.
Böser, böser Windows-Rechner.

Also 64 ist zuviel.
8 geht noch so lala
  16000000  8  256 / 100 = ~78 Hz

Macht dann 8 * 256 = 2048 Takte in der ISR
Ist schon etwas enger, sollte aber immer noch reichen.
Zur Not könnte man auch auf 50 Stufen ausweichen. Den Unterschied
zwischen 100 und 50 Stufen kennt sowieso keiner (glaub ich).

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum überhaupt timer interupts?
Man kann das ganze auch in einer großen Mainloop abhandeln:

while(1) {
  unsigned char i;

  PWMCounter++;
  if( PWMCounter == 101 )
    PWMCounter = 0;

  for( i = 0; i < 28; ++i ) {
    if( PWMCounter < Channel[i] )
      // Setze Portpin auf 1
    else
      // setzte Portpin auf 0
  }
}

ändern kann man dann die werte mittels UART wenn man ne möglichkeit
dafür einbauen will.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> warum überhaupt timer interupts?

Nicht das ich das ausprobiert hätte, aber ...
weil ansonsten die Leds je nach zusätzlich mitlaufenden
Timern und sonstigen Interrupts flackern würden.

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe keine weiteren Anforderungen als das Dimmen...
Und wenn schon solange diese nicht zu oft und zu lange auftreten fällt
das nicht auf, hab ich so bei ner Beleuchtung mal gemacht, dabei sollte
der ADC Wert die Geschwindigkeit regeln, also im Mainloop SoftPWM, und
(etwa) alle Sekunde einmal ADC gestartet und beim ADC interupt neuen
Wert in die register geschrieben => fertig

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab auch schon davon gehört.

Es soll Leute geben, die zählen alle Zyklen und fügen entsprechende
NOPs oder Delays in sämtliche Verzweigungen ein, damit immer die
gleiche Laufzeit rauskommt.

Und bei jeder allerkleinsten Programmänderung müssen sie das wieder neu
machen.

Die kriegen tatsächlich interruptloses Multiplexen oder PWM ohne
Flackern hin.

Den einzigsten Unterschied zu ner Interruptlösung, den ich erkennen
kann: Diese Leute vergeuden 99% ihrer Arbeitszeit völlig nutzlos.

Und außerdem müssen sie komplett in Assember programmieren.


Peter

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: Warum Nops und Takte zählen? kommt es bei ner PWM tatsächlich
auf die ns an? Ich denk mal nein.

Hier ist doch wirklich NIX Zeitkritisches drann der "Timer" läuft mit
Vollem Proz Takt und es werden auser PWM ja 0! andere forderungen
gestellt, der Threadersteller will ja nichtmal verschiedene Muster oder
wasweisich haben.

Ich finde es immer etwas überheblich wenn immer gleich alles was ohne
Interupts läuft als schlecht niedergemacht wird!
Soll jezt nicht auf dich bezogen sein Peter du hast schon ne Menge
cooler Sachen gemacht, aber vieles geht (auch) ohne Interrupts obwohls
mit vieleicht "universeller" wäre, aber normalerweise baut man sich
so eine Schaltung freut sich über das Blinken und läßt sie dan auch
eingebaut...

Man kann jezt natürlich auch 5 Chips mit 5 HW PWMs miteiner vernetzen
oder oder oder, aber wo liegt das Problem es mal ohne Interupts einfach
zu probieren?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Läubi,

das Problem ist, das Auge ist nichtlinear.

Schreib ein Programm, welches nach dem Reset ne LED für 1µs einschaltet
und ne 2.LED für 2µs. Setz Dich in nen dunklen Raum und Du wirst den
Unterschied (nur 1µs !) deutlich sehen.

Eine helle LED wird ohne Interrupt wohl einigermaßen ruhig leuchten,
die dunkle flackert aber wie Sau.


Probiers aus, wenn Du es nicht glaubst.


Peter

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber was ändert der Timerinterupt dabei?
Es soll doch nur ein lauflicht sein, es soll keine MP3s Spielen nebei
die Luftfeuchte Messen oder Daten Digitalisieren... nur laufen.
Wenn man ganz "hardcore" ist könnte man sogar eine vollständigen lauf
einprogrammieren (genug Zeit und Flash vorausgesezt)

Autor: ngres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Autor: Markus N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na 28 Stück kriegst ja noch an nen AT Mega16 hin.

Das im Dimmen würd ich so machen wie ich es für meine
Schreibtischbeleuchtung realisiert hab:
Ich hab dafür 2 Kanäle (jede 2te LED steuerbar). Diese wollte ich
anfangs nur an und ausschalten bzw. beide Kanäle zu gleich oder nur
einen oder alles aus. Dann war mir der Übergang zu krass und so hab ich
nach ner Möglichkeit gesucht das ganze zu dimmen. Ausserdem wollte ich
das man während des Dimmvorgangs auch eine Änderung machen kann und
somit das ganze nicht irgendwie unkontrolliert hell wird sondern
einfach weiter dimmt.
Ganz einfach hab ich das gemacht:
Du brauchst für jede LED eine Variable mit dem Akutellen Wert und eine
für den Wert den du ihr vorgibst. Jetzt machst du ne kleine While
Anweisung, in der wird bei jedem Zyklus für jede LED gecheckt ob der
Aktuelle Wert (was auch per PWM rausgeht) übereinstimmt oder ob dieser
kleiner bzw. größer ist. Wenn dieser anders ist dann wird die aktuelle
Variable nicht einfach auf den neuen Wert geändert sondern es wird
einfach nur eine 1 addiert bzw. subtrahiert. Dadurch hast du keine
krassen Sprünge sondern langsame Wechsel. Das ist doch genau das was du
für dein Lauflicht auch brauchst, somit hast du den Effekt das die
mittleren LEDs (da schon länger auf nem hohen Wert sind) heller sind
und die LEDs am Rande deiner "Snake" dunkler sind. Jetzt noch die PWM
mit ner kleinen Schleife ausgeben (... musst testen ob man da ein
Flacker bei 28 LEDs wahrnehmen kann aber ich denke noch nicht), und
fertig ist das ganze.

Die PWM einfach ganz billig machen, bei jeden Zyklus einer Variable ne
1 addieren und bis max 100 zählen lassen. Wenn die Ausgabe Variable der
entsprechenden LED jetzt einen Wert hat der kleiner als die
Statusvariable is, dann einfach so lange ein lassen bis der Wert von
der Aktuellen Statusvariable größer wird als der Wert in deiner Ausgabe
Variable. So solltest auch 28 LEDs Pulsen können.

Autor: alpha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin schrieb:
> in der schleife addierst du die beiden werte und guckst ob sie
größer
> 100 sind, wenn ja, schaltest du den pin ein, wenn sie kleiner 100
sind
> schaltest du den pin aus.

Ja, funktioniert im Prinziep. Du bekommst aber einen weicheren
Übergang, wenn du in der Schleife exp(Zehler) berechnest und mit
exp(Schwellwehrt) vergleichst. Ideal wäre eine Gaußkurve anstelle von
exp, ist aber zeitaufwendiger, da noch quadriehrt werden muß. Die
Gaußkurve hätte den Vorteil, daß man nicht auf feste Hellichkeiten von
100%, 70% und 40% beschränkt ist, sondern alle 28 (oder auch 28!) leds
(oder auch led's) mit einem umlaufenden Maximum variabler Ausdehnung
ansteuern kan.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sondern alle 28 (oder auch 28!) leds
>(oder auch led's) mit einem umlaufenden Maximum variabler Ausdehnung
>ansteuern kan.

Das wäre dann eine Tabelle mit 28 Werten, oder nicht?

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-variable ausdehnung!?

maddin

Autor: alpha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rahul
> Das wäre dann eine Tabelle mit 28 Werten, oder nicht?
Bei 28 led's ja. Mit dem Ansatz, eine Function aus Zehlerstand und
Ledposition auszuwerten, kannst du aber auch Tausende led's verwenden
ohne fiel Speicher zu verschwenden.

@Maddin
Mit variabler Ausdehnung meinte ich, das du zB. eine kreisende
Anheufung von leuchtenden led's programmieren kannst, wo du einfach im
Programm festlegst, ob die Breite nun 5 led's, 10 led's oder auch 3.14
led's sein sol. Selbst eine zeitlich variable Breite ist möglich.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit dem Ansatz, eine Function aus Zehlerstand und
>Ledposition auszuwerten, kannst du aber auch Tausende led's
verwenden
>ohne fiel Speicher zu verschwenden.

Ist das gefordert? Ich glaube nicht.
Dass man (die) Software sehr universell entwickeln kann, steht ausser
frage. Für ein solches Einzelstück ist es aber nicht notwendig.
Ausserdem ergibt sich dann auch wieder das Problem, dass bei
Mikrocontroller-Anwendungen die Software zur Hardware gehört:
Mag ja sein, dass die Software Millionen LEDs ansteuern könnte. Es
werden aber nur 28 benötigt und die Hardware würde auch nur auf diese
Anzahl ausgelegt werden.
Irgendwo sollte man den Kompromiss finden...
Man kann ja auch für kommende Projekt mit mehr oder weniger LEDs auf
der vorhandenen Software aufbauen...

Autor: Günter Tholen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mit soviel Resonanz hab ich gar nicht gerechnet. Danke.
Ich werde jetzt erst mal alles lesen und dann schauen wir weiter. Beim
Überfliegen habe ich schon einiges wahrscheinlich nützliches gelesen.
Um den "Leuchtablauf" detaillierter zu verstehen,habe ich ein
Puls-Zeit-Diagramm gemacht. Das hat mir für das Verständnis echt
geholfen.
Mal sehen wie weit ich mit Euren Hilfen noch komme.

Melde mich wieder.

Gruß Günter

Autor: Günter Tholen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus
>Wenn alle gleichzeitig aktiv sind. Nach Günters Beschreibung sollen
>aber immer nur 5 gleichzeitig an sein. Im Prinzip ist es also eher
aine 5-Kanal-PWM, bei der die Kanäle halt durchrotiert werden.
Karl Heinz Buchegger
>Ev. kann es sinnvoll sein für jeden zu bedienenden Port
>eine eigene Schleife aufzusetzen,
Schoasch
>Ich persönlich würde das ganze dann zb mit einem PIC18LF6620 >machen..
denn der Kostet bei Reichelt gerade einmal 2.95Euro.. und >hat 54
IO-Pins und 5 PWM-Module.
>maddin.
>ps.: der ansatz zu sagen ich mache eine 5 kanal pwm, und verschiebe
>dann die 28 kanäle ist sicher der beste :-)

Hallo,
als ich mit meinem Puls-Zeit-Diagramm fertig war, hab ich genau das
gesehen, was Ihr schreibt. Was läßt sich denn einfacher umsetzen? Ein
Aufbau mit µC oder mit PIC(oder war das das gleiche? hab ich nie
richtig verstanden).
Und nun ans bauen! Welche Hardware, Software, Programmiergeräte,
Adapterkabel etc. benötige ich konkret, um mit dem µC oder PIC
anzufangen? Alles soll günstig sein. Ich baue gerne auch selbst.

Gruß Günter
Der der auf dem Klo am kreativsten ist!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein Aufbau mit µC oder mit PIC(oder war das das gleiche? hab ich
> nie richtig verstanden).

Ein PIC ist ein Mikrocontroller, aber nicht jeder Mikrocontroller ist
ein PIC. Es ist einfach eine der Mikrocontrollerarchitekturen.

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie schon erwähnt, ist der PIC ein µC... ich würde mal jetzt ganz grob
behaupten, dass er in die Klasse eines AVRs fällt. Stimmt zwar nicht
ganz aber beides sind 8bit RISC µCer.

Zur Hardware(wenn du es mit einem PIC machen willst): Du brauchst
einmal ein Programmiergerät, dass im einfachsten Falle aus ein paar
Widerständen besteht -->http://www.stolz.de.be/

Oder wenn es etwas grösser..aber unschlagbar gut sein darf:
http://www.sprut.de/electronic/pic/brenner/index.h...

Besteht zwar aus etwas mehr als ein paar Widerständen.. aber der kostet
vl insgesamt auch nur ein paar Euro.. dafür hast du einen ordentlichen
Programmer mit dem du sehr sehr lange arbeiten kannst, wenn du willst.

Zur Software: Lade dir von www.Microchip.com das MPLAB herunter und
dann noch den C18 Compiler. Installier beides(zuerst MPLAB und dann den
C18) und fang an zu programmieren :-)

Für Grundlegende Sachen bezüglich den PICs kann ich dir 2 Seiten
empfehlen: www.sprut.de oder www.fernando-heitor.de(hat auch ein sehr
gutes Forum .. also wenns dann mal Probleme gibt, schreib dort
hinein).
Ansonst kann ich dir nur viel Spass mit den PICs wünschen.. mir machts
spass damit zu arbeiten.
Bist du Schüler oder Student? Dann kannst du dir auch einmal ein Sample
von Microchip zukommen lassen.

Achja.. ist das leicht für dein WC gedacht? Coole Idee...
mfg Schoasch

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

ich habe mir heute auch schon den ganzen Tag meine Kopf zerbrochen wie
ich eine 8 Kanal PWM Ansteuerung auf meinem ATmega8 realisieren kann
und bin dabei zum gleichen Ergebnis gekommen wie Karl-Heinz

Einfach im Timer Overflow Interrupt die Werte der einzelnen Kanäle mit
dem aktuellen Zählerstand des PWM_counters vergleichen, welcher von 0
bis 100 (in meinem Programm bei 8MHz F_CPU) zählt. Habe dazu den 8 Bit
Timer0 benutzt und somit ein ca. 300 Hz PWM-Signal


Im UART Interrupt werden die vom PC gesandten Dimmwerte ins jeweilige
Register geladen.
Timer1 aktualisiert wiederum die einzelnen Werte alle  5ms. Bis jetzt
habe ich die Werte einfach nur rauf und runter zählen lassen. Ist aber
sehr Unbefriedigend. Ich werde daher noch versuchen eine
exp-/sin-Tabelle zu benutzen um die Helligkeit annähernd linear zum
Wert erscheinen zu lassen.

Bei der MCU Wahl würde ich von einem PIC abraten. Ich habe selber
einige Zeit auf PIC's programmiert und das Umsteigen auf einen anderen
Typen war nicht immer sehr Befriedigend, da die Registerbelegung von
vielen Typen total unterschiedlich ist. Sie sind außerdem weitaus
teuerer als AVR und nicht so Rechenstark, da sie einen
Frequenz-Vorteiler (1:4) haben. (PIC=0,25 MIPS/MHz... AVR=1 MIPS/MHz)

Für den Anfang würde ich dir einen Atmega8 vorschlagen. Er kostet bei
http://shop.tuxgraphics.org 1,65€/Stk und du benötigst nur minimale
Hardware um ihn zum Laufen zu bringen. (nicht einmal eine Taktquelle
von Nöten). Programmer besteht aus ein paar Widerständen und einem
Parallel Port. Ist also nicht so Schmerzhaft für die Geldbörse wenn
einmal ein paar draufgehen.

Und wenn wir schon bei Samples sind... falls du das ganze zum Nulltarif
machen willst und keinen Wert auf Software PWM legst, dann nimm einfach
eine 16Bit MCU von freescale. Die gibts als free samples mit 40MHz Takt
und mehr als 100 I/O Pins, da sind sicher auch 28 PWM Ausgänge für dich
drin ;)


Viel Spass noch beim Basteln und falls du nen Source-Code brauchst
schreib ne I-Mehl :D

Grüße Daniel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.