Difference between revisions of "AVR Embedded Tutorial - Analog Write/de"
From Free Pascal wiki
Jump to navigationJump to searchm (→Siehe auch) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{LanguageBar}} |
+ | |||
=PWM Analog Write= | =PWM Analog Write= | ||
Line 7: | Line 8: | ||
==Sleep== | ==Sleep== | ||
Eine einfache Pausenfunktion, das die LEDs langsam hell und dunkel werden. | Eine einfache Pausenfunktion, das die LEDs langsam hell und dunkel werden. | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
procedure sleep; | procedure sleep; | ||
var | var | ||
Line 21: | Line 23: | ||
* Mit '''DDRx''' müssen die PWM-Ausgänge als Ausgang eingestellt werden. | * Mit '''DDRx''' müssen die PWM-Ausgänge als Ausgang eingestellt werden. | ||
* '''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. | * '''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. | ||
− | * '''WGM''' aktiviert die PWM-Ausgabe | + | * '''WGM''' aktiviert die PWM-Ausgabe beim Timer. |
− | * '''TCCR0B'''wird auf einen Clock von 1024 eingestellt, wählt man einen kleineren Wert, dann sieht man kein Flackern der LEDs mehr. | + | * '''TCCR0B''' wird auf einen Clock von 1024 eingestellt, wählt man einen kleineren Wert, dann sieht man kein Flackern der LEDs mehr. |
− | * '''OCR0''' | + | * '''OCR0''' gibt die HIGL Länge der Modulation an. 0 ist aus, 128 Mittelwert und 255 ist das Maximum. |
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
var | var | ||
i: integer; // Schleifenzähler | i: integer; // Schleifenzähler | ||
begin | begin | ||
− | // PD6 | + | // PD5 und PD6 auf Ausgang |
DDRD := %01100000; | DDRD := %01100000; | ||
− | // PD6 | + | // PD5 und PD6 als PWM |
− | TCCR0A := (%10 shl COM0A) or (%10 shl COM0B) or ( | + | TCCR0A := (%10 shl COM0A) or (%10 shl COM0B) or (1 shl WGM0); |
// Timer 0 aktivieren, Clock / 1024 | // Timer 0 aktivieren, Clock / 1024 | ||
Line 49: | Line 52: | ||
sleep; | sleep; | ||
end; | end; | ||
− | until | + | until False; |
end. | end. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 63: | Line 66: | ||
Autor: [[User:Mathias|Mathias]] | Autor: [[User:Mathias|Mathias]] | ||
− | [[Category: | + | [[Category:AVR/de]] |
− | [[Category: | + | [[Category:Arduino/de]] |
− | [[Category: | + | [[Category:Embedded/de]] |
+ | [[Category:Tutorials/de]] | ||
+ | {{AutoCategory}} |
Latest revision as of 13:45, 19 October 2020
│ Deutsch (de) │ English (en) │
PWM Analog Write
Titel
In diesem Beispiele wird ein Atmega328 verwendet.
Sleep
Eine einfache Pausenfunktion, das die LEDs langsam hell und dunkel werden.
procedure sleep;
var
i: Int16;
begin
for i := 0 to 1999 do asm Nop end;
end;
Beispiel
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:
- Mit DDRx müssen die PWM-Ausgänge als Ausgang eingestellt werden.
- 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.
- WGM aktiviert die PWM-Ausgabe beim Timer.
- TCCR0B wird auf einen Clock von 1024 eingestellt, wählt man einen kleineren Wert, dann sieht man kein Flackern der LEDs mehr.
- OCR0 gibt die HIGL Länge der Modulation an. 0 ist aus, 128 Mittelwert und 255 ist das Maximum.
var
i: integer; // Schleifenzähler
begin
// PD5 und PD6 auf Ausgang
DDRD := %01100000;
// PD5 und PD6 als PWM
TCCR0A := (%10 shl COM0A) or (%10 shl COM0B) or (1 shl WGM0);
// Timer 0 aktivieren, Clock / 1024
TCCR0B := TCCR0B or %101;
// Hauptschleife, welche die LEDs kontinuierlich heller und dunkler macht.
repeat
for i := 0 to 255 do begin
OCR0A := i;
OCR0B := 255 - i;
sleep;
end;
for i := 0 to 255 do begin
OCR0A := 255 - i;
OCR0B := i;
sleep;
end;
until False;
end.
Stolperfalle
Hinweis: Da PWM mittels Timer gesteuert ist, kann es Überschneidungen mit den Timerfunktionen geben.
Für Timerfunktionen siehe hier:
Siehe auch
- Übersichtseite AVR Embedded Tutorial
Autor: Mathias