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
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.
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.
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.
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!
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 :-)!
Klaus schrieb: > Ich möchte mit einem Attiny eine LED dimmen (Fading). Mit welchem? https://en.wikipedia.org/wiki/ATtiny_microcontroller_comparison_chart
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.
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?
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.
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"
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
Hallo, okay, merke ich mir vor. Das wird bei Gelegenheit getestet. Unterschiedliche Verfahren und Herangehensweisen zu vergleichen sind immer interessant
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
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
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.
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.
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
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
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.
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
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".
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 | }
|
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.
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 ;-)
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
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.
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.
Das ganze Bord besteht aus einer Platine mit vielen Löchern (Bredbord) und alle Teile sind einfach draufgesteckt. Fliegende Verdrahtung? Nennt sich das so?
Fliegende Verdrahtung ist noch lockerer: ohne Breadboard.
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
Das einzig erhebende in diesem Faden ist wohl, dass es sich nicht mehr nur um das Ein/AUSschalten einer einzelnen LED handelt :-) Gruß Rainer
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.