<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.178.25.134</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.178.25.134"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/85.178.25.134"/>
	<updated>2026-04-10T21:36:47Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=19014</id>
		<title>LED-Matrix</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=19014"/>
		<updated>2007-01-05T16:16:52Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Akkumulator&amp;diff=19013</id>
		<title>Akkumulator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Akkumulator&amp;diff=19013"/>
		<updated>2007-01-05T15:55:49Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei manchen [[Prozessor]]en lässt sich das Ergebnis vieler Operationen nicht in beliebigen Registern ablegen, sondern nur in einem speziellen Register genannt Akkumulator (zu deutsch etwa &amp;quot;Aufsammler&amp;quot;, oft nur kurz &amp;quot;Akku&amp;quot; genannt); ein Beispiel dafür ist die [[8051]]-Familie. Bei manchen Prozessoren gibt es auch mehrere Akkumulator-Register (zum Beispiel zwei beim [[6809]]).&lt;br /&gt;
&lt;br /&gt;
[[Batterieladung]]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19012</id>
		<title>AVR PWM</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19012"/>
		<updated>2007-01-05T15:44:10Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* BASCOM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel ist noch nicht vollständig!&lt;br /&gt;
Und außerdem überschneidet er sich teilweise mit dem Tutorial, weil PWM und Timer zum Verständnis praktisch dasselbe sind. &lt;br /&gt;
Vielleicht kann ja jemand, der gerade dabei ist, sich diese Dinge anzueignen, die Beschreibung vorantreiben (erweitern/entschlacken)?&lt;br /&gt;
&lt;br /&gt;
Hier sollen die Möglichkeiten und die Funktionsweise der PWM mit AVRs erläutert werden, so daß Anfänger auf ihrem Weg zum Ziel unterstützt werden, ohne sich erst durch die wenig erklärenden Beiträge im Forum zu quälen.&lt;br /&gt;
Auch wenn das Verständnis (hoffentlich) dann nicht mehr aus dem Datenblatt kommen muß, ist dieses für die spezifischen Einstellungen und Feinheiten absolut notwendig. Aber mit dieser Übersicht sollte es leichter fallen, die relevanten Informationen schneller zu finden.&lt;br /&gt;
&lt;br /&gt;
Ich gehe dabei von meiner Situation aus: &amp;quot;Gerade mit AVRs angefangen, die LED blinkt, Taster wird abgefragt, schonmal von PWM gehört und unter den AVR Pins welche mit OC.. entdeckt, das hängt damit irgendwie zusammen.&amp;quot;&lt;br /&gt;
Man sollte sich auch um die Prozessorfrequenz gekümmert haben, also die [[AVR_Fuses]] entsprechend gesetzt haben.&lt;br /&gt;
&lt;br /&gt;
Wer in Begriff steht, sein erstes Board zu ätzen, sollte sich über die verschiedenen Möglichkeiten, die die OCnx Pins bieten, informiert haben.&lt;br /&gt;
&lt;br /&gt;
Übrigens lässt es sich besser lesen, wenn man sein Browserfenster so schmal macht, daß der Text in eine schöne Spalte gezwungen wird.&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
Im AVR-GCC-Tutorial werden im Abschnitt DAC-Optionen ([http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#DAC_.28Digital_Analog_Converter.29           link]) verschiedene Möglichkeiten angesprochen, analoge Spannungen zu generieren.&lt;br /&gt;
&lt;br /&gt;
Darunter fällt auch die [[Pulsweitenmodulation]], bei der durch schnelles Ein- und  Ausschalten eines Ausgangs (über einen Filter) eine [[analog]]e Spannung generiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim Dimmen von Lichtquellen wirkt die Trägheit des Auges als Filter, wenn z.B. eine LED im Mittel die Hälfte der Zeit eingeschaltet ist, scheint es also, als würde sie nur halb so hell leuchten.&lt;br /&gt;
&lt;br /&gt;
Bei Motoren läßt sich PWM gut zum Dosieren des Stroms einsetzen, ohne große Verluste zu haben.  Für einen Teil der Zeit wird also der volle Motorstrom eingeschaltet, d.h. das Drehmoment ist maximal.&lt;br /&gt;
&lt;br /&gt;
Die Rechtecksignale lassen sich mit Mikrocontrollern auf zwei Wegen erzeugen:&lt;br /&gt;
&lt;br /&gt;
PWM per Software&lt;br /&gt;
* Kostet Rechenzeit, erhöhter Softwareaufwand&lt;br /&gt;
* Signalausgabe auf jedem I/O-Pin möglich&lt;br /&gt;
* Höhere Kanalanzahl möglich&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
PWM per Hardware&lt;br /&gt;
* Läuft unabhängig vom Programm&lt;br /&gt;
* Bietet mehr Möglichkeiten bei gleichem Softwareaufwand &lt;br /&gt;
* Signalausgabe nur auf bestimmten, fest vorgegebenen Pins möglich&lt;br /&gt;
* Nur begrenzte Anzahl an PWM-Kanälen vorhanden (viele verbreitete AVR-Typen haben 2 bis 3, neuere auch mehr) &lt;br /&gt;
&lt;br /&gt;
Alles was mit Pulsen und Modulation zu tun hat, hat auch was mit Zeit zu tun - denn im Prinzip soll mit einer bestimmten Frequenz für eine bestimmte Dauer ein Pin eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Alles was bei Mikrocontrollern mit Zeit zu tun hat, hat wahrscheinlich auch etwas mit einem Timer bzw. Counter zu tun.&lt;br /&gt;
&lt;br /&gt;
==Timer / Counter==&lt;br /&gt;
&lt;br /&gt;
Unter [[Timer]] bzw. [[Counter]] (T/C) steht noch nicht soviel, aber man sollte kurz mal reinsehen, oder mehr dazu schreiben, oder die fehlende Verknüpfung anlegen.&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist nichts anderes als ein selbständiger Zähler (Counter), der mit einer bestimmten Frequenz einen Wert raufzählt. Und zwar in Hardware, also unabhängig vom Programm. Seine Zählfrequenz wird vom Prozessortakt abgeleitet, das erledigt der [[Prescaler]] in einstellbaren Schritten (Frequenzteiler).&lt;br /&gt;
&lt;br /&gt;
Der Zählerstand läßt sich sowohl in Software als auch von der Hardware selbst überwachen - und schon lassen sich damit periodisch Ereignisse auslösen.&lt;br /&gt;
&lt;br /&gt;
Deswegen lassen sich die T/C für viele Zwecke verwenden, wir wollen den T/C für PWM nutzen (trotzdem gleich eine Übersicht über die verschiedenen Modi).&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich natürlich, das Prinzip der T/C verstanden zu haben. Ein Blick ins GCC-Tutorial lohnt, die Atmel Application Note 130: Setup and Use the AVR Timers schadet auch nicht. &lt;br /&gt;
&lt;br /&gt;
Wie schon angedeutet, gibt es - je nach AVR - einen oder mehrere T/C . Sie unterscheiden sich erwartungsgemäß durch ihre Parameter und Optionen, z.B. die Auflösung, Frequenz, Zählweise und andere Betriebsmodi.&lt;br /&gt;
&lt;br /&gt;
Und natürlich auch durch den Namen, der sich auch in den [[Register]]n widerspiegelt: Sie werden nämlich numeriert (im Folgenden hier und im Datenblatt mit Platzhalter n). &lt;br /&gt;
&lt;br /&gt;
T/C 0 ist beim tiny2313 der &#039;einfache&#039; mit 8 Bit Auflösung (das Aus-An Verhältnis läßt sich in 256 Stufen einstellen), T/C 1 dagegen hat eine Auflösung von 16 Bit und bietet einige weitere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== 8 oder 16 Bit ? ===&lt;br /&gt;
Außer der Tatsache, daß die Auflösung bei 16 Bit mit 65536 Stufen um einiges größer ist, gibt es noch folgende Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Er verwendet einige 16 Bit Register&lt;br /&gt;
** Schreiben/Lesen dieser Register erfolgt in Schritten&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
Mit dem Zähler alleine kann man noch nicht so viel anfangen. Ausgedacht wurde deswegen außerdem die&lt;br /&gt;
&lt;br /&gt;
=== Output Compare Unit ===&lt;br /&gt;
&lt;br /&gt;
was soviel bedeutet wie Ausgangsvergleichseinheit.&lt;br /&gt;
&lt;br /&gt;
Jeder Zähler hat eine oder mehrere voneinander unabhängige Output Compare Units (OC), auch wieder mit den dazugehörigen Registern.&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen OCs und ihre Register werden mit Buchstaben (&#039;A&#039;, &#039;B&#039;) benannt. (Im PWM Modus hängt das direkt mit den Pins zusammen: OC1B ist der Ausgang der OC des T/C 1. Dazu gleich mehr..)&lt;br /&gt;
&lt;br /&gt;
Die OC vergleicht den Zählerstand (im Register TCNTn) ständig mit ihren eigenen Registerinhalten (0CRnx). Wenn diese übereinstimmen, passiert etwas.&lt;br /&gt;
&lt;br /&gt;
Was passiert, wird bestimmt durch die&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodi ===&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt. Die OC Unit vergleicht dessen Zählerstand mit einem Wert. Wenn diese übereinstimmen, kann etwas passieren.&lt;br /&gt;
&lt;br /&gt;
Weil es hier gleich mit den Einstellungen in den Registern losgeht, noch ein Hinweis:&lt;br /&gt;
&lt;br /&gt;
Die Kontrolle über das Verhalten der Zähler und OCs wird über Register vorgenommen, deren Namen nichts mit den OC Units zu tun haben!&lt;br /&gt;
Die Einstellungen sind lediglich auf zwei Register verteilt, die Timer/Counter Control Register - TCCRnA &amp;amp; TCCRnB.&lt;br /&gt;
&lt;br /&gt;
Ein paar Notizen:&lt;br /&gt;
* In verschiedenen Modi haben auch Bits in den Registern eine andere Bedeutung!&lt;br /&gt;
* Meist können Interrupts ausgelöst werden.&lt;br /&gt;
* Es kann häufig auch der Zählerstand per Software verändert werden.&lt;br /&gt;
* Die Frequenz der ausgegebenen Waveform hängt ab von&lt;br /&gt;
** I/O Clock (CPU)&lt;br /&gt;
** Prescaler&lt;br /&gt;
** Counter Modus&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen Modi (vorerst die vom 8 Bit Zähler):&lt;br /&gt;
&lt;br /&gt;
* Normal (evtl. für Software PWM)&lt;br /&gt;
* Clear Timer on Compare (CTC) (eingeschränkte PWM)&lt;br /&gt;
* Fast PWM&lt;br /&gt;
* Phase Correct PWM&lt;br /&gt;
&lt;br /&gt;
Dazu hier noch folgende Begriffe im Zusammenhang mit dem Zähler:&lt;br /&gt;
&lt;br /&gt;
 BOTTOM: 0x00&lt;br /&gt;
 MAX   : 0xFF bei 8 Bit, 0xFFFF bei 16 Bit&lt;br /&gt;
 TOP   : MAX oder OCRnx&lt;br /&gt;
&lt;br /&gt;
==== Normal==== &lt;br /&gt;
(evtl. für Software PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt rauf (BOTTOM-&amp;gt;MAX), und wird nicht zurückgesetzt, sondern läuft einfach über, und setzt dabei sein Overflow-Flag.&lt;br /&gt;
Dieser Modus wird zur PWM nicht empfohlen, weil er im Vergleich mit Hardware-PWM viel CPU-Zeit benötigt - das ist logisch:&lt;br /&gt;
Bei jedem Nulldurchgang müsste man einen Interrupt verwenden, der dann eine Routine ausführt, die den Ausgang umschaltet. Und man müsste den Zählerstand manipulieren, um die Pulslänge zu verändern.&lt;br /&gt;
&lt;br /&gt;
Für die verhältnismäßig langsame (Menschenzeit) Programmsteuerung ist dieser Modus aber ideal. Während dsa Hauptprogramm i.A. einfach endlos durchläuft, wird die Programmzeit durch einen Timer(-Interrupt) in Time-Slots gerastert (z.B. 1/10s). Damit lassen sich bequem Wartezeiten bzw. zeitabhängige Ereignisse steuern, ohne das Programm anzuhalten.&lt;br /&gt;
&lt;br /&gt;
====  Clear Timer on Compare (CTC)==== &lt;br /&gt;
(eingeschränkte PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt hoch, bis er mit OCRnx übereinstimmt (BOTTOM-&amp;gt;OCRnx: Match!) und wird dann auf Null gesetzt. Der maximale Wert lässt sich also über das Register OCRnx komfortabel bestimmen.&lt;br /&gt;
&lt;br /&gt;
Konkret bedeutet das, dass die in diesem Modus vom Prescaler erzeugte Basisfrequenz nochmals durch den Wert von OCRnx geteilt wird.&lt;br /&gt;
&lt;br /&gt;
Für PWM:&lt;br /&gt;
&lt;br /&gt;
Wenn eingestellt ist, dass der OC-Ausgang bei jedem Match umschaltet (toggle), entspricht der eingestellt Wert dem Pulsweitenverhältnis.&lt;br /&gt;
Bei OCRnx=128 des 8 Bit T/C wäre also etwa die Hälfte der Zeit der Pin eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann das beim T/C 0 des tiny2313 nur der Ausgang A (OC0A). Also ins Datenblatt gucken!&lt;br /&gt;
&lt;br /&gt;
====  Fast PWM====&lt;br /&gt;
&lt;br /&gt;
Einer von den zwei eigentlichen PWM-Betriebsarten der Counter.&lt;br /&gt;
&lt;br /&gt;
Zählt von BOTTOM bis TOP, wobei TOP entweder 0xFF oder OCRnx sein kann.&lt;br /&gt;
&lt;br /&gt;
Bei einem Match wird im&lt;br /&gt;
&lt;br /&gt;
a) nicht-invertierenden Modus&lt;br /&gt;
der Zähler gelöscht, und bei BOTTOM gesetzt&lt;br /&gt;
&lt;br /&gt;
b) invertierenden Modus&lt;br /&gt;
der Zähler gesetzt, und bei BOTTOM gelöscht.&lt;br /&gt;
&lt;br /&gt;
Klingt theoretisch kompliziert, praktisch invertiert es nur den Ausgang.&lt;br /&gt;
Aber der Vergleichswert muss anscheinend ständig aktualisiert werden!?&lt;br /&gt;
&lt;br /&gt;
Dieser Modus hat eine asymmetrische Ausgangsform, weil der Ausgang periodisch umgeschaltet wird (also immer nach der gleichen Zeit) und dann nach Ablauf der variablen Pulslänge wieder invertiert wird.&lt;br /&gt;
&lt;br /&gt;
Und es gibt noch einen Toggle-Modus, der allerdings nur für den Ausgang OC0A zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
====  Phase Correct PWM==== &lt;br /&gt;
&lt;br /&gt;
Ist nur halb so schnell wie Fast PWM, dafür aber mit symmetrischer Wellenform (besser für Motoren, weil    ).&lt;br /&gt;
&lt;br /&gt;
Erreicht wird das, indem von BOTTOM-&amp;gt;TOP gezählt wird, und dann wieder runter: TOP-BOTTOM.&lt;br /&gt;
&lt;br /&gt;
TOP kann entweder 0xFF oder OCRnx sein.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es wieder den nicht-invertierenden, den invertierenden, und den toggle-Modus (nicht an OC0B).&lt;br /&gt;
&lt;br /&gt;
==Praktisches Vorgehen==&lt;br /&gt;
&lt;br /&gt;
* Pins low setzen&lt;br /&gt;
* Pins als Ausgang konfigurieren.&lt;br /&gt;
* Geeignete Wellenform ermitteln&lt;br /&gt;
* Registerinformationen für ausgewählten T/C im Datenblatt aufschlagen&lt;br /&gt;
* Modus &amp;amp; Prescaler setzen und damit starten&lt;br /&gt;
** Bits in Control-Register TCCRnA &amp;amp; TCCRnB schreiben. Siehe [[Bitmanipulation]]&lt;br /&gt;
* Vergleichswert OCRnx setzen&lt;br /&gt;
&lt;br /&gt;
==Programmbeispiele==&lt;br /&gt;
&lt;br /&gt;
===PWM per Software===&lt;br /&gt;
====Pseudocode====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Initialisierung&lt;br /&gt;
pwm_phase = 0   // von 0 bis 100(99) ergibt ein moduliertes Signal&lt;br /&gt;
pwm_soll = 30  // Tastverhältnis in Prozent (Werte von 0..100)&lt;br /&gt;
&lt;br /&gt;
//alle s Sekunden tue:&lt;br /&gt;
wenn pwm_soll = pwm_phase dann&lt;br /&gt;
  ausgang = LOW&lt;br /&gt;
wenn pwm_phase++ = 100 dann&lt;br /&gt;
  pwm_phase = 0&lt;br /&gt;
  ausgang = HIGH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Tastverhältnis ist &amp;lt;math&amp;gt;t_{HIGH}=\frac{100}{pwm\_soll}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{100}{s} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PWM per Hardware===&lt;br /&gt;
&lt;br /&gt;
===Programmbeispiele===&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
Hier wird mit dem 16-Bit-Counter 1 im 8-Bit-Mode eine LED gedimmt.&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{Taktfrequenz}{Prescaler*(1+OCR0As)} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TCCR1A = (1&amp;lt;&amp;lt;WGM10)|(1&amp;lt;&amp;lt;COM1A1); // PWM, phase correct, 8 bit.&lt;br /&gt;
TCCR1B =  (1&amp;lt;&amp;lt;CS11) |(1&amp;lt;&amp;lt;CS10); // set clock/prescaler 1/64 -&amp;gt; enable counter&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
PORTB = 0xff; // enable pull-ups for inputs, set outputs high&lt;br /&gt;
DDRB  =  1&amp;lt;&amp;lt;LED;    // Pin LED auf 1 setzen&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
OCR1A=128; // LED 50%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artikel im Forum [http://www.mikrocontroller.net/forum/4 Codesammlung], die den Begriff PWM enthalten ([http://www.mikrocontroller.net/search?query=pwm&amp;amp;forums%5B%5D=4 hier])&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19011</id>
		<title>AVR PWM</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19011"/>
		<updated>2007-01-05T15:43:26Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* BASCOM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel ist noch nicht vollständig!&lt;br /&gt;
Und außerdem überschneidet er sich teilweise mit dem Tutorial, weil PWM und Timer zum Verständnis praktisch dasselbe sind. &lt;br /&gt;
Vielleicht kann ja jemand, der gerade dabei ist, sich diese Dinge anzueignen, die Beschreibung vorantreiben (erweitern/entschlacken)?&lt;br /&gt;
&lt;br /&gt;
Hier sollen die Möglichkeiten und die Funktionsweise der PWM mit AVRs erläutert werden, so daß Anfänger auf ihrem Weg zum Ziel unterstützt werden, ohne sich erst durch die wenig erklärenden Beiträge im Forum zu quälen.&lt;br /&gt;
Auch wenn das Verständnis (hoffentlich) dann nicht mehr aus dem Datenblatt kommen muß, ist dieses für die spezifischen Einstellungen und Feinheiten absolut notwendig. Aber mit dieser Übersicht sollte es leichter fallen, die relevanten Informationen schneller zu finden.&lt;br /&gt;
&lt;br /&gt;
Ich gehe dabei von meiner Situation aus: &amp;quot;Gerade mit AVRs angefangen, die LED blinkt, Taster wird abgefragt, schonmal von PWM gehört und unter den AVR Pins welche mit OC.. entdeckt, das hängt damit irgendwie zusammen.&amp;quot;&lt;br /&gt;
Man sollte sich auch um die Prozessorfrequenz gekümmert haben, also die [[AVR_Fuses]] entsprechend gesetzt haben.&lt;br /&gt;
&lt;br /&gt;
Wer in Begriff steht, sein erstes Board zu ätzen, sollte sich über die verschiedenen Möglichkeiten, die die OCnx Pins bieten, informiert haben.&lt;br /&gt;
&lt;br /&gt;
Übrigens lässt es sich besser lesen, wenn man sein Browserfenster so schmal macht, daß der Text in eine schöne Spalte gezwungen wird.&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
Im AVR-GCC-Tutorial werden im Abschnitt DAC-Optionen ([http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#DAC_.28Digital_Analog_Converter.29           link]) verschiedene Möglichkeiten angesprochen, analoge Spannungen zu generieren.&lt;br /&gt;
&lt;br /&gt;
Darunter fällt auch die [[Pulsweitenmodulation]], bei der durch schnelles Ein- und  Ausschalten eines Ausgangs (über einen Filter) eine [[analog]]e Spannung generiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim Dimmen von Lichtquellen wirkt die Trägheit des Auges als Filter, wenn z.B. eine LED im Mittel die Hälfte der Zeit eingeschaltet ist, scheint es also, als würde sie nur halb so hell leuchten.&lt;br /&gt;
&lt;br /&gt;
Bei Motoren läßt sich PWM gut zum Dosieren des Stroms einsetzen, ohne große Verluste zu haben.  Für einen Teil der Zeit wird also der volle Motorstrom eingeschaltet, d.h. das Drehmoment ist maximal.&lt;br /&gt;
&lt;br /&gt;
Die Rechtecksignale lassen sich mit Mikrocontrollern auf zwei Wegen erzeugen:&lt;br /&gt;
&lt;br /&gt;
PWM per Software&lt;br /&gt;
* Kostet Rechenzeit, erhöhter Softwareaufwand&lt;br /&gt;
* Signalausgabe auf jedem I/O-Pin möglich&lt;br /&gt;
* Höhere Kanalanzahl möglich&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
PWM per Hardware&lt;br /&gt;
* Läuft unabhängig vom Programm&lt;br /&gt;
* Bietet mehr Möglichkeiten bei gleichem Softwareaufwand &lt;br /&gt;
* Signalausgabe nur auf bestimmten, fest vorgegebenen Pins möglich&lt;br /&gt;
* Nur begrenzte Anzahl an PWM-Kanälen vorhanden (viele verbreitete AVR-Typen haben 2 bis 3, neuere auch mehr) &lt;br /&gt;
&lt;br /&gt;
Alles was mit Pulsen und Modulation zu tun hat, hat auch was mit Zeit zu tun - denn im Prinzip soll mit einer bestimmten Frequenz für eine bestimmte Dauer ein Pin eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Alles was bei Mikrocontrollern mit Zeit zu tun hat, hat wahrscheinlich auch etwas mit einem Timer bzw. Counter zu tun.&lt;br /&gt;
&lt;br /&gt;
==Timer / Counter==&lt;br /&gt;
&lt;br /&gt;
Unter [[Timer]] bzw. [[Counter]] (T/C) steht noch nicht soviel, aber man sollte kurz mal reinsehen, oder mehr dazu schreiben, oder die fehlende Verknüpfung anlegen.&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist nichts anderes als ein selbständiger Zähler (Counter), der mit einer bestimmten Frequenz einen Wert raufzählt. Und zwar in Hardware, also unabhängig vom Programm. Seine Zählfrequenz wird vom Prozessortakt abgeleitet, das erledigt der [[Prescaler]] in einstellbaren Schritten (Frequenzteiler).&lt;br /&gt;
&lt;br /&gt;
Der Zählerstand läßt sich sowohl in Software als auch von der Hardware selbst überwachen - und schon lassen sich damit periodisch Ereignisse auslösen.&lt;br /&gt;
&lt;br /&gt;
Deswegen lassen sich die T/C für viele Zwecke verwenden, wir wollen den T/C für PWM nutzen (trotzdem gleich eine Übersicht über die verschiedenen Modi).&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich natürlich, das Prinzip der T/C verstanden zu haben. Ein Blick ins GCC-Tutorial lohnt, die Atmel Application Note 130: Setup and Use the AVR Timers schadet auch nicht. &lt;br /&gt;
&lt;br /&gt;
Wie schon angedeutet, gibt es - je nach AVR - einen oder mehrere T/C . Sie unterscheiden sich erwartungsgemäß durch ihre Parameter und Optionen, z.B. die Auflösung, Frequenz, Zählweise und andere Betriebsmodi.&lt;br /&gt;
&lt;br /&gt;
Und natürlich auch durch den Namen, der sich auch in den [[Register]]n widerspiegelt: Sie werden nämlich numeriert (im Folgenden hier und im Datenblatt mit Platzhalter n). &lt;br /&gt;
&lt;br /&gt;
T/C 0 ist beim tiny2313 der &#039;einfache&#039; mit 8 Bit Auflösung (das Aus-An Verhältnis läßt sich in 256 Stufen einstellen), T/C 1 dagegen hat eine Auflösung von 16 Bit und bietet einige weitere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== 8 oder 16 Bit ? ===&lt;br /&gt;
Außer der Tatsache, daß die Auflösung bei 16 Bit mit 65536 Stufen um einiges größer ist, gibt es noch folgende Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Er verwendet einige 16 Bit Register&lt;br /&gt;
** Schreiben/Lesen dieser Register erfolgt in Schritten&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
Mit dem Zähler alleine kann man noch nicht so viel anfangen. Ausgedacht wurde deswegen außerdem die&lt;br /&gt;
&lt;br /&gt;
=== Output Compare Unit ===&lt;br /&gt;
&lt;br /&gt;
was soviel bedeutet wie Ausgangsvergleichseinheit.&lt;br /&gt;
&lt;br /&gt;
Jeder Zähler hat eine oder mehrere voneinander unabhängige Output Compare Units (OC), auch wieder mit den dazugehörigen Registern.&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen OCs und ihre Register werden mit Buchstaben (&#039;A&#039;, &#039;B&#039;) benannt. (Im PWM Modus hängt das direkt mit den Pins zusammen: OC1B ist der Ausgang der OC des T/C 1. Dazu gleich mehr..)&lt;br /&gt;
&lt;br /&gt;
Die OC vergleicht den Zählerstand (im Register TCNTn) ständig mit ihren eigenen Registerinhalten (0CRnx). Wenn diese übereinstimmen, passiert etwas.&lt;br /&gt;
&lt;br /&gt;
Was passiert, wird bestimmt durch die&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodi ===&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt. Die OC Unit vergleicht dessen Zählerstand mit einem Wert. Wenn diese übereinstimmen, kann etwas passieren.&lt;br /&gt;
&lt;br /&gt;
Weil es hier gleich mit den Einstellungen in den Registern losgeht, noch ein Hinweis:&lt;br /&gt;
&lt;br /&gt;
Die Kontrolle über das Verhalten der Zähler und OCs wird über Register vorgenommen, deren Namen nichts mit den OC Units zu tun haben!&lt;br /&gt;
Die Einstellungen sind lediglich auf zwei Register verteilt, die Timer/Counter Control Register - TCCRnA &amp;amp; TCCRnB.&lt;br /&gt;
&lt;br /&gt;
Ein paar Notizen:&lt;br /&gt;
* In verschiedenen Modi haben auch Bits in den Registern eine andere Bedeutung!&lt;br /&gt;
* Meist können Interrupts ausgelöst werden.&lt;br /&gt;
* Es kann häufig auch der Zählerstand per Software verändert werden.&lt;br /&gt;
* Die Frequenz der ausgegebenen Waveform hängt ab von&lt;br /&gt;
** I/O Clock (CPU)&lt;br /&gt;
** Prescaler&lt;br /&gt;
** Counter Modus&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen Modi (vorerst die vom 8 Bit Zähler):&lt;br /&gt;
&lt;br /&gt;
* Normal (evtl. für Software PWM)&lt;br /&gt;
* Clear Timer on Compare (CTC) (eingeschränkte PWM)&lt;br /&gt;
* Fast PWM&lt;br /&gt;
* Phase Correct PWM&lt;br /&gt;
&lt;br /&gt;
Dazu hier noch folgende Begriffe im Zusammenhang mit dem Zähler:&lt;br /&gt;
&lt;br /&gt;
 BOTTOM: 0x00&lt;br /&gt;
 MAX   : 0xFF bei 8 Bit, 0xFFFF bei 16 Bit&lt;br /&gt;
 TOP   : MAX oder OCRnx&lt;br /&gt;
&lt;br /&gt;
==== Normal==== &lt;br /&gt;
(evtl. für Software PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt rauf (BOTTOM-&amp;gt;MAX), und wird nicht zurückgesetzt, sondern läuft einfach über, und setzt dabei sein Overflow-Flag.&lt;br /&gt;
Dieser Modus wird zur PWM nicht empfohlen, weil er im Vergleich mit Hardware-PWM viel CPU-Zeit benötigt - das ist logisch:&lt;br /&gt;
Bei jedem Nulldurchgang müsste man einen Interrupt verwenden, der dann eine Routine ausführt, die den Ausgang umschaltet. Und man müsste den Zählerstand manipulieren, um die Pulslänge zu verändern.&lt;br /&gt;
&lt;br /&gt;
Für die verhältnismäßig langsame (Menschenzeit) Programmsteuerung ist dieser Modus aber ideal. Während dsa Hauptprogramm i.A. einfach endlos durchläuft, wird die Programmzeit durch einen Timer(-Interrupt) in Time-Slots gerastert (z.B. 1/10s). Damit lassen sich bequem Wartezeiten bzw. zeitabhängige Ereignisse steuern, ohne das Programm anzuhalten.&lt;br /&gt;
&lt;br /&gt;
====  Clear Timer on Compare (CTC)==== &lt;br /&gt;
(eingeschränkte PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt hoch, bis er mit OCRnx übereinstimmt (BOTTOM-&amp;gt;OCRnx: Match!) und wird dann auf Null gesetzt. Der maximale Wert lässt sich also über das Register OCRnx komfortabel bestimmen.&lt;br /&gt;
&lt;br /&gt;
Konkret bedeutet das, dass die in diesem Modus vom Prescaler erzeugte Basisfrequenz nochmals durch den Wert von OCRnx geteilt wird.&lt;br /&gt;
&lt;br /&gt;
Für PWM:&lt;br /&gt;
&lt;br /&gt;
Wenn eingestellt ist, dass der OC-Ausgang bei jedem Match umschaltet (toggle), entspricht der eingestellt Wert dem Pulsweitenverhältnis.&lt;br /&gt;
Bei OCRnx=128 des 8 Bit T/C wäre also etwa die Hälfte der Zeit der Pin eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann das beim T/C 0 des tiny2313 nur der Ausgang A (OC0A). Also ins Datenblatt gucken!&lt;br /&gt;
&lt;br /&gt;
====  Fast PWM====&lt;br /&gt;
&lt;br /&gt;
Einer von den zwei eigentlichen PWM-Betriebsarten der Counter.&lt;br /&gt;
&lt;br /&gt;
Zählt von BOTTOM bis TOP, wobei TOP entweder 0xFF oder OCRnx sein kann.&lt;br /&gt;
&lt;br /&gt;
Bei einem Match wird im&lt;br /&gt;
&lt;br /&gt;
a) nicht-invertierenden Modus&lt;br /&gt;
der Zähler gelöscht, und bei BOTTOM gesetzt&lt;br /&gt;
&lt;br /&gt;
b) invertierenden Modus&lt;br /&gt;
der Zähler gesetzt, und bei BOTTOM gelöscht.&lt;br /&gt;
&lt;br /&gt;
Klingt theoretisch kompliziert, praktisch invertiert es nur den Ausgang.&lt;br /&gt;
Aber der Vergleichswert muss anscheinend ständig aktualisiert werden!?&lt;br /&gt;
&lt;br /&gt;
Dieser Modus hat eine asymmetrische Ausgangsform, weil der Ausgang periodisch umgeschaltet wird (also immer nach der gleichen Zeit) und dann nach Ablauf der variablen Pulslänge wieder invertiert wird.&lt;br /&gt;
&lt;br /&gt;
Und es gibt noch einen Toggle-Modus, der allerdings nur für den Ausgang OC0A zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
====  Phase Correct PWM==== &lt;br /&gt;
&lt;br /&gt;
Ist nur halb so schnell wie Fast PWM, dafür aber mit symmetrischer Wellenform (besser für Motoren, weil    ).&lt;br /&gt;
&lt;br /&gt;
Erreicht wird das, indem von BOTTOM-&amp;gt;TOP gezählt wird, und dann wieder runter: TOP-BOTTOM.&lt;br /&gt;
&lt;br /&gt;
TOP kann entweder 0xFF oder OCRnx sein.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es wieder den nicht-invertierenden, den invertierenden, und den toggle-Modus (nicht an OC0B).&lt;br /&gt;
&lt;br /&gt;
==Praktisches Vorgehen==&lt;br /&gt;
&lt;br /&gt;
* Pins low setzen&lt;br /&gt;
* Pins als Ausgang konfigurieren.&lt;br /&gt;
* Geeignete Wellenform ermitteln&lt;br /&gt;
* Registerinformationen für ausgewählten T/C im Datenblatt aufschlagen&lt;br /&gt;
* Modus &amp;amp; Prescaler setzen und damit starten&lt;br /&gt;
** Bits in Control-Register TCCRnA &amp;amp; TCCRnB schreiben. Siehe [[Bitmanipulation]]&lt;br /&gt;
* Vergleichswert OCRnx setzen&lt;br /&gt;
&lt;br /&gt;
==Programmbeispiele==&lt;br /&gt;
&lt;br /&gt;
===PWM per Software===&lt;br /&gt;
====Pseudocode====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Initialisierung&lt;br /&gt;
pwm_phase = 0   // von 0 bis 100(99) ergibt ein moduliertes Signal&lt;br /&gt;
pwm_soll = 30  // Tastverhältnis in Prozent (Werte von 0..100)&lt;br /&gt;
&lt;br /&gt;
//alle s Sekunden tue:&lt;br /&gt;
wenn pwm_soll = pwm_phase dann&lt;br /&gt;
  ausgang = LOW&lt;br /&gt;
wenn pwm_phase++ = 100 dann&lt;br /&gt;
  pwm_phase = 0&lt;br /&gt;
  ausgang = HIGH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Tastverhältnis ist &amp;lt;math&amp;gt;t_{HIGH}=\frac{100}{pwm\_soll}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{100}{s} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PWM per Hardware===&lt;br /&gt;
&lt;br /&gt;
===Programmbeispiele===&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
Hier wird mit dem 16-Bit-Counter 1 im 8-Bit-Mode eine LED gedimmt.&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{Taktfrequenz}{Prescaler*(1+OCR0As)} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TCCR1A = (1&amp;lt;&amp;lt;WGM10)|(1&amp;lt;&amp;lt;COM1A1); // PWM, phase correct, 8 bit.&lt;br /&gt;
TCCR1B =  (1&amp;lt;&amp;lt;CS11) |(1&amp;lt;&amp;lt;CS10); // set clock/prescaler 1/64 -&amp;gt; enable counter&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
PORTB = 0xff; // enable pull-ups for inputs, set outputs high&lt;br /&gt;
DDRB  =  1&amp;lt;&amp;lt;LED;    // Pin LED auf 1 setzen&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
OCR1A=128; // LED 50%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artikel in der Codesammlung, die den Begriff PWM enthalten ([http://www.mikrocontroller.net/search?query=pwm&amp;amp;forums%5B%5D=4 hier])&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19010</id>
		<title>AVR PWM</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19010"/>
		<updated>2007-01-05T15:39:56Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Normal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel ist noch nicht vollständig!&lt;br /&gt;
Und außerdem überschneidet er sich teilweise mit dem Tutorial, weil PWM und Timer zum Verständnis praktisch dasselbe sind. &lt;br /&gt;
Vielleicht kann ja jemand, der gerade dabei ist, sich diese Dinge anzueignen, die Beschreibung vorantreiben (erweitern/entschlacken)?&lt;br /&gt;
&lt;br /&gt;
Hier sollen die Möglichkeiten und die Funktionsweise der PWM mit AVRs erläutert werden, so daß Anfänger auf ihrem Weg zum Ziel unterstützt werden, ohne sich erst durch die wenig erklärenden Beiträge im Forum zu quälen.&lt;br /&gt;
Auch wenn das Verständnis (hoffentlich) dann nicht mehr aus dem Datenblatt kommen muß, ist dieses für die spezifischen Einstellungen und Feinheiten absolut notwendig. Aber mit dieser Übersicht sollte es leichter fallen, die relevanten Informationen schneller zu finden.&lt;br /&gt;
&lt;br /&gt;
Ich gehe dabei von meiner Situation aus: &amp;quot;Gerade mit AVRs angefangen, die LED blinkt, Taster wird abgefragt, schonmal von PWM gehört und unter den AVR Pins welche mit OC.. entdeckt, das hängt damit irgendwie zusammen.&amp;quot;&lt;br /&gt;
Man sollte sich auch um die Prozessorfrequenz gekümmert haben, also die [[AVR_Fuses]] entsprechend gesetzt haben.&lt;br /&gt;
&lt;br /&gt;
Wer in Begriff steht, sein erstes Board zu ätzen, sollte sich über die verschiedenen Möglichkeiten, die die OCnx Pins bieten, informiert haben.&lt;br /&gt;
&lt;br /&gt;
Übrigens lässt es sich besser lesen, wenn man sein Browserfenster so schmal macht, daß der Text in eine schöne Spalte gezwungen wird.&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
Im AVR-GCC-Tutorial werden im Abschnitt DAC-Optionen ([http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#DAC_.28Digital_Analog_Converter.29           link]) verschiedene Möglichkeiten angesprochen, analoge Spannungen zu generieren.&lt;br /&gt;
&lt;br /&gt;
Darunter fällt auch die [[Pulsweitenmodulation]], bei der durch schnelles Ein- und  Ausschalten eines Ausgangs (über einen Filter) eine [[analog]]e Spannung generiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim Dimmen von Lichtquellen wirkt die Trägheit des Auges als Filter, wenn z.B. eine LED im Mittel die Hälfte der Zeit eingeschaltet ist, scheint es also, als würde sie nur halb so hell leuchten.&lt;br /&gt;
&lt;br /&gt;
Bei Motoren läßt sich PWM gut zum Dosieren des Stroms einsetzen, ohne große Verluste zu haben.  Für einen Teil der Zeit wird also der volle Motorstrom eingeschaltet, d.h. das Drehmoment ist maximal.&lt;br /&gt;
&lt;br /&gt;
Die Rechtecksignale lassen sich mit Mikrocontrollern auf zwei Wegen erzeugen:&lt;br /&gt;
&lt;br /&gt;
PWM per Software&lt;br /&gt;
* Kostet Rechenzeit, erhöhter Softwareaufwand&lt;br /&gt;
* Signalausgabe auf jedem I/O-Pin möglich&lt;br /&gt;
* Höhere Kanalanzahl möglich&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
PWM per Hardware&lt;br /&gt;
* Läuft unabhängig vom Programm&lt;br /&gt;
* Bietet mehr Möglichkeiten bei gleichem Softwareaufwand &lt;br /&gt;
* Signalausgabe nur auf bestimmten, fest vorgegebenen Pins möglich&lt;br /&gt;
* Nur begrenzte Anzahl an PWM-Kanälen vorhanden (viele verbreitete AVR-Typen haben 2 bis 3, neuere auch mehr) &lt;br /&gt;
&lt;br /&gt;
Alles was mit Pulsen und Modulation zu tun hat, hat auch was mit Zeit zu tun - denn im Prinzip soll mit einer bestimmten Frequenz für eine bestimmte Dauer ein Pin eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Alles was bei Mikrocontrollern mit Zeit zu tun hat, hat wahrscheinlich auch etwas mit einem Timer bzw. Counter zu tun.&lt;br /&gt;
&lt;br /&gt;
==Timer / Counter==&lt;br /&gt;
&lt;br /&gt;
Unter [[Timer]] bzw. [[Counter]] (T/C) steht noch nicht soviel, aber man sollte kurz mal reinsehen, oder mehr dazu schreiben, oder die fehlende Verknüpfung anlegen.&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist nichts anderes als ein selbständiger Zähler (Counter), der mit einer bestimmten Frequenz einen Wert raufzählt. Und zwar in Hardware, also unabhängig vom Programm. Seine Zählfrequenz wird vom Prozessortakt abgeleitet, das erledigt der [[Prescaler]] in einstellbaren Schritten (Frequenzteiler).&lt;br /&gt;
&lt;br /&gt;
Der Zählerstand läßt sich sowohl in Software als auch von der Hardware selbst überwachen - und schon lassen sich damit periodisch Ereignisse auslösen.&lt;br /&gt;
&lt;br /&gt;
Deswegen lassen sich die T/C für viele Zwecke verwenden, wir wollen den T/C für PWM nutzen (trotzdem gleich eine Übersicht über die verschiedenen Modi).&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich natürlich, das Prinzip der T/C verstanden zu haben. Ein Blick ins GCC-Tutorial lohnt, die Atmel Application Note 130: Setup and Use the AVR Timers schadet auch nicht. &lt;br /&gt;
&lt;br /&gt;
Wie schon angedeutet, gibt es - je nach AVR - einen oder mehrere T/C . Sie unterscheiden sich erwartungsgemäß durch ihre Parameter und Optionen, z.B. die Auflösung, Frequenz, Zählweise und andere Betriebsmodi.&lt;br /&gt;
&lt;br /&gt;
Und natürlich auch durch den Namen, der sich auch in den [[Register]]n widerspiegelt: Sie werden nämlich numeriert (im Folgenden hier und im Datenblatt mit Platzhalter n). &lt;br /&gt;
&lt;br /&gt;
T/C 0 ist beim tiny2313 der &#039;einfache&#039; mit 8 Bit Auflösung (das Aus-An Verhältnis läßt sich in 256 Stufen einstellen), T/C 1 dagegen hat eine Auflösung von 16 Bit und bietet einige weitere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== 8 oder 16 Bit ? ===&lt;br /&gt;
Außer der Tatsache, daß die Auflösung bei 16 Bit mit 65536 Stufen um einiges größer ist, gibt es noch folgende Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Er verwendet einige 16 Bit Register&lt;br /&gt;
** Schreiben/Lesen dieser Register erfolgt in Schritten&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
Mit dem Zähler alleine kann man noch nicht so viel anfangen. Ausgedacht wurde deswegen außerdem die&lt;br /&gt;
&lt;br /&gt;
=== Output Compare Unit ===&lt;br /&gt;
&lt;br /&gt;
was soviel bedeutet wie Ausgangsvergleichseinheit.&lt;br /&gt;
&lt;br /&gt;
Jeder Zähler hat eine oder mehrere voneinander unabhängige Output Compare Units (OC), auch wieder mit den dazugehörigen Registern.&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen OCs und ihre Register werden mit Buchstaben (&#039;A&#039;, &#039;B&#039;) benannt. (Im PWM Modus hängt das direkt mit den Pins zusammen: OC1B ist der Ausgang der OC des T/C 1. Dazu gleich mehr..)&lt;br /&gt;
&lt;br /&gt;
Die OC vergleicht den Zählerstand (im Register TCNTn) ständig mit ihren eigenen Registerinhalten (0CRnx). Wenn diese übereinstimmen, passiert etwas.&lt;br /&gt;
&lt;br /&gt;
Was passiert, wird bestimmt durch die&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodi ===&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt. Die OC Unit vergleicht dessen Zählerstand mit einem Wert. Wenn diese übereinstimmen, kann etwas passieren.&lt;br /&gt;
&lt;br /&gt;
Weil es hier gleich mit den Einstellungen in den Registern losgeht, noch ein Hinweis:&lt;br /&gt;
&lt;br /&gt;
Die Kontrolle über das Verhalten der Zähler und OCs wird über Register vorgenommen, deren Namen nichts mit den OC Units zu tun haben!&lt;br /&gt;
Die Einstellungen sind lediglich auf zwei Register verteilt, die Timer/Counter Control Register - TCCRnA &amp;amp; TCCRnB.&lt;br /&gt;
&lt;br /&gt;
Ein paar Notizen:&lt;br /&gt;
* In verschiedenen Modi haben auch Bits in den Registern eine andere Bedeutung!&lt;br /&gt;
* Meist können Interrupts ausgelöst werden.&lt;br /&gt;
* Es kann häufig auch der Zählerstand per Software verändert werden.&lt;br /&gt;
* Die Frequenz der ausgegebenen Waveform hängt ab von&lt;br /&gt;
** I/O Clock (CPU)&lt;br /&gt;
** Prescaler&lt;br /&gt;
** Counter Modus&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen Modi (vorerst die vom 8 Bit Zähler):&lt;br /&gt;
&lt;br /&gt;
* Normal (evtl. für Software PWM)&lt;br /&gt;
* Clear Timer on Compare (CTC) (eingeschränkte PWM)&lt;br /&gt;
* Fast PWM&lt;br /&gt;
* Phase Correct PWM&lt;br /&gt;
&lt;br /&gt;
Dazu hier noch folgende Begriffe im Zusammenhang mit dem Zähler:&lt;br /&gt;
&lt;br /&gt;
 BOTTOM: 0x00&lt;br /&gt;
 MAX   : 0xFF bei 8 Bit, 0xFFFF bei 16 Bit&lt;br /&gt;
 TOP   : MAX oder OCRnx&lt;br /&gt;
&lt;br /&gt;
==== Normal==== &lt;br /&gt;
(evtl. für Software PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt rauf (BOTTOM-&amp;gt;MAX), und wird nicht zurückgesetzt, sondern läuft einfach über, und setzt dabei sein Overflow-Flag.&lt;br /&gt;
Dieser Modus wird zur PWM nicht empfohlen, weil er im Vergleich mit Hardware-PWM viel CPU-Zeit benötigt - das ist logisch:&lt;br /&gt;
Bei jedem Nulldurchgang müsste man einen Interrupt verwenden, der dann eine Routine ausführt, die den Ausgang umschaltet. Und man müsste den Zählerstand manipulieren, um die Pulslänge zu verändern.&lt;br /&gt;
&lt;br /&gt;
Für die verhältnismäßig langsame (Menschenzeit) Programmsteuerung ist dieser Modus aber ideal. Während dsa Hauptprogramm i.A. einfach endlos durchläuft, wird die Programmzeit durch einen Timer(-Interrupt) in Time-Slots gerastert (z.B. 1/10s). Damit lassen sich bequem Wartezeiten bzw. zeitabhängige Ereignisse steuern, ohne das Programm anzuhalten.&lt;br /&gt;
&lt;br /&gt;
====  Clear Timer on Compare (CTC)==== &lt;br /&gt;
(eingeschränkte PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt hoch, bis er mit OCRnx übereinstimmt (BOTTOM-&amp;gt;OCRnx: Match!) und wird dann auf Null gesetzt. Der maximale Wert lässt sich also über das Register OCRnx komfortabel bestimmen.&lt;br /&gt;
&lt;br /&gt;
Konkret bedeutet das, dass die in diesem Modus vom Prescaler erzeugte Basisfrequenz nochmals durch den Wert von OCRnx geteilt wird.&lt;br /&gt;
&lt;br /&gt;
Für PWM:&lt;br /&gt;
&lt;br /&gt;
Wenn eingestellt ist, dass der OC-Ausgang bei jedem Match umschaltet (toggle), entspricht der eingestellt Wert dem Pulsweitenverhältnis.&lt;br /&gt;
Bei OCRnx=128 des 8 Bit T/C wäre also etwa die Hälfte der Zeit der Pin eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann das beim T/C 0 des tiny2313 nur der Ausgang A (OC0A). Also ins Datenblatt gucken!&lt;br /&gt;
&lt;br /&gt;
====  Fast PWM====&lt;br /&gt;
&lt;br /&gt;
Einer von den zwei eigentlichen PWM-Betriebsarten der Counter.&lt;br /&gt;
&lt;br /&gt;
Zählt von BOTTOM bis TOP, wobei TOP entweder 0xFF oder OCRnx sein kann.&lt;br /&gt;
&lt;br /&gt;
Bei einem Match wird im&lt;br /&gt;
&lt;br /&gt;
a) nicht-invertierenden Modus&lt;br /&gt;
der Zähler gelöscht, und bei BOTTOM gesetzt&lt;br /&gt;
&lt;br /&gt;
b) invertierenden Modus&lt;br /&gt;
der Zähler gesetzt, und bei BOTTOM gelöscht.&lt;br /&gt;
&lt;br /&gt;
Klingt theoretisch kompliziert, praktisch invertiert es nur den Ausgang.&lt;br /&gt;
Aber der Vergleichswert muss anscheinend ständig aktualisiert werden!?&lt;br /&gt;
&lt;br /&gt;
Dieser Modus hat eine asymmetrische Ausgangsform, weil der Ausgang periodisch umgeschaltet wird (also immer nach der gleichen Zeit) und dann nach Ablauf der variablen Pulslänge wieder invertiert wird.&lt;br /&gt;
&lt;br /&gt;
Und es gibt noch einen Toggle-Modus, der allerdings nur für den Ausgang OC0A zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
====  Phase Correct PWM==== &lt;br /&gt;
&lt;br /&gt;
Ist nur halb so schnell wie Fast PWM, dafür aber mit symmetrischer Wellenform (besser für Motoren, weil    ).&lt;br /&gt;
&lt;br /&gt;
Erreicht wird das, indem von BOTTOM-&amp;gt;TOP gezählt wird, und dann wieder runter: TOP-BOTTOM.&lt;br /&gt;
&lt;br /&gt;
TOP kann entweder 0xFF oder OCRnx sein.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es wieder den nicht-invertierenden, den invertierenden, und den toggle-Modus (nicht an OC0B).&lt;br /&gt;
&lt;br /&gt;
==Praktisches Vorgehen==&lt;br /&gt;
&lt;br /&gt;
* Pins low setzen&lt;br /&gt;
* Pins als Ausgang konfigurieren.&lt;br /&gt;
* Geeignete Wellenform ermitteln&lt;br /&gt;
* Registerinformationen für ausgewählten T/C im Datenblatt aufschlagen&lt;br /&gt;
* Modus &amp;amp; Prescaler setzen und damit starten&lt;br /&gt;
** Bits in Control-Register TCCRnA &amp;amp; TCCRnB schreiben. Siehe [[Bitmanipulation]]&lt;br /&gt;
* Vergleichswert OCRnx setzen&lt;br /&gt;
&lt;br /&gt;
==Programmbeispiele==&lt;br /&gt;
&lt;br /&gt;
===PWM per Software===&lt;br /&gt;
====Pseudocode====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Initialisierung&lt;br /&gt;
pwm_phase = 0   // von 0 bis 100(99) ergibt ein moduliertes Signal&lt;br /&gt;
pwm_soll = 30  // Tastverhältnis in Prozent (Werte von 0..100)&lt;br /&gt;
&lt;br /&gt;
//alle s Sekunden tue:&lt;br /&gt;
wenn pwm_soll = pwm_phase dann&lt;br /&gt;
  ausgang = LOW&lt;br /&gt;
wenn pwm_phase++ = 100 dann&lt;br /&gt;
  pwm_phase = 0&lt;br /&gt;
  ausgang = HIGH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Tastverhältnis ist &amp;lt;math&amp;gt;t_{HIGH}=\frac{100}{pwm\_soll}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{100}{s} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PWM per Hardware===&lt;br /&gt;
&lt;br /&gt;
===Programmbeispiele===&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
Hier wird mit dem 16-Bit-Counter 1 im 8-Bit-Mode eine LED gedimmt.&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{Taktfrequenz}{Prescaler*(1+OCR0As)} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TCCR1A = (1&amp;lt;&amp;lt;WGM10)|(1&amp;lt;&amp;lt;COM1A1); // PWM, phase correct, 8 bit.&lt;br /&gt;
TCCR1B =  (1&amp;lt;&amp;lt;CS11) |(1&amp;lt;&amp;lt;CS10); // set clock/prescaler 1/64 -&amp;gt; enable counter&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
PORTB = 0xff; // enable pull-ups for inputs, set outputs high&lt;br /&gt;
DDRB  =  1&amp;lt;&amp;lt;LED;    // Pin LED auf 1 setzen&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
OCR1A=128; // LED 50%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artikel in der Codesammlung, die den Begriff PWM enthalten ([http://www.mikrocontroller.net/forum/forum.php?query=pwm&amp;amp;forums%5B%5D=4&amp;amp;groupbythread=on&amp;amp;number=23&amp;amp;action=sendsearch hier])&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19009</id>
		<title>AVR PWM</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_PWM&amp;diff=19009"/>
		<updated>2007-01-05T15:33:14Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Output Compare Unit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel ist noch nicht vollständig!&lt;br /&gt;
Und außerdem überschneidet er sich teilweise mit dem Tutorial, weil PWM und Timer zum Verständnis praktisch dasselbe sind. &lt;br /&gt;
Vielleicht kann ja jemand, der gerade dabei ist, sich diese Dinge anzueignen, die Beschreibung vorantreiben (erweitern/entschlacken)?&lt;br /&gt;
&lt;br /&gt;
Hier sollen die Möglichkeiten und die Funktionsweise der PWM mit AVRs erläutert werden, so daß Anfänger auf ihrem Weg zum Ziel unterstützt werden, ohne sich erst durch die wenig erklärenden Beiträge im Forum zu quälen.&lt;br /&gt;
Auch wenn das Verständnis (hoffentlich) dann nicht mehr aus dem Datenblatt kommen muß, ist dieses für die spezifischen Einstellungen und Feinheiten absolut notwendig. Aber mit dieser Übersicht sollte es leichter fallen, die relevanten Informationen schneller zu finden.&lt;br /&gt;
&lt;br /&gt;
Ich gehe dabei von meiner Situation aus: &amp;quot;Gerade mit AVRs angefangen, die LED blinkt, Taster wird abgefragt, schonmal von PWM gehört und unter den AVR Pins welche mit OC.. entdeckt, das hängt damit irgendwie zusammen.&amp;quot;&lt;br /&gt;
Man sollte sich auch um die Prozessorfrequenz gekümmert haben, also die [[AVR_Fuses]] entsprechend gesetzt haben.&lt;br /&gt;
&lt;br /&gt;
Wer in Begriff steht, sein erstes Board zu ätzen, sollte sich über die verschiedenen Möglichkeiten, die die OCnx Pins bieten, informiert haben.&lt;br /&gt;
&lt;br /&gt;
Übrigens lässt es sich besser lesen, wenn man sein Browserfenster so schmal macht, daß der Text in eine schöne Spalte gezwungen wird.&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
Im AVR-GCC-Tutorial werden im Abschnitt DAC-Optionen ([http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#DAC_.28Digital_Analog_Converter.29           link]) verschiedene Möglichkeiten angesprochen, analoge Spannungen zu generieren.&lt;br /&gt;
&lt;br /&gt;
Darunter fällt auch die [[Pulsweitenmodulation]], bei der durch schnelles Ein- und  Ausschalten eines Ausgangs (über einen Filter) eine [[analog]]e Spannung generiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim Dimmen von Lichtquellen wirkt die Trägheit des Auges als Filter, wenn z.B. eine LED im Mittel die Hälfte der Zeit eingeschaltet ist, scheint es also, als würde sie nur halb so hell leuchten.&lt;br /&gt;
&lt;br /&gt;
Bei Motoren läßt sich PWM gut zum Dosieren des Stroms einsetzen, ohne große Verluste zu haben.  Für einen Teil der Zeit wird also der volle Motorstrom eingeschaltet, d.h. das Drehmoment ist maximal.&lt;br /&gt;
&lt;br /&gt;
Die Rechtecksignale lassen sich mit Mikrocontrollern auf zwei Wegen erzeugen:&lt;br /&gt;
&lt;br /&gt;
PWM per Software&lt;br /&gt;
* Kostet Rechenzeit, erhöhter Softwareaufwand&lt;br /&gt;
* Signalausgabe auf jedem I/O-Pin möglich&lt;br /&gt;
* Höhere Kanalanzahl möglich&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
PWM per Hardware&lt;br /&gt;
* Läuft unabhängig vom Programm&lt;br /&gt;
* Bietet mehr Möglichkeiten bei gleichem Softwareaufwand &lt;br /&gt;
* Signalausgabe nur auf bestimmten, fest vorgegebenen Pins möglich&lt;br /&gt;
* Nur begrenzte Anzahl an PWM-Kanälen vorhanden (viele verbreitete AVR-Typen haben 2 bis 3, neuere auch mehr) &lt;br /&gt;
&lt;br /&gt;
Alles was mit Pulsen und Modulation zu tun hat, hat auch was mit Zeit zu tun - denn im Prinzip soll mit einer bestimmten Frequenz für eine bestimmte Dauer ein Pin eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Alles was bei Mikrocontrollern mit Zeit zu tun hat, hat wahrscheinlich auch etwas mit einem Timer bzw. Counter zu tun.&lt;br /&gt;
&lt;br /&gt;
==Timer / Counter==&lt;br /&gt;
&lt;br /&gt;
Unter [[Timer]] bzw. [[Counter]] (T/C) steht noch nicht soviel, aber man sollte kurz mal reinsehen, oder mehr dazu schreiben, oder die fehlende Verknüpfung anlegen.&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist nichts anderes als ein selbständiger Zähler (Counter), der mit einer bestimmten Frequenz einen Wert raufzählt. Und zwar in Hardware, also unabhängig vom Programm. Seine Zählfrequenz wird vom Prozessortakt abgeleitet, das erledigt der [[Prescaler]] in einstellbaren Schritten (Frequenzteiler).&lt;br /&gt;
&lt;br /&gt;
Der Zählerstand läßt sich sowohl in Software als auch von der Hardware selbst überwachen - und schon lassen sich damit periodisch Ereignisse auslösen.&lt;br /&gt;
&lt;br /&gt;
Deswegen lassen sich die T/C für viele Zwecke verwenden, wir wollen den T/C für PWM nutzen (trotzdem gleich eine Übersicht über die verschiedenen Modi).&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich natürlich, das Prinzip der T/C verstanden zu haben. Ein Blick ins GCC-Tutorial lohnt, die Atmel Application Note 130: Setup and Use the AVR Timers schadet auch nicht. &lt;br /&gt;
&lt;br /&gt;
Wie schon angedeutet, gibt es - je nach AVR - einen oder mehrere T/C . Sie unterscheiden sich erwartungsgemäß durch ihre Parameter und Optionen, z.B. die Auflösung, Frequenz, Zählweise und andere Betriebsmodi.&lt;br /&gt;
&lt;br /&gt;
Und natürlich auch durch den Namen, der sich auch in den [[Register]]n widerspiegelt: Sie werden nämlich numeriert (im Folgenden hier und im Datenblatt mit Platzhalter n). &lt;br /&gt;
&lt;br /&gt;
T/C 0 ist beim tiny2313 der &#039;einfache&#039; mit 8 Bit Auflösung (das Aus-An Verhältnis läßt sich in 256 Stufen einstellen), T/C 1 dagegen hat eine Auflösung von 16 Bit und bietet einige weitere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== 8 oder 16 Bit ? ===&lt;br /&gt;
Außer der Tatsache, daß die Auflösung bei 16 Bit mit 65536 Stufen um einiges größer ist, gibt es noch folgende Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Er verwendet einige 16 Bit Register&lt;br /&gt;
** Schreiben/Lesen dieser Register erfolgt in Schritten&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
Mit dem Zähler alleine kann man noch nicht so viel anfangen. Ausgedacht wurde deswegen außerdem die&lt;br /&gt;
&lt;br /&gt;
=== Output Compare Unit ===&lt;br /&gt;
&lt;br /&gt;
was soviel bedeutet wie Ausgangsvergleichseinheit.&lt;br /&gt;
&lt;br /&gt;
Jeder Zähler hat eine oder mehrere voneinander unabhängige Output Compare Units (OC), auch wieder mit den dazugehörigen Registern.&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen OCs und ihre Register werden mit Buchstaben (&#039;A&#039;, &#039;B&#039;) benannt. (Im PWM Modus hängt das direkt mit den Pins zusammen: OC1B ist der Ausgang der OC des T/C 1. Dazu gleich mehr..)&lt;br /&gt;
&lt;br /&gt;
Die OC vergleicht den Zählerstand (im Register TCNTn) ständig mit ihren eigenen Registerinhalten (0CRnx). Wenn diese übereinstimmen, passiert etwas.&lt;br /&gt;
&lt;br /&gt;
Was passiert, wird bestimmt durch die&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodi ===&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt. Die OC Unit vergleicht dessen Zählerstand mit einem Wert. Wenn diese übereinstimmen, kann etwas passieren.&lt;br /&gt;
&lt;br /&gt;
Weil es hier gleich mit den Einstellungen in den Registern losgeht, noch ein Hinweis:&lt;br /&gt;
&lt;br /&gt;
Die Kontrolle über das Verhalten der Zähler und OCs wird über Register vorgenommen, deren Namen nichts mit den OC Units zu tun haben!&lt;br /&gt;
Die Einstellungen sind lediglich auf zwei Register verteilt, die Timer/Counter Control Register - TCCRnA &amp;amp; TCCRnB.&lt;br /&gt;
&lt;br /&gt;
Ein paar Notizen:&lt;br /&gt;
* In verschiedenen Modi haben auch Bits in den Registern eine andere Bedeutung!&lt;br /&gt;
* Meist können Interrupts ausgelöst werden.&lt;br /&gt;
* Es kann häufig auch der Zählerstand per Software verändert werden.&lt;br /&gt;
* Die Frequenz der ausgegebenen Waveform hängt ab von&lt;br /&gt;
** I/O Clock (CPU)&lt;br /&gt;
** Prescaler&lt;br /&gt;
** Counter Modus&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die verschiedenen Modi (vorerst die vom 8 Bit Zähler):&lt;br /&gt;
&lt;br /&gt;
* Normal (evtl. für Software PWM)&lt;br /&gt;
* Clear Timer on Compare (CTC) (eingeschränkte PWM)&lt;br /&gt;
* Fast PWM&lt;br /&gt;
* Phase Correct PWM&lt;br /&gt;
&lt;br /&gt;
Dazu hier noch folgende Begriffe im Zusammenhang mit dem Zähler:&lt;br /&gt;
&lt;br /&gt;
 BOTTOM: 0x00&lt;br /&gt;
 MAX   : 0xFF bei 8 Bit, 0xFFFF bei 16 Bit&lt;br /&gt;
 TOP   : MAX oder OCRnx&lt;br /&gt;
&lt;br /&gt;
==== Normal==== &lt;br /&gt;
(evtl. für Software PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt rauf (BOTTOM-&amp;gt;MAX), und wird nicht zurückgesetzt, sondern läuft einfach über, und setzt dabei sein Overflow-Flag.&lt;br /&gt;
Dieser Modus wird zur PWM nicht empfohlen, weil er im Vergleich mit Hardware-PWM viel CPU-Zeit benötigt - das ist logisch:&lt;br /&gt;
Bei jedem Nulldurchgang müsste man einen Interrupt verwenden, der dann eine Routine ausführt, die den Ausgang umschaltet. Und man müsste den Zählerstand manipulieren, um die Pulslänge zu verändern.&lt;br /&gt;
&lt;br /&gt;
====  Clear Timer on Compare (CTC)==== &lt;br /&gt;
(eingeschränkte PWM)&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt hoch, bis er mit OCRnx übereinstimmt (BOTTOM-&amp;gt;OCRnx: Match!) und wird dann auf Null gesetzt. Der maximale Wert lässt sich also über das Register OCRnx komfortabel bestimmen.&lt;br /&gt;
&lt;br /&gt;
Konkret bedeutet das, dass die in diesem Modus vom Prescaler erzeugte Basisfrequenz nochmals durch den Wert von OCRnx geteilt wird.&lt;br /&gt;
&lt;br /&gt;
Für PWM:&lt;br /&gt;
&lt;br /&gt;
Wenn eingestellt ist, dass der OC-Ausgang bei jedem Match umschaltet (toggle), entspricht der eingestellt Wert dem Pulsweitenverhältnis.&lt;br /&gt;
Bei OCRnx=128 des 8 Bit T/C wäre also etwa die Hälfte der Zeit der Pin eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann das beim T/C 0 des tiny2313 nur der Ausgang A (OC0A). Also ins Datenblatt gucken!&lt;br /&gt;
&lt;br /&gt;
====  Fast PWM====&lt;br /&gt;
&lt;br /&gt;
Einer von den zwei eigentlichen PWM-Betriebsarten der Counter.&lt;br /&gt;
&lt;br /&gt;
Zählt von BOTTOM bis TOP, wobei TOP entweder 0xFF oder OCRnx sein kann.&lt;br /&gt;
&lt;br /&gt;
Bei einem Match wird im&lt;br /&gt;
&lt;br /&gt;
a) nicht-invertierenden Modus&lt;br /&gt;
der Zähler gelöscht, und bei BOTTOM gesetzt&lt;br /&gt;
&lt;br /&gt;
b) invertierenden Modus&lt;br /&gt;
der Zähler gesetzt, und bei BOTTOM gelöscht.&lt;br /&gt;
&lt;br /&gt;
Klingt theoretisch kompliziert, praktisch invertiert es nur den Ausgang.&lt;br /&gt;
Aber der Vergleichswert muss anscheinend ständig aktualisiert werden!?&lt;br /&gt;
&lt;br /&gt;
Dieser Modus hat eine asymmetrische Ausgangsform, weil der Ausgang periodisch umgeschaltet wird (also immer nach der gleichen Zeit) und dann nach Ablauf der variablen Pulslänge wieder invertiert wird.&lt;br /&gt;
&lt;br /&gt;
Und es gibt noch einen Toggle-Modus, der allerdings nur für den Ausgang OC0A zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
====  Phase Correct PWM==== &lt;br /&gt;
&lt;br /&gt;
Ist nur halb so schnell wie Fast PWM, dafür aber mit symmetrischer Wellenform (besser für Motoren, weil    ).&lt;br /&gt;
&lt;br /&gt;
Erreicht wird das, indem von BOTTOM-&amp;gt;TOP gezählt wird, und dann wieder runter: TOP-BOTTOM.&lt;br /&gt;
&lt;br /&gt;
TOP kann entweder 0xFF oder OCRnx sein.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es wieder den nicht-invertierenden, den invertierenden, und den toggle-Modus (nicht an OC0B).&lt;br /&gt;
&lt;br /&gt;
==Praktisches Vorgehen==&lt;br /&gt;
&lt;br /&gt;
* Pins low setzen&lt;br /&gt;
* Pins als Ausgang konfigurieren.&lt;br /&gt;
* Geeignete Wellenform ermitteln&lt;br /&gt;
* Registerinformationen für ausgewählten T/C im Datenblatt aufschlagen&lt;br /&gt;
* Modus &amp;amp; Prescaler setzen und damit starten&lt;br /&gt;
** Bits in Control-Register TCCRnA &amp;amp; TCCRnB schreiben. Siehe [[Bitmanipulation]]&lt;br /&gt;
* Vergleichswert OCRnx setzen&lt;br /&gt;
&lt;br /&gt;
==Programmbeispiele==&lt;br /&gt;
&lt;br /&gt;
===PWM per Software===&lt;br /&gt;
====Pseudocode====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Initialisierung&lt;br /&gt;
pwm_phase = 0   // von 0 bis 100(99) ergibt ein moduliertes Signal&lt;br /&gt;
pwm_soll = 30  // Tastverhältnis in Prozent (Werte von 0..100)&lt;br /&gt;
&lt;br /&gt;
//alle s Sekunden tue:&lt;br /&gt;
wenn pwm_soll = pwm_phase dann&lt;br /&gt;
  ausgang = LOW&lt;br /&gt;
wenn pwm_phase++ = 100 dann&lt;br /&gt;
  pwm_phase = 0&lt;br /&gt;
  ausgang = HIGH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Tastverhältnis ist &amp;lt;math&amp;gt;t_{HIGH}=\frac{100}{pwm\_soll}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{100}{s} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PWM per Hardware===&lt;br /&gt;
&lt;br /&gt;
===Programmbeispiele===&lt;br /&gt;
====ASM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====C====&lt;br /&gt;
Hier wird mit dem 16-Bit-Counter 1 im 8-Bit-Mode eine LED gedimmt.&lt;br /&gt;
Die Frequenz ist &amp;lt;math&amp;gt;f=\frac{Taktfrequenz}{Prescaler*(1+OCR0As)} Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TCCR1A = (1&amp;lt;&amp;lt;WGM10)|(1&amp;lt;&amp;lt;COM1A1); // PWM, phase correct, 8 bit.&lt;br /&gt;
TCCR1B =  (1&amp;lt;&amp;lt;CS11) |(1&amp;lt;&amp;lt;CS10); // set clock/prescaler 1/64 -&amp;gt; enable counter&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
PORTB = 0xff; // enable pull-ups for inputs, set outputs high&lt;br /&gt;
DDRB  =  1&amp;lt;&amp;lt;LED;    // Pin LED auf 1 setzen&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
OCR1A=128; // LED 50%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====BASCOM====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &#039; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artikel in der Codesammlung, die den Begriff PWM enthalten ([http://www.mikrocontroller.net/forum/forum.php?query=pwm&amp;amp;forums%5B%5D=4&amp;amp;groupbythread=on&amp;amp;number=23&amp;amp;action=sendsearch hier])&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19008</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19008"/>
		<updated>2007-01-05T15:14:30Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte mitarbeiten, ich habe nicht viel Ahnung von der Materie. Möchte nur die im Forum verstreuten Informationen zusammensammeln.&lt;br /&gt;
&lt;br /&gt;
=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
Die Wechselspannung kann auf verschiedene Weise erzeugt werden. Um den Gleichspannungsanteil (DC-Offset) zu eliminieren Kondensator verwenden.&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
* http://www.hanneslux.de/avr/divers/melody/index.html (de, ASM)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
&lt;br /&gt;
Du kannst im Flash eine Sinustabelle ablegen, die schneller&lt;br /&gt;
oder langsamer abgetastet wird, schon hast Du Sinustöne variabler&lt;br /&gt;
Frequenz, die sehr schön rund klingen. Mit etwas Rechenaufwand kanst Du&lt;br /&gt;
noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit&lt;br /&gt;
glockenähnliche Sounds erzeugen.&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19007</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19007"/>
		<updated>2007-01-05T15:12:23Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Erzeugen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte mitarbeiten, ich habe nicht viel Ahnung von der Materie. Möchte nur die im Forum verstreuten Informationen zusammensammeln.&lt;br /&gt;
&lt;br /&gt;
=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
Die Wechselspannung kann auf verschiedene Weise erzeugt werden. Um den Gleichspannungsanteil (DC-Offset) zu eliminieren Kondensator verwenden.&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
&lt;br /&gt;
Du kannst im Flash eine Sinustabelle ablegen, die schneller&lt;br /&gt;
oder langsamer abgetastet wird, schon hast Du Sinustöne variabler&lt;br /&gt;
Frequenz, die sehr schön rund klingen. Mit etwas Rechenaufwand kanst Du&lt;br /&gt;
noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit&lt;br /&gt;
glockenähnliche Sounds erzeugen.&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19006</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19006"/>
		<updated>2007-01-05T15:11:48Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte mitarbeiten, ich habe nicht viel Ahnung von der Materie. Möchte nur die im Forum verstreuten Informationen zusammensammeln.&lt;br /&gt;
&lt;br /&gt;
=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
Die Wechselspannung kann auf verschiedene Weise erzeugt werden. Um den Gleichspannungsanteil (DC-Offset) zu eliminieren Kondensator verwenden.&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
 Du kannst im Flash eine Sinustabelle ablegen, die schneller&lt;br /&gt;
oder langsamer abgetastet wird, schon hast Du Sinustöne variabler&lt;br /&gt;
Frequenz, die sehr schön rund klingen. Mit etwas Rechenaufwand kanst Du&lt;br /&gt;
noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit&lt;br /&gt;
glockenähnliche Sounds erzeugen.&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19005</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19005"/>
		<updated>2007-01-05T15:10:35Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Ansteuerung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
Die Wechselspannung kann auf verschiedene Weise erzeugt werden. Um den Gleichspannungsanteil (DC-Offset) zu eliminieren Kondensator verwenden.&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
 Du kannst im Flash eine Sinustabelle ablegen, die schneller&lt;br /&gt;
oder langsamer abgetastet wird, schon hast Du Sinustöne variabler&lt;br /&gt;
Frequenz, die sehr schön rund klingen. Mit etwas Rechenaufwand kanst Du&lt;br /&gt;
noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit&lt;br /&gt;
glockenähnliche Sounds erzeugen.&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19004</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19004"/>
		<updated>2007-01-05T15:07:41Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Erzeugen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
 Du kannst im Flash eine Sinustabelle ablegen, die schneller&lt;br /&gt;
oder langsamer abgetastet wird, schon hast Du Sinustöne variabler&lt;br /&gt;
Frequenz, die sehr schön rund klingen. Mit etwas Rechenaufwand kanst Du&lt;br /&gt;
noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit&lt;br /&gt;
glockenähnliche Sounds erzeugen.&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19003</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19003"/>
		<updated>2007-01-05T14:52:13Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Geräuscherzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Daten=&lt;br /&gt;
Wie die Wellenform zustandekommt.&lt;br /&gt;
&lt;br /&gt;
==Erzeugen==&lt;br /&gt;
Sinus aus Tabelle&lt;br /&gt;
&lt;br /&gt;
==Speicher==&lt;br /&gt;
Flash, Eeprom&lt;br /&gt;
&lt;br /&gt;
==Kompression==&lt;br /&gt;
ADPCM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19002</id>
		<title>Klangerzeugung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Klangerzeugung&amp;diff=19002"/>
		<updated>2007-01-05T14:42:32Z</updated>

		<summary type="html">&lt;p&gt;85.178.25.134: /* Piezo-Element */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Erzeugen=&lt;br /&gt;
&lt;br /&gt;
Die Methode zur Erzeugung hängt natürlich von der Hardware und dem gewünschten Ergebnis ab. Im einfachsten Fall macht ein Piezo-Element an einer Messingmembran Piepsgeräusche, aber auch Sprachwiedergabe über Lautsprecher ist möglich.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Piezo-Element===&lt;br /&gt;
Es gibt hier zwei Typen:&lt;br /&gt;
* Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden. &lt;br /&gt;
* Ohne Elektronik; braucht eine Wechselspannung.&lt;br /&gt;
&lt;br /&gt;
Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz (&amp;quot;Fiep&amp;quot;), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet ([http://de.wikipedia.org/wiki/Helmholtz-Resonator Helmholtz-Resonator].&lt;br /&gt;
&lt;br /&gt;
Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc / 2&lt;br /&gt;
&lt;br /&gt;
Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.&lt;br /&gt;
&lt;br /&gt;
===Lautsprecher===&lt;br /&gt;
Um Lautsprecher betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die PortPins des AVR nur ca. 10 mA vertragen (sink/source).&lt;br /&gt;
&lt;br /&gt;
=Ansteuerung=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==R2R==&lt;br /&gt;
[http://de.wikipedia.org/wiki/R2R-Netzwerk R2R-Netzwerk]&lt;br /&gt;
Samplerate direkt in der Ausgabe&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/minidds/index.htm (Englisch)&lt;br /&gt;
&lt;br /&gt;
==PWM==&lt;br /&gt;
Für richtiges Audio:&lt;br /&gt;
schnell laufendes PWM&lt;br /&gt;
Der Controller schnell getaktet &lt;br /&gt;
je nach gewünschter Samplerate (Samplerate x 256)&lt;br /&gt;
&lt;br /&gt;
Wenn Piezo, dann PWM mit 50% Duty-Cycle. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/mxb/report_e.html (en, AVR, ASM)&lt;br /&gt;
* http://www.microsyl.com/doorbell/doorbell.html (en, AVR, C)&lt;br /&gt;
* http://www.microsyl.com/intercomm/intercomm.html (en, AVR, C)&lt;br /&gt;
* http://www.elby-designs.com/avrsynth/avrsyn-about.htm (en)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/25051 (en,AVR,ASM)&lt;br /&gt;
* AVR314: DTMF Generator&lt;br /&gt;
* AVR335: Digital Sound Recorder with AVR and DataFlash&lt;br /&gt;
* AVR336: ADPCM Decoder&lt;br /&gt;
* http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=276201 (en, AVR)&lt;br /&gt;
&lt;br /&gt;
=Erkennen=&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
Fast [http://de.wikipedia.org/wiki/Fourier-Transformation Fourier Transformation] (FFT)&lt;br /&gt;
===Links===&lt;br /&gt;
* http://elm-chan.org/works/akilcd/report_e.html (Englisch)&lt;br /&gt;
&lt;br /&gt;
==Timer==&lt;br /&gt;
===Links===&lt;br /&gt;
* http://www.myplace.nu/avr/gtuner/index.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=sonstige Weblinks=&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Forensuche=&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=buzzer&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Buzzer]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=piezo&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Piezo]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=verstärker&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4 Verstärker]&lt;/div&gt;</summary>
		<author><name>85.178.25.134</name></author>
	</entry>
</feed>