Difference between revisions of "AVR Embedded Tutorial - Analog Write/de"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{Translate}} =PWM Analog Write= ==Titel== In diesem Beispiele wird ein Atmega328 verwendet. ==Sleep== Eine einfache Pausenfunktion, das die LEDs langsam hell und dunkel wer...")
 
Line 17: Line 17:
  
 
==Beispiel==
 
==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.  
+
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 bei 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.
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
var
 
var
   i: integer;
+
   i: integer; // Schleifenzähler
 
 
 
begin
 
begin
 
   // PD6 und PD7 auf Ausgang
 
   // PD6 und PD7 auf Ausgang

Revision as of 18:31, 28 November 2017

Template:Translate

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 bei Timer.
  • TCCR0Bwird 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
  // PD6 und PD7 auf Ausgang
  DDRD := %01100000;

  // PD6 und PD7 als PWM
  TCCR0A := (%10 shl COM0A) or (%10 shl COM0B) or (%01 shl WGM0);

  // Timer 0 aktivieren, Clock / 1024
  TCCR0B := TCCR0B or %101;

  // Hauptschleife, welche die LEDs kontunierlich 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 1 = 2;
end.

Stolperfalle

Light bulb  Hinweis: Da PWM auch mittels Timer gesteuert ist, kann es Überschneidungen mit den Timerfunktionen geben.

Für Timerfunktionen siehe hier:


Siehe auch