AVR Embedded Tutorial - Analog Write/de: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: AVR Embedded Tutorial - Analog Write/de
| Old | New | Line | |
|---|---|---|---|
| 1 | + | # PWM Analog Write | |
| 2 | + | ||
| 3 | + | ## Titel | |
| 4 | + | ||
| 5 | + | In diesem Beispiele wird ein Atmega328 verwendet. | |
| 6 | + | ||
| 7 | + | ## Sleep | |
| 8 | + | ||
| 9 | + | Eine einfache Pausenfunktion, das die LEDs langsam hell und dunkel werden. | |
| 10 | + | ||
| 11 | + | ``` pascal | |
| 12 | + | procedure sleep; | |
| 13 | + | var | |
| 14 | + | i: Int16; | |
| 15 | + | begin | |
| 16 | + | for i := 0 to 1999 do asm Nop end; | |
| 17 | + | end; | |
| 18 | + | ``` | |
| 19 | + | ||
| 20 | + | ## Beispiel | |
| 21 | + | ||
| 22 | + | In diesem Beispiel wird die PWM Frequenz sehr langsam eingestellt, so das man ein Flackern der LEDs wahr nimmt. So sieht man gut, das ein analoger Ausgang in Wirklichkeit moduliert ist. Folgendes muss eingestellt werden: | |
| 23 | + | ||
| 24 | + | - Mit **DDRx** müssen die PWM-Ausgänge als Ausgang eingestellt werden. | |
| 25 | + | - **COMxx** gibt die Pins an, auf PWM laufen sollen, beim ATmega328 gibt es 6 Pins, welche in diesem Modus laufen können. Wobei jeder Timer 2 Ausgänge bedienen kann. | |
| 26 | + | - **WGM** aktiviert die PWM-Ausgabe beim Timer. | |
| 27 | + | - **TCCR0B** wird auf einen Clock von 1024 eingestellt, wählt man einen kleineren Wert, dann sieht man kein Flackern der LEDs mehr. | |
| 28 | + | - **OCR0** gibt die HIGL Länge der Modulation an. 0 ist aus, 128 Mittelwert und 255 ist das Maximum. | |
| 29 | + | ||
| 30 | + | ``` pascal | |
| 31 | + | var | |
| 32 | + | i: integer; // Schleifenzähler | |
| 33 | + | begin | |
| 34 | + | // PD5 und PD6 auf Ausgang | |
| 35 | + | DDRD := %01100000; | |
| 36 | + | ||
| 37 | + | // PD5 und PD6 als PWM | |
| 38 | + | TCCR0A := (%10 shl COM0A) or (%10 shl COM0B) or (1 shl WGM0); | |
| 39 | + | ||
| 40 | + | // Timer 0 aktivieren, Clock / 1024 | |
| 41 | + | TCCR0B := TCCR0B or %101; | |
| 42 | + | ||
| 43 | + | // Hauptschleife, welche die LEDs kontinuierlich heller und dunkler macht. | |
| 44 | + | repeat | |
| 45 | + | for i := 0 to 255 do begin | |
| 46 | + | OCR0A := i; | |
| 47 | + | OCR0B := 255 - i; | |
| 48 | + | sleep; | |
| 49 | + | end; | |
| 50 | + | for i := 0 to 255 do begin | |
| 51 | + | OCR0A := 255 - i; | |
| 52 | + | OCR0B := i; | |
| 53 | + | sleep; | |
| 54 | + | end; | |
| 55 | + | until False; | |
| 56 | + | end. | |
| 57 | + | ``` | |
| 58 | + | ||
| 59 | + | ## Stolperfalle | |
| 60 | + | ||
| 61 | + | > **Note:** Da PWM mittels Timer gesteuert ist, kann es Überschneidungen mit den Timerfunktionen geben. | |
| 62 | + | ||
| 63 | + | Für Timerfunktionen siehe hier: | |
| 64 | + | ||
| 65 | + | - [[AVR Embedded Tutorial - Timer, Counter/de|Timer/Zähler]] | |
| 66 | + | ||
| 67 | + | ## Siehe auch | |
| 68 | + | ||
| 69 | + | - Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]] | |
| 70 | + | ||
| 71 | + | Autor: Mathias | |
| 72 | + | ||
| 73 | + | --- | |
| 74 | + | *From the Free Pascal wiki, page "AVR Embedded Tutorial - Analog Write/de", as it stood on 2020-10-19 after a change by Mathias, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 75 | + | Category: AVR/de | |
| 76 | + | Category: Arduino/de | |
| 77 | + | Category: Deutsch | |
| 78 | + | Category: Embedded/de | |
| 79 | + | Category: Tutorials/de |
