Forum: Mikrocontroller und Digitale Elektronik LED dimmen mit Fading oder lieber mit PWM


von Klaus (Gast)


Lesenswert?

Hallo
Ich möchte mit einem Attiny eine LED dimmen (Fading). Habe schon den 
Beitrag dazu gelesen (LED Fading). Der läuft mit einem Atm 32. Habe 
versucht es auf den Attiny zu übersetzen, leider ohne Erfolg.
Wie kann man so was am besten machen. Mit PWM und Timer, aber wie genau. 
Leider ist im Beitrag nicht viel an Erklärung dabei.
Oder kennt jemand einen guten Beitrag dazu?
LG Klaus

von Stefan F. (Gast)


Lesenswert?

Anscheinen musst du Grundlagen lernen. Ist dir klar, was PWM ist und wie 
man es benutzt?

Wenn nicht, worauf können wir aufbauen?

Zu diesem Thema gibt es zahlreiche Tutorial im Arduino Umfeld, 
vielleicht fängst du damit mal an. Z.B. 
https://starthardware.org/lektion-13-leds-dimmen-mit-der-analogen-ausgabe/

Wenn du diese Lektion 13 nicht verstehst, dann fange mit Lektion 1 an.

von Dietrich L. (dietrichl)


Lesenswert?

Stefan ⛄ F. schrieb:
> Zu diesem Thema gibt es zahlreiche Tutorial im Arduino Umfeld,
> vielleicht fängst du damit mal an. Z.B.
> https://starthardware.org/lektion-13-leds-dimmen-mit-der-analogen-ausgabe/

Von Arduino hat Klaus nichts gesagt. Ich vermute mal, er will es "zu 
Fuß" machen. Dann sollte es sich mal in das Datenblatt des ATTiny zu PWM 
einlesen.
Vielleicht hilft auch das Tutorial 
https://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM.

von Prokrastinator (Gast)


Lesenswert?

Klaus schrieb:
> Mit PWM und Timer, aber wie genau.

Steht sehr detailiert im DB und der Family Reference wie die Register zu 
setzen sind.
Aber ohne English lesen und verstehen zu können kannst Du das komplette 
Thema Elektronik und Programmierung auch gleich sein lassen.
Ohne zu verstehen was Du da tust, reicht Copy Paste einfach nicht aus.

von Falk B. (falk)


Lesenswert?

Klaus schrieb:
> Hallo
> Ich möchte mit einem Attiny eine LED dimmen (Fading). Habe schon den
> Beitrag dazu gelesen (LED Fading). Der läuft mit einem Atm 32. Habe
> versucht es auf den Attiny zu übersetzen, leider ohne Erfolg.
> Wie kann man so was am besten machen. Mit PWM und Timer, aber wie genau.

Mann muss die Register passend einstellen.

> Leider ist im Beitrag nicht viel an Erklärung dabei.

Eine glatte Lüge!

> Oder kennt jemand einen guten Beitrag dazu?

Du suchst ein Hörbuch? Oder noch besser jemanden, der das für dich 
macht?

In jedem Datenblatt zu jedem AVR steht drin, wie man die Bits setzen 
muss, um einen PWM-Modus zu konfigurieren. In den Beispielen im Artikel 
LED-Fading sieht man das auch. Wenn dein Tiny keinen 16 Bit Timer 
hat, muss man es halt mit einem 8 Bit Timer machen. Aber das ist kein 
großes Problem, man muss nur 1-2 Register mit einer handvoll Bits 
korrekt setzen!

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Falk B. schrieb:
> Wenn dein Tiny keinen 16 Bit Timer
> hat, muss man es halt mit einem 8 Bit Timer machen.

Auch eine glatte Lüge!

Wer es kann, nimmt eine 16/32bit variable als SW counter und einen 8bit 
HW counter für das inc/dec interval des SW counters.

Also Ball immer schön flach halten hinsichtlich "Lüge" und so :-)!

von Georg M. (g_m)


Lesenswert?

Klaus schrieb:
> Ich möchte mit einem Attiny eine LED dimmen (Fading).

Mit welchem?

https://en.wikipedia.org/wiki/ATtiny_microcontroller_comparison_chart

von Veit D. (devil-elec)


Lesenswert?

Hallo,

man schaut sich die Timer Register im Manual an. Nimmt diese Lektüre 
https://www.mikrocontroller.net/articles/LED-Fading, passt ggf. die 
Register an und hat sein Led Fading.

Oder man schaut sich zuerst den Code rund um die Timerregister an, 
schaut was die Registereinstellungen vom Timer machen und überträgt das 
auf seinen anderen Ziel Controller.

Um eine Einarbeitung kommt man allerdings nie drumherum egal wie man es 
anstellt.

von MWS (Gast)


Lesenswert?

Apollo M. schrieb:
> Falk B. schrieb:
>> Wenn dein Tiny keinen 16 Bit Timer
>> hat, muss man es halt mit einem 8 Bit Timer machen.
>
> Auch eine glatte Lüge!

Eher nicht, da ist nichts Falsches darin, was Falk so schreibt.
Auch Du scheinst sowas zu brauchen:

Apollo M. schrieb:
> und einen 8bit HW counter für

Was Du allerdings mit dem Timer als Counter willst, bleibt verborgen, 
man könnte auch sagen Du bist hier aufgeschlagen um dem TE Blödsinn zu 
raten.

[sarkasmus]Man soll's diesen blutigen Anfängern einfach nicht zu leicht 
machen, einfach mal was Dummes zur Verwirrung geschrieben und schon ist 
des Anfängers Leben und Lernen interessanter.[/sarkasmus]

Erklär doch mal, wie betreibst Du den Counter, nimmst Du einen externen 
Oszillator dafür? Oder muss da noch ein Fluxkompensator dazwischen?

von Prokrastinator (Gast)


Lesenswert?

MWS schrieb:
> Erklär doch mal,

Das ist nicht schwer zu verstehen wie er das meint.
An / Aus über SW PWM, (halbwegs) konstante Zweit zwischen zwei 
++pwm_counter über den HW Timer.

Trotzdem eine völlig unbrauchbare Verquickung aus HW und SW PWM
Für eine flackerfreie PWM brauche ich bei LEDs 100Hz.
Wozu also die 16/32 bit Variable auf einen niedrig getakteten 8bitter?

In niedrigen Dimmstufen sieht man jede klitzekleine Abweichung in der 
Bearbeitungszeit einer SW PWM sofort.
Wenn schon per SW, weil z.B. nicht genug PWM Ausgänge zur Verfügung 
stehen, dann doch bitte PDM (Pulse Dichte Modulation).
Da komme ich mit sehr viel niedrigerer Frequenz hin, weil innerhab eines 
PWm Zyklus mehrfach ein/aus geschaltet wird.
Damit sieht man auch kleine Timing Abweichungen nicht mehr.

Aber nach dem derzeitigen Kenntnissstand des TO hilft dem das alles 
nicht weiter.
Wenn man die Sprache so garnicht beherrscht UND das DB nicht liest, ist 
einem eben kaum zu helfen.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

PDM - Pulse Dichte Modulation?
Meinst du DDS?

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Ich erlaube mir, ein Beispiel zu empfehlen. Inklusive PWM & Fading (wenn 
die imaginären Scheinwerfer wieder verlöschen).
Beitrag "[C] AVR-Lichtorgel per FFT MEGA8 32 644"

von Stefan (Gast)


Lesenswert?

Veit D. schrieb:
> PDM - Pulse Dichte Modulation?
> Meinst du DDS?
das sind 2 unterschiedliche Methoden
PMD 1== 1:puls/Zyklus 2:pulse/Zyklus ....
Vorteil: man bekommt schnell hohe Frequenz
Nachteil: man bekommt schnell hohe Frequenz

von Veit D. (devil-elec)


Lesenswert?

Hallo,

okay, merke ich mir vor. Das wird bei Gelegenheit getestet. 
Unterschiedliche Verfahren und Herangehensweisen zu vergleichen sind 
immer interessant

von Martin S. (gibsea106)


Lesenswert?

Klaus schrieb:
> eine LED dimmen (Fading)

off-topic:
Sind "Dimming" und "Fading" nicht zwei unterschiedliche Vorgänge?

Unter "dimmen" verstehe ich einmaliges "Regulieren" auf einen bestimmten 
Wert.

Unter "faden" verstehe ich ein kontinuierliches "auf (und/oder) ab" der 
Intensität.

LG Martin

von Frank M. (ukw) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Man kann mit einem ATTiny durchaus eine 12Bit-PWM umsetzen. Man benutzt 
dafür eine 8Bit-Hardware-PWM und eine Timer-Overflow-ISR, in welcher man 
die oberen 4 Bit der PWM per Software macht.

Mit der 12Bit-PWM hat man dann 4096 Schritte, mit welchen auch 
problemlos noch eine Gamma-Korrektur für das menschliche Auge möglich 
ist. Auch in den unteren Helligkeitsbereichen ist damit ein stufenloses 
Fading möglich - zum Beispiel mit 3 PWM-Kanälen für RGB.

Ich selbst habe das damals gemacht für meine Equinox-Uhr, als die WS2812 
noch gänzlich unbekannt bzw. schweineteuer waren - mit 60 LEDs und 60 
ATTinys (ATTiny85), siehe Bild.

Thread dazu - mit Link auf Video: 
Beitrag "Equinox-Uhr mit 60 ATtinys"

: Bearbeitet durch Moderator
von Klaus (Gast)


Lesenswert?

Bloss mal zur Klarstellung. Ich such kein "Hörbuch" oder einen des für 
mich erledigt. Ich suche auch kein fertiges Programm-
Was ich suche ist ein Tut oder eine Erklärung die man verstehen kann. 
Keine Doktorarbeit oder anderes kompliertes.
Ich arbeite mit C und nicht mit Arduino.
Es muss doch möglich als nicht Doktor sowas zu machen.

von Stefan F. (Gast)


Lesenswert?

Klaus schrieb:
> Es muss doch möglich als nicht Doktor sowas zu machen.

Ja schon, doch der Zeitaufwand bleibt der selbe. So etwas lernt man in 
einem Winter.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Klaus schrieb:
> Ich arbeite mit C und nicht mit Arduino.

Gut. Mache ich auch so. :-)

> Es muss doch möglich als nicht Doktor sowas zu machen.

Man muss sich dafür da reinarbeiten. Zunächst lässt man die LED blinken. 
Dann schaut man sich im Datenblatt den Fast-PWM Mode an und lernt, wie 
man die Register TCCR0A und TCCR0B (für z.B. ATTiny85) bedienen muss, um 
eine PWM zu generieren.

Wenn man dann einen beliebigen 8-Bit-PWM-Wert erzeugen kann, versucht 
man, die LED zu faden, indem man mittels Timer die PWM von einem 
Startwert bis zu einem Stoppwert laufen lässt. Dazu inkrementiert (bzw. 
dekrementiert) man über die Timer-ISR den PWM-Wert, bis dieser den 
Stoppwert erreicht hat.

Das Ganze kann man dann noch mit einer Gamma-Korrektur versehen, damit 
die Helligkeitswerte an das Helligkeitsempfinden des menschlichen Auges 
angepasst werden.

Hier findest Du dazu alles, was Du brauchst: LED-Fading

Das ist für einen ATMega32, ist aber leicht auf einen ATTiny 
umzuschreiben.

Hat man eine RGB-LED, kann man das dann auf 3 PWM Kanäle erweitern. Hier 
lässt man die LED dann von einem Start-Tripel R,G,B zu einem 
Stopp-Tripel R,G,B laufen. Hier muss man dann 3 Werte erhöhen bzw. 
erniedrigen - mit einem geeigneten Inkrement-Wert für jeden Kanal, damit 
alle 3 Stopp-Werte gleichzeitig erreicht werden.

Die Königsklasse ist dann die Erweiterung der 8-Bit-HW-PWM auf 12 Bit, 
wobei hier der Timer-Overflow-Interrupt für das Erzeugen von 4 weiteren 
höherwertigen PWM-Bits genutzt wird. Diese ISR (TIMER1_OVF_vect) kann 
dann auch noch zusätzlich das Fading erledigen. Damit erschlägst Du 
direkt 2 Fliegen mit einer Klappe.

Ist Dir das als "Tutorial" genug, oder muss man Dir das noch in 
Einzelheiten vorkauen? Das Datenblatt zum ATTiny liefert Dir eigentlich 
alle nötigen Informationen dazu.

P.S.

Zu Deinem Threadtitel "LED dimmen mit Fading oder lieber mit PWM"

Man machts mit PWM. Fading ist eigentlich nur das Ändern der PWM über 
die Zeit.

: Bearbeitet durch Moderator
von Klaus (Gast)


Lesenswert?

Frank M. schrieb:
> Man machts mit PWM. Fading ist eigentlich nur das Ändern der PWM über
> die Zeit.
Das ist für mich eine klare Aussage. Mit dem PWM und den Timern werde 
ich angehen und lesen.
Hatte im Netz gelesen das es verschiedene Möglichkeiten geben soll. Bei 
einigen ist der Timer dazu auf verschiedene Teile des Programms 
"verstreut" oder man versucht es einfach zu "verschleiern". Grund genug 
für micjh es anzugehen. Danke für die Info.
LG Klaus

von Prokrastinator (Gast)


Lesenswert?

Stefan schrieb:
> das sind 2 unterschiedliche Methoden
> PMD 1== 1:puls/Zyklus 2:pulse/Zyklus ....
> Vorteil: man bekommt schnell hohe Frequenz
> Nachteil: man bekommt schnell hohe Frequenz

PDM ist eine sehr effiziente Methode per Software viele 'PWM' Ausgänge 
zu machen.
Warum das ein Nachteil sein soll, das ich trotz niedriger 
Bearbeitungsfrequenz auf eine flackerfreie Ansteuerung komme, da nicht 
nur einmal pro Zyklus geschaltet wird, sondern viel Male, müsstest Du 
aber mal erklären.

Zwingt mich ja keiner die Routine häufiger aufzurufen als ich für eine 
vernünftige Wiederholfrequenz benötige.

Mit PDM habe ich schon auf einem 8Mhz Silabs 8051 RGBW mit 10bit / 100Hz 
gesteuert, alle 300ms RS485 Protokolle empfangen und dekodiert, Fading, 
Temperatur- und Chargenkompensation des Farbortes und anderes 
Housekeeping gemacht, ohne das der am Limit war.

von Falk B. (falk)


Lesenswert?

Prokrastinator schrieb:
> Warum das ein Nachteil sein soll, das ich trotz niedriger
> Bearbeitungsfrequenz auf eine flackerfreie Ansteuerung komme, da nicht
> nur einmal pro Zyklus geschaltet wird, sondern viel Male, müsstest Du
> aber mal erklären.

Das ist ein Nachteil für Leistungsstufen, denn dort verursacht die 
Umschaltung satte Schaltverluste. Bei einer 8 Bit PWM gibt es unabhängig 
vom PWM-Wert nur 2 Schaltvorgänge/Periode. Bei PDM bis zu 256!

Bei LEDs und ähnlichem Kram spielt das keine Rolle.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Martin S. schrieb:
> Unter "dimmen" verstehe ich einmaliges "Regulieren" auf einen bestimmten
> Wert.
>
> Unter "faden" verstehe ich ein kontinuierliches "auf (und/oder) ab" der
> Intensität.

Egal was man unter welchem Begriff versteht - mit PWM wird man es so 
oder so machen. Das ist kein "oder".

von Georg M. (g_m)


Lesenswert?

1
// ATtiny402, ATtiny412
2
// LED fade-in fade-out 10-bit PWM
3
// PWM output: Pin 7 (PA3)
4
5
#include <avr/io.h>
6
7
uint16_t pw[64] = {0,1,1,1,2,2,3,4,5,7,8,10,12,14,16,18,21,24,27,30,34,38,43,48,54,60,67,74,81,89,98,108,118,128,140,152,164,178,192,208,225,247,270,294,319,343,368,396,424,452,481,511,543,577,612,650,689,730,773,819,867,917,969,1023};      // pulse width
8
uint8_t i;                  // index
9
int8_t incr = 1;            // increment
10
uint16_t count;             // loop counter
11
uint16_t top = 2000;        // loop counter top
12
13
int main(void)
14
{
15
  _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, (CLKCTRL_PDIV_10X_gc | CLKCTRL_PEN_bm));  // main clock 2MHz
16
17
  PORTA.DIRSET = PIN3_bm;                                // output
18
  TCA0.SINGLE.CTRLB |= TCA_SINGLE_WGMODE_SINGLESLOPE_gc; // set PWM mode
19
  TCA0.SINGLE.PER  = 0x03FF;                             // PWM frequency: 1MHz/1024 = 977Hz
20
  TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV2_gc          // counter clock 1MHz
21
                    | TCA_SINGLE_ENABLE_bm;              // start timer
22
  TCA0.SINGLE.CTRLB |= TCA_SINGLE_CMP0EN_bm;             // enable compare channel 0, override PA3
23
24
  while (1)
25
  {
26
    TCA0.SINGLE.CMP0BUF = pw[i];                         // write pulse width value;
27
    count++;
28
    if(count == top)
29
    {
30
      count = 0;
31
      i += incr;
32
      if(i == 63)
33
      {
34
        incr = -1;
35
        top = 4000;
36
      }
37
      if(i == 0)
38
      {
39
        incr = 1;
40
        top = 2000;
41
      }
42
    }
43
  }
44
}

von Stefan (Gast)


Lesenswert?

Prokrastinator schrieb:
> PDM ist eine sehr effiziente Methode per Software viele 'PWM' Ausgänge
> zu machen.
sehe ich genauso
> Warum das ein Nachteil sein soll, das ich trotz niedriger
> Bearbeitungsfrequenz auf eine flackerfreie Ansteuerung komme, da nicht
> nur einmal pro Zyklus geschaltet wird, sondern viel Male, müsstest Du
> aber mal erklären.
10-bit PDM verursacht schon über 1000 Schaltvorgänge

> Zwingt mich ja keiner die Routine häufiger aufzurufen als ich für eine
> vernünftige Wiederholfrequenz benötige.
aber verführt u.U. weil eine PDM bei 90% Rechenleistung trotzdem 
ausreichend Zeit für die Anwendung lässt d.h. kleine Drahtstücke können 
(vom Gefühl) schnell zu Sendern werden.

von Wolfgang (Gast)


Lesenswert?

Stefan schrieb:
> d.h. kleine Drahtstücke können (vom Gefühl) schnell zu Sendern werden.

Wie weit die Oberwellen reichen, hängt von der Steilheit der Flanken und 
nicht vom Gefühl ab ;-)

von Stefan (Gast)


Lesenswert?

Wolfgang schrieb:
> Wie weit die Oberwellen reichen, hängt von der Steilheit der Flanken ab ;-)
bei der Reichweiten-theorie von (Ober)wellen dürfte eine besondere 
physikalische Begabung dabei sein, die immerhin ein lächeln hinterlässt

Prokrastinator schrieb:
> Mit PDM habe ich schon auf einem 8Mhz Silabs 8051 RGBW mit 10bit / 100Hz ...
mit einem versehentlichen Anschluss eines 14Mhz Quarzes und einpoligen 
langen Leitungen käme man bei 50% zumindest grob auf einen DCF77 
Störsender, der gleich zwei 48CH-PWM-Boards in der weiteren 
Entwicklung stört:
Beitrag "Re: Binäruhr mit STM32 Blue Pill Board"
Ohne Empfang wird fürs diskutieren über die Literatur von Frau Passig 
des Berliner BSDM bezahlt:
Beitrag "Re: Quelltext: Lesestoff gesucht"
==> Vorsicht mit solchen PDM

von Prokrastinator (Gast)


Lesenswert?

Stefan schrieb:
> ==> Vorsicht mit solchen PDM

Vorsicht mit solchen Postings.
Worte aneinanderzureihen die sich fachlich fundiert anhören, mit der 
Realität und projektspezifischen Umsetzung aber überhaupt nichts zu tun 
haben, sind einfach nur Text. Sonst nichts.

von Stefan (Gast)


Lesenswert?

Prokrastinator schrieb:
> Worte aneinanderzureihen die sich fachlich fundiert anhören, mit der
> Realität und projektspezifischen Umsetzung aber überhaupt nichts zu tun
> haben, sind einfach nur Text.
Genau. Und deswegen wäre Klaus Board eine optimale Hilfe für die 
Lesestoff-Gruppe die unter:
Beitrag "Quelltext: Lesestoff gesucht"
Worte aneinanderreihen, aber bislang an einer projektspezifischen 
Umsetzung scheitern, weil Walter sein PWM-Entwicklungsboard geheim hält.

von Klaus (Gast)


Lesenswert?

Das ganze Bord besteht aus einer Platine mit vielen Löchern (Bredbord) 
und alle Teile sind einfach draufgesteckt.
Fliegende Verdrahtung? Nennt sich das so?

von Stefan F. (Gast)


Lesenswert?

Fliegende Verdrahtung ist noch lockerer: ohne Breadboard.

von Heiner (Gast)


Lesenswert?

Klaus schrieb:
> Das ganze Bord besteht aus einer Platine mit vielen Löchern
> (Bredbord)
> und alle Teile sind einfach draufgesteckt.
> Fliegende Verdrahtung? Nennt sich das so?

Und was willst Du damit sagen? Es heißt übrigens “Breadboard”. Naja 🤷‍♂️
Welche Attiny verwendest Du denn? Und wie weit bist Du mit Deinem 
Programm?
Zeig’ doch mal was Du bislang implementiert hast

von Rainer V. (a_zip)


Lesenswert?

Das einzig erhebende in diesem Faden ist wohl, dass es sich nicht mehr 
nur um das Ein/AUSschalten einer einzelnen LED handelt :-)
Gruß Rainer

von Rudi D. (rulixa)


Lesenswert?

Klaus schrieb:
> Oder kennt jemand einen guten Beitrag dazu?

Im Buch von Burkhard Kainka "Lernpaket Mikrocontroller" Ist ein Programm 
für den tiny 13 enthalten.
6.6 Seite 100: Der weiche Blinker. Funktioniert mit PWM.

Ist sehr gut als Start für das Kennenlernen von µC's geeignet.

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.