<?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=Simon</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=Simon"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Simon"/>
	<updated>2026-04-03T21:10:18Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=62455</id>
		<title>IRMP</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IRMP&amp;diff=62455"/>
		<updated>2011-12-15T20:13:50Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Arbeitsweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Von &#039;&#039;&#039;Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= IRMP - Infrarot-Multiprotokoll-Decoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:IRMP-TSOP1736.png|miniatur|Anschluß eines IR-Empfängers an µC]]&lt;br /&gt;
&lt;br /&gt;
Da RC5 nicht nur veraltet, sondern mittlerweile obsolet ist und immer mehr die elektronischen Geräte der fernöstlichen Unterhaltungsindustrie in unseren Haushalten Einzug finden, ist es an der Zeit, einen IR-Decoder zu entwickeln, der ca. 90% aller bei uns im täglichen Leben zu findenden IR-Fernbedienungen &amp;quot;versteht&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
IRMP ist lauffähig auf folgenden AVR µCs:&lt;br /&gt;
&lt;br /&gt;
* ATtiny45,  ATtiny85&lt;br /&gt;
* ATtiny84&lt;br /&gt;
* ATmega8,   ATmega16,  ATmega32&lt;br /&gt;
* ATmega162&lt;br /&gt;
* ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284&lt;br /&gt;
* ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P&lt;br /&gt;
&lt;br /&gt;
Es gibt aber auch Portierungen auf diverse PIC µCs.&lt;br /&gt;
&lt;br /&gt;
IRMP - der Infrarot-Fernbedienungsdecoder, der mehrere Protokolle auf einmal decodieren kann, beherrscht folgende Protokolle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| NEC || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName und viele weitere japanische Hersteller.&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG32 || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| KASEIKYO || Panasonic, Technics, Denon und andere japanische Hersteller, welche Mitglied der &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot; sind.&lt;br /&gt;
|-&lt;br /&gt;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RECS80EXT || Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| DENON || Denon, Sharp&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips und andere europäische Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| RC6A || Philips, Kathrein und andere Hersteller, z.B. XBOX&lt;br /&gt;
|-&lt;br /&gt;
| APPLE || Apple&lt;br /&gt;
|-&lt;br /&gt;
| NUBERT || Nubert, z.B. Subwoofer System&lt;br /&gt;
|-&lt;br /&gt;
| B&amp;amp;O || Bang &amp;amp; Olufsen&lt;br /&gt;
|-&lt;br /&gt;
| GRUNDIG || Grundig&lt;br /&gt;
|-&lt;br /&gt;
| NOKIA || Nokia, z.B. D-Box&lt;br /&gt;
|-&lt;br /&gt;
| SIEMENS || Siemens, z.B. Gigaset M740AV (ab ~15kHz, siehe Bemerkungen zu F_INTERRUPTS)&lt;br /&gt;
|-&lt;br /&gt;
| FDC || FDC Keyboard (ab ~15kHz)&lt;br /&gt;
|-&lt;br /&gt;
| RCCAR || RC Car: IR Fernbedienung für Modellfahrzeuge&lt;br /&gt;
|-&lt;br /&gt;
| JVC || JVC&lt;br /&gt;
|-&lt;br /&gt;
| NIKON || NIKON&lt;br /&gt;
|-&lt;br /&gt;
| RUWIDO || RUWIDO (z.B. T-Home-Mediareceiver)&lt;br /&gt;
|-&lt;br /&gt;
| KATHREIN  || KATHREIN&lt;br /&gt;
|-&lt;br /&gt;
| NEC16  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| NEC42  || JVC&lt;br /&gt;
|-&lt;br /&gt;
| LEGO   || Lego&lt;br /&gt;
|-&lt;br /&gt;
| THOMSON || Thomson&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes dieser Protokolle ist einzeln aktivierbar. Wer möchte, kann alle Protokolle aktivieren. Wer nur ein Protokoll braucht, kann alle anderen deaktivieren. Es wird nur das vom Compiler übersetzt, was auch benötigt wird.&lt;br /&gt;
&lt;br /&gt;
Der auf AVR- und PIC-µCs einsetzbare Source zu IRMP entstand im Rahmen des [[Word Clock]] Projektes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anlass für einen eigenen IRMP-Artikel ist folgender Thread in der Codesammlung: [http://www.mikrocontroller.net/topic/162119 Beitrag: IRMP - Infrared Multi Protocol Decoder]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Protokolle ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:nec-protocol.png|miniatur|NEC-Protokoll, Reichelt RGB-LED-Fernbedienung, T-&amp;gt;A: 9,14ms, A-&amp;gt;B: 4,42ms, B-&amp;gt;C: 660us]]&lt;br /&gt;
&lt;br /&gt;
Einige Hersteller verwenden ihr eigenes Protokoll, dazu gehören u.a. Sony, Samsung und Matsushita. Philips hat RC5 entwickelt und natürlich auch selbst benutzt. RC5 galt damals in Europa als &#039;&#039;das&#039;&#039; Standard-IR-Protokoll, welches von vielen europäischen Herstellern übernommen wurde. Mittlerweile ist RC5 fast gar nicht mehr anzutreffen - man kann es eigentlich als &amp;quot;ausgestorben&amp;quot; abhaken.&lt;br /&gt;
&lt;br /&gt;
Auch die japanischen Hersteller haben versucht, einen eigenen Standard zu etablieren, nämlich das sog. Kaseikyo- (oder auch &amp;quot;Japan-&amp;quot;) Protokoll. Dieses ist mit einer Bitlänge von 48 sehr universell und allgemein verwendbar. Richtig durchgesetzt hat es sich aber bis heute nicht. Ich selbst habe jedenfalls noch keine einzige Fernbedienung gesehen, die das Kaseikyo-Protokoll nutzt.&lt;br /&gt;
&lt;br /&gt;
Heutzutage wird vornehmlich das NEC-Protokoll verwendet - und zwar von den unterschiedlichsten (Marken- und auch Noname-)Herstellern. Ich schätze den &amp;quot;Marktanteil&amp;quot; auf ca. 80% beim NEC-Protokoll. Fast alle Fernbedienungen im alltäglichen Einsatz verwenden bei mir den NEC-IR-Code. Das fängt beim Fernseher an, geht über vom DVD-Player zur Notebook-Fernbedienung und reicht bis zur Noname-MultiMedia-Festplatte - um nur einige Beispiele zu nennen.&lt;br /&gt;
&lt;br /&gt;
Die von IRMP decodierten Protokolle haben etwas gemeinsames: Sie weisen alle ein Start-Bit auf, welches vom Timing her ausgezeichnet, d.h. einmalig ist.&lt;br /&gt;
&lt;br /&gt;
Anhand dieses Start-Bit-Timings werden die verschiedenen Protokolle unterschieden. IRMP misst also das Timing des Start-Bits und stellt dann &amp;quot;on-thy-fly&amp;quot; seine Timingtabellen auf das erkannte Protokoll um, damit die nach dem Start-Bit gesandten Daten in einem Rutsch eingelesen werden können, ohne das komplette Telegramm (Frame) erst speichern zu müssen.&lt;br /&gt;
&lt;br /&gt;
IRMP unterstützt folgende IR-Codings:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Pulse Distance&#039;&#039;&#039;, typ. Beispiel: NEC, Sony&lt;br /&gt;
* &#039;&#039;&#039;Bi-Phase&#039;&#039;&#039; (Manchester), typ. Beispiel: RC5, RC6&lt;br /&gt;
* &#039;&#039;&#039;Serial&#039;&#039;&#039; (ab 1.9.5), typ. Beispiel: Netbox&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Puls-Distance-Protokoll&#039;&#039;&#039; erkennt man an folgenden Regeln:&lt;br /&gt;
&lt;br /&gt;
* es gibt nur &#039;&#039;&#039;eine Pulslänge&#039;&#039;&#039; und &#039;&#039;&#039;zwei verschiedene Pausenlängen&#039;&#039;&#039; oder&lt;br /&gt;
  &lt;br /&gt;
* es gibt &#039;&#039;&#039;zwei verschiedene Pulslängen&#039;&#039;&#039; und nur &#039;&#039;&#039;eine Pausenlänge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Bi-Phase-Protokoll&#039;&#039;&#039; erkennt man an:&lt;br /&gt;
&lt;br /&gt;
* es kommen genau &#039;&#039;&#039;eine&#039;&#039;&#039; Pausen- und eine Pulslänge, sowie jeweils die &#039;&#039;&#039;doppelten&#039;&#039;&#039; Puls-/Pausenlängen vor&lt;br /&gt;
&lt;br /&gt;
Typisches Kriterium für ein &#039;&#039;&#039;bitserielles Protokoll&#039;&#039;&#039; ist:&lt;br /&gt;
&lt;br /&gt;
* es kommen &#039;&#039;&#039;Vielfache&#039;&#039;&#039; einer Grund-Puls-/Pausenlänge vor&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eine tabellarische Aufstellung der verschiedenen IR-Protokolle findet man hier: [http://www.mikrocontroller.net/articles/IRMP#Die_IR-Protokolle_im_Detail Die IR-Protokolle im Detail].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Timingwerte sind Idealwerte. Bei einigen Fernbedienungen in der Praxis weichen sie um bis zu 40% voneinander ab. Deshalb arbeitet IRMP mit Minimum-/Maximumsgrenzen, um bzgl. des Zeitverhaltens tolerabel zu sein.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
Version 2.0.1, Stand vom 20.09.2011&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/7/79/Irmp.zip Irmp.zip] &lt;br /&gt;
&lt;br /&gt;
IRMP &amp;amp; IRSND sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN], Download [http://www.mikrocontroller.net/svnbrowser/irmp/?view=tar Tarball]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download-Link auf Irmp.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Software-Änderungen kann man sich hier anschauen: [http://www.mikrocontroller.net/articles/IRMP#Software-Historie_IRMP Software-Historie IRMP]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source-Code ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach für AVR-µCs übersetzen, indem man die Projekt-Datei irmp.aps in den WinAVR lädt.&lt;br /&gt;
&lt;br /&gt;
Auch auf PIC-Prozessoren ist IRMP lauffähig. Für den PIC-CCS-Compiler sind entsprechende Preprocessor-Konstanten bereits gesetzt, so dass man irmp.c direkt in der CCS-Entwicklungsumgebung verwenden kann. Lediglich eine kleine Interrupt-Routine wie&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
void  TIMER2_isr(void) &lt;br /&gt;
{&lt;br /&gt;
 irmp_ISR ();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ist hinzuzufügen, wobei man den Interrupt auf 66µs (also 15kHz) stellt. &lt;br /&gt;
&lt;br /&gt;
Für AVR-Prozessoren ist ein Beispiel für die Anwendung von IRMP in main.c zu finden - im wesentlichen geht es da um die Timer-Initialisierung und den Abruf der empfangenen IR-Telegramme.&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von IRMP wird über Parameter in irmpconfig.h vorgenommen, nämlich:&lt;br /&gt;
&lt;br /&gt;
* Anzahl Interrupts pro Sekunde&lt;br /&gt;
* Unterstützte IR-Protokolle&lt;br /&gt;
* Hardware-Pin zum IR-Empfänger&lt;br /&gt;
* IR-Logging&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irmpconfig.h ===&lt;br /&gt;
&lt;br /&gt;
IRMP decodiert sämtliche oben aufgelisteten Protokolle in einer ISR, siehe irmpconfig.h. Dafür sind einige Angaben nötig. Diese werden in irmpconfig.h eingestellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F_INTERRUPTS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Anzahl der Interrupts pro Sekunde. Der Wert kann zwischen 10000 und 20000 eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define F_INTERRUPTS                            15000      // interrupts per second&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRMP_SUPPORT_xxx_PROTOCOL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von IRMP unterstützt werden sollen. Die Standardprotokolle sind bereits aktiv. Möchte man weitere Protokolle einschalten bzw. einige aus Speicherplatzgründen deaktivieren, sind die entsprechenden Werte in irmpconfig.h anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_SIRCS_PROTOCOL             1       // Sony SIRCS           &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC_PROTOCOL               1       // NEC + APPLE          &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SAMSUNG_PROTOCOL           1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_MATSUSHITA_PROTOCOL        1       // Matsushita           &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_KASEIKYO_PROTOCOL          1       // Kaseikyo             &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_DENON_PROTOCOL             1       // DENON, Sharp         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 &amp;amp; RC6A           &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SAB2008)       &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NOKIA_PROTOCOL             0       // Nokia                &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               &amp;gt;= 10000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang &amp;amp; Olufsen       &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_RECS80EXT_PROTOCOL         0       // RECS80EXT (SAA3008)  &amp;gt;= 15000                  ~50 bytes&lt;br /&gt;
#define IRMP_SUPPORT_THOMSON_PROTOCOL           0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NIKON_PROTOCOL             0       // NIKON camera         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRMP_SUPPORT_NETBOX_PROTOCOL            0       // Netbox keyboard      &amp;gt;= 10000                 ~400 bytes (PROTOTYPE!)&lt;br /&gt;
#define IRMP_SUPPORT_FDC_PROTOCOL               0       // FDC3402 keyboard     &amp;gt;= 10000 (better 15000)  ~150 bytes (~400 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_RCCAR_PROTOCOL             0       // RC Car               &amp;gt;= 10000 (better 15000)  ~150 bytes (~500 in combination with RC5)&lt;br /&gt;
#define IRMP_SUPPORT_RUWIDO_PROTOCOL            0       // RUWIDO, T-Home       &amp;gt;= 15000                 ~550 bytes&lt;br /&gt;
#define IRMP_SUPPORT_LEGO_PROTOCOL              0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jedes von IRMP unterstützte IR-Protokoll &amp;quot;verbrät&amp;quot; ungefähr den oben angegebenen Speicher an Code. Hier kann man Optimierungen vornehmen: Zum Beispiel ist die Modulationsfrequenz von 455kHz beim B&amp;amp;O-Protokoll weitab von den Frequenzen, die von den anderen Protokollen verwendet werden. Hier braucht man evtl. andere IR-Empfänger, anderenfalls kann man diese Protokolle einfach deaktiveren. Zum Beispiel kann man mit einem TSOP1738 kein B&amp;amp;O-Protokoll (455kHz) mehr empfangen. &lt;br /&gt;
&lt;br /&gt;
Ausserdem werden die Protokolle SIEMENS/FDC/RCCAR erst ab einer Scan-Frequenz von ca. 15kHz zuverlässig erkannt. Bei RECS80/REC80EXT sind es sogar 20kHz. Wenn man also diese Protokolle nutzen will, muss man F_INTERRUPTS entsprechend anpassen, sonst erscheint beim Übersetzen eine entsprechende Warnung und die entsprechenden Protokolle werden dann automatisch abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRMP_PORT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;IRMP_DDR&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;IRMP_PIN&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;IRMP_BIT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Konstanten wird der Pin am µC beschrieben, an welchem der IR-Empfänger angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Standardwerte:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define IRMP_PORT                               PORTB&lt;br /&gt;
#define IRMP_DDR                                DDRB&lt;br /&gt;
#define IRMP_PIN                                PINB&lt;br /&gt;
#define IRMP_BIT                                6       // use PB6 as IR input on AVR&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendung von IRMP ===&lt;br /&gt;
&lt;br /&gt;
Die von IRMP unterstützten Protokolle weisen Bitlängen - teilweise variabel, teilweise fest - von 12 bis 48 Bit auf. Diese werden über Preprocessor-Defines beschrieben.&lt;br /&gt;
&lt;br /&gt;
IRMP trennt diese IR-Telegramme prinzipiell in 3 Bereiche:&lt;br /&gt;
&lt;br /&gt;
 1. ID für verwendetes Protokoll&lt;br /&gt;
 2. Adresse bzw. Herstellercode&lt;br /&gt;
 3. Kommando&lt;br /&gt;
&lt;br /&gt;
Mittels der Funktion&lt;br /&gt;
&lt;br /&gt;
   irmp_get_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein decodiertes Telegramm abrufen. Der Return-Wert ist 1, wenn ein Telegramm eingelesen wurde, sonst 0. Im ersten Fall werden die Struct-Members&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    irmp_data_p-&amp;gt;protocol&lt;br /&gt;
    irmp_data_p-&amp;gt;address&lt;br /&gt;
    irmp_data_p-&amp;gt;command&lt;br /&gt;
    irmp_data_p-&amp;gt;flags&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gefüllt.&lt;br /&gt;
&lt;br /&gt;
Das heisst: am Ende bekommt man dann über irmp_get_data() einfach drei&lt;br /&gt;
Werte (Protokoll, Adresse und Kommando-Code), die man über ein if oder switch checken kann, z.&amp;amp;nbsp;B. hier eine Routine, welche die Tasten 1-9 auf einer Fernbedienung auswertet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
   {&lt;br /&gt;
      if (irmp_data.protocol == IRMP_NEC_PROTOCOL &amp;amp;&amp;amp;     // NEC-Protokoll&lt;br /&gt;
          irmp_data.address == 0x1234)                   // Adresse 0x1234&lt;br /&gt;
      {&lt;br /&gt;
         switch (irmp_data.command)&lt;br /&gt;
         {&lt;br /&gt;
            case 0x0001: key1_pressed(); break;          // Taste 1&lt;br /&gt;
            case 0x0002: key2_pressed(); break;          // Taste 2&lt;br /&gt;
            ...&lt;br /&gt;
            case 0x0009: key9_pressed(); break;          // Taste 9&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die möglichen Werte für irmp_data.protocol, siehe auch irmp.h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SAB2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Werte für die Adresse und das Kommando muss man natürlich einmal für eine unbekannte Fernbedienung auslesen und dann über ein UART oder LC-Display ausgeben, um sie dann im Programm hart zu kodieren. Oder man hat eine kleine Anlernroutine, wo man einmal die gewünschten Tasten drücken muss, um sie anschließend im EEPROM abzuspeichern. Ein Beispiel dazu findet man im Artikel [http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP Lernfähige IR-Fernbedienung mit IRMP].&lt;br /&gt;
&lt;br /&gt;
Eine weitere Beispiel-Main-Funktion ist im Zip-File enthalten, da sieht man dann auch die Initialisierung des Timers.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Entprellen&amp;quot; von Tasten ===&lt;br /&gt;
&lt;br /&gt;
Um zu unterscheiden, ob eine Taste lange gedrückt wurde oder lediglich einzeln, dient das Bit IRMP_FLAG_REPETITION. Dieses wird im Struct-Member &#039;&#039;&#039;flags&#039;&#039;&#039; gesetzt, wenn eine Taste auf der Fernbedienung längere Zeit gedrückt wurde und dadurch immer wieder dasselbe Kommando innerhalb kurzer Zeitabstände ausgesandt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION)&lt;br /&gt;
    {&lt;br /&gt;
      // Benutzer hält die Taste länger runter&lt;br /&gt;
      // entweder:&lt;br /&gt;
      //   ich ignoriere die (Wiederholungs-)Taste&lt;br /&gt;
      // oder:&lt;br /&gt;
      //   ich benutze diese Info, um einen Repeat-Effekt zu nutzen&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel dafür genutzt werden, um die Tasten 0-9 zu &amp;quot;entprellen&amp;quot;, indem man Kommandos mit gesetztem Bit IRMP_FLAG_REPETITION ignoriert. Bei dem Drücken auf die Tasten VOLUME+ oder VOLUME- kann die wiederholte Auswertung ein und desselben Kommandos aber durchaus gewünscht sein - zum Beispiel, um LEDs zu faden.&lt;br /&gt;
&lt;br /&gt;
Wenn man nur Einzeltasten auswerten will, kann man obigen IF-Block reduzieren auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if (! (irmp_data.flags &amp;amp; IRMP_FLAG_REPETITION))&lt;br /&gt;
    {&lt;br /&gt;
      // Es handelt sich um eine neue Taste&lt;br /&gt;
      // ACTION!&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arbeitsweise ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;Working Horse&amp;quot; von IRMP ist die Interrupt Service Routine irmp_ISR() welche 15.000 mal pro Sekunde aufgerufen werden sollte. Weicht dieser Wert ab, muss die Preprocessor-Konstante F_INTERRUPTS in irmpconfig.h angepasst werden. Der Wert kann zwischen 10kHz und 20kHz eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
irmp_ISR detektiert zunächst die Länge und die Form des/der Startbits und ermittelt daraus das verwendete Protokoll. Sobald das Protokoll erkannt wurde, werden die weiter einzulesenden Bits parametrisiert, um dann möglichst effektiv in den weiteren Aufrufen das komplette IR-Telegramm einzulesen.&lt;br /&gt;
&lt;br /&gt;
Um direkt Kritikern den Wind aus den Segeln zu nehmen:&lt;br /&gt;
&lt;br /&gt;
Ich weiss, die ISR ist ziemlich groß. Aber da sie sich wie eine State Machine verhält, ist der tatsächlich ausgeführte Code pro Durchlauf relativ gering. Solange es &amp;quot;dunkel&amp;quot; ist (und das ist es ja die meiste Zeit ;-)) ist die aufgewendete Zeit sogar verschwindend gering. Im WordClock-Projekt werden mit ein- und demselben Timer 8 ISRs aufgerufen, davon ist die irmp_ISR() nur eine unter vielen. Bei mindestens 8 MHz CPU-Takt traten bisher keine Timing-Probleme auf. Daher sehe ich bei der Länge von irmp_ISR überhaupt kein Problem.&lt;br /&gt;
&lt;br /&gt;
Ein Quarz ist nicht unbedingt notwendig, es funktioniert auch mit dem internen Oszillator des AVRs, wenn man die Prescaler-Fuse entsprechend gesetzt hat, dass die CPU auch mit 8MHz rennt ... Die Fuse-Werte für einen ATMEGA88 findet man in main.c.&lt;br /&gt;
&lt;br /&gt;
== Scannen von unbekannten Protokollen ==&lt;br /&gt;
&lt;br /&gt;
Stellt man in irmpconfig.h in der Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    #define IRMP_LOGGING    0   // 1: log IR signal (scan), 0: do not (default)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
den Wert für IRMP_LOGGING auf 1, wird in IRMP eine Protokollierung eingeschaltet: Es werden dann die Hell- und Dunkelphase auf dem UART des Microntrollers mit 9600Bd ausgegeben: 1=Dunkel, 0=Hell. Eventuell müssen dann die Konstanten in den Funktionen uart_init() und uart_putc() angepasst werden; das kommt auf den verwendeten AVR-µC an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis: Die IRMP-Logging-Funktion (insb. die Ausgabe über UART) ist nicht für PIC-Prozessoren angepasst. Wer immer dies tun möchte, kann sich gerne bei mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw ukw]) per PN melden.&lt;br /&gt;
&lt;br /&gt;
Nimmt man diese Protokoll-Scans mit einem Terminal-Emulationsprogramm auf und speichert sie dann als normale Datei ab, kann man diese Scan-Dateien zur Analyse verwenden, um damit IRMP an das unbekannte Protokoll anzupassen - siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
Wer eine Fernbedienung hat, die nicht von IRMP unterstützt wird, kann mir  ([http://www.mikrocontroller.net/user/show/ukw ukw]) gern die Scan-Dateien zuschicken. Ich schaue dann, ob das Protokoll in das IRMP-Konzept passt und passe gegebenenfalls den Source an.&lt;br /&gt;
&lt;br /&gt;
== IRMP unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
irmp.c lässt sich auch unter Linux direkt kompilieren, um damit Infrarot-Scans, welche in Dateien gespeichert sind, direkt zu testen. Im Unterordner IR-Data finden sich solche Dateien, die man dem IRMP direkt zum &amp;quot;Fraß&amp;quot; vorwerfen kann. &lt;br /&gt;
&lt;br /&gt;
Das Übersetzen von IRMP geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    make -f makefile.lnx&lt;br /&gt;
&lt;br /&gt;
Dabei werden 3 IRMP-Versionen erzeugt:&lt;br /&gt;
&lt;br /&gt;
* irmp: Version für 10kHz Scans&lt;br /&gt;
* irmp-15kHz: Version für 15kHz Scans&lt;br /&gt;
* irmp-20kHz: Version für 20kHz Scans&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geschieht dann über:&lt;br /&gt;
&lt;br /&gt;
  ./irmp [-l|-p|-a|-v] &amp;lt; scan-file&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Optionen schließen sich aus, das heisst, es kann jeweils nur eine Option zu einer Zeit angegeben werden:&lt;br /&gt;
&lt;br /&gt;
Option:&lt;br /&gt;
&lt;br /&gt;
   -l  List             gibt eine Liste der Pulse und Pausen aus&lt;br /&gt;
   -a analyze           analysiert die Puls-/Pausen und schreibt ein &amp;quot;Spektrum&amp;quot; in ASCII-Form&lt;br /&gt;
   -v verbose           ausführliche Ausgabe&lt;br /&gt;
   -p  Print Timings    gibt für alle Protokolle eine Timing-Tabelle aus&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Normale Ausgabe:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   ./irmp &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 1&lt;br /&gt;
 00000001110111101000000001111111 p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 2&lt;br /&gt;
 00000001110111100100000010111111 p =  2, a = 0x7b80, c = 0x0002, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 3&lt;br /&gt;
 00000001110111101100000000111111 p =  2, a = 0x7b80, c = 0x0003, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 # Taste 4&lt;br /&gt;
 00000001110111100010000011011111 p =  2, a = 0x7b80, c = 0x0004, f = 0x00&lt;br /&gt;
 -------------------------------------------------------------------------&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Listen-Ausgabe:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   ./irmp -l &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
# Taste 1&lt;br /&gt;
pulse: 91 pause: 44&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 6&lt;br /&gt;
pulse: 6 pause: 5&lt;br /&gt;
pulse: 6 pause: 16&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analyse:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   ./irmp -a &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PULSES:&lt;br /&gt;
 90 o 1&lt;br /&gt;
 91 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 33&lt;br /&gt;
 92 ooo 2&lt;br /&gt;
pulse avg: 91.0=9102.8 us, min: 90=9000.0 us, max: 92=9200.0 us, tol:  1.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
START PAUSES:&lt;br /&gt;
 43 oo 1&lt;br /&gt;
 44 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 25&lt;br /&gt;
 45 oooooooooooooooooooooooo 10&lt;br /&gt;
pause avg: 44.2=4425.0 us, min: 43=4300.0 us, max: 45=4500.0 us, tol:  2.8%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PULSES:&lt;br /&gt;
  5 o 17&lt;br /&gt;
  6 ooooooooooooooooooooooooooooooooooooooooooooooooooooooo 562&lt;br /&gt;
  7 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 609&lt;br /&gt;
pulse avg:  6.5= 649.8 us, min:  5= 500.0 us, max:  7= 700.0 us, tol: 23.1%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
PAUSES:&lt;br /&gt;
  4 ooooooooooooooooooooooo 169&lt;br /&gt;
  5 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 412&lt;br /&gt;
  6 oooo 31&lt;br /&gt;
pause avg:  4.8= 477.5 us, min:  4= 400.0 us, max:  6= 600.0 us, tol: 25.7%&lt;br /&gt;
 15 oooooo 43&lt;br /&gt;
 16 oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 425&lt;br /&gt;
 17 oooooooooo 72&lt;br /&gt;
pause avg: 16.1=1605.4 us, min: 15=1500.0 us, max: 17=1700.0 us, tol:  6.6%&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man die gemessenen Zeiten aller Pulse und Pausen als (liegende) Glockenkurven, welche natürlich wegen der ASCII-Darstellung nicht gerade einer Idealkurve entsprechen. Je schmaler die gemessenen Kanäle, desto besser ist das Timing der Fernbedienung.&lt;br /&gt;
&lt;br /&gt;
Aus obigem Output kann man herauslesen:&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pulslänge zwischen 9000 und 9200 usec, im Mittel sind es 9102 usec. Die Abweichung von diesem Mittelwert liegt bei 1,1 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Das Start-Bit hat eine Pausenlänge zwischen 4300 usec und 4500 usec, der Mittelwert beträgt 4424 usec. Der Fehler liegt bei 2,8 Prozent.&lt;br /&gt;
&lt;br /&gt;
* Die Pulslänge eines Datenbits liegt zwischen 500 usec und 700 usec, im Mittel sind es 650 usec, der Fehler liegt bei (stolzen) 23,1 Prozent!&lt;br /&gt;
&lt;br /&gt;
Desweiteren gibt es noch 2 verschieden lange Pausen (für die Bits 0 und 1), das Ablesen der Werte überlasse ich dem geneigten Leser ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ausführliche Ausgabe:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    ./irmp -v &amp;lt; IR-Data/orion_vcr_07660BM070.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
# Taste 1&lt;br /&gt;
   26084 [starting pulse]&lt;br /&gt;
start-bit: pulse = 91, pause = 44&lt;br /&gt;
protocol = NEC, start bit timings: pulse:  53 - 127, pause:  26 -  64&lt;br /&gt;
pulse_1:   2 -   9&lt;br /&gt;
pause_1:   9 -  25&lt;br /&gt;
pulse_0:   2 -   9&lt;br /&gt;
pause_0:   2 -   9&lt;br /&gt;
command_offset: 16&lt;br /&gt;
command_len:     16&lt;br /&gt;
complete_len:    32&lt;br /&gt;
stop_bit:         1&lt;br /&gt;
   26230 [bit  0: pulse =   6, pause =   5] 0&lt;br /&gt;
   26242 [bit  1: pulse =   6, pause =   6] 0&lt;br /&gt;
   26253 [bit  2: pulse =   6, pause =   5] 0&lt;br /&gt;
   26264 [bit  3: pulse =   6, pause =   5] 0&lt;br /&gt;
   ...&lt;br /&gt;
   26749 [bit 31: pulse =   6, pause =  17] 1&lt;br /&gt;
stop bit detected&lt;br /&gt;
code detected, length = 32&lt;br /&gt;
p =  2, a = 0x7b80, c = 0x0001, f = 0x00&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timing-Tabelle:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
     ./irmp -p&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
IRMP_TIMEOUT_LEN:        165&lt;br /&gt;
IRMP_KEY_REPETITION_LEN  1500&lt;br /&gt;
&lt;br /&gt;
PROTOCOL       S  S-PULSE    S-PAUSE    PULSE-0    PAUSE-0    PULSE-1    PAUSE-1&lt;br /&gt;
====================================================================================&lt;br /&gt;
SIRCS          1   21 -  27    4 -   7    4 -   8    4 -   8   10 -  14    4 -   8&lt;br /&gt;
NEC            1   53 - 127   26 -  64    2 -   9    2 -   9    2 -   9    9 -  25&lt;br /&gt;
NEC (rep)      1   53 - 127   13 -  32    2 -   9    2 -   9    2 -   9    9 -  25&lt;br /&gt;
SAMSUNG        1   40 -  51   40 -  51    3 -   8    2 -   7    3 -   8    9 -  20&lt;br /&gt;
MATSUSHITA     1   27 -  43   27 -  43    4 -  13    4 -  13    4 -  13   15 -  38&lt;br /&gt;
KASEIKYO       1   29 -  38   14 -  20    1 -   8    1 -   7    1 -   8    5 -  20&lt;br /&gt;
RECS80         1    1 -   3   66 -  83    0 -   3   43 -  55    0 -   3   66 -  83&lt;br /&gt;
RC5            1    7 -  11    7 -  11    7 -  11&lt;br /&gt;
DENON          1    1 -   4               1 -   4    6 -  10    1 -   4   16 -  22&lt;br /&gt;
RC6            1   23 -  30    7 -  11    3 -   6&lt;br /&gt;
RECS80EXT      1    1 -   3   34 -  39    0 -   3   43 -  55    0 -   3   66 -  83&lt;br /&gt;
NUBERT         1   10 -  17    2 -   5    3 -   7    9 -  17   10 -  17    2 -   5&lt;br /&gt;
BANG_OLUFSEN   1    1 -   3   27 -  35&lt;br /&gt;
BANG_OLUFSEN   2    1 -   3   27 -  35&lt;br /&gt;
BANG_OLUFSEN   3    1 -   3  140 - 165&lt;br /&gt;
BANG_OLUFSEN   4    1 -   3   27 -  35&lt;br /&gt;
BANG_OLUFSEN   -                          1 -   3   27 -  35    1 -   3   83 - 104&lt;br /&gt;
GRUNDIG/NOKIA  1    3 -   7   22 -  33    3 -   7&lt;br /&gt;
SIEMENS        1    2 -   4    2 -   4    2 -   4&lt;br /&gt;
FDC            1   18 -  24    8 -  12    1 -   5    1 -   3    1 -   5    5 -  10&lt;br /&gt;
RCCAR          1   17 -  23   17 -  23    4 -   8    5 -  13    4 -   8    2 -   7&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei längeren Ausgaben sollte man das Programm &amp;quot;less&amp;quot; verwenden, um seitenweise zu blättern, z.B.:&lt;br /&gt;
&lt;br /&gt;
    ./irmp -v &amp;lt; IR-Data/Samsung_DVD_Rec_00062C.txt | less&lt;br /&gt;
&lt;br /&gt;
Diese Scan-Dateien halfen mir nicht nur bei der Entwicklung des IRMP, sondern können auch bei der Anpassung des Sources an neue IR-Protokolle sehr hilfreich sein.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile kann man IRMP auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis irmp wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
            irmp.exe &amp;lt; IR-Data\rc5x.txt&lt;br /&gt;
&lt;br /&gt;
Da manche Ausgaben sehr lang werden, empfiehlt es sich auch hier, die Ausgabe in eine Datei zu lenken oder in den more weiterzuleiten, damit man seitenweise blättern kann:&lt;br /&gt;
&lt;br /&gt;
            irmp.exe &amp;lt; IR-Data\rc5x.txt | more&lt;br /&gt;
&lt;br /&gt;
Auch hier gelten dieselben Optionen wie für die Linux-Version.&lt;br /&gt;
&lt;br /&gt;
Zusatz:&lt;br /&gt;
&lt;br /&gt;
Der Decoder für das RECS80- und RECS80-Extended-Protokoll ist ungetestet, wurde anhand von Dokumentationen im Internet erstellt und lediglich mittels&lt;br /&gt;
künstlich erzeugten Scan-Dateien getestet... daher: keine Gewähr!&lt;br /&gt;
&lt;br /&gt;
== Fernbedienungen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Bezeichnung || Gerät || Device Address&lt;br /&gt;
|-&lt;br /&gt;
| NEC || Toshiba CT-9859 || Fernseher || 765&lt;br /&gt;
|-&lt;br /&gt;
| || Toshiba VT-728G || V-728G Videorekorder || 8925&lt;br /&gt;
|-&lt;br /&gt;
| || Elta 8848 MP 4 || DVD-Player || 255&lt;br /&gt;
|-&lt;br /&gt;
| || AS-218 || Askey TV-View CHP03X (TV-Karte) || 25046&lt;br /&gt;
|-&lt;br /&gt;
| || Cyberhome ??? || Cyberhome DVD Player || 20147&lt;br /&gt;
|-&lt;br /&gt;
| || WD TV Life || Western Digital Multimediaplayer || 7984&lt;br /&gt;
|-&lt;br /&gt;
| KASEIKYO || Technics EUR646497 || AV Receiver SA-AX 730 || 8194&lt;br /&gt;
|-&lt;br /&gt;
| RC5 || Loewe Assist/RC3/RC4 || Fernseher (FB auf TV-Mode) || 0&lt;br /&gt;
|-&lt;br /&gt;
| RC6 || Philips Television || Fernseher (FB auf TV-Mode) || 0&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony RM-816 || Fernseher (FB auf TV-Mode) || 0 (siehe Beschreibung)&lt;br /&gt;
|-&lt;br /&gt;
| DENON || DENON RC970 || AVR3805 (Verstärker) || 8&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || DVD/CD-Player || 2&lt;br /&gt;
|-&lt;br /&gt;
| || DENON RC970 || Tuner || 6&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== IR-Tastaturen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-fdc3402.jpg|miniatur|FDC-3402-Tastatur]]&lt;br /&gt;
&lt;br /&gt;
IRMP unterstützt ab Version 1.7.0 auch IR-Tastaturen, nämlich die Infrarot-Tastatur FDC-3402 - erhältlich bei Pollin (Art. 711 056) für weniger als 2 EUR.&lt;br /&gt;
&lt;br /&gt;
Beim Erkennen einer Taste gibt IRMP folgende Daten zurück:&lt;br /&gt;
&lt;br /&gt;
 Protokoll-Nummer (irmp_data.protocol): 18&lt;br /&gt;
 Addresse         (irmp_data.address):  0x003F&lt;br /&gt;
&lt;br /&gt;
Als Kommando (irmp_data.command) werden folgende Werte zurückgeliefert:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste || Code || Taste&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 ||      || 0x0010 || TAB || 0x0020 || &#039;s&#039; || 0x0030 || &#039;c&#039; || 0x0040 ||      || 0x0050 || HOME || 0x0060 ||      || 0x0070 || MENUE&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001 || &#039;^&#039; || 0x0011 || &#039;q&#039; || 0x0021 || &#039;d&#039; || 0x0031 || &#039;v&#039; || 0x0041 ||      || 0x0051 || END || 0x0061 ||      || 0x0071 || BACK&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002 || &#039;1&#039; || 0x0012 || &#039;w&#039; || 0x0022 || &#039;f&#039; || 0x0032 || &#039;b&#039; || 0x0042 ||      || 0x0052 ||      || 0x0062 ||      || 0x0072 || FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003 || &#039;2&#039; || 0x0013 || &#039;e&#039; || 0x0023 || &#039;g&#039; || 0x0033 || &#039;n&#039; || 0x0043 ||      || 0x0053 || UP || 0x0063 ||      || 0x0073 || ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004 || &#039;3&#039; || 0x0014 || &#039;r&#039; || 0x0024 || &#039;h&#039; || 0x0034 || &#039;m&#039; || 0x0044 ||      || 0x0054 || DOWN || 0x0064 ||      || 0x0074 || WINDOW&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005 || &#039;4&#039; || 0x0015 || &#039;t&#039; || 0x0025 || &#039;j&#039; || 0x0035 || &#039;,&#039; || 0x0045 ||      || 0x0055 || PAGE_UP || 0x0065 ||      || 0x0075 || 1ST_PAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006 || &#039;5&#039; || 0x0016 || &#039;z&#039; || 0x0026 || &#039;k&#039; || 0x0036 || &#039;.&#039; || 0x0046 ||      || 0x0056 || PAGE_DOWN || 0x0066 ||      || 0x0076 || STOP&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007 || &#039;6&#039; || 0x0017 || &#039;u&#039; || 0x0027 || &#039;l&#039; || 0x0037 || &#039;-&#039; || 0x0047 ||      || 0x0057 ||      || 0x0067 ||      || 0x0077 || MAIL&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008 || &#039;7&#039; || 0x0018 || &#039;i&#039; || 0x0028 || &#039;ö&#039; || 0x0038 ||      || 0x0048 ||      || 0x0058 ||      || 0x0068 ||      || 0x0078 || FAVORITES&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009 || &#039;8&#039; || 0x0019 || &#039;o&#039; || 0x0029 || &#039;ä&#039; || 0x0039 || SHIFT_RIGHT || 0x0049 ||      || 0x0059 || RIGHT || 0x0069 ||      || 0x0079 || NEW_PAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A || &#039;9&#039; || 0x001A || &#039;p&#039; || 0x002A || &#039;#&#039; || 0x003A || CTRL || 0x004A ||      || 0x005A ||      || 0x006A ||      || 0x007A || SETUP&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B || &#039;0&#039; || 0x001B || &#039;ü&#039; || 0x002B || CR || 0x003B ||      || 0x004B || INSERT || 0x005B ||      || 0x006B ||      || 0x007B || FONT&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C || &#039;ß&#039; || 0x001C || &#039;+&#039; || 0x002C || SHIFT_LEFT || 0x003C || ALT_LEFT || 0x004C || DELETE || 0x005C ||      || 0x006C ||      || 0x007C || PRINT&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D || &#039;´&#039; || 0x001D ||      || 0x002D || &#039;&amp;lt;&#039; || 0x003D || SPACE || 0x004D ||      || 0x005D ||      || 0x006D ||      || 0x007D ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E ||      || 0x001E || CAPSLOCK || 0x002E || &#039;y&#039; || 0x003E || ALT_RIGHT || 0x004E ||      || 0x005E ||      || 0x006E || ESCAPE || 0x007E || ON_OFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F || BACKSPACE || 0x001F || &#039;a&#039; || 0x002F || &#039;x&#039; || 0x003F ||      || 0x004F || LEFT || 0x005F ||      || 0x006F ||      || 0x007F ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zusatztasten links:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code || Taste&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 0x0400 || KEY_MOUSE_1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0800 || KEY_MOUSE_2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabei gelten die obigen Werte für das Drücken einer Taste. Wird die Taste wieder losgelassen, setzt IRMP zusätzlich das 8. Bit im Kommando.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F&lt;br /&gt;
&lt;br /&gt;
Ausnahme ist die EIN/AUS-Taste: Diese sendet nur beim Drücken einen Code, nicht beim Loslassen.&lt;br /&gt;
&lt;br /&gt;
Wird eine Taste länger gedrückt, wird das in irmp_data.flag angezeigt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
                           command   flag&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x00&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      Taste &#039;a&#039; drücken:   0x001F    0x01&lt;br /&gt;
      ....&lt;br /&gt;
      Taste &#039;a&#039; loslassen: 0x009F    0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Tastenkombinationen (zum Beispiel für ein großes &#039;A&#039;) gedrückt, dann sind die Rückgabewerte von IRMP in folgendem Ablauf zu sehen:&lt;br /&gt;
&lt;br /&gt;
      Linke SHIFT-Taste drücken:   0x0002&lt;br /&gt;
      Taste &#039;a&#039; drücken:           0x001F&lt;br /&gt;
      Taste &#039;a&#039; loslassen:         0x009F&lt;br /&gt;
      Linke SHIFT-Taste loslassen: 0x0082&lt;br /&gt;
&lt;br /&gt;
In irmp.c findet man für die LINUX-Version eine Funktion get_fdc_key(), welche als Vorlage dienen mag, die Keycodes einer FDC-Tastatur in die entsprechenden ASCII-Codes umzuwandeln. Diese Funktion kann man entweder lokal auf dem µC nutzen, um die Keycodes zu decodieren, oder auf einem Hostsystem (z.B. PC), an welches die IRMP-Data-Struktur gesandt wird. Dafür sollte man die Funktion incl. der dazugehörenden Preprozessor-Konstanten in seinen Applikations-Quelltext kopieren.&lt;br /&gt;
&lt;br /&gt;
Hier der entsprechende Auszug:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define STATE_LEFT_SHIFT    0x01&lt;br /&gt;
#define STATE_RIGHT_SHIFT   0x02&lt;br /&gt;
#define STATE_LEFT_CTRL     0x04&lt;br /&gt;
#define STATE_LEFT_ALT      0x08&lt;br /&gt;
#define STATE_RIGHT_ALT     0x10&lt;br /&gt;
&lt;br /&gt;
#define KEY_ESCAPE          0x1B            // keycode = 0x006e&lt;br /&gt;
#define KEY_MENUE           0x80            // keycode = 0x0070&lt;br /&gt;
#define KEY_BACK            0x81            // keycode = 0x0071&lt;br /&gt;
#define KEY_FORWARD         0x82            // keycode = 0x0072&lt;br /&gt;
#define KEY_ADDRESS         0x83            // keycode = 0x0073&lt;br /&gt;
#define KEY_WINDOW          0x84            // keycode = 0x0074&lt;br /&gt;
#define KEY_1ST_PAGE        0x85            // keycode = 0x0075&lt;br /&gt;
#define KEY_STOP            0x86            // keycode = 0x0076&lt;br /&gt;
#define KEY_MAIL            0x87            // keycode = 0x0077&lt;br /&gt;
#define KEY_FAVORITES       0x88            // keycode = 0x0078&lt;br /&gt;
#define KEY_NEW_PAGE        0x89            // keycode = 0x0079&lt;br /&gt;
#define KEY_SETUP           0x8A            // keycode = 0x007a&lt;br /&gt;
#define KEY_FONT            0x8B            // keycode = 0x007b&lt;br /&gt;
#define KEY_PRINT           0x8C            // keycode = 0x007c&lt;br /&gt;
#define KEY_ON_OFF          0x8E            // keycode = 0x007c&lt;br /&gt;
&lt;br /&gt;
#define KEY_INSERT          0x90            // keycode = 0x004b&lt;br /&gt;
#define KEY_DELETE          0x91            // keycode = 0x004c&lt;br /&gt;
#define KEY_LEFT            0x92            // keycode = 0x004f&lt;br /&gt;
#define KEY_HOME            0x93            // keycode = 0x0050&lt;br /&gt;
#define KEY_END             0x94            // keycode = 0x0051&lt;br /&gt;
#define KEY_UP              0x95            // keycode = 0x0053&lt;br /&gt;
#define KEY_DOWN            0x96            // keycode = 0x0054&lt;br /&gt;
#define KEY_PAGE_UP         0x97            // keycode = 0x0055&lt;br /&gt;
#define KEY_PAGE_DOWN       0x98            // keycode = 0x0056&lt;br /&gt;
#define KEY_RIGHT           0x99            // keycode = 0x0059&lt;br /&gt;
#define KEY_MOUSE_1         0x9E            // keycode = 0x0400&lt;br /&gt;
#define KEY_MOUSE_2         0x9F            // keycode = 0x0800&lt;br /&gt;
&lt;br /&gt;
static uint8_t&lt;br /&gt;
get_fdc_key (uint16_t cmd)&lt;br /&gt;
{&lt;br /&gt;
    static uint8_t key_table[128] =&lt;br /&gt;
    {&lt;br /&gt;
     // 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F&lt;br /&gt;
        0,  &#039;^&#039;, &#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;, &#039;6&#039;, &#039;7&#039;, &#039;8&#039;, &#039;9&#039;, &#039;0&#039;, &#039;ß&#039;, &#039;´&#039;,  0,  &#039;\b&#039;,&lt;br /&gt;
       &#039;\t&#039;,&#039;q&#039;, &#039;w&#039;, &#039;e&#039;, &#039;r&#039;, &#039;t&#039;, &#039;z&#039;, &#039;u&#039;, &#039;i&#039;, &#039;o&#039;, &#039;p&#039;, &#039;ü&#039;, &#039;+&#039;,  0,   0,  &#039;a&#039;,&lt;br /&gt;
       &#039;s&#039;, &#039;d&#039;, &#039;f&#039;, &#039;g&#039;, &#039;h&#039;, &#039;j&#039;, &#039;k&#039;, &#039;l&#039;, &#039;ö&#039;, &#039;ä&#039;, &#039;#&#039;,  &#039;\r&#039;, 0,  &#039;&amp;lt;&#039;, &#039;y&#039;, &#039;x&#039;,&lt;br /&gt;
       &#039;c&#039;, &#039;v&#039;, &#039;b&#039;, &#039;n&#039;, &#039;m&#039;, &#039;,&#039;, &#039;.&#039;, &#039;-&#039;,  0,   0,   0,   0,   0,  &#039; &#039;,  0,   0,&lt;br /&gt;
&lt;br /&gt;
        0,  &#039;°&#039;, &#039;!&#039;, &#039;&amp;quot;&#039;, &#039;§&#039;, &#039;$&#039;, &#039;%&#039;, &#039;&amp;amp;&#039;, &#039;/&#039;, &#039;(&#039;, &#039;)&#039;, &#039;=&#039;, &#039;?&#039;, &#039;`&#039;,  0,  &#039;\b&#039;,&lt;br /&gt;
       &#039;\t&#039;,&#039;Q&#039;, &#039;W&#039;, &#039;E&#039;, &#039;R&#039;, &#039;T&#039;, &#039;Z&#039;, &#039;U&#039;, &#039;I&#039;, &#039;O&#039;, &#039;P&#039;, &#039;Ü&#039;, &#039;*&#039;,  0,   0,  &#039;A&#039;,&lt;br /&gt;
       &#039;S&#039;, &#039;D&#039;, &#039;F&#039;, &#039;G&#039;, &#039;H&#039;, &#039;J&#039;, &#039;K&#039;, &#039;L&#039;, &#039;Ö&#039;, &#039;Ä&#039;, &#039;\&#039;&#039;,&#039;\r&#039;, 0,  &#039;&amp;gt;&#039;, &#039;Y&#039;, &#039;X&#039;,&lt;br /&gt;
       &#039;C&#039;, &#039;V&#039;, &#039;B&#039;, &#039;N&#039;, &#039;M&#039;, &#039;;&#039;, &#039;:&#039;, &#039;_&#039;,  0,   0,   0,   0,   0,  &#039; &#039;,  0,   0&lt;br /&gt;
    };&lt;br /&gt;
    static uint8_t state;&lt;br /&gt;
&lt;br /&gt;
    uint8_t key = 0;&lt;br /&gt;
&lt;br /&gt;
    switch (cmd)&lt;br /&gt;
    {&lt;br /&gt;
        case 0x002C: state |=  STATE_LEFT_SHIFT;    break;              // pressed left shift&lt;br /&gt;
        case 0x00AC: state &amp;amp;= ~STATE_LEFT_SHIFT;    break;              // released left shift&lt;br /&gt;
        case 0x0039: state |=  STATE_RIGHT_SHIFT;   break;              // pressed right shift&lt;br /&gt;
        case 0x00B9: state &amp;amp;= ~STATE_RIGHT_SHIFT;   break;              // released right shift&lt;br /&gt;
        case 0x003A: state |=  STATE_LEFT_CTRL;     break;              // pressed left ctrl&lt;br /&gt;
        case 0x00BA: state &amp;amp;= ~STATE_LEFT_CTRL;     break;              // released left ctrl&lt;br /&gt;
        case 0x003C: state |=  STATE_LEFT_ALT;      break;              // pressed left alt&lt;br /&gt;
        case 0x00BC: state &amp;amp;= ~STATE_LEFT_ALT;      break;              // released left alt&lt;br /&gt;
        case 0x003E: state |=  STATE_RIGHT_ALT;     break;              // pressed left alt&lt;br /&gt;
        case 0x00BE: state &amp;amp;= ~STATE_RIGHT_ALT;     break;              // released left alt&lt;br /&gt;
&lt;br /&gt;
        case 0x006e: key = KEY_ESCAPE;              break;&lt;br /&gt;
        case 0x004b: key = KEY_INSERT;              break;&lt;br /&gt;
        case 0x004c: key = KEY_DELETE;              break;&lt;br /&gt;
        case 0x004f: key = KEY_LEFT;                break;&lt;br /&gt;
        case 0x0050: key = KEY_HOME;                break;&lt;br /&gt;
        case 0x0051: key = KEY_END;                 break;&lt;br /&gt;
        case 0x0053: key = KEY_UP;                  break;&lt;br /&gt;
        case 0x0054: key = KEY_DOWN;                break;&lt;br /&gt;
        case 0x0055: key = KEY_PAGE_UP;             break;&lt;br /&gt;
        case 0x0056: key = KEY_PAGE_DOWN;           break;&lt;br /&gt;
        case 0x0059: key = KEY_RIGHT;               break;&lt;br /&gt;
        case 0x0400: key = KEY_MOUSE_1;             break;&lt;br /&gt;
        case 0x0800: key = KEY_MOUSE_2;             break;&lt;br /&gt;
&lt;br /&gt;
        default:&lt;br /&gt;
        {&lt;br /&gt;
            if (!(cmd &amp;amp; 0x80))                      // pressed key&lt;br /&gt;
            {&lt;br /&gt;
                if (cmd &amp;gt;= 0x70 &amp;amp;&amp;amp; cmd &amp;lt;= 0x7F)     // function keys&lt;br /&gt;
                {&lt;br /&gt;
                    key = cmd + 0x10;               // 7x -&amp;gt; 8x&lt;br /&gt;
                }&lt;br /&gt;
                else if (cmd &amp;lt; 64)                  // key listed in key_table&lt;br /&gt;
                {&lt;br /&gt;
                    if (state &amp;amp; (STATE_LEFT_ALT | STATE_RIGHT_ALT))&lt;br /&gt;
                    {&lt;br /&gt;
                        switch (cmd)&lt;br /&gt;
                        {&lt;br /&gt;
                            case 0x0003: key = &#039;²&#039;;     break;&lt;br /&gt;
                            case 0x0008: key = &#039;{&#039;;     break;&lt;br /&gt;
                            case 0x0009: key = &#039;[&#039;;     break;&lt;br /&gt;
                            case 0x000A: key = &#039;]&#039;;     break;&lt;br /&gt;
                            case 0x000B: key = &#039;}&#039;;     break;&lt;br /&gt;
                            case 0x000C: key = &#039;\\&#039;;    break;&lt;br /&gt;
                            case 0x001C: key = &#039;~&#039;;     break;&lt;br /&gt;
                            case 0x002D: key = &#039;|&#039;;     break;&lt;br /&gt;
                            case 0x0034: key = &#039;µ&#039;;     break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else if (state &amp;amp; (STATE_LEFT_CTRL))&lt;br /&gt;
                    {&lt;br /&gt;
                        if (key_table[cmd] &amp;gt;= &#039;a&#039; &amp;amp;&amp;amp; key_table[cmd] &amp;lt;= &#039;z&#039;)&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd] - &#039;a&#039; + 1;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[cmd];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        int idx = cmd + ((state &amp;amp; (STATE_LEFT_SHIFT | STATE_RIGHT_SHIFT)) ? 64 : 0);&lt;br /&gt;
&lt;br /&gt;
                        if (key_table[idx])&lt;br /&gt;
                        {&lt;br /&gt;
                            key = key_table[idx];&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return (key);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als letztes noch ein Beispiel einer Anwendung der Funktion get_fdc_key():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t key;&lt;br /&gt;
&lt;br /&gt;
        if (irmp_data.protocol == IRMP_FDC_PROTOCOL &amp;amp;&amp;amp;&lt;br /&gt;
            (key = get_fdc_key (irmp_data.command)) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            if ((key &amp;gt;= 0x20 &amp;amp;&amp;amp; key &amp;lt; 0x7F) || key &amp;gt;= 0xA0) // show only printable characters&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x, character = &#039;%c&#039;\n&amp;quot;, key, key);&lt;br /&gt;
            }&lt;br /&gt;
            else // it&#039;s a non-printable key&lt;br /&gt;
            {&lt;br /&gt;
                printf (&amp;quot;ascii-code = 0x%02x\n&amp;quot;, key);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle nicht-druckbaren Zeichen werden dabei folgendermaßen codiert:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Taste             || Konstante                || Wert&lt;br /&gt;
|-&lt;br /&gt;
| ESC               || KEY_ESCAPE              || 0x1B&lt;br /&gt;
|-&lt;br /&gt;
| Menü              || KEY_MENUE               || 0x80&lt;br /&gt;
|-&lt;br /&gt;
| Zurück            || KEY_BACK                || 0x81&lt;br /&gt;
|-&lt;br /&gt;
| Vorw.             || KEY_FORWARD             || 0x82&lt;br /&gt;
|-&lt;br /&gt;
| Adresse           || KEY_ADDRESS             || 0x83&lt;br /&gt;
|-&lt;br /&gt;
| Fenster           || KEY_WINDOW              || 0x84&lt;br /&gt;
|-&lt;br /&gt;
| 1. Seite          || KEY_1ST_PAGE            || 0x85&lt;br /&gt;
|-&lt;br /&gt;
| Stop              || KEY_STOP                || 0x86&lt;br /&gt;
|-&lt;br /&gt;
| Mail              || KEY_MAIL                || 0x87&lt;br /&gt;
|-&lt;br /&gt;
| Fav.              || KEY_FAVORITES           || 0x88&lt;br /&gt;
|-&lt;br /&gt;
| Neue Seite        || KEY_NEW_PAGE            || 0x89&lt;br /&gt;
|-&lt;br /&gt;
| Setup             || KEY_SETUP               || 0x8A&lt;br /&gt;
|-&lt;br /&gt;
| Schrift           || KEY_FONT                || 0x8B&lt;br /&gt;
|-&lt;br /&gt;
| Druck             || KEY_PRINT               || 0x8C&lt;br /&gt;
|-&lt;br /&gt;
| Ein/Aus           || KEY_ON_OFF              || 0x8E&lt;br /&gt;
|-&lt;br /&gt;
| Backspace         || &#039;\b&#039;                    || 0x08&lt;br /&gt;
|-&lt;br /&gt;
| CR/ENTER          || &#039;\r&#039;                    || 0x0C&lt;br /&gt;
|-&lt;br /&gt;
| TAB               || &#039;\t&#039;                    || 0x09&lt;br /&gt;
|-&lt;br /&gt;
| Einfg             || KEY_INSERT              || 0x90&lt;br /&gt;
|-&lt;br /&gt;
| Entf              || KEY_DELETE              || 0x91&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_LEFT                || 0x92&lt;br /&gt;
|-&lt;br /&gt;
| Pos1              || KEY_HOME                || 0x93&lt;br /&gt;
|-&lt;br /&gt;
| Ende              || KEY_END                 || 0x94&lt;br /&gt;
|-&lt;br /&gt;
| Cursor rechts     || KEY_UP                  || 0x95&lt;br /&gt;
|-&lt;br /&gt;
| Cursor runter     || KEY_DOWN                || 0x96&lt;br /&gt;
|-&lt;br /&gt;
| Bild hoch         || KEY_PAGE_UP             || 0x97&lt;br /&gt;
|-&lt;br /&gt;
| Bild runter       || KEY_PAGE_DOWN           || 0x98&lt;br /&gt;
|-&lt;br /&gt;
| Cursor links      || KEY_RIGHT               || 0x99&lt;br /&gt;
|-&lt;br /&gt;
| Linke Maustaste   || KEY_MOUSE_1             || 0x9E&lt;br /&gt;
|-&lt;br /&gt;
| Rechte Maustaste  || KEY_MOUSE_2             || 0x9F&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Funktion get_fdc_key berücksichtigt das Gedrückthalten der Shift-, Strg- und ALT-Tasten. Damit funktioniert nicht nur das Schreiben von Großbuchstaben, sondern auch das Auswählen der Sonderzeichen mit der Tastenkombination  ALT + Taste, z.B. ALT + m = µ oder ALT + q = @. Ebenso kann man mit der Strg-Taste die Control-Zeichen CTRL-A bis CTRL-Z senden. Die CapsLock-Taste wird ignoriert, da ich sie sowieso für die überflüssigste Taste überhaupt halte ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IRSND - Infrarot-Multiprotokoll-Encoder =&lt;br /&gt;
&lt;br /&gt;
[[Datei:irmp-title.png| |Scan eines NEC-kompatiblen Fernbedienungssignals]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung IRSND ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:ir-sender.png|miniatur|Anschluß eines einfachen IR-Senders an µC]]&lt;br /&gt;
&lt;br /&gt;
IRSND ist das Gegenstück zu IRMP: es reproduziert aus den Daten, die mit IRMP empfangen wurden, wieder den Original Frame, der dann über eine Infrarot-Diode ausgegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
IRSND ist lauffähig auf folgenden AVR µCs:&lt;br /&gt;
&lt;br /&gt;
* ATtiny45,  ATtiny85&lt;br /&gt;
* ATtiny84&lt;br /&gt;
* ATmega8,   ATmega16,  ATmega32&lt;br /&gt;
* ATmega162&lt;br /&gt;
* ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284&lt;br /&gt;
* ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P&lt;br /&gt;
&lt;br /&gt;
IRSND unterstützt die folgenden Protokolle:&lt;br /&gt;
&lt;br /&gt;
* SIRCS&lt;br /&gt;
* NEC&lt;br /&gt;
* SAMSUNG&lt;br /&gt;
* SAMSUNG32&lt;br /&gt;
* MATSUSHITA&lt;br /&gt;
* RC5&lt;br /&gt;
* KASEIKYO&lt;br /&gt;
* DENON&lt;br /&gt;
* JVC&lt;br /&gt;
* APPLE&lt;br /&gt;
* NUBERT&lt;br /&gt;
* BANG_OLUFSEN&lt;br /&gt;
* GRUNDIG&lt;br /&gt;
* NOKIA&lt;br /&gt;
* SIEMENS (bei mind. ~15kHz)&lt;br /&gt;
* FDC (bei mind. ~15kHz)&lt;br /&gt;
* RCCAR (bei mind. ~15kHz)&lt;br /&gt;
* RECS80 (bei mind. ~20kHz)&lt;br /&gt;
* RECS80EXT (bei mind. ~20kHz)&lt;br /&gt;
* NIKON&lt;br /&gt;
* RC6&lt;br /&gt;
* RC6A&lt;br /&gt;
* THOMSON (&#039;&#039;&#039;NEU&#039;&#039;&#039;)&lt;br /&gt;
* NEC16 (&#039;&#039;&#039;NEU&#039;&#039;&#039;)&lt;br /&gt;
* NEC42 (&#039;&#039;&#039;NEU&#039;&#039;&#039;)&lt;br /&gt;
* LEGO (&#039;&#039;&#039;NEU&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== Download IRSND ==&lt;br /&gt;
&lt;br /&gt;
Version 2.0.1, Stand vom 20.09.2011&lt;br /&gt;
&lt;br /&gt;
Download Release-Version: [http://www.mikrocontroller.net/wikifiles/c/c7/Irsnd.zip Irsnd.zip] &lt;br /&gt;
&lt;br /&gt;
IRMP &amp;amp; IRSND sind nun auch über SVN abrufbar: [http://www.mikrocontroller.net/svnbrowser/irmp/ IRMP im SVN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Version im SVN kann eine Zwischen- oder Test-Version sein, die nicht den hier dokumentierten Stand widerspiegelt! Im Zweifel verwendet man besser den obigen Download auf Irsnd.zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Software-Änderungen kann man sich hier anschauen: [http://www.mikrocontroller.net/articles/IRMP#Software-Historie_IRSND Software-Historie IRSND]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Source-Code IRSND ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code lässt sich einfach übersetzen, indem man die Projekt-Datei irsnd.aps in den WinAVR lädt.&lt;br /&gt;
&lt;br /&gt;
IRSND encodiert sämtliche oben aufgelisteten Protokolle in einer ISR, siehe irsnd.c.&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen in irsndconfig.h ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F_INTERRUPTS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Anzahl der Interrupts pro Sekunde. Der Wert kann zwischen 10000 und 20000 eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define F_INTERRUPTS                            15000      // interrupts per second&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRSND_SUPPORT_xxx_PROTOCOL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier lässt sich einstellen, welche Protokolle von IRSND unterstützt werden sollen. Die Standardprotokolle sind bereits aktiv. Möchte man weitere Protokolle einschalten bzw. einige aus Speicherplatzgründen deaktivieren, sind die entsprechenden Werte in irsndconfig.h anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// typical protocols, disable here!             Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_SIRCS_PROTOCOL            1       // Sony SIRCS           &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC_PROTOCOL              1       // NEC + APPLE          &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SAMSUNG_PROTOCOL          1       // Samsung + Samsung32  &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_MATSUSHITA_PROTOCOL       1       // Matsushita           &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
#define IRSND_SUPPORT_KASEIKYO_PROTOCOL         1       // Kaseikyo             &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_DENON_PROTOCOL            1       // DENON, Sharp         &amp;gt;= 10000                 ~200 bytes&lt;br /&gt;
&lt;br /&gt;
// more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_RC5_PROTOCOL              0       // RC5                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6_PROTOCOL              0       // RC6                  &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RC6A_PROTOCOL             0       // RC6A                 &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_JVC_PROTOCOL              0       // JVC                  &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC16_PROTOCOL            0       // NEC16                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NEC42_PROTOCOL            0       // NEC42                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_IR60_PROTOCOL             0       // IR60 (SAB2008)       &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_GRUNDIG_PROTOCOL          0       // Grundig              &amp;gt;= 10000                 ~300 bytes&lt;br /&gt;
#define IRSND_SUPPORT_SIEMENS_PROTOCOL          0       // Siemens, Gigaset     &amp;gt;= 15000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NOKIA_PROTOCOL            0       // Nokia                &amp;gt;= 10000                 ~400 bytes&lt;br /&gt;
&lt;br /&gt;
// exotic protocols, enable here!               Enable  Remarks                 F_INTERRUPTS            Program Space&lt;br /&gt;
#define IRSND_SUPPORT_KATHREIN_PROTOCOL         0       // Kathrein             &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_NUBERT_PROTOCOL           0       // NUBERT               &amp;gt;= 10000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL     0       // Bang&amp;amp;Olufsen         &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               &amp;gt;= 20000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            &amp;gt;= 20000                 ~100 bytes&lt;br /&gt;
#define IRSND_SUPPORT_THOMSON_PROTOCOL          0       // Thomson              &amp;gt;= 10000                 ~250 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NIKON_PROTOCOL            0       // NIKON                &amp;gt;= 10000                 ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_NETBOX_PROTOCOL           0       // Netbox keyboard      &amp;gt;= 10000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_FDC_PROTOCOL              0       // FDC IR keyboard      &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RCCAR_PROTOCOL            0       // RC CAR               &amp;gt;= 10000 (better 15000)  ~150 bytes&lt;br /&gt;
#define IRSND_SUPPORT_RUWIDO_PROTOCOL           0       // RUWIDO, T-Home       &amp;gt;= 15000                 DON&#039;T CHANGE, NOT SUPPORTED YET!&lt;br /&gt;
#define IRSND_SUPPORT_LEGO_PROTOCOL             0       // LEGO Power RC        &amp;gt;= 20000                 ~150 bytes&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Setzen auf 0 wird das Protokoll deaktiviert, mit Setzen auf 1 wird es aktiviert. Die deaktivierten Protokolle werden dann nicht mitübersetzt. Das spart Speicherplatz im Flash, siehe Angaben in obigen Kommentaren. Wenn man unbedingt Speicherplatz sparen muss, gelten natürlich hier dieselben Tipps wie für IRMP.&lt;br /&gt;
&lt;br /&gt;
Um das APPLE-Protokoll zu unterstützen, ist IRSND_SUPPORT_NEC_PROTOCOL auf 1 zu setzen, da es sich hier lediglich um einen Spezialfall vom NEC-Protokoll handelt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRSND_OCx&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Für das Senden der IR-Signale benötigt IRSND einen PWM-fähigen Output-Pin, da das Signal moduliert werden muss. Möglich sind eine der folgenden Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2  // OC2  on ATmegas         supporting OC2,  e.g. ATmega8&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2A // OC2A on ATmegas         supporting OC2A, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2B // OC2B on ATmegas         supporting OC2B, e.g. ATmega88&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0  // OC0  on ATmegas         supporting OC0,  e.g. ATmega162&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0A // OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny84, ATtiny85&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC0B // OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny84, ATtiny85&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define IRSND_OCx                               IRSND_OC2B&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IRSND baut den zu sendenden Frame &amp;quot;on-the-fly&amp;quot; aus der IRMP-Datenstruktur wieder zusammen. Dazu zählen:&lt;br /&gt;
&lt;br /&gt;
 1. ID für verwendetes Protokoll&lt;br /&gt;
 2. Adresse bzw. Herstellercode&lt;br /&gt;
 3. Kommando&lt;br /&gt;
&lt;br /&gt;
Mittels der Funktion&lt;br /&gt;
&lt;br /&gt;
   irsnd_send_data (IRMP_DATA * irmp_data_p)&lt;br /&gt;
&lt;br /&gt;
kann man ein zu encodierendes Telegramm versenden. Der Return-Wert ist 1, wenn das Telegramm versendet werden kann, sonst 0. Im ersten Fall werden die Struct-Members&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    irmp_data_p-&amp;gt;protocol&lt;br /&gt;
    irmp_data_p-&amp;gt;address&lt;br /&gt;
    irmp_data_p-&amp;gt;command&lt;br /&gt;
    irmp_data_p-&amp;gt;flags&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ausgelesen und dann als Frame im jeweils gewünschten Protokoll gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NEU ab Version 1.5.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
irmp_data_p-&amp;gt;flags gibt die Anzahl der Wiederholungen an, z.B.&lt;br /&gt;
&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 0: Verhalten wie bisher&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 1: 1 Wiederholung&lt;br /&gt;
  irmp_data_p-&amp;gt;flags = 2: 2 Wiederholungen&lt;br /&gt;
  usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zu beachten: Da bisher irmp_data_p-&amp;gt;flags von IRSND nicht ausgewertet wurde, ist unbedingt ab Version 1.5.0 darauf zu achten, dass irmp_data_p-&amp;gt;flags vor dem Aufruf von irsnd_send_data() einen definierten Wert hat!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
   irmp_data.protocol = IRMP_NEC_PROTOCOL;   // sende im NEC-Protokoll&lt;br /&gt;
   irmp_data.address  = 0x00FF;              // verwende Adresse 0x00FF&lt;br /&gt;
   irmp_data.command  = 0x0001;              // sende Kommando 0001&lt;br /&gt;
   irmp_data.flags    = 0;                   // keine Wiederholung!&lt;br /&gt;
&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data);      // versende ohne Prüfung&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Frame wird asynchron über die Interrupt-Routine irsnd_ISR() verschickt, so dass die Funktion irsnd_send_data() sofort zurückkommt.&lt;br /&gt;
&lt;br /&gt;
Sind Wiederholungen angegeben, wird entweder der Frame nach einer Pause (protokollabhängig) neu ausgegeben oder ein protokollspezifischer Wiederholungsframe (z.B. für NEC) gesendet.&lt;br /&gt;
&lt;br /&gt;
Wird erneut irsnd_send_data() aufgerufen, wartet diese, bis der vorhergenhende Frame vollständig verschickt wurde. Man kann aber auch selbst prüfen, ob IRSND gerade &amp;quot;busy&amp;quot; ist oder nicht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   while (irsnd_is_busy ())&lt;br /&gt;
   {&lt;br /&gt;
      ;                                      // selber warten oder was anderes tun...&lt;br /&gt;
   }&lt;br /&gt;
   (void) irsnd_send_data (&amp;amp;irmp_data);      // versende ohne Prüfung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Beispiel-Source irsndmain.c findet man neben der Verwendung von irsnd_send_data() auch den Timer-Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Paralleles Betreiben von IRMP und IRSND ===&lt;br /&gt;
&lt;br /&gt;
Möchte man IRMP und IRSND parallel verwenden (also als Sender und Empfänger) schreibt man die ISR folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  if (! irsnd_ISR())          // call irsnd ISR&lt;br /&gt;
  {                           // if not busy...&lt;br /&gt;
      irmp_ISR();             // call irmp ISR&lt;br /&gt;
  }&lt;br /&gt;
  // call other timer interrupt routines...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das heisst: Nur wenn irsnd_ISR() nichts zu tun hat, dann rufe die ISR des Empfängers auf. Damit ist der Empfänger solange abgeschaltet, während irsnd_ISR() noch Daten sendet. Die Timer-Initialisierungsroutine ist für IRMP und IRSND dann natürlich dieselbe.&lt;br /&gt;
&lt;br /&gt;
Eine gemeinsame main-Funktion könnte dann zum Beispiel folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int&lt;br /&gt;
main (void)&lt;br /&gt;
{&lt;br /&gt;
  IRMP_DATA irmp_data;&lt;br /&gt;
&lt;br /&gt;
  irmp_init();                // initialize irmp&lt;br /&gt;
  irsnd_init();               // initialize irsnd&lt;br /&gt;
  timer_init();               // initialize timer&lt;br /&gt;
  sei ();                     // enable interrupts&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    if (irmp_get_data (&amp;amp;irmp_data))&lt;br /&gt;
    {&lt;br /&gt;
      irmp_data.flags = 0;    // reset flags!&lt;br /&gt;
      irsnd_send_data (&amp;amp;irmp_data);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Funktion des obigen Sources ist offensichtlich: Ein empfangenes Telegramm wird nach vollständiger Decodierung wieder encodiert und dann wieder über die IR-Diode ausgesandt. Somit können dann zum Beispiel Signale &amp;quot;um die Ecke&amp;quot; oder streckenweise drahtgebunden übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren könnte man auch Protokolle transformieren, zum Beispiel NEC-Telegramme in RC5 umwandeln, wenn man seine Original-RC5-FB zu seinem Philips-Gerät verlegt hat...&lt;br /&gt;
&lt;br /&gt;
Der Rest bleibt der Phantasie des geneigten Lesers überlassen ;-)&lt;br /&gt;
&lt;br /&gt;
Hier noch die möglichen Werte für irmp_data.protocol, siehe auch irmp.h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define IRMP_SIRCS_PROTOCOL                      1              // Sony&lt;br /&gt;
#define IRMP_NEC_PROTOCOL                        2              // NEC, Pioneer, JVC, Toshiba, NoName etc.&lt;br /&gt;
#define IRMP_SAMSUNG_PROTOCOL                    3              // Samsung&lt;br /&gt;
#define IRMP_MATSUSHITA_PROTOCOL                 4              // Matsushita&lt;br /&gt;
#define IRMP_KASEIKYO_PROTOCOL                   5              // Kaseikyo (Panasonic etc)&lt;br /&gt;
#define IRMP_RECS80_PROTOCOL                     6              // Philips, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_RC5_PROTOCOL                        7              // Philips etc&lt;br /&gt;
#define IRMP_DENON_PROTOCOL                      8              // Denon, Sharp&lt;br /&gt;
#define IRMP_RC6_PROTOCOL                        9              // Philips etc&lt;br /&gt;
#define IRMP_SAMSUNG32_PROTOCOL                 10              // Samsung32: no sync pulse at bit 16, length 32 instead of 37&lt;br /&gt;
#define IRMP_APPLE_PROTOCOL                     11              // Apple, very similar to NEC&lt;br /&gt;
#define IRMP_RECS80EXT_PROTOCOL                 12              // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
#define IRMP_NUBERT_PROTOCOL                    13              // Nubert&lt;br /&gt;
#define IRMP_BANG_OLUFSEN_PROTOCOL              14              // Bang &amp;amp; Olufsen&lt;br /&gt;
#define IRMP_GRUNDIG_PROTOCOL                   15              // Grundig&lt;br /&gt;
#define IRMP_NOKIA_PROTOCOL                     16              // Nokia&lt;br /&gt;
#define IRMP_SIEMENS_PROTOCOL                   17              // Siemens, e.g. Gigaset&lt;br /&gt;
#define IRMP_FDC_PROTOCOL                       18              // FDC keyboard&lt;br /&gt;
#define IRMP_RCCAR_PROTOCOL                     19              // RC Car&lt;br /&gt;
#define IRMP_JVC_PROTOCOL                       20              // JVC (NEC with 16 bits)&lt;br /&gt;
#define IRMP_RC6A_PROTOCOL                      21              // RC6A, e.g. Kathrein, XBOX&lt;br /&gt;
#define IRMP_NIKON_PROTOCOL                     22              // Nikon&lt;br /&gt;
#define IRMP_RUWIDO_PROTOCOL                    23              // Ruwido, e.g. T-Home Mediareceiver&lt;br /&gt;
#define IRMP_IR60_PROTOCOL                      24              // IR60 (SAB2008)&lt;br /&gt;
#define IRMP_KATHREIN_PROTOCOL                  25              // Kathrein&lt;br /&gt;
#define IRMP_NETBOX_PROTOCOL                    26              // Netbox keyboard (bitserial)&lt;br /&gt;
#define IRMP_NEC16_PROTOCOL                     27              // NEC with 16 bits (incl. sync)&lt;br /&gt;
#define IRMP_NEC42_PROTOCOL                     28              // NEC with 42 bits&lt;br /&gt;
#define IRMP_LEGO_PROTOCOL                      29              // LEGO Power Functions RC&lt;br /&gt;
#define IRMP_THOMSON_PROTOCOL                   30              // Thomson&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Daten für die Adresse und das Kommando ermittelt man am besten über IRMP, siehe weiter oben ;-)&lt;br /&gt;
&lt;br /&gt;
== IRSND unter Linux und Windows ==&lt;br /&gt;
&lt;br /&gt;
irsnd.c lässt sich auch unter Linux direkt kompilieren, um damit Telegramme in Form von IRMP-Scan-Dateien zu erzeugen. Das geht folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    cc irsnd.c -o irsnd                            # IRSND compilieren&lt;br /&gt;
&lt;br /&gt;
Der Aufruf geht dann folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
    ./irsnd protocol-number hex-address hex-command [repeat] &amp;gt; filename.txt&lt;br /&gt;
&lt;br /&gt;
also zum Beispiel für das NEC-Protokoll, Adresse 0x00FF, Kommando 0x0001&lt;br /&gt;
&lt;br /&gt;
    ./irsnd 2 00FF 0001 &amp;gt; nec.txt                   # irsnd ausführen&lt;br /&gt;
&lt;br /&gt;
IRSND kann man auch unter Windows nutzen, nämlich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
* Eingabeaufforderung starten&lt;br /&gt;
* In das Verzeichnis von irsnd wechseln&lt;br /&gt;
* Aufruf von:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 &amp;gt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Nun kann man direkt mit IRMP anschließend testen, ob das erzeugte Telegramm auch korrekt ist:&lt;br /&gt;
&lt;br /&gt;
            ./irmp &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irmp.exe &amp;lt; nec.txt&lt;br /&gt;
&lt;br /&gt;
Das Ganze geht auch ohne Zwischendatei, nämlich:&lt;br /&gt;
&lt;br /&gt;
            ./irsnd 2 00FF 0001 | ./irmp&lt;br /&gt;
&lt;br /&gt;
bzw. unter Windows:&lt;br /&gt;
&lt;br /&gt;
            irsnd.exe 2 00FF 0001 | irmp.exe&lt;br /&gt;
&lt;br /&gt;
IRMP gibt dann als Ergebnis folgendes aus:&lt;br /&gt;
&lt;br /&gt;
            11111111000000001000000001111111 p =  2, a = 0x00ff, c = 0x0001, f = 0x00&lt;br /&gt;
&lt;br /&gt;
IRMP konnte also aus dem von IRSND generierten Frame wieder das Protokoll 2, Adresse 0x00FF und Kommando 0x0001 decodieren.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Je nach benutztem Protokoll sind die Bit-Breiten der Adressen bzw. Kommandos verschieden, siehe obige Tabelle [http://www.mikrocontroller.net/articles/IRMP#Protokolle].&lt;br /&gt;
&lt;br /&gt;
Man kann also nicht mit jedem IR-Protokoll komplett 16-Bit breite Adressen oder Kommandos transparent übertragen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang =&lt;br /&gt;
&lt;br /&gt;
== Die IR-Protokolle im Detail ==&lt;br /&gt;
&lt;br /&gt;
=== Pulse-Distance Protokolle ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;SIRCS&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 40 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 12-20 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 7 Kommando-Bits + 5 Adress-Bits + bis zu 8 zusätzliche Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1200µs Puls, 600µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || zweimalig nach ca. 25ms, d.h. 2. und 3. Frame&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || ab dem 4. identischen Frame, Abstand ca. 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;NEC + extended NEC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz / 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten NEC || 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten ext. NEC || 16 Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || 9000µs Puls, 2250µs Pause, 560µs Puls, ~100ms Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;JVC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 4 Adress-Bits + 12 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause, 6000µs Pause bei Tasten-Wiederholung&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 25ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;NEC16&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 8 Adress-Bits + 1 Sync-Bit + 8 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 560µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine/eine/zwei nach 25ms?&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 25ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;NEC42&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 42 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 13 Adress-Bits + 13 invertierte Adress-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 9000µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 560µs Puls,  560µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 560µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 560µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || (unbekannt)&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || ?? kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten(1)-Bits + 1 Sync-Bit + 20 Daten(2)-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten(1) || 16 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten(2) || 4 ID-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Sync-Bit || 550µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;SAMSUNG32&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 4500µs Puls, 4500µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 550µs Puls,  450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 550µs Puls, 1450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 550µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach 45ms&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;MATSUSHITA&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 24 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 6 Hersteller-Bits + 6 Kommando-Bits + 12 Adress-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3488µs Puls, 3488µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 872µs Puls,  872µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 872µs Puls, 2616µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 872µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;KASEIKYO&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 48 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Hersteller-Bits + 4 Parity-Bits + 4 Genre1-Bits + 4 Genre2-Bits + 10 Kommando-Bits + 2 ID-Bits + 8 Parity-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 3380µs Puls, 1690µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 423µs Puls,  423µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 423µs Puls, 1269µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 423µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach 74ms&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 74ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first?&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;RECS80&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bits + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 3 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;RECS80EXT&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 2 Start-Bits + 11 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 1 Toggle-Bit + 4 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 158µs Puls, 3637µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 158µs Puls, 4902µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 158µs Puls, 7432µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 158µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;DENON&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (in der Praxis, lt. Dokumentation: 32 kHz)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 0 Start-Bits + 15 Data-Bits + 1 Stop-Bit + 65ms Pause + 15 invertierte Daten-Bits + 1 Stop-bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 5 Address-Bits + 10 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || kein Start-Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls, 775µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 310µs Puls, 1780µs Pause (in der Praxis, lt. Doku: 275µs Puls, 1900µs Pause)&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 310µs Puls (310µs Puls, 745µs Pause (in der Praxis, lt. Doku: 275µs Puls)&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;APPLE&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 16 Adress-Bits + 11100000 + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || siehe NEC&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || siehe NEC&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || siehe NEC&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || siehe NEC&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;NUBERT&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 10 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 10 Kommando-Bits ?&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 1340µs Puls, 340µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 500µs Puls, 1300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 1340µs Puls, 340µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 500µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || einmalig nach 35ms&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || dritter, fünfter, siebter usw. identischer Frame&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first?&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;B&amp;amp;O&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 455 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 4 Start-Bits + 16 Daten-Bits + 1 Trailer-Bit + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 0 Adress-Bits + 16 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 1 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 2 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 3 || 200µs Puls, 15425µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit 4 || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 200µs Puls, 2925µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 200µs Puls, 9175µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| R-Bit || 200µs Puls, 6050µs Pause, wiederholt das letzte Bit (repetition)&lt;br /&gt;
|-&lt;br /&gt;
| Trailer-Bit || 200µs Puls, 12300µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 200µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;FDC&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 40 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 8 Adress-Bits + 12 x 0-Bits + 4 Press/Release-Bits + 8 Kommando-Bits + 8 invertierte Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2085µs Puls, 966µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 300µs Puls,  220µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 300µs Puls, 715µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 300µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Drücken || Press/Release-Bits = 0000&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Loslassen || Press/Release-Bits = 1111&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Wiederholung nach Pause von 60ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;RCCAR&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Pulse Distance&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 13 Daten-Bits + 1 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || C0 C1 A0 A1 D0 D1 D2 D3 D4 D5 D6 D7 V&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2000µs Puls, 2000µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 600µs Puls,  900µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 600µs Puls, 450µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || 600µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || keine?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bi-Phase Protokolle ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;RC5 + RC5X&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Bi-Phase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5 || 2 Start-Bits + 12 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5 || 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC5X || 1 Start-Bit + 13 Daten-Bits + 0 Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC5X || 1 invertiertes Kommando-Bit + 1 Toggle-Bit + 5 Adress-Bits + 6 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;RC6&#039;&#039;&#039; + &#039;&#039;&#039;RC6A&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Bi-Phase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6 || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (000) + 1 Toggle-Bit + 16 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Frame RC6A || 1 Start-Bit + 1 Bit &amp;quot;1&amp;quot; + 3 Mode-Bits (110) + 1 Toggle-Bit + 31 Daten-Bits + 2666µs pause&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6 || 8 Adress-Bits + 8 Kommando Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten RC6A || &amp;quot;1&amp;quot; + 14 Hersteller-Bits + 8 System-Bits + 8 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2666µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 0-Bit || 889µs Pause, 889µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| Toggle 1-Bit || 889µs Puls, 889µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 444µs Pause, 444µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 444µs Puls, 444µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;GRUNDIG + NOKIA&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz (?)&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Bi-Phase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame-Paket || 1 Start-Frame + 19,968ms Pause + N Info-Frames + 117,76ms Pause + 1 Stop-Frame&lt;br /&gt;
|-&lt;br /&gt;
| Start-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Info-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Frame || 1 Pre-Bit + 1 Start-Bit + 9 Daten-Bits (alle 1) + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Grundig || 9 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Nokia || 8 Kommando-Bits + 8 Address-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Pre-Bit || 528µs Puls, 2639µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 528µs Pause, 528µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 528µs Puls, 528µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Info-Frames mit einem Pausenabstand von 117,76ms&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;SIEMENS + RUWIDO&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 36 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Bi-Phase (Manchester)&lt;br /&gt;
|-&lt;br /&gt;
| Frame Siemens || 1 Start-Bit + 22 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Frame Ruwido || 1 Start-Bit + 17 Daten-Bits + 0 Stop-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Daten Siemens || 11 Adress-Bits + 10 Daten-Bits + 1 invertiertes Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Daten Ruwido || 9 Adress-Bits + 7 Daten-Bits + 1 invertiertes Bit (letztes Bit davor nochmal invertiert)&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 275µs Puls, 275µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| 0-Bit || 275µs Pause, 275µs Puls&lt;br /&gt;
|-&lt;br /&gt;
| 1-Bit || 275µs Puls, 275µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Stop-Bit || kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || 1-malige Wiederholung mit gesetztem Repeat-Bit (?)&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || N-fache Wiederholung des Original-Frames innerhalb von 100ms (?)&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || MSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Serial Protokolle ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;NETBOX&#039;&#039;&#039; || Wert&lt;br /&gt;
|-&lt;br /&gt;
| Frequenz || 38 kHz?&lt;br /&gt;
|-&lt;br /&gt;
| Kodierung || Serial&lt;br /&gt;
|-&lt;br /&gt;
| Frame || 1 Start-Bit + 16 Daten-Bits, kein Stop-Bit&lt;br /&gt;
|-&lt;br /&gt;
| Daten || 3 Adress-Bits + 13 Kommando-Bits&lt;br /&gt;
|-&lt;br /&gt;
| Start-Bit || 2400µs Puls, 800µs Pause&lt;br /&gt;
|-&lt;br /&gt;
| Bitlänge || 800µs&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung || keine&lt;br /&gt;
|-&lt;br /&gt;
| Tasten-Wiederholung || Abstand ca. 35ms?&lt;br /&gt;
|-&lt;br /&gt;
| Bit-Order || LSB first&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRMP ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRMP:&lt;br /&gt;
&lt;br /&gt;
Version 2.0.1:&lt;br /&gt;
&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: KATHREIN&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RUWIDO&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: THOMSON&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: IR60&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: LEGO&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NEC16&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NEC42&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NETBOX&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Verbesserung von Tastenwiederholungen bei RC5&lt;br /&gt;
* 20.09.2011: Verbessertes Decodieren von Bi-Phase-Protokollen&lt;br /&gt;
* 20.09.2011: Korrekturen am RECS80-Decoder&lt;br /&gt;
* 20.09.2011: Korrekturen beim Erkennen von zusätzlichen Bits im SIRCS-Protocol&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 18.01.2011: Korrekturen für Siemens-Protokoll&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NIKON&lt;br /&gt;
* 18.01.2011: Speichern der zusätzlichen Bits (&amp;gt;12) im SIRCS-Protokoll in der Adresse&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für Denon-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 04.09.2010: Bugfix für F_INTERRUPTS &amp;gt;= 16000&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RC6A&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: JVC&lt;br /&gt;
* 29.08.2010: Kaseikyo-Protokoll: Berücksichtigung der Genre-Bits. &#039;&#039;&#039;ACHTUNG: dadurch neue Command-Codes!&#039;&#039;&#039;&lt;br /&gt;
* 29.08.2010: Kaseikyo-Protokoll: Verbesserte Behandlung von Wiederholungs-Frames&lt;br /&gt;
* 29.08.2010: Verbesserte Unterstützung des APPLE-Protokolls. &#039;&#039;&#039;ACHTUNG: dadurch neue Adress-Codes!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 01.07.2010: Bugfix: Einführen eines Timeouts für NEC-Repetition-Frames, um &amp;quot;Geisterkommandos&amp;quot; zu verhindern.&lt;br /&gt;
&lt;br /&gt;
* 26.06.2010: Bugfix: Deaktivieren von RECS80, RECS80EXT &amp;amp; SIEMENS bei geringer Interrupt-Rate&lt;br /&gt;
&lt;br /&gt;
* 25.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RCCAR&lt;br /&gt;
* 25.06.2010: Tastenerkennung für FDC-Protokoll (IR-keyboard) erweitert&lt;br /&gt;
* 25.06.2010: Interrupt-Frequenz nun bis zu 20kHz möglich&lt;br /&gt;
&lt;br /&gt;
* 09.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: FDC (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für DENON-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Siemens (Gigaset)&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Nokia&lt;br /&gt;
* 26.05.2010: Bugfix Auswertung von langen Tastendrücken bei Grundig-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Bugfix SAMSUNG32-Protokoll: Kommando-Bit-Maske korrigiert&lt;br /&gt;
&lt;br /&gt;
* 16.05.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Grundig&lt;br /&gt;
* 16.05.2010: Behandlung von automatischen Frame-Wiederholungen beim SIRCS-, SAMSUNG32- und NUBERT-Protokoll verbessert.&lt;br /&gt;
&lt;br /&gt;
* 28.04.2010: Nur einige kosmetische Code-Optimierungen&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&lt;br /&gt;
* 12.04.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Bang &amp;amp; Olufsen&lt;br /&gt;
&lt;br /&gt;
* 29.03.2010: Bugfix beim Erkennen von mehrfachen NEC-Repetition-Frames&lt;br /&gt;
* 29.03.2010: Konfiguration in irmpconfig.h ausgelagert&lt;br /&gt;
* 29.03.2010: Einführung einer Programmversion in README.txt: Version 1.0&lt;br /&gt;
&lt;br /&gt;
* 17.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Nubert&lt;br /&gt;
&lt;br /&gt;
* 16.03.2010: Korrektur der RECS80-Startbit-Timings&lt;br /&gt;
* 16.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RECS80 Extended&lt;br /&gt;
&lt;br /&gt;
* 15.03.2010: Codeoptimierung&lt;br /&gt;
&lt;br /&gt;
* 14.03.2010: Portierung auf PIC&lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Bugfix: Zurücksetzen der Statemachine nach einem unvollständigen RC5-Frame&lt;br /&gt;
&lt;br /&gt;
* 05.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: Apple&lt;br /&gt;
* 05.03.2010: Die Daten irmp_data.addr + irmp_data.command werden nun in der jeweiligen Bit-Order des verwendeten Protokolls gespeichert&lt;br /&gt;
&lt;br /&gt;
* 04.03.2010: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: SAMSUNG32 (Mix aus SAMSUNG &amp;amp; NEC-Protokoll)&lt;br /&gt;
* 04.03.2010: Änderung der SIRCS- und Kaseikyo-Toleranzen&lt;br /&gt;
&lt;br /&gt;
* 02.03.2010: SIRCS: Korrekte Erkennung und Unterdrückung von automatischen Frame-Wiederholungen&lt;br /&gt;
* 02.03.2010: SIRCS: Device-ID-Bits werden nun in irmp_data.command und nicht mehr in irmp_data.address gespeichert&lt;br /&gt;
* 02.03.2010: Vergrößerung des Scan Buffers (zwecks Protokollierung)&lt;br /&gt;
&lt;br /&gt;
* 24.02.2010: Neue Variable flags in IRMP_DATA zur Erkennung von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 20.02.2010: Bugfix Denon-Protokoll: Wiederholungsframe grundsätzlich invertiert&lt;br /&gt;
&lt;br /&gt;
* 19.02.2010: Erkennung von NEC-Protokoll-Varianten, z.&amp;amp;nbsp;B. Apple-Fernbedienung&lt;br /&gt;
* 19.02.2010: Erkennung von RC6- und Denon-Protokoll&lt;br /&gt;
* 19.02.2010: Verbesserung des RC5-Decoders (Bugfixes)&lt;br /&gt;
&lt;br /&gt;
* 13.02.2010: Bugfix: Puls/Pausen-Counter um 1 zu niedrig, nun bessere Erkennung bei Protokollen mit sehr kurzen Pulszeiten&lt;br /&gt;
* 13.02.2010: Erkennung der NEC-Wiederholungssequenz&lt;br /&gt;
&lt;br /&gt;
* 12.02.2010: RC5-Protokoll-Decoder hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* 05.02.2010: Konflikt zwischen Samsung- und Matsushita-Protokoll beseitigt&lt;br /&gt;
&lt;br /&gt;
* 07.01.2010: Erste Version&lt;br /&gt;
&lt;br /&gt;
== Software-Historie IRSND ==&lt;br /&gt;
&lt;br /&gt;
Änderungen IRSND:&lt;br /&gt;
&lt;br /&gt;
Version 2.0.1:&lt;br /&gt;
&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: THOMSON&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: LEGO&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NEC16&lt;br /&gt;
* 20.09.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NEC42&lt;br /&gt;
* 20.09.2011: Portierung auf ATtiny84 und ATtiny85&lt;br /&gt;
* 20.09.2011: Korrektur von Pausenlängen&lt;br /&gt;
* 20.09.2011: Korrekturen von irsnd_stop()&lt;br /&gt;
* 20.09.2011: Korrektur des SIEMENS-Timings&lt;br /&gt;
* 20.09.2011: Umstellung auf 36kHz Modulationsfrequenz für DENON-Protokoll&lt;br /&gt;
* 20.09.2011: Korrektur Behandlung zusätzlicher Bits im SIRCS Protokoll&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen:&lt;br /&gt;
&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RC6A&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: RC6&lt;br /&gt;
* 18.01.2011: &#039;&#039;&#039;Neues Protokoll&#039;&#039;&#039;: NIKON&lt;br /&gt;
* 18.01.2011: Beachten der zusätzlichen Bits (&amp;gt;12) im SIRCS-Protokoll&lt;br /&gt;
* 18.01.2011: Korrektur der Pausenlängen&lt;br /&gt;
* 18.01.2011: Timing-Korrekturen für Denon-Protokoll&lt;br /&gt;
&lt;br /&gt;
* 02.09.2010: Neues Protokoll: JVC&lt;br /&gt;
* 02.09.2010: Anpassung des APPLE-Encoders an IRMP-Version 1.7.3.&lt;br /&gt;
&lt;br /&gt;
* 29.08.2010: Neues Protokoll: Kaseikyo (Panasonic u.a.)&lt;br /&gt;
&lt;br /&gt;
* 01.07.2010: Bugfix: Deaktivieren von RECS80, RECS80EXT &amp;amp; SIEMENS bei geringer Interrupt-Rate&lt;br /&gt;
&lt;br /&gt;
* 25.06.2010: Neues Protokoll: RCCAR&lt;br /&gt;
&lt;br /&gt;
* 09.06.2010: Neues Protokoll: FDC (IR-keyboard)&lt;br /&gt;
* 09.06.2010: Timing für DENON-Protokoll korrigiert&lt;br /&gt;
&lt;br /&gt;
* 02.06.2010: Neues Protokoll: Siemens (Gigaset)&lt;br /&gt;
* 02.06.2010: Simulation von langen Tastendrücken&lt;br /&gt;
&lt;br /&gt;
* 26.05.2010: Neues Protokoll: Nokia&lt;br /&gt;
&lt;br /&gt;
* 17.05.2010: Neues Protokoll: Grundig&lt;br /&gt;
* 17.05.2010: Behandlung von Frame-Wiederholungen für SIRCS, SAMSUNG32 und NUBERT korrigiert&lt;br /&gt;
&lt;br /&gt;
* 28.04.2010: Unterstützung des APPLE-Protokolls&lt;br /&gt;
* 28.04.2010: Konfiguration über irmpconfig.h&lt;br /&gt;
&lt;br /&gt;
* 16.04.2010: Sämtliche Timing-Toleranzen angepasst/optimiert&lt;br /&gt;
&lt;br /&gt;
* 14.04.2010: Neues Protokoll: Bang &amp;amp; Olufsen&lt;br /&gt;
&lt;br /&gt;
* 17.03.2010: Neues Protokoll: Nubert&lt;br /&gt;
* 17.03.2010: Korrektur der Pausen zwischen Frame-Wiederholungen&lt;br /&gt;
&lt;br /&gt;
* 16.03.2010: Korrektur des Timer-Registers TCCR2&lt;br /&gt;
* 16.03.2010: Korrektur der RECS80-Startbit-Timings&lt;br /&gt;
* 16.03.2010: Neues Protokoll: RECS80 Extended &lt;br /&gt;
&lt;br /&gt;
* 11.03.2010: Anpassungen an verschiedene ATMega-Typen durchgeführt&lt;br /&gt;
&lt;br /&gt;
* 07.03.2010: Alpha-Version&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; IR-Übersicht &#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* http://www.epanorama.net/links/irremote.html&lt;br /&gt;
* http://www.elektor.de/jahrgang/2008/juni/cc2-avr-projekt-%283%29-unsichtbare-kommandos.497184.lynkx?tab=4 (IR Übersicht &amp;amp; RC5)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SIRCS-Protokoll&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/sirc.htm&lt;br /&gt;
* http://www.ustr.net/infrared/sony.shtml&lt;br /&gt;
* http://users.telenet.be/davshomepage/sony.htm&lt;br /&gt;
* http://picprojects.org.uk/projects/sirc/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NEC-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nec.htm&lt;br /&gt;
* http://www.ustr.net/infrared/nec.shtml&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NEC16-Protokoll (JVC):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.ustr.net/infrared/jvc.shtml&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SAMSUNG-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(wurde aus diversen Protokollen (Daewoo u.ä.) zusammengereimt, daher kein direkter Link auf irgendwelche SAMSUNG-Dokumentation verfügbar)&lt;br /&gt;
&lt;br /&gt;
Hier ein Link zum Daewoo-Protokoll, welches dasselbe Prinzip des Sync-Bits in der Mitte eines Frames nutzt, jedoch mit anderen Timing-Werten arbeitet:&lt;br /&gt;
&lt;br /&gt;
* http://users.telenet.be/davshomepage/daewoo.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MATSUHITA-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KASEIKYO-Protokoll (auch &amp;quot;Japan-Protokoll&amp;quot;):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RECS80- und RECS80-Extended-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/recs80.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RC5- und RC5x-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rc5.htm&lt;br /&gt;
* http://users.telenet.be/davshomepage/rc5.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Denon-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.com/de/IR-Protokolle.php#DENON&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RC6 und RC6A-Protokoll:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/rc6.htm&lt;br /&gt;
* http://slycontrol.ru/scr/kb/rc6.htm&lt;br /&gt;
* http://www.picbasic.nl/info_rc6_uk.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bang &amp;amp; Olufsen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/33137/datalink.pdf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grundig&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/77507/Grundig_10bit.pdf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nokia&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.sbprojects.com/knowledge/ir/nrc17.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diverse Protokolle:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/4246/IR-Protokolle_Diplomarbeit.pdf&lt;br /&gt;
* http://www.celadon.com/infrared_protocol/infrared_protocols_samples.pdf&lt;br /&gt;
* http://www.opendcc.de/info/rc5/rc5.html&lt;br /&gt;
* http://www.roboternetz.de/phpBB2/files/entwicklung_und_realisierung_einer_universalinfrarotfernbedienung_mit_timerfunktionen.pdf&lt;br /&gt;
&lt;br /&gt;
== Hardware / IRMP-Projekte ==&lt;br /&gt;
&lt;br /&gt;
Eine Implementierung auf Basis IRMP und IRSND als Multiprotokoll Dekoder mit LCD&lt;br /&gt;
von Klaus Leidinger: &lt;br /&gt;
* http://www.mikrocontroller-projekte.de/Mikrocontroller/index.html&lt;br /&gt;
&lt;br /&gt;
Ähnliche Implementierung wie von Klaus Leidinger für Pollin AVR-NET-IO mit Pollin ADD-ON Board:&lt;br /&gt;
* http://son.ffdf-clan.de/include.php?path=forumsthread&amp;amp;threadid=703&lt;br /&gt;
&lt;br /&gt;
USB IR Remote Receiver von Hugo Portisch:&lt;br /&gt;
* http://www.mikrocontroller.net/articles/USB_IR_Remote_Receiver&lt;br /&gt;
&lt;br /&gt;
Servo-gesteuerter IR Sender mit Anlernfunktion von Stefan Pendsa:&lt;br /&gt;
* http://forum.mikrokopter.de/topic-21060.html&lt;br /&gt;
* (SVN) http://svn.mikrokopter.de/listing.php?repname=Projects&amp;amp;path=%2FServo-Controlled+IR-Transmitter%2F&amp;amp;#Ad2417800d6aa14bf08c571a896e9def7&lt;br /&gt;
&lt;br /&gt;
Lernfähige IR-Fernbedienung von Robert und Frank M.&lt;br /&gt;
* http://www.mikrocontroller.net/articles/DIY_Lernfähige_Fernbedienung_mit_IRMP&lt;br /&gt;
&lt;br /&gt;
== Danksagung ==&lt;br /&gt;
&lt;br /&gt;
Ganz herzlich bedanken möchte ich mich bei Vlad Tepesch, Klaus Leidinger und Peter K., die mich mit Scan-Dateien ihrer Infrarot-Fernbedienungen versorgt haben. Dank auch an Klaus für seine nächtelangen Tests von IRMP &amp;amp; IRSND.&lt;br /&gt;
&lt;br /&gt;
Ebenso bedanken möchte ich mich bei Christian F. für seine Tipps zur PIC-Portierung.&lt;br /&gt;
&lt;br /&gt;
== Diskussion ==&lt;br /&gt;
&lt;br /&gt;
Meinungen, Verbesserungsvorschläge, harsche Kritik und ähnliches kann im [http://www.mikrocontroller.net/topic/162119 Beitrag: Infrared Multi Protocol Decoder] geäussert werden.&lt;br /&gt;
&lt;br /&gt;
Viel Spaß mit IRMP!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenübertragung]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:FET&amp;diff=58465</id>
		<title>Diskussion:FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:FET&amp;diff=58465"/>
		<updated>2011-07-11T05:23:14Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Was ist das denn da mit dem Temperaturabhängigen RdsON?&lt;br /&gt;
In dem einen Beispiel im Text ist da von einem Anstieg des Widerstands mit der Temperatur die Rede, in der Tabelle steht genau das Gegenteil!&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Nitnelav|Nitnelav]] 17:54, 7. Apr. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Welche Tabelle? Tabelle 1 &amp;quot;Erklärung der wichtigsten Datenblattwerte &amp;quot; ?&lt;br /&gt;
Dort steht genau das richtige drin, passend zum Text.&lt;br /&gt;
&lt;br /&gt;
R_DS_on 	 0,01Ohm 	 Widerstand des eingeschalteten FETs bei 25°C, V_GS = 10V und ID = 30A &lt;br /&gt;
&lt;br /&gt;
R_DS_on 	 0,021Ohm 	 Widerstand des eingeschalteten FETs bei 175°C, V_GS = 10V und ID = 30A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier:&lt;br /&gt;
Positiver Temperaturkoeffizient (TK), der RDS,on ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
Daraus schließe ich:&lt;br /&gt;
Wenn die Verluste steigen, dann muss auch der Widerstand gestiegen sein.&lt;br /&gt;
Da aber in der Tabelle bei steigender Temperatur der Widerstand sinkt, kann etwas nicht stimmen.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Nitnelav|Nitnelav]] 20:09, 7. Apr. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Bist du blind?&lt;br /&gt;
&lt;br /&gt;
25°C 0,010 Ohm sprich 10 mOhm&lt;br /&gt;
&lt;br /&gt;
175°C 0,021 Ohm, sprich 21 mOHm, eine Verdopplung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt hab ich&#039;s gesehen!&lt;br /&gt;
Danke nochmal für die Klarstellung, ich hab da immer 0.100 Ohm gelesen.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Nitnelav|Nitnelav]] 14:30, 8. Apr. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. Daher berechnet sich die Treiberleistung wie folgt.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gibt es dafür einen Beleg?&lt;br /&gt;
--[[Benutzer:Simon|Simon]] 05:23, 11. Jul. 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58464</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58464"/>
		<updated>2011-07-11T05:21:28Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Treiberleistung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalance Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Thresold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor überhaupt leitend wird, hier als Bereich angegeben, weil technisch bedingt mit einer hohen Toleranz behaftet&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben gennaten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = 100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transistoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwert zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallelgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=1{,}85W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer, wenn bekannt, P_sw_f = f_schalt·E_on bzw. P_sw_f = f_schalt * E_off d.h. Schaltfrequenz mal Ein(Aus)schaltverlustenergie. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. &lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nocht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekapazität umgeladen werden. Bei einigen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu findet ein [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]] Verwendung.&lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch, der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von RDS-ON eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von RDS-ON keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist.&lt;br /&gt;
&lt;br /&gt;
Hier spiel vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung eine Rolle, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich den Wirkungsgrad des Verstärkers. Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle]]n gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen sind, und somit bisweilen für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelene Zellen überhitzen und durchbrennen (Hot spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben wiel die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new 2. Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new 3. Forumsbeitrag]: über eine elektronische Last, sehr lang&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58463</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58463"/>
		<updated>2011-07-11T05:20:02Z</updated>

		<summary type="html">&lt;p&gt;Simon: &amp;quot;Darüber hinaus sollte der Entwickler wissen was er tut.&amp;quot; -&amp;gt; Sowas hat da nichts zu suchen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalance Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Thresold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor überhaupt leitend wird, hier als Bereich angegeben, weil technisch bedingt mit einer hohen Toleranz behaftet&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben gennaten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = 100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transistoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwert zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallelgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=1{,}85W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer, wenn bekannt, P_sw_f = f_schalt·E_on bzw. P_sw_f = f_schalt * E_off d.h. Schaltfrequenz mal Ein(Aus)schaltverlustenergie. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. &lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nocht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekappazität umgeladen werden. Bei eingen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu verwendet man einen [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]]. &lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von RDS-ON eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von RDS-ON keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist.&lt;br /&gt;
&lt;br /&gt;
Hier spiel vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung eine Rolle, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich den Wirkungsgrad des Verstärkers. Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle]]n gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen sind, und somit bisweilen für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelene Zellen überhitzen und durchbrennen (Hot spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben wiel die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new 2. Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new 3. Forumsbeitrag]: über eine elektronische Last, sehr lang&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58462</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58462"/>
		<updated>2011-07-11T05:18:17Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Stromtragfähigkeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalance Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Thresold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor überhaupt leitend wird, hier als Bereich angegeben, weil technisch bedingt mit einer hohen Toleranz behaftet&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben gennaten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = 100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transistoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwert zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallelgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=1{,}85W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer, wenn bekannt, P_sw_f = f_schalt·E_on bzw. P_sw_f = f_schalt * E_off d.h. Schaltfrequenz mal Ein(Aus)schaltverlustenergie. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. Darüber hinaus sollte der Entwickler wissen was er tut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nocht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekappazität umgeladen werden. Bei eingen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu verwendet man einen [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]]. &lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von RDS-ON eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von RDS-ON keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist.&lt;br /&gt;
&lt;br /&gt;
Hier spiel vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung eine Rolle, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich den Wirkungsgrad des Verstärkers. Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle]]n gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen sind, und somit bisweilen für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelene Zellen überhitzen und durchbrennen (Hot spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben wiel die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new 2. Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new 3. Forumsbeitrag]: über eine elektronische Last, sehr lang&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58461</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58461"/>
		<updated>2011-07-11T05:17:20Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Stromtragfähigkeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalance Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Thresold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor überhaupt leitend wird, hier als Bereich angegeben, weil technisch bedingt mit einer hohen Toleranz behaftet&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben gennaten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = 100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transistoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwerte zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallel geschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=1{,}85W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer, wenn bekannt, P_sw_f = f_schalt·E_on bzw. P_sw_f = f_schalt * E_off d.h. Schaltfrequenz mal Ein(Aus)schaltverlustenergie. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. Darüber hinaus sollte der Entwickler wissen was er tut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nocht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekappazität umgeladen werden. Bei eingen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu verwendet man einen [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]]. &lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von RDS-ON eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von RDS-ON keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist.&lt;br /&gt;
&lt;br /&gt;
Hier spiel vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung eine Rolle, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich den Wirkungsgrad des Verstärkers. Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle]]n gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen sind, und somit bisweilen für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelene Zellen überhitzen und durchbrennen (Hot spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben wiel die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new 2. Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new 3. Forumsbeitrag]: über eine elektronische Last, sehr lang&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58460</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=58460"/>
		<updated>2011-07-11T05:14:30Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Erklärung der wichtigsten Datenblattwerte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalance Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ohm || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Thresold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor überhaupt leitend wird, hier als Bereich angegeben, weil technisch bedingt mit einer hohen Toleranz behaftet&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben gennaten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = 100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transitoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwerte zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallel geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=1{,}85W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer, wenn bekannt, P_sw_f = f_schalt·E_on bzw. P_sw_f = f_schalt * E_off d.h. Schaltfrequenz mal Ein(Aus)schaltverlustenergie. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. Darüber hinaus sollte der Entwickler wissen was er tut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nocht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekappazität umgeladen werden. Bei eingen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu verwendet man einen [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]]. &lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von RDS-ON eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von RDS-ON keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist.&lt;br /&gt;
&lt;br /&gt;
Hier spiel vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung eine Rolle, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich den Wirkungsgrad des Verstärkers. Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle]]n gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen sind, und somit bisweilen für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelene Zellen überhitzen und durchbrennen (Hot spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben wiel die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new 2. Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new 3. Forumsbeitrag]: über eine elektronische Last, sehr lang&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=57920</id>
		<title>Schaltungssimulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Schaltungssimulation&amp;diff=57920"/>
		<updated>2011-06-13T16:47:49Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* FEMM -&amp;gt; Link h at sich geändert. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Analog==&lt;br /&gt;
Für Analogsimulation und Mixed-Mode (Digital/Analog) ist Spice State-of-the-art. Spice ist inzwischen von vielen Herstellern erhältlich.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://bwrc.eecs.berkeley.edu/classes/icbook/spice/ The Spice Page] des EECS Department of the University of California at Berkeley.&lt;br /&gt;
&lt;br /&gt;
===PSpice===&lt;br /&gt;
&lt;br /&gt;
http://www.orcad.com/download.orcaddemo.aspx&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* kostenlos mit Größeneinschränkung&lt;br /&gt;
* Version 8 ist etwas übersichtlicher als die aktuelle&lt;br /&gt;
* Einführungen&lt;br /&gt;
** http://people.fh-landshut.de/~wlf/Pspice/Einfuehrung/Einfuehrung.pdf&lt;br /&gt;
** http://www.elektronikschule.de/~krausg/ (links im Menü &amp;quot;Einstieg in PSpice leichtgemacht&amp;quot;)&lt;br /&gt;
** [http://www.spicelab.de/index.htm Robert Heinemanns PSPICE-Seiten]&lt;br /&gt;
&lt;br /&gt;
===Simplorer===&lt;br /&gt;
&lt;br /&gt;
http://www.ansoft.com/downloads.cfm&lt;br /&gt;
*kostenlose Studentenversion&lt;br /&gt;
*Anmeldung erforderlich&lt;br /&gt;
*Besondere Eignung für Leistungselektronik&lt;br /&gt;
*Möglichkeit den Simulationsablauf durch Zustandsgraphen zu steuern&lt;br /&gt;
*Besonders einfache Möglichkeit Kennlinien zur Parametersteuerung zu verwenden&lt;br /&gt;
*Integration verschiedener physikalischer Domänen möglich (Mechanik, Hydraulik, Elektrik (...) )&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Leistungselektronik und Domänenübergriff: Mit den integrierten Mos-Fet Modellen (Level 1-3) wird eine B6 Brücke aufgebaut. Über die Zustandsgraphen kann eine&lt;br /&gt;
Raumzeigermodulation programmiert werden die über alpha-beta Koordinaten gesteuert&lt;br /&gt;
wird. Die Brücke steuert einen Asynchronmotor (Flussmodell) an diesem ist eine&lt;br /&gt;
Mechanische Last angeschlossen, z.B ein Feder-Dämpfer-System. Nun kann der Einfluss der Feder-Komponente auf die Zwischenkreisspannung analysiert werden.&lt;br /&gt;
&lt;br /&gt;
Simplorer wird überwiegend im Mechatronischen Bereich eingesetzt. Die Studentenversion ist leider Stark eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
===LTspice/SwitcherCAD===&lt;br /&gt;
[[Datei:LTspice4-screenshot.png|miniatur|300px|Screenshot von LTspice 4]]&lt;br /&gt;
http://www.linear.com/company/software.jsp&lt;br /&gt;
&lt;br /&gt;
* Kostenlos&lt;br /&gt;
* Keinerlei Einschränkungen bezüglich Anzahl der Bauteile oder Knotenzahl&lt;br /&gt;
* SPICE-Simulator integriert unter einer graphischen Oberfläche zum Zeichnen von zu simulierenden Schaltungen&lt;br /&gt;
* Zum Einstieg empfehlenswert, da sehr übersichtlich&lt;br /&gt;
* Von einem Halbleiterhersteller (Linear Technologies). Kommt daher mit einer großen Anzahl von Modellen für Linear Technology Bauelemente und vielen Beispielen für diese. Darüber hinaus erlaubt Linear die Verwendung als allgemeines Werkzeug zum Schaltplan-Zeichnen und zur SPICE-Simulation.&lt;br /&gt;
* Das Programm heißt inzwischen offiziell LTspice IV. Man findet oft noch die älteren Bezeichnungen LTspice/SwitcherCAD, LTspice/SwitcherCAD III, SwitcherCAD/LTspice, SwCAD oder LTspice in älteren Unterlagen.  &lt;br /&gt;
* Windows-Software(98, 2000, XP, Vista, W7), läuft mit WINE unter Linux.&lt;br /&gt;
* Handbuch (entspricht der Programm-Hilfe): http://ltspice.linear.com/software/scad3.pdf&lt;br /&gt;
* Kleine Einführung:&amp;lt;!-- Dieser Link funktioniert offenbar nicht mehr. http://www.lme.fh-muenchen.de/lst/spice/LTSpiceInfo.pdf --&amp;gt; http://www.ee.hm.edu/fk/lab/lst/spice/LTSpiceInfo.pdf&lt;br /&gt;
* Längere, empfehlenswerte Einführung und zugehörige Beispielschaltungen: http://highered.mcgraw-hill.com/sites/0073106941/student_view0/lt_spice_instructions_and_support_files.html&lt;br /&gt;
* Trotz graphischer Oberfläche kommt man früher oder später nicht darum herum, sich mit den Feinheiten von SPICE direkt auseinander zu setzen, wenn man ein spezielles Verhalten der Simulation braucht.&lt;br /&gt;
* International User Group: http://groups.yahoo.com/group/LTspice/&lt;br /&gt;
* Eine Menge Modelle und eine gute Einführung (die beste wie ich finde) http://www.elektronikschule.de/~krausg/&lt;br /&gt;
* [http://ltwiki.org/index.php5?title=Main_Page LT Wiki] (englisch)&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Bauteilen, die aus verschiedenen Quellen stammen, ist nach Anmeldung in der obigen User Group zu bekommen. Dort gibt es auch die Modelle zum Download. Die erste Anlaufquelle, um häufig eingesetzte Bauteile zu finden.&lt;br /&gt;
&lt;br /&gt;
Andere Halbleiterhersteller liefern normalerweise keine explizit für LTspice vorgesehenen oder getesteten Modelle, da sie natürlicherweise nicht einen Mitbewerber (Linear Technologies) unterstützen wollen. LTspice versteht jedoch normale SPICE-Modelle (.SUBCKT, .MODEL, usw.). Da LTspice weitgehend die SPICE-Erweiterungen von PSPICE versteht, können auch PSPICE-Modelle in LTspice verwendet werden. Allerdings muss man eventuell, wie bei reinen SPICE Textmodellen, ein eigenes Schaltzeichen-Symbol für das Bauteil erstellen (LTspice versteht diesen Teil von PSPICE nicht).&lt;br /&gt;
&lt;br /&gt;
Das Einbinden von Fremdmodellen wird im Handbuch / der Programm-Hilfe von LTspice erklärt. Jedoch nicht im Hauptteil, sondern im Kapitel &#039;&#039;FAQ&#039;&#039;, wo die Erklärungen gerne übersehen werden.&lt;br /&gt;
&lt;br /&gt;
===SIMetrix===&lt;br /&gt;
Größeneinschränkung&lt;br /&gt;
ab Win 2000 und teilw. Linux&lt;br /&gt;
http://www.catena.uk.com/site/downloads/SIMetrixIntro.htm&lt;br /&gt;
&lt;br /&gt;
===ngSpice===&lt;br /&gt;
&lt;br /&gt;
http://ngspice.sourceforge.net/&lt;br /&gt;
* Kommandozeilenorientiert&lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* Anleitung für gEDA und Spice http://www.brorson.com/gEDA/SPICE/t1.html&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface for SPICE] (Linux)&lt;br /&gt;
&lt;br /&gt;
===TCLSpice===&lt;br /&gt;
&lt;br /&gt;
http://tclspice.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
* TclSpice ist eine verbesserte Version von Berkeley Spice und benutzt die Tcl/Tk Skript Sprache. &lt;br /&gt;
* open-source (BSD Lizenz) basierend auf NG-Spice Quellcode&lt;br /&gt;
&lt;br /&gt;
===NI MultiSim / Electronics Workbench===&lt;br /&gt;
&lt;br /&gt;
http://www.ni.com/multisim/&lt;br /&gt;
http://www.electronicsworkbench.com/edu/eduhom.html&lt;br /&gt;
&lt;br /&gt;
* Electronics Workbench wurde von National Instruments aufgekauft. In NIs MultiSim aufgegangen.&lt;br /&gt;
* 30-Tage Testversionen erhältlich&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Ab Wine 1.0 und bis MultiSim 9 auch auf Linux lauffähig&lt;br /&gt;
* [http://www.analog.com/en/content/CU_multisim_SPICE_program_download/fca.html eine freie Version wird von Analog Devices angeboten]&lt;br /&gt;
&lt;br /&gt;
===Tina===&lt;br /&gt;
http://www.tina.com/&lt;br /&gt;
* sehr eingeschränkte Demo-Version (PCB Layout nur mit weniger als 50 Pads erlaubt)&lt;br /&gt;
* [http://focus.ti.com/docs/toolsw/folders/print/tina-ti.html Tina-TI Version von Texas Instrument] ähnlich dem LTSpice von Linear Technology, ebenfalls kostenlos&lt;br /&gt;
&lt;br /&gt;
===Gnucap===&lt;br /&gt;
* http://www.geda.seul.org/tools/gnucap/&lt;br /&gt;
* [http://sourceforge.net/projects/gspiceui/ GSpiceUI - A graphic interface] (Linux)&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* viele Modelle aus dem HF-Bereich&lt;br /&gt;
&lt;br /&gt;
=== lcfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/lcfilter/&lt;br /&gt;
Online-Filterberechnung L-C-Filter&lt;br /&gt;
&lt;br /&gt;
=== eispice ===&lt;br /&gt;
&lt;br /&gt;
http://www.thedigitalmachine.net/eispice.html&lt;br /&gt;
&lt;br /&gt;
SPICE ähnlicher Schaltungssimulator mit Python Interface&lt;br /&gt;
&lt;br /&gt;
=== Yenka Analogue Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using analogue electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== Solve Elec ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.physicsbox.com/indexsolveelec2en.html Solve Elec] you can:&lt;br /&gt;
* draw and analyze electrical circuits functioning in direct or alternating current&lt;br /&gt;
* get literal formulas and values for current intensities and voltages defined in the circuit.&lt;br /&gt;
* verify circuit related equations.&lt;br /&gt;
* draw graphs.&lt;br /&gt;
* get the equivalent circuit of displayed circuit&lt;br /&gt;
* browse an integrated documentation&lt;br /&gt;
* edit, save and print reports made of various elements displayed in main window &lt;br /&gt;
(MacOSX, Windows, Free)&lt;br /&gt;
&lt;br /&gt;
==Digital==&lt;br /&gt;
&lt;br /&gt;
===Simulo===&lt;br /&gt;
http://www.codeplex.com/simulo&lt;br /&gt;
* Simple and modern digital simulation program. It&#039;s based upon .NET Framework 3.5 SP1 and WPF.&lt;br /&gt;
&lt;br /&gt;
===DigitalSimulator===&lt;br /&gt;
http://www.draw2d.org/digitalsimulator/&lt;br /&gt;
* Windows und Online Browser Variante verfügbar&lt;br /&gt;
&lt;br /&gt;
=== HADES ===&lt;br /&gt;
http://tams-www.informatik.uni-hamburg.de/applets/hades/html/index.html&lt;br /&gt;
* betriebssystemunabhängig (Java)&lt;br /&gt;
&lt;br /&gt;
=== mkfilter ===&lt;br /&gt;
http://www-users.cs.york.ac.uk/~fisher/mkfilter/&lt;br /&gt;
Online-Digitalfilterberechnung FIR, IIR&lt;br /&gt;
&lt;br /&gt;
=== edef ===&lt;br /&gt;
[http://edef.sourceforge.net/ edef] - A simple discrete event simulation. The edef framework can be used to simulate typical logical circuits, autoregressive processes or digital controller circuits and maybe some more. It is designed to be simple enougth for use in schools or other educational context. It is also truly easy to extend.&lt;br /&gt;
&lt;br /&gt;
=== TkGate ===&lt;br /&gt;
[http://www.tkgate.org/ TkGate] is a event driven digital circuit simulator with a tcl/tk-based graphical editor. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== Atanua ===&lt;br /&gt;
&lt;br /&gt;
[http://atanua.org/ Atanua ] is a real-time logic simulator, designed to help in learning of basic boolean logic and electronics. It uses OpenGL hardware-accelerated rendering and a custom UI designed for a fast workflow and a very low learning curve, letting the students concentrate on learning the subject instead of spending time learning the tool. (Personal non-commercial license: Free. Andere Nutzungen: siehe Webseite)&lt;br /&gt;
&lt;br /&gt;
=== MMLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.softronix.com/logic.html MMLogic] is a MultiMedia Logic Design System for Windows (NT/2K/Xp/95/98/ME, now Freeware)&lt;br /&gt;
&lt;br /&gt;
=== Yenka Digital Electronics ===&lt;br /&gt;
&lt;br /&gt;
[http://www.yenka.com/ Yenka] is a simulator for designing circuits using digital 4000 and 7400 series electronic components. Mac OS X or Windows XP/Vista. You can use all Yenka products free of charge at home.&lt;br /&gt;
&lt;br /&gt;
=== KSimus ===&lt;br /&gt;
&lt;br /&gt;
[http://ksimus.berlios.de/ KSimus] is a simulator for KDE.&lt;br /&gt;
&lt;br /&gt;
=== Digital Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mit.edu/~ara/ds.html Digital Simulator] has a toolbar of digital circuit elements, including logic gates, flip-flops, switches, and indicators. Drawing a circuit with Digital Simulator is like using a paint program. You click the element&#039;s icon on the toolbar, then click where you want the element to go. You use a similar procedure to draw wires and indicate connections. It&#039;s that simple. Free for educational institutions or students. (Windows 3.1, 95/NT)&lt;br /&gt;
&lt;br /&gt;
=== KLogic ===&lt;br /&gt;
&lt;br /&gt;
[http://www.a-rostin.de/indexd.html KLogic] ist eine Anwendung zum einfachen Entwurf und zur Simulation von Digitalschaltungen. KLogic ermöglicht einen einfachen Aufbau von Schaltungen aus Standardkomponenten wie UND, ODER, XOR, und Flipflops wie RS und JK. Um komplexere und wiederverwendbare Schaltungen zu entwerfen, können Teilschaltungen gespeichert und wiederverwendet werden.  (Linux, GPL)&lt;br /&gt;
Die letzte Version stammt aus dem Jahr 2006 und läuft leider recht instabil. Es gibt mittlerweile jede Menge grafisch unschöne Stellen und, schlimmer noch, auch diverse Bugs, die einen Crash verursachen.&lt;br /&gt;
&lt;br /&gt;
=== Logic Simulator ===&lt;br /&gt;
&lt;br /&gt;
With [http://www.tetzl.de/java_logic_simulator.html LogicSim] you can design and simulate digital logic circuits with logic gates like AND, OR, FlipFlop, etc.&lt;br /&gt;
&lt;br /&gt;
=== HS-FIR-Compiler ===&lt;br /&gt;
[http://www.steepestascent.com/content/default.asp?page=s2_22 steepestascent.com]&lt;br /&gt;
14 day evaluation license:&lt;br /&gt;
The High Speed FIR Filter Compiler is a standalone utility that automatically generates VHDL code for fast and efficient FIR filters and is ideal for both FPGA and ASIC implementation.&lt;br /&gt;
&lt;br /&gt;
=== Interactive 595 Shift Register Simulator ===&lt;br /&gt;
&lt;br /&gt;
[http://conductiveresistance.com/interactive-595-shift-register-simulator/ Interactive 595 Shift Register Simulator]&lt;br /&gt;
&lt;br /&gt;
== Mixed Analog-Digital ==&lt;br /&gt;
&lt;br /&gt;
===SPECTRE===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.cadence.com/products/rf/spectre_circuit/pages/default.aspx Cadence Virtuoso Spectre Circuit Simulator] ist ein Mixed AD-Simulator auf der Basis von Spice. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===HSPICE===&lt;br /&gt;
&lt;br /&gt;
[http://www.synopsys.com/Tools/Verification/AMSVerification/CircuitSimulation/HSPICE/Pages/default.aspx HSPICE] ist ein PSpice-ähnlicher Simulator, der sowohl ABM-Modelle, als auch eigens erstellte library-Modelle verarbeiten kann. (Kommerziell)&lt;br /&gt;
&lt;br /&gt;
===XSPICE===&lt;br /&gt;
http://users.ece.gatech.edu/~mrichard/Xspice/&lt;br /&gt;
&lt;br /&gt;
=== DOLPHIN SMASH ===&lt;br /&gt;
http://www.dolphin-integration.com/medal/smash/smash_overview.html&lt;br /&gt;
* Dolphin Smash is a mixed-signal, multi-language simulator for IC or PCB designs. It uses [[SPICE]] syntax for analog descriptions, [[Verilog]]-HDL and [[VHDL]] for digital, Verilog-A/AMS, VHDL-AMS and ABCD (a combination of SPICE and C) for analog behavioral, and C for [[DSP]] algorithms.&lt;br /&gt;
* Logik, Analog und Mixed-Simulation&lt;br /&gt;
* Für Linux und Windows&lt;br /&gt;
* Engeschränkte Evaluationsversion erhältlich&lt;br /&gt;
&lt;br /&gt;
===Micro-Cap===&lt;br /&gt;
&lt;br /&gt;
http://www.spectrum-soft.com&lt;br /&gt;
* nur für Windows&lt;br /&gt;
* Evaluation Version (mit Einschränkungen) nach Registrierung erhältlich&lt;br /&gt;
&lt;br /&gt;
===GNU-Radio===&lt;br /&gt;
http://gnuradio.org/redmine/wiki/gnuradio&lt;br /&gt;
GNU Radio is a free software development toolkit that provides the signal processing runtime and processing blocks to implement software radios using readily-available, low-cost external RF hardware and commodity processors. It is widely used in hobbyist, academic and commercial environments to support wireless communications research as well as to implement real-world radio systems.&lt;br /&gt;
&lt;br /&gt;
=== Oregano ===&lt;br /&gt;
&lt;br /&gt;
http://oregano.gforge.lug.fi.uba.ar/&lt;br /&gt;
&lt;br /&gt;
Beschreibung von [http://elettrolinux.com/Simulations/oregano-an-electrical-tool.html elettrolinux.com]:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Oregano&#039;&#039;&#039; is a LINUX application for schematic capture and simulation of electronic circuits. Oregano has an user friendly graphic interface that allows to design and describe the circuit to simulate. It provides a wide variety of component libraries, including CMOS, TTL, lineal, operational amplifiers, and a lot more! Oregano lets you simulate the designed circuits. The actual simulation is performed by Berkeley Spice BSIM, GnuCAP or the new generation NGSpice. Oregano is licensed under the terms of the GNU GPL.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBreadboard ===&lt;br /&gt;
&lt;br /&gt;
[http://www.virtualbreadboard.com/ VirtualBreadboard] is an easy to use simulation and modelling tool that can be used in place of a real breadboard for quickly performing experiments and testing out electronic and microcontroller ([[PIC]]) powered &#039;embedded&#039; applications. (Seit Version 3.3.12 11 July 2009 Freeware, Windows)&lt;br /&gt;
&lt;br /&gt;
=== BasicDSP ===&lt;br /&gt;
[http://www.vf.utwente.nl/~ptdeboer/ham/basicdsp/ von Pieter-Tjerk de Boer, PA3FWM, und Niels Moseley, PE1OIT]&lt;br /&gt;
A program for experimenting with simple audio DSP algorithms&lt;br /&gt;
&lt;br /&gt;
==Hochfrequenztechnik==&lt;br /&gt;
&lt;br /&gt;
=== Linksammlungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.circuitsage.com/tline.html Transmission Line Design and Analysis]&lt;br /&gt;
* [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22572 Übersichtsartikel der Microwave &amp;amp; RF] [http://www.mwrf.com/Articles/Print.cfm?ArticleID=22809 und hier]&lt;br /&gt;
&lt;br /&gt;
=== Ansoft ===&lt;br /&gt;
*Maxwell SV: Simulation von elektrischen und magnetischen Feldern (2D) &lt;br /&gt;
*Simplorer SV: Schaltungssimulation&lt;br /&gt;
*PExprt SV: Berechung von Schaltnetzteilen&lt;br /&gt;
&lt;br /&gt;
Wurde 2008 von [http://www.ansys.com/ Ansys] gekauft,&lt;br /&gt;
http://www.ansys.com/Products/Simulation+Technology/Electromagnetics&lt;br /&gt;
&lt;br /&gt;
die kostenlose Studentenversion &amp;quot;Ansoft Designer&amp;quot; gibts nur noch von G.Kraus:&lt;br /&gt;
http://141.69.160.32/~krausg/&lt;br /&gt;
[http://141.69.160.32/~krausg/Ansoft%20Designer%20SV/DesignerSV050610.exe Download exe-File]&lt;br /&gt;
=== ARRL Radio Designer ===&lt;br /&gt;
für 169&amp;amp;#8364; bei http://www.ukw-berichte.de erhältlich  http://www.arrl.org&lt;br /&gt;
* Amateurversion der amerikanischen Design-Software Super Compact.&lt;br /&gt;
* Mittlerweile durch Ansoft Designer (ehem. Ansoft Serenade) überholt&lt;br /&gt;
&lt;br /&gt;
=== AADE Filter Design ===&lt;br /&gt;
Homepage: http://www.aade.com/filter.htm&lt;br /&gt;
&lt;br /&gt;
kostenlose Analog-Filterberechnung:&lt;br /&gt;
* Butterworth, Chebyshev, Elliptic (Cauer), Bessel, Legendre and Linear Phase&lt;br /&gt;
* low-pass, high-pass, band-Pass, and band-reject filters.&lt;br /&gt;
* Coupled Resonator band-pass filters&lt;br /&gt;
* Crystal Ladder band-pass filters using identical crystals&lt;br /&gt;
&lt;br /&gt;
=== ActiveFilterDesign ===&lt;br /&gt;
Active Filter Design für Matlab, kostenloser Download: http://academics.vmi.edu/ee_js/Research/Programs/materials/AFD12.zip&lt;br /&gt;
&lt;br /&gt;
Handbuch: http://academics.vmi.edu/ee_js/Research/Programs/materials/Analog%20Filter%20Designer.pdf&lt;br /&gt;
&lt;br /&gt;
* FIR, IIR, analoge Filter, Synthese und Analyse&lt;br /&gt;
&lt;br /&gt;
=== AWR ===&lt;br /&gt;
http://web.awrcorp.com/&lt;br /&gt;
&lt;br /&gt;
free trial versions erhältlich für:&lt;br /&gt;
* ANALOG OFFICE   -   High-Frequency Design Software for Analog and RFICs&lt;br /&gt;
* APLAC   -   Harmonic balance simulation engine&lt;br /&gt;
* AXIEM   -   3D Planar Electromagnetic Software for Antennas and Passives&lt;br /&gt;
* MICROWAVE OFFICE   -   RF and Microwave Design Software for MMIC, RF PCB and Modules&lt;br /&gt;
* VISUAL SYSTEM SIMULATOR   -   Wireless Communication System Design Software&lt;br /&gt;
&lt;br /&gt;
* TxLine [http://web.awrcorp.com/Usa/Products/Optional-Products/TX-Line/ free Transmission Line Calculator]&lt;br /&gt;
&lt;br /&gt;
=== Elsie ===&lt;br /&gt;
http://www.tonnesoftware.com/elsie.html&lt;br /&gt;
a Windows electrical filter design and analysis program handling all of the usual options (family, topology, bandwidth, etc.). It has a nice toolbox including real-time tuning modes and optimization. Outputs are presentation quality. Student edition is free. &lt;br /&gt;
&lt;br /&gt;
=== FastHenry ===&lt;br /&gt;
Windowsversion http://www.fastfieldsolvers.com/&lt;br /&gt;
&lt;br /&gt;
* open source&lt;br /&gt;
* Impedanzextraktion (R und L) aus 3D-Geometrieen&lt;br /&gt;
* Erfasst Skin-, Proximity-Effekte, magnetische Kopplungseffekte&lt;br /&gt;
* Erstellung von Spice-Modellen möglich&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FilterFree ===&lt;br /&gt;
http://www.nuhertz.com/filter/&lt;br /&gt;
&lt;br /&gt;
Filter Free is the free version of Filter Solutions and Filter Light. Functionality is limited 3rd order analog and IIR filters, and 10 tap FIR filters. Filters are synthesized. Frequency, time, and reflection analysis are performed on the ideal, unmodified filters only. Transfer functions are displayed in standard form only.&lt;br /&gt;
&lt;br /&gt;
=== HP AppCAD ===&lt;br /&gt;
http://www.hp.woodshot.com/&lt;br /&gt;
&lt;br /&gt;
RF design software is provided free of charge by Agilent Technologies&lt;br /&gt;
as a service to the RF and microwave design community&lt;br /&gt;
&lt;br /&gt;
Läuft unter Windows ab 95c/NT4&lt;br /&gt;
&lt;br /&gt;
=== Nova.exe ===&lt;br /&gt;
http://www.pcb-pool.com/ppde/service_downloads.html&lt;br /&gt;
&lt;br /&gt;
NOVA is a program that can be used to analyze most linear (AC) circuits. It&lt;br /&gt;
can calculate voltage, phase, and delay at any circuit point (node) at any&lt;br /&gt;
frequencies. Most (AC) circuit analysis programs can only give useful results&lt;br /&gt;
for low frequencies (below 10 Mhz). NOVA can do this but it can also be used&lt;br /&gt;
for RF and microwave circuits. Microwave circuits require the analysis be done&lt;br /&gt;
in terms of S-parameters, rather then AC voltages.  NOVA does AC, time domain,&lt;br /&gt;
and S-parameter analysis.This version of NOVA has circuit tweaking while in the graph mode. You may find it extremely useful. Vary a component and watch the response, return loss, and delay change. &lt;br /&gt;
&lt;br /&gt;
Gutes altes DOS-Programm, AC- oder S-Parameter-Darstellung.&lt;br /&gt;
Ausdruck unter WinXP nur mit Screenshot-Programm möglich, getestet z.&amp;amp;nbsp;B. mit Snarf15: http://www.idcomm.com/personal/lorenblaney/SNARF15.ZIP&lt;br /&gt;
&lt;br /&gt;
=== PUFF - Microwave Design Software ===&lt;br /&gt;
für 22&amp;amp;#8364; bei http://www.ukw-berichte.de/ erhältlich&lt;br /&gt;
* altes DOS-Programm für HF-Simulation und Platinenentwurf&lt;br /&gt;
* Microstrip HF-Berechnungen, Smith-Diagramm&lt;br /&gt;
* in den UKW-Berichten standen schon mehrere Artikel mit Beispielen&lt;br /&gt;
* zur Nutzung einer Kombination aus PUFF und Ansoft SV (=Studentenversion)&lt;br /&gt;
&lt;br /&gt;
Seit Anfang 2010 wird PUFF unter der GPLv3 License geführt. Der Pascal Quelltext mit Linux Package und Handbuch ist frei verfügbar. [http://wwwhome.cs.utwente.nl/~ptdeboer/ham/puff/ PUFF microwave CAD software on Linux]&lt;br /&gt;
&lt;br /&gt;
=== RF-Sim 99 ===&lt;br /&gt;
kostenlos z.&amp;amp;nbsp;B. von: http://www.janson-soft.de/amateurfunk/rfsim99/rfsim99.htm&lt;br /&gt;
&lt;br /&gt;
oder neben anderen PDFs zur HF-Technik: http://home.sandiego.edu/~ekim/e194rfs01/&lt;br /&gt;
* Berechnung aktiver und passiver Filter einschließlich Schaltplaneingabe&lt;br /&gt;
* Ausgabe von Frequenz- und Phasengang, Smith-Diagramm&lt;br /&gt;
&lt;br /&gt;
=== Smith Plot ===&lt;br /&gt;
Neben diversen Mathcad-Beispielen und Skripten aus der HF-Technik eine Smith-Chart-Software:&lt;br /&gt;
http://www.fritz.dellsperger.net/downloads.htm&lt;br /&gt;
&lt;br /&gt;
=== Sonnet Lite ===&lt;br /&gt;
Sonnet Lite provides a full-wave EM solution for 3D planar circuits&lt;br /&gt;
A fully functional and powerful EM analysis software. &lt;br /&gt;
Get started on your EM analysis within the next 30 minutes by downloading SONNET Lite!&lt;br /&gt;
http://www.sonnetsoftware.com/products/lite/&lt;br /&gt;
http://www.sonnetsoftware.com/&lt;br /&gt;
&lt;br /&gt;
===qucs===&lt;br /&gt;
http://qucs.sourceforge.net/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OS X&lt;br /&gt;
* hervorragende technische Dokumentation&lt;br /&gt;
* Impedanzrechenfunktionen für Strip- und Microstripleitungen&lt;br /&gt;
* Filterberechnungstool&lt;br /&gt;
&lt;br /&gt;
==Antennensimulation==&lt;br /&gt;
&lt;br /&gt;
=== cocoaNEC ===&lt;br /&gt;
Homepage: http://homepage.mac.com/chen/w7ay/cocoaNEC/index.html&lt;br /&gt;
* Design und modulierung von Antennen&lt;br /&gt;
* MacOS X (PowerPC und Intel)&lt;br /&gt;
* Frei erhältlich (mit Quellcode)&lt;br /&gt;
&lt;br /&gt;
=== EZ-NEC ===&lt;br /&gt;
Homepage: http://eznec.com/&lt;br /&gt;
* Antennenberechnung&lt;br /&gt;
demo program allows only 20 segments, which limits the complexity of antenna&lt;br /&gt;
you can analyze. (EZNEC 4.0 allows 500 )&lt;br /&gt;
&lt;br /&gt;
=== MiniNEC ===&lt;br /&gt;
Homepage: http://www.emsci.com/&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot; (Zerlegung der Antenne in kleine Segmente, Überlagerung der Teilfelder)&lt;br /&gt;
* eingeschränkte Studenten/Amateurversion erhältlich&lt;br /&gt;
* NEC = Numerical Electromagnetics Code&lt;br /&gt;
&lt;br /&gt;
=== SuperNEC ===&lt;br /&gt;
Homepage: http://www.supernec.com/&lt;br /&gt;
* Antennenberechnung mittels &amp;quot;Momentenmethode&amp;quot;&lt;br /&gt;
* 30-Tage-Testversion sowie unbegrenzt lauffähige Studentenversion (gegen Nachweis) erhältlich&lt;br /&gt;
&lt;br /&gt;
=== MMANA ===&lt;br /&gt;
Homepage (deutsche Version) : http://dl2kq.de/mmana/4-7.htm&lt;br /&gt;
&lt;br /&gt;
Kostenlose Antennen-Analysesoftware, auf der mit MININEC Version 3 eingeführten Momentenmethode basierend&lt;br /&gt;
&lt;br /&gt;
=== RadioMobile ===&lt;br /&gt;
Hochfrequenz-Ausbreitungssimulation&lt;br /&gt;
* [http://www.cplus.org/rmw/english1.html Hauptseite]&lt;br /&gt;
* [http://www.cplus.org/rmw/rme.html Beispielbilder]&lt;br /&gt;
* [http://www.cplus.org/rmw/dataen.html dazu erforderliche Kartendaten]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/SRTM-Daten Wikipedia zum SRTM-Kartendatenformat]&lt;br /&gt;
&lt;br /&gt;
== Sonstige ==&lt;br /&gt;
&lt;br /&gt;
=== FEMM ===&lt;br /&gt;
* [http://www.femm.info/wiki/HomePage Finite Element Method Magnetics] (FEMM)&lt;br /&gt;
&lt;br /&gt;
=== GALEMU ===&lt;br /&gt;
&lt;br /&gt;
[http://bu3sch.de/joomla/index.php/galpal-emulator Galemu] is a [[GAL]]/[[PAL]] chip emulator. (GPL)&lt;br /&gt;
&lt;br /&gt;
==Numerische Berechnungswerkzeuge==&lt;br /&gt;
&lt;br /&gt;
===Derive===&lt;br /&gt;
http://education.ti.com&lt;br /&gt;
&lt;br /&gt;
===FreeMat===&lt;br /&gt;
http://freemat.sourceforge.net&lt;br /&gt;
* freier MatLab-Clone&lt;br /&gt;
* für Windows, Linux, Mac OS X&lt;br /&gt;
&lt;br /&gt;
===GAUSS===&lt;br /&gt;
Wissenschaftliche Simulationssoftware zur Berechung 3-dimensionaler Ladungsverteilungen in z.&amp;amp;nbsp;B. Halbleitern. Kann aus Geometrie und Dotierungsprofilen die Halbleitergleichungen ableiten.&lt;br /&gt;
&lt;br /&gt;
===GnuPlot===&lt;br /&gt;
http://www.gnuplot.info/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows und weitere&lt;br /&gt;
* sehr mächtiges Tool, aber eher im Bereich der Datenauswertung (Diagramme)&lt;br /&gt;
* [http://ttsiodras.googlepages.com/gnuplotStreaming.html Visualize real-time data streams with Gnuplot] (Perl)&lt;br /&gt;
&lt;br /&gt;
===Maple===&lt;br /&gt;
http://www.maplesoft.com/&lt;br /&gt;
* Wissenschaftliche Analyse und Simulationssystem zur Lösung komplexester Aufgaben der Mathematik. Lizenzpflichtig.&lt;br /&gt;
&lt;br /&gt;
===JMathLib===&lt;br /&gt;
http://mathlib.sourceforge.net&lt;br /&gt;
* freier Matlab-Clone in 100% Java&lt;br /&gt;
* für Windows, Linux, ...&lt;br /&gt;
&lt;br /&gt;
===MatLab===&lt;br /&gt;
http://www.mathworks.com/&lt;br /&gt;
&lt;br /&gt;
===MuPad===&lt;br /&gt;
http://www.mupad.de/&lt;br /&gt;
&lt;br /&gt;
===Mathcad===&lt;br /&gt;
http://www.mathsoft.com/ http://www.ptc.com/appserver/mkt/products/home.jsp?k=3901&lt;br /&gt;
* rechnen mit Formeln wie auf dem Papier&lt;br /&gt;
&lt;br /&gt;
===Maxima===&lt;br /&gt;
http://maxima.sourceforge.net/&lt;br /&gt;
* freie Software für Linux, OSX, Windows&lt;br /&gt;
&lt;br /&gt;
===Octave===&lt;br /&gt;
http://www.octave.org/&lt;br /&gt;
* freier MatLab-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===GNU R===&lt;br /&gt;
http://www.r-project.org/&lt;br /&gt;
* freier S-Clone. Die Syntax ist überwiegend identisch&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
===SciLab===&lt;br /&gt;
http://www.scilab.org/&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, MacOS&lt;br /&gt;
* stellt eine C++ Library bereit, die in eigene DSP-Systeme eingebunden werden kann&lt;br /&gt;
&lt;br /&gt;
===scipy===&lt;br /&gt;
scipy [http://www.scipy.org/] ist eine Erweiterung der Skriptsprache Python [http://www.python.org] mit numerischen Funktionen&lt;br /&gt;
* freie Software&lt;br /&gt;
* für Linux, Windows, OSX&lt;br /&gt;
&lt;br /&gt;
== Online Schaltungssimulatoren ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/79658#664688 Diskussion im Forum]&lt;br /&gt;
* http://www.falstad.com/circuit/&lt;br /&gt;
* [http://www.intersil.com/isim/ Intersil’s iSim]&lt;br /&gt;
* [http://smile.hsu-hh.de/Schaltungen/Index.htm WSPICE] (fixe Schaltungen)&lt;br /&gt;
* [http://micropci1.imtek.uni-freiburg.de/svs/ spicy VOLTsim]&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikschule.de/~krausg/ Elektronikschule.de von Gunthard Kraus] (ORCAD-PSPICE, LTspice IV)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;br /&gt;
[[Kategorie:Schaltplaneditoren]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56271</id>
		<title>Stromversorgung für FPGAs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56271"/>
		<updated>2011-04-04T05:44:49Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Messung 1 - FPGA unkonfiguriert */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht == &lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll eine kurze Erklärung zum Entwurfsproblem von Stromversorgungen für Hochleistungs-[[FPGA]]s gegeben werden. Ein neuer Ansatz zur Messung des Frequenzgangs wird dargestellt. Praktische Messungen werden gezeigt.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs werden immer mehr Bestandteil moderner Elektronik. Die Bausteine werden größer, schneller und leistungsstärker mit jedem Tag. Und so steigt auch die Leistungsaufnahme. Obwohl die Leistung pro Gatter sich durch bessere Technologie und kleinere Geometrien verringert, steigt die Taktfrequenz und die Anzahl der Gatter pro Bauteil. Mit steigender Schaltgeschwindigkeit wird die Stromversorgung zu einem kritischen Teil im Systementwurf. Das Stromversorgungsnetz muss eine Quelle mit niedriger Impedanz über einen sehr weiten Frequenzbereich sein. Anderenfalls könnnen Überschwinger, Spannungsabfall oder Störpulse auf VCC/GND die Funktion des FPGAs stören, welche durch den schnell wechselnden Leistungsbedarf des FPGAs verursacht wird.&lt;br /&gt;
&lt;br /&gt;
== Breitbandentkopplung ist Teamwork ==&lt;br /&gt;
&lt;br /&gt;
Der Spannungsregler muss die Gleichstromkomponente für das Stromversorgungsnetzwerk liefern. Bei maximaler Leistung und Umgebungstemperatur muss er immer noch sauber funktionieren ohne zu überhitzen, Spannungseinbrüche etc. Seine Aufgabe ist es, auf niederfrequente Lastsprünge zu reagieren (ca. 0..30kHz).&lt;br /&gt;
&lt;br /&gt;
Im mittleren Frequenzbereich kann der Spannungsregler nicht mehr reagieren, er ist zu langsam. Der Strom muss dann von großen Elektrolytkondensatoren geliefert werden. Diese Kondensatoren können bis einige MHz Strom liefern, danach begrenzen der parasitäre Widerstand (ESR, engl. effective series resistance) bzw. die parasitäre Induktivität (ESL, engl. effective series inductance) die Stromlieferfähigkeit des Kondensators und machen ihn irgendwann bei höheren Frequenzen nutzlos.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt die Zeit der kleinen Keramikkondensatoren, typisch 10 oder 100nF. Sie gibt es in kleinen [[SMD]]-Gehäusen wie 0603 und kleiner mit sehr wenig parasitärer Induktivität. Sie können Strom bis einige hundert MHz liefern und sind damit eine niederohmige Quelle für Hochfrequenzströme.&lt;br /&gt;
&lt;br /&gt;
Aber für die &#039;&#039;&#039;wirklich&#039;&#039;&#039; schnell schaltenden ICs sind auch diese Keramikkondensatoren nicht ausreichend, um das Stromversorgungsnetzwerk ausreichend zu entkoppeln. Hier braucht man die Kapazität der Stromversorgungsflächen, welche duch VCC- und Masseflächen in mehrlagigen Platinen gebildet wird. Um ein Maximum an Kapazität zu erreichen sollte ein dünnes Dielektrikum mit einer hohen Dielektrizitätskonstante und niedrigen Verlusten benutzen. Außerdem sollte man ein VIA für jedes VCC/GND Pin benutzen, um die parasitären Induktivitäten zu minimieren, nicht ein VIA für mehrere Pins! [[IC-Gehäuseformen#BGA | BGA-Gehäuse]] bieten zusätzlich kürzere Verbindungen vom eigentlichen IC zur Platine, sie sind aber schwieriger zu handhaben (Layout und [[SMD Löten | Löten]]).&lt;br /&gt;
&lt;br /&gt;
== Der klassische Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Theorien und Application Notes zum Thema Entkopplung von Stromversorgungen. Einige nehmen einfach die Brechstange und bauen einen Friedhof für unzählige Kondensatoren, andere sind schlauer. Es gibt auch sehr viele Simulationen zu dem Thema. Aber am Ende sind die Eigenschaften des Stromversorgungsnetzes definiert duch das Zusammenspiel von&lt;br /&gt;
&lt;br /&gt;
* dem FPGA und dessen Leistungsaufnahme, welche von der Schaltfrequenz abhängt&lt;br /&gt;
* dem Layout der Platine mit der Platzierung der verschiedenen Kondensatoren&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit zur Messung der Qualität des Stromversorgungsnetzwerkes ist die Nutzung eines Netzwerkanalysators. Dafür benötigt man eine Platine, welche nur mit den passiven Komponenten bestückt ist. Dabei wird ein Testsignal in das Netzwerk eingespeist (meist an Stelle des Spannungsreglers) und an einer anderen Stelle gemessen (meist an Stelle der ICs). Der Netzwerkanalysator variiert dann die Frequenz und zeichnet eine Kurve des Widerstand über die Frequenz auf. Diese Methode hat einige Nachteile.&lt;br /&gt;
&lt;br /&gt;
*Man braucht einen teuren Netzwerkanalysator&lt;br /&gt;
*Man benötigt eine zusätzliches Board, welches nur mit den Kondensatoren bestückt ist, welches nicht immer verfügbar ist&lt;br /&gt;
*Die Messung spiegelt nicht die wahren Bedingungen wieder, weil alle ICs und aktiven Teile fehlen. Ausserdem sind nur Punkt zu Punkt Messungen möglich, welche das reale Verhalten nicht korrekt wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Die Methode in diesem Artikel versucht, die meisten Nachteile zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
== Ein direkter Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Da wir hier über FPGAs reden, haben wir die Möglichkeit, &#039;&#039;&#039;jede&#039;&#039;&#039; beliebige digitale Funktion hineinzuprogrammieren. Also sollten wir eine digitale Funktion entwerfen, welche dem schlimmstmöglichen Fall der Belastung der Stromversorgung entspricht. Aus der Theorie der linearen Netzwerke wissen wir, dass der Frequenzgang eines linearen Systems aus der Sprungantwort am Eingang und der Reaktion am Ausgang gemessen werden kann. Für das Stromversorgungsnetzwerk funktioniert das sogar wenn es nicht vollständig linear ist, da wir ja die reale Reaktion auf konstante Last und Lastsprünge messen wollen. Was ist nun der schlimmste Belastungsfall für die Stromversorgung? Da fast alle ICs auf CMOS-Technologie beruhen, wird die meiste Leistung umgesetzt, wenn Signalnetze ihren Pegel wechseln. Bei einem FPGA heißt das, dass alle [[FlipFlop]]s ihren Pegel gleichzeitig wechseln und dabei große Signalnetze treiben (parasitäre Kapazität). Also entwerfen wir die folgende Schaltung. &lt;br /&gt;
&lt;br /&gt;
[[bild:Schematic.gif|thumb|left|600px|Logik für Lasttest]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
Der Kern besteht aus einer Matrix aus 30x50 FlipFlops, wobei jeweils 50 FlipFlops aus einem Puffer-FlipFlop gespeist werden, um die Ausgangslast relativ niedrig zu halten und damit eine hohe Taktfrequenz zu erreichen. Um etwas kombinatorische Logik zu erzeugen und um die HDL Compiler davon abzuhalten, die FlipFlops wegzuoptimieren, verbinden wir alle FlipFlops über ein gigantisches ODER-Gatter und leiten den Ausgang auf ein IO-Pad. Dieser Ausgang wird aber nicht weiter genutzt. Dann haben wir noch einen 16-Bit  Zähler und etwas Steuerlogik, welche das Toggle-FlipFlop gemäß folgender Tabelle steuert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Steuerung der Testlogik&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! sel&amp;lt;1&amp;gt; || sel&amp;lt;0&amp;gt; || Modus&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || inaktiv&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || konstante Umschaltung&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || Burstbetrieb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VHDL Code ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Code synthetisiert wird, muss die Option &amp;quot;remove duplicate registers&amp;quot; in der Synthesesoftware ausgeschaltet werden.&lt;br /&gt;
&amp;lt;VHDL&amp;gt;&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity power is&lt;br /&gt;
    Port ( clk_in  : in std_logic;                      -- clock input&lt;br /&gt;
           sel     : in std_logic_vector(1 downto 0);   -- select modulation ON/OFF&lt;br /&gt;
           gnd     : out std_logic_vector(5 downto 0);  -- artificial gnd&lt;br /&gt;
           mod_out : out std_logic;                     -- modulation signal&lt;br /&gt;
           reset   : in std_logic;                      -- reset for DLL&lt;br /&gt;
           dummy   : out std_logic);                    -- dummy out, to fool the synthesizer&lt;br /&gt;
           &lt;br /&gt;
end power;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of power is&lt;br /&gt;
&lt;br /&gt;
COMPONENT row&lt;br /&gt;
    PORT(&lt;br /&gt;
        clk  : IN std_logic;&lt;br /&gt;
        data : IN std_logic;    &lt;br /&gt;
        dout : OUT std_logic&lt;br /&gt;
        );&lt;br /&gt;
END COMPONENT;&lt;br /&gt;
&lt;br /&gt;
-- DLL (Delay Locked Loop), a Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component CLKDLL&lt;br /&gt;
    port (  &lt;br /&gt;
        CLKIN   : in    std_logic;&lt;br /&gt;
        CLKFB   : in    std_logic;&lt;br /&gt;
        RST     : in    std_logic;&lt;br /&gt;
        CLK0    : out   std_logic;&lt;br /&gt;
        CLK90   : out   std_logic;&lt;br /&gt;
        CLK180  : out   std_logic;&lt;br /&gt;
        CLK270  : out   std_logic;&lt;br /&gt;
        CLK2X   : out   std_logic;&lt;br /&gt;
        CLKDV   : out   std_logic;&lt;br /&gt;
        LOCKED  : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- BUFG (Global Clock buffer), a Virtex  primitive&lt;br /&gt;
&lt;br /&gt;
component BUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- IBUFG (Global Clock input buffer ), aa Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component IBUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
component SRL16     -- virtex primitive&lt;br /&gt;
  port (&lt;br /&gt;
        D    : in std_logic;        &lt;br /&gt;
        CLK  : in std_logic;&lt;br /&gt;
        A0   : in std_logic;&lt;br /&gt;
        A1   : in std_logic;&lt;br /&gt;
        A2   : in std_logic;&lt;br /&gt;
        A3   : in std_logic;        &lt;br /&gt;
        Q    : out std_logic&lt;br /&gt;
       ); &lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
constant rows: integer:=30;&lt;br /&gt;
&lt;br /&gt;
type flop_array is array (rows-1 downto 0) of std_logic_vector(49 downto 0);&lt;br /&gt;
&lt;br /&gt;
signal toggle   : std_logic;                            -- a toggle flipflop&lt;br /&gt;
signal ff_ar    : flop_array;&lt;br /&gt;
signal drive_ar : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal dout_ar  : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal or_ar    : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal cnt      : std_logic_vector (15 downto 0);       -- modulation divider&lt;br /&gt;
&lt;br /&gt;
signal CLKIN_w, RESET_w, CLK2X_dll, CLK2X_g, CLK4X_dll, CLK4X_g, CLK8X_dll, CLK8X_g: std_logic;&lt;br /&gt;
signal LOCKED2X, LOCKED2X_delay, RESET4X, RESET8X, LOCKED4X, LOCKED4X_delay, LOCKED8X : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal logic1,clk : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal clk2x,clk4x,clk8x, clkmux: std_logic;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- use two DLL to get 147 MHz&lt;br /&gt;
&lt;br /&gt;
logic1&amp;lt;=&#039;1&#039;;&lt;br /&gt;
&lt;br /&gt;
clkpad : IBUFG  port map (I=&amp;gt;CLK_IN, O=&amp;gt;CLKIN_w);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dll2x  : CLKDLL port map (CLKIN=&amp;gt;CLKIN_w,   CLKFB=&amp;gt;CLK2X_g, RST=&amp;gt;RESET,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK2X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED2X);&lt;br /&gt;
&lt;br /&gt;
clk2xg : BUFG   port map (I=&amp;gt;CLK2X_dll,   O=&amp;gt;CLK2X_g);&lt;br /&gt;
&lt;br /&gt;
rstsrl : SRL16  port map (D=&amp;gt;LOCKED2X, CLK=&amp;gt;CLK2X_g, Q=&amp;gt;LOCKED2X_delay,&lt;br /&gt;
                          A3=&amp;gt;logic1, A2=&amp;gt;logic1, A1=&amp;gt;logic1, A0=&amp;gt;logic1);&lt;br /&gt;
&lt;br /&gt;
RESET4X &amp;lt;= not LOCKED2X_delay;&lt;br /&gt;
&lt;br /&gt;
dll4x  : CLKDLL port map (CLKIN=&amp;gt;CLK2X_g,  CLKFB=&amp;gt;CLK4X_g, RST=&amp;gt;RESET4X,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK4X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED4X);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clk4xg : BUFG   port map (I=&amp;gt;CLK4X_dll,  O=&amp;gt;CLK4X_g);&lt;br /&gt;
&lt;br /&gt;
clk&amp;lt;=clk4x_g;&lt;br /&gt;
&lt;br /&gt;
-- the toggeling array&lt;br /&gt;
&lt;br /&gt;
l_rows: for i in 0 to rows-1 generate&lt;br /&gt;
    Inst_row: row PORT MAP(&lt;br /&gt;
        clk  =&amp;gt; clk,&lt;br /&gt;
        data =&amp;gt; drive_ar(i),&lt;br /&gt;
        dout =&amp;gt; dout_ar(i)&lt;br /&gt;
    );&lt;br /&gt;
  end generate;&lt;br /&gt;
&lt;br /&gt;
-- combine all douts via a BIG or-gate&lt;br /&gt;
&lt;br /&gt;
  process(dout_ar)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l_or: for i in 0 to rows-1 loop&lt;br /&gt;
      tmp:=tmp or dout_ar(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dummy&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- prescaler&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      cnt&amp;lt;=cnt+1;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- toggle fliplop and distribution&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      case sel is&lt;br /&gt;
        when &amp;quot;00&amp;quot;       =&amp;gt; toggle &amp;lt;= &#039;0&#039;;&lt;br /&gt;
        when &amp;quot;01&amp;quot;       =&amp;gt; toggle &amp;lt;= not toggle;&lt;br /&gt;
        when &amp;quot;10&amp;quot;       =&amp;gt; if cnt(15)=&#039;1&#039; then toggle &amp;lt;= not toggle; else toggle&amp;lt;=&#039;0&#039;; end if;&lt;br /&gt;
        when others     =&amp;gt; null;&lt;br /&gt;
      end case;&lt;br /&gt;
      drive_ar&amp;lt;=(others=&amp;gt;toggle);&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
gnd&amp;lt;=(others=&amp;gt;&#039;0&#039;);&lt;br /&gt;
mod_out&amp;lt;=cnt(15);&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity row is&lt;br /&gt;
    Port ( clk  : in std_logic;&lt;br /&gt;
           data : in std_logic;&lt;br /&gt;
           dout : out std_logic);&lt;br /&gt;
end row;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of row is&lt;br /&gt;
&lt;br /&gt;
signal my_array: std_logic_vector (49 downto 0);&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- generate 50 FFs with clock enable&lt;br /&gt;
&lt;br /&gt;
  process (clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clK&#039;event then&lt;br /&gt;
      my_array&amp;lt;=(others=&amp;gt;data);     &lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- combine all into a BIG OR&lt;br /&gt;
&lt;br /&gt;
  process(my_array)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l: for i in 0 to 49 loop&lt;br /&gt;
      tmp:=tmp or my_array(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dout&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&amp;lt;/VHDL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Messungen ==&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Messungen wurden mit einem Spartan-II Demoboard von Insight Electronics durchgeführt. Es ist mit einem XC2S100-5 im PQ208 Gehäuse bestückt. Es nutzt eine Kernspannung von 2,5V und eine IO-Spannung von 3,3V. Beide Spannungen werden durch Linearregler geliefert. Ein 36.864 MHz Oszillator wurde hinzugefügt. Für die Messung wurde der Takt mittels DLL vervierfacht auf 147 MHz. Diese hohe Frequenz wurde gewählt, um die Effekte gut demonstrieren zu können. In einer praktischen Anwendung wird man diesen Test nur mit der normalen Frequenz betreiben, welche auch in der realen Anwendung genutzt wird. Das Board wird durch ein starkes Netzteil versorgt.&lt;br /&gt;
&lt;br /&gt;
Die Kernspannung wird mit einem Stück Koaxialkabel vom Typ RG 174 gemessen, welches direkt an ein VCC/GND Pin des FPGAs angelötet ist. Das [[Oszilloskop]] ist auf 50 Ohm Eingangsimpedanz mit AC-Kopplung geschaltet. Wir sind nicht an der absoluten Größe der Versorgungsspannung interessiert sind, nur an Wechselanteilen, welche hoffentlich deutlich kleiner sind. Mit AC-Kopplung kann man einen deutlich kleineren Messbereich für die vertikale Auflösung verwenden. Dieser Aufbau hat eine gute Abschirmung gegen Störungen und eine sehr hohe Bandbreite zur Messung der hochfrequenten Störungen.&lt;br /&gt;
&lt;br /&gt;
Während der Messung wurde festgestellt, dass es zwei verschiedene [[Wellenwiderstand | Terminierungsmethoden]] in Oszilloskopen gibt. Das alte Tektronix CSA 404 mit einem 11A34 Verstärker nutzt Terminierung 1 am 50 Ohm Eingang. Daraus ergibt sich eine untere Grenzfrequenz des Hochpasses von ~10 Hz. Das zweite Oszilloskop, ein Tektronix TDS 3034, mit welchem die Screenshots gemacht wurden, nutz Terminierung 2, welche in einer unteren Grenzfrequenz von ~200 kHz resultiert. Das ist nicht akzeptabel für die Messung der Sprungantwort, weswegen die 1 M&amp;amp;Omega; Eingangsterminierung benutzt wurde. Das ist OK für die Messung niedriger Frequenzen (&amp;lt;10 MHz). Zur Messung der Hochfrequenzstörungen (Messung 4) ist die Grenzfrequenz von 200 kHz kein Problem.&lt;br /&gt;
&lt;br /&gt;
[[bild:Term1.gif|framed|left| Terminierung 1 : 50&amp;amp;Omega; vor dem Koppelkondensator, f_g 10 Hz ]].&lt;br /&gt;
[[bild:Term2.gif|framed|left| Terminierung 2 : 50&amp;amp;Omega; nach dem Koppelkondensator, f_g 200kHz]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Messung 1 - FPGA unkonfiguriert ==&lt;br /&gt;
&lt;br /&gt;
Bei diesem Schritt können wir die Leistungsaufnahme in Ruhezustand messen, welche größtenteils durch Leckströme verursacht wird. Zu beachten ist auch, dass unser Oszilloskop mit Eingangsschaltung 1 viel Strom zieht (50Ω @ 2,5V = 50mA). Wir können mittles Multimeter messen, ob unsere Spannungsregler die korrekte Spannung liefern. Wir schreiben den aktuellen Stromverbrauch und Kernspannung auf. Dabei ist der Stromverbrauch der Eingangstermninierung nicht enthalten, weil für alle Messungen das zweite Oszilloskop mit Schaltung 2 verwendet wurde.&lt;br /&gt;
&lt;br /&gt;
== Messung 2 - FPGA mit leerer Logik == &lt;br /&gt;
&lt;br /&gt;
Ein Design mit einer einfachen Schleife von einem Eingang auf einen Ausgang ist jetzt in das FPGA geladen. Nach der Konfiguration &#039;&#039;&#039;sinkt&#039;&#039;&#039; der Stromverbrauch, weil die Konfigurationslogik im FPGA abgeschaltet wurde, welche permanant den Konfigurationsspeicher löscht. Die Leistungsaufnahme dieser Minimalschaltung wird als Kalibrierungspunkt für alle nachfolgenden Messungen verwendet.&lt;br /&gt;
&lt;br /&gt;
== Messung 3 - FPGA konfiguriert ohne schaltende Logik ==&lt;br /&gt;
&lt;br /&gt;
Jetzt steigt die Leistungsaufnahme deutlich. Auf den ersten Blick ist das unerwartet, denn im FPGA werden keinerlei Signale geschaltet , die FlipFlips laden immer den gleichen Wert. Aber das ist nicht ganz korrekt. Das Taktnetzwerk läuft auf voller Leistung. Daran erkennt man, dass die Taktverteilung signifikant Leistung benötigt. Darum nutzen [[Ultra low power | stromsparende ICs]] eine saubere Methode zur [[Taktung FPGA/CPLD | Taktabschaltung (clock gating)]], um die Leitungsaufnahme zu verringern. Aber das muss auf sichere Weise erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Messung 4 - FPGA mit dauerhaft schaltenden Signalen ==&lt;br /&gt;
&lt;br /&gt;
Jetzt starten wir ein Feurwerk! Die Stromversorgung erfährt jetzt ihren schlimmsten Albtraum. 1500 FlipFlops die gleichzeitig mit 147 MHz umschalten (togglen)&lt;br /&gt;
ist kein Kindergeburtstag! Schau auf den Strommesser! Das FPGA wird schnell sehr heiß. Aber was sehen wir auf dem Oszilloskop? Da die Stromaufnahme konstant ist, können wir nur Hochfrequenzstörungen durch die schaltende Logik sehen, welche durch unzureichende Entkopplung der Keramikkondensatoren verursacht werden könnte. Mit einem schnellen Oszilloskop (1GHz++) und schlechten Versorgungslagen und Keramikkondensatoren, könnte man die &#039;&#039;&#039;wirklich&#039;&#039;&#039; hochfrequenten Störungen sehen. Mit dem 1 GHz Oszilloskop sieht man in diesem Fall aber nichts, eben weil die Kondensatoren und Stromversorgungslagen gut funktionieren. Mit langsameren Oszilloskopen (300MHz oder weniger) sieht man nur den Effekt der Kondensatoren. Hier können wir auch die Kernspannung unter Volllast messen. Aber man muss sicherstellen, die Spannung zu messen, welche wirklich am FPGA ankommt, d.h. man muss &#039;&#039;&#039;direkt&#039;&#039;&#039; an den Pins des FPGA messen, nicht irgendwo auf dem Board! Denn das Stromversorgungsnetz hat einen endlichen Widerstand, welcher einen Spannungsabfall vom Spannungsregler bis zum FPGA verursacht. In einem guten Entwurf sollte der Spannungsabfall kleiner als 1% der Nennspannung sein.&lt;br /&gt;
&lt;br /&gt;
== Messung 5 - Burstbetrieb ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß erreichen wir den interessantesten Punkt. Mit dem 16-Bit Zähler wird das Umschalten des FlipFlop-Arrays mit einer niedrigen Frequenz moduliert, die Modulationsfrequenz ist 1/65356 der Taktfrequenz, hier ~2,2 kHz. Das ist die Sprungfunktion, welche in den Abschnitten weiter oben genannt wurde. Und wir sehen die Reaktion des Stromversorgungsnetzes. Wenn es ideal wäre, würden wir nur eine gerade Linie auf dem Oszilloskop sehen. Aber da es numal keine Idealfälle gibt, sehen wir Überschwinger und einen verbleibenden Offset. Das nachfolgende Bild zeigt das deutlich. Der blaue Kanal ist das Modulationssignal des 16-Bit Zählers (MSB), der gelbe Kanal die Kernspannung.&lt;br /&gt;
&lt;br /&gt;
[[bild:01.gif|framed|left| Sprungantwort mit 10µF]]&lt;br /&gt;
[[bild:02.gif|framed|left| Sprungantwort mit 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:03.gif|framed|left| Abschaltflanke 10µF]]&lt;br /&gt;
[[bild:04.gif|framed|left| Abschaltflanke 110µF]]&lt;br /&gt;
[[bild:05.gif|framed|left| Zoom, Abschaltflanke 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:06.gif|framed|left| Anschaltflanke 10µF]]&lt;br /&gt;
[[bild:07.gif|framed|left| Anschaltflanke 110µF]]&lt;br /&gt;
[[bild:08.gif|framed|left| Zoom, Anschaltflanke 110µF]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Erklärung ==&lt;br /&gt;
&lt;br /&gt;
Der Unterschwinger beim Einschalten wird verursacht durch unzureichende Entkopplung im mittleren Frequenzbereich. Der sprunghaft steigende Stromverbrauch kann nicht von den Mittelfrequenzkondensatoren geliefert werden (zu wenig Kapazität), auch nicht vom Spannungsregler (er ist zu langsam dafür). Das originale Demoboard ist nur mit einem 10µF Tantalkondensator hinter dem Spannungsregler bestückt, welche für so eine große Last viel zu klein ist. Durch Ergänzung eines 100µF Kondensatores kann der Unterschwinger deutlich verkleinert werden.&lt;br /&gt;
&lt;br /&gt;
Der Überschwinger beim Abschalten ist ähnlich, aber hier ist der Spannungsregler ist zu langsam, den Ausgangsstrom herunterzuregeln. Der überschüssige Strom (Ladung) wird in den Mittelfrequenzkondensatoren gespeichert, aber da dieser nur 10µF hat, steigt die Spannung schnell an. Ein einfacher Vergleich. Es ist genauso wie wenn man mit einem kleinen Fass das Regenwasser von einem großen Dach auffangen will, das Faß füllt sich schnell.&lt;br /&gt;
&lt;br /&gt;
Was verursacht den verbliebenden Offset? Nun, das ist der Gleichstromwiderstand des Stromversorgungsnetzwerks vom Spannungsregler (wo dieser die Ausgangsspanung misst und regelt) bis zum VCC-Pin des FPGAs. Die Stromaufnahme des FPGAs schwankt zwischen Messung 3 (kein Umschalten) und Messung 4 (konstantes Umschalten). Auf dem Oszilloskop sehen wir eine Spannungsdifferenz von ~70mV bei einer Stromdifferenz von 912 mA, woraus ca. 76m&amp;amp;Omega; Widerstand resultieren. Die Schlußfolgerung daraus ist, dass die Verbindung zwischen dem Punkt der Spannungsmessung durch den Spannungsregler und den VCC-Pins einen möglichst niedrigen Widerstand haben muss. Das beste sind komplette Lagen für die Stromversorgung (Power Planes), aber kurze, dicke Leitungen sind meist auch OK. Es gibt auch Spannungsregler mit extra Messeingängen, welche den Spannungsabfall über der Zuleitung kompensieren können, weil sie direkt am Verbraucher die Spannung messen. Als weitere Möglichkeit werden heutzutage meist sog. Point of Load Module eingesetzt. Das sind Spannungsregler (Schaltregler), welche direkt am zu versorgenden FPGA sitzen und mit einer hohen Spannung von 5..48V über das Board versorgt werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Messergebnisse&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Messung || FPGA-Inhalt                || Icc [mA] || Vcc [V] || P [mW]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || keine Konfiguration              || 80 || 2.501 || 200&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Minimallogik                     || 40 || 2.502 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Testlogik, inaktiv               || 235 || 2.487 || 584&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Testlogik, konstantes Umschalten || 1147 || 2.433 || 2790&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Testlogik, Burstbetrieb           || 690 || 2.464 || 1700&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wurde eine einfache aber leistungsfähige Methode zur Messung des Frequenzgangs des Stromversorgungsnetzwerks für FPGAs gezeigt. Die Messung kann deutlich einfacher und mit leicht verfügbaren Messgeräten unter realistischeren Bedingungen durchgeführt werden als eine klassische Messung mit einem Netzwerkanalysator. Es läßt viel Raum für Experimente mit der Entkopplung der Stromversorgung in Bezug auf die Platzierung und Werte der Kondensatoren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56270</id>
		<title>Stromversorgung für FPGAs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56270"/>
		<updated>2011-04-04T05:44:19Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Messung 1 - FPGA unkonfiguriert */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht == &lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll eine kurze Erklärung zum Entwurfsproblem von Stromversorgungen für Hochleistungs-[[FPGA]]s gegeben werden. Ein neuer Ansatz zur Messung des Frequenzgangs wird dargestellt. Praktische Messungen werden gezeigt.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs werden immer mehr Bestandteil moderner Elektronik. Die Bausteine werden größer, schneller und leistungsstärker mit jedem Tag. Und so steigt auch die Leistungsaufnahme. Obwohl die Leistung pro Gatter sich durch bessere Technologie und kleinere Geometrien verringert, steigt die Taktfrequenz und die Anzahl der Gatter pro Bauteil. Mit steigender Schaltgeschwindigkeit wird die Stromversorgung zu einem kritischen Teil im Systementwurf. Das Stromversorgungsnetz muss eine Quelle mit niedriger Impedanz über einen sehr weiten Frequenzbereich sein. Anderenfalls könnnen Überschwinger, Spannungsabfall oder Störpulse auf VCC/GND die Funktion des FPGAs stören, welche durch den schnell wechselnden Leistungsbedarf des FPGAs verursacht wird.&lt;br /&gt;
&lt;br /&gt;
== Breitbandentkopplung ist Teamwork ==&lt;br /&gt;
&lt;br /&gt;
Der Spannungsregler muss die Gleichstromkomponente für das Stromversorgungsnetzwerk liefern. Bei maximaler Leistung und Umgebungstemperatur muss er immer noch sauber funktionieren ohne zu überhitzen, Spannungseinbrüche etc. Seine Aufgabe ist es, auf niederfrequente Lastsprünge zu reagieren (ca. 0..30kHz).&lt;br /&gt;
&lt;br /&gt;
Im mittleren Frequenzbereich kann der Spannungsregler nicht mehr reagieren, er ist zu langsam. Der Strom muss dann von großen Elektrolytkondensatoren geliefert werden. Diese Kondensatoren können bis einige MHz Strom liefern, danach begrenzen der parasitäre Widerstand (ESR, engl. effective series resistance) bzw. die parasitäre Induktivität (ESL, engl. effective series inductance) die Stromlieferfähigkeit des Kondensators und machen ihn irgendwann bei höheren Frequenzen nutzlos.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt die Zeit der kleinen Keramikkondensatoren, typisch 10 oder 100nF. Sie gibt es in kleinen [[SMD]]-Gehäusen wie 0603 und kleiner mit sehr wenig parasitärer Induktivität. Sie können Strom bis einige hundert MHz liefern und sind damit eine niederohmige Quelle für Hochfrequenzströme.&lt;br /&gt;
&lt;br /&gt;
Aber für die &#039;&#039;&#039;wirklich&#039;&#039;&#039; schnell schaltenden ICs sind auch diese Keramikkondensatoren nicht ausreichend, um das Stromversorgungsnetzwerk ausreichend zu entkoppeln. Hier braucht man die Kapazität der Stromversorgungsflächen, welche duch VCC- und Masseflächen in mehrlagigen Platinen gebildet wird. Um ein Maximum an Kapazität zu erreichen sollte ein dünnes Dielektrikum mit einer hohen Dielektrizitätskonstante und niedrigen Verlusten benutzen. Außerdem sollte man ein VIA für jedes VCC/GND Pin benutzen, um die parasitären Induktivitäten zu minimieren, nicht ein VIA für mehrere Pins! [[IC-Gehäuseformen#BGA | BGA-Gehäuse]] bieten zusätzlich kürzere Verbindungen vom eigentlichen IC zur Platine, sie sind aber schwieriger zu handhaben (Layout und [[SMD Löten | Löten]]).&lt;br /&gt;
&lt;br /&gt;
== Der klassische Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Theorien und Application Notes zum Thema Entkopplung von Stromversorgungen. Einige nehmen einfach die Brechstange und bauen einen Friedhof für unzählige Kondensatoren, andere sind schlauer. Es gibt auch sehr viele Simulationen zu dem Thema. Aber am Ende sind die Eigenschaften des Stromversorgungsnetzes definiert duch das Zusammenspiel von&lt;br /&gt;
&lt;br /&gt;
* dem FPGA und dessen Leistungsaufnahme, welche von der Schaltfrequenz abhängt&lt;br /&gt;
* dem Layout der Platine mit der Platzierung der verschiedenen Kondensatoren&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit zur Messung der Qualität des Stromversorgungsnetzwerkes ist die Nutzung eines Netzwerkanalysators. Dafür benötigt man eine Platine, welche nur mit den passiven Komponenten bestückt ist. Dabei wird ein Testsignal in das Netzwerk eingespeist (meist an Stelle des Spannungsreglers) und an einer anderen Stelle gemessen (meist an Stelle der ICs). Der Netzwerkanalysator variiert dann die Frequenz und zeichnet eine Kurve des Widerstand über die Frequenz auf. Diese Methode hat einige Nachteile.&lt;br /&gt;
&lt;br /&gt;
*Man braucht einen teuren Netzwerkanalysator&lt;br /&gt;
*Man benötigt eine zusätzliches Board, welches nur mit den Kondensatoren bestückt ist, welches nicht immer verfügbar ist&lt;br /&gt;
*Die Messung spiegelt nicht die wahren Bedingungen wieder, weil alle ICs und aktiven Teile fehlen. Ausserdem sind nur Punkt zu Punkt Messungen möglich, welche das reale Verhalten nicht korrekt wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Die Methode in diesem Artikel versucht, die meisten Nachteile zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
== Ein direkter Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Da wir hier über FPGAs reden, haben wir die Möglichkeit, &#039;&#039;&#039;jede&#039;&#039;&#039; beliebige digitale Funktion hineinzuprogrammieren. Also sollten wir eine digitale Funktion entwerfen, welche dem schlimmstmöglichen Fall der Belastung der Stromversorgung entspricht. Aus der Theorie der linearen Netzwerke wissen wir, dass der Frequenzgang eines linearen Systems aus der Sprungantwort am Eingang und der Reaktion am Ausgang gemessen werden kann. Für das Stromversorgungsnetzwerk funktioniert das sogar wenn es nicht vollständig linear ist, da wir ja die reale Reaktion auf konstante Last und Lastsprünge messen wollen. Was ist nun der schlimmste Belastungsfall für die Stromversorgung? Da fast alle ICs auf CMOS-Technologie beruhen, wird die meiste Leistung umgesetzt, wenn Signalnetze ihren Pegel wechseln. Bei einem FPGA heißt das, dass alle [[FlipFlop]]s ihren Pegel gleichzeitig wechseln und dabei große Signalnetze treiben (parasitäre Kapazität). Also entwerfen wir die folgende Schaltung. &lt;br /&gt;
&lt;br /&gt;
[[bild:Schematic.gif|thumb|left|600px|Logik für Lasttest]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
Der Kern besteht aus einer Matrix aus 30x50 FlipFlops, wobei jeweils 50 FlipFlops aus einem Puffer-FlipFlop gespeist werden, um die Ausgangslast relativ niedrig zu halten und damit eine hohe Taktfrequenz zu erreichen. Um etwas kombinatorische Logik zu erzeugen und um die HDL Compiler davon abzuhalten, die FlipFlops wegzuoptimieren, verbinden wir alle FlipFlops über ein gigantisches ODER-Gatter und leiten den Ausgang auf ein IO-Pad. Dieser Ausgang wird aber nicht weiter genutzt. Dann haben wir noch einen 16-Bit  Zähler und etwas Steuerlogik, welche das Toggle-FlipFlop gemäß folgender Tabelle steuert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Steuerung der Testlogik&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! sel&amp;lt;1&amp;gt; || sel&amp;lt;0&amp;gt; || Modus&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || inaktiv&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || konstante Umschaltung&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || Burstbetrieb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VHDL Code ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Code synthetisiert wird, muss die Option &amp;quot;remove duplicate registers&amp;quot; in der Synthesesoftware ausgeschaltet werden.&lt;br /&gt;
&amp;lt;VHDL&amp;gt;&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity power is&lt;br /&gt;
    Port ( clk_in  : in std_logic;                      -- clock input&lt;br /&gt;
           sel     : in std_logic_vector(1 downto 0);   -- select modulation ON/OFF&lt;br /&gt;
           gnd     : out std_logic_vector(5 downto 0);  -- artificial gnd&lt;br /&gt;
           mod_out : out std_logic;                     -- modulation signal&lt;br /&gt;
           reset   : in std_logic;                      -- reset for DLL&lt;br /&gt;
           dummy   : out std_logic);                    -- dummy out, to fool the synthesizer&lt;br /&gt;
           &lt;br /&gt;
end power;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of power is&lt;br /&gt;
&lt;br /&gt;
COMPONENT row&lt;br /&gt;
    PORT(&lt;br /&gt;
        clk  : IN std_logic;&lt;br /&gt;
        data : IN std_logic;    &lt;br /&gt;
        dout : OUT std_logic&lt;br /&gt;
        );&lt;br /&gt;
END COMPONENT;&lt;br /&gt;
&lt;br /&gt;
-- DLL (Delay Locked Loop), a Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component CLKDLL&lt;br /&gt;
    port (  &lt;br /&gt;
        CLKIN   : in    std_logic;&lt;br /&gt;
        CLKFB   : in    std_logic;&lt;br /&gt;
        RST     : in    std_logic;&lt;br /&gt;
        CLK0    : out   std_logic;&lt;br /&gt;
        CLK90   : out   std_logic;&lt;br /&gt;
        CLK180  : out   std_logic;&lt;br /&gt;
        CLK270  : out   std_logic;&lt;br /&gt;
        CLK2X   : out   std_logic;&lt;br /&gt;
        CLKDV   : out   std_logic;&lt;br /&gt;
        LOCKED  : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- BUFG (Global Clock buffer), a Virtex  primitive&lt;br /&gt;
&lt;br /&gt;
component BUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- IBUFG (Global Clock input buffer ), aa Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component IBUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
component SRL16     -- virtex primitive&lt;br /&gt;
  port (&lt;br /&gt;
        D    : in std_logic;        &lt;br /&gt;
        CLK  : in std_logic;&lt;br /&gt;
        A0   : in std_logic;&lt;br /&gt;
        A1   : in std_logic;&lt;br /&gt;
        A2   : in std_logic;&lt;br /&gt;
        A3   : in std_logic;        &lt;br /&gt;
        Q    : out std_logic&lt;br /&gt;
       ); &lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
constant rows: integer:=30;&lt;br /&gt;
&lt;br /&gt;
type flop_array is array (rows-1 downto 0) of std_logic_vector(49 downto 0);&lt;br /&gt;
&lt;br /&gt;
signal toggle   : std_logic;                            -- a toggle flipflop&lt;br /&gt;
signal ff_ar    : flop_array;&lt;br /&gt;
signal drive_ar : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal dout_ar  : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal or_ar    : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal cnt      : std_logic_vector (15 downto 0);       -- modulation divider&lt;br /&gt;
&lt;br /&gt;
signal CLKIN_w, RESET_w, CLK2X_dll, CLK2X_g, CLK4X_dll, CLK4X_g, CLK8X_dll, CLK8X_g: std_logic;&lt;br /&gt;
signal LOCKED2X, LOCKED2X_delay, RESET4X, RESET8X, LOCKED4X, LOCKED4X_delay, LOCKED8X : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal logic1,clk : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal clk2x,clk4x,clk8x, clkmux: std_logic;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- use two DLL to get 147 MHz&lt;br /&gt;
&lt;br /&gt;
logic1&amp;lt;=&#039;1&#039;;&lt;br /&gt;
&lt;br /&gt;
clkpad : IBUFG  port map (I=&amp;gt;CLK_IN, O=&amp;gt;CLKIN_w);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dll2x  : CLKDLL port map (CLKIN=&amp;gt;CLKIN_w,   CLKFB=&amp;gt;CLK2X_g, RST=&amp;gt;RESET,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK2X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED2X);&lt;br /&gt;
&lt;br /&gt;
clk2xg : BUFG   port map (I=&amp;gt;CLK2X_dll,   O=&amp;gt;CLK2X_g);&lt;br /&gt;
&lt;br /&gt;
rstsrl : SRL16  port map (D=&amp;gt;LOCKED2X, CLK=&amp;gt;CLK2X_g, Q=&amp;gt;LOCKED2X_delay,&lt;br /&gt;
                          A3=&amp;gt;logic1, A2=&amp;gt;logic1, A1=&amp;gt;logic1, A0=&amp;gt;logic1);&lt;br /&gt;
&lt;br /&gt;
RESET4X &amp;lt;= not LOCKED2X_delay;&lt;br /&gt;
&lt;br /&gt;
dll4x  : CLKDLL port map (CLKIN=&amp;gt;CLK2X_g,  CLKFB=&amp;gt;CLK4X_g, RST=&amp;gt;RESET4X,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK4X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED4X);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clk4xg : BUFG   port map (I=&amp;gt;CLK4X_dll,  O=&amp;gt;CLK4X_g);&lt;br /&gt;
&lt;br /&gt;
clk&amp;lt;=clk4x_g;&lt;br /&gt;
&lt;br /&gt;
-- the toggeling array&lt;br /&gt;
&lt;br /&gt;
l_rows: for i in 0 to rows-1 generate&lt;br /&gt;
    Inst_row: row PORT MAP(&lt;br /&gt;
        clk  =&amp;gt; clk,&lt;br /&gt;
        data =&amp;gt; drive_ar(i),&lt;br /&gt;
        dout =&amp;gt; dout_ar(i)&lt;br /&gt;
    );&lt;br /&gt;
  end generate;&lt;br /&gt;
&lt;br /&gt;
-- combine all douts via a BIG or-gate&lt;br /&gt;
&lt;br /&gt;
  process(dout_ar)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l_or: for i in 0 to rows-1 loop&lt;br /&gt;
      tmp:=tmp or dout_ar(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dummy&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- prescaler&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      cnt&amp;lt;=cnt+1;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- toggle fliplop and distribution&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      case sel is&lt;br /&gt;
        when &amp;quot;00&amp;quot;       =&amp;gt; toggle &amp;lt;= &#039;0&#039;;&lt;br /&gt;
        when &amp;quot;01&amp;quot;       =&amp;gt; toggle &amp;lt;= not toggle;&lt;br /&gt;
        when &amp;quot;10&amp;quot;       =&amp;gt; if cnt(15)=&#039;1&#039; then toggle &amp;lt;= not toggle; else toggle&amp;lt;=&#039;0&#039;; end if;&lt;br /&gt;
        when others     =&amp;gt; null;&lt;br /&gt;
      end case;&lt;br /&gt;
      drive_ar&amp;lt;=(others=&amp;gt;toggle);&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
gnd&amp;lt;=(others=&amp;gt;&#039;0&#039;);&lt;br /&gt;
mod_out&amp;lt;=cnt(15);&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity row is&lt;br /&gt;
    Port ( clk  : in std_logic;&lt;br /&gt;
           data : in std_logic;&lt;br /&gt;
           dout : out std_logic);&lt;br /&gt;
end row;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of row is&lt;br /&gt;
&lt;br /&gt;
signal my_array: std_logic_vector (49 downto 0);&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- generate 50 FFs with clock enable&lt;br /&gt;
&lt;br /&gt;
  process (clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clK&#039;event then&lt;br /&gt;
      my_array&amp;lt;=(others=&amp;gt;data);     &lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- combine all into a BIG OR&lt;br /&gt;
&lt;br /&gt;
  process(my_array)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l: for i in 0 to 49 loop&lt;br /&gt;
      tmp:=tmp or my_array(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dout&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&amp;lt;/VHDL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Messungen ==&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Messungen wurden mit einem Spartan-II Demoboard von Insight Electronics durchgeführt. Es ist mit einem XC2S100-5 im PQ208 Gehäuse bestückt. Es nutzt eine Kernspannung von 2,5V und eine IO-Spannung von 3,3V. Beide Spannungen werden durch Linearregler geliefert. Ein 36.864 MHz Oszillator wurde hinzugefügt. Für die Messung wurde der Takt mittels DLL vervierfacht auf 147 MHz. Diese hohe Frequenz wurde gewählt, um die Effekte gut demonstrieren zu können. In einer praktischen Anwendung wird man diesen Test nur mit der normalen Frequenz betreiben, welche auch in der realen Anwendung genutzt wird. Das Board wird durch ein starkes Netzteil versorgt.&lt;br /&gt;
&lt;br /&gt;
Die Kernspannung wird mit einem Stück Koaxialkabel vom Typ RG 174 gemessen, welches direkt an ein VCC/GND Pin des FPGAs angelötet ist. Das [[Oszilloskop]] ist auf 50 Ohm Eingangsimpedanz mit AC-Kopplung geschaltet. Wir sind nicht an der absoluten Größe der Versorgungsspannung interessiert sind, nur an Wechselanteilen, welche hoffentlich deutlich kleiner sind. Mit AC-Kopplung kann man einen deutlich kleineren Messbereich für die vertikale Auflösung verwenden. Dieser Aufbau hat eine gute Abschirmung gegen Störungen und eine sehr hohe Bandbreite zur Messung der hochfrequenten Störungen.&lt;br /&gt;
&lt;br /&gt;
Während der Messung wurde festgestellt, dass es zwei verschiedene [[Wellenwiderstand | Terminierungsmethoden]] in Oszilloskopen gibt. Das alte Tektronix CSA 404 mit einem 11A34 Verstärker nutzt Terminierung 1 am 50 Ohm Eingang. Daraus ergibt sich eine untere Grenzfrequenz des Hochpasses von ~10 Hz. Das zweite Oszilloskop, ein Tektronix TDS 3034, mit welchem die Screenshots gemacht wurden, nutz Terminierung 2, welche in einer unteren Grenzfrequenz von ~200 kHz resultiert. Das ist nicht akzeptabel für die Messung der Sprungantwort, weswegen die 1 M&amp;amp;Omega; Eingangsterminierung benutzt wurde. Das ist OK für die Messung niedriger Frequenzen (&amp;lt;10 MHz). Zur Messung der Hochfrequenzstörungen (Messung 4) ist die Grenzfrequenz von 200 kHz kein Problem.&lt;br /&gt;
&lt;br /&gt;
[[bild:Term1.gif|framed|left| Terminierung 1 : 50&amp;amp;Omega; vor dem Koppelkondensator, f_g 10 Hz ]].&lt;br /&gt;
[[bild:Term2.gif|framed|left| Terminierung 2 : 50&amp;amp;Omega; nach dem Koppelkondensator, f_g 200kHz]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Messung 1 - FPGA unkonfiguriert ==&lt;br /&gt;
&lt;br /&gt;
Bei diesem Schritt können wir die Leistungsaufnahme in Ruhezustand messen, welche größtenteils durch Leckströme verursacht wird. Zu beachten ist auch, dass unser Oszilloskop mit Eingangsschaltung 1 viel Strom zieht (50Ω @ 2,5V = 50mA). Wir können mittles Multimeter messen, ob unsere Spannungsregler die korrekte Spannung liefern. Wir schreiben den aktuellen Stromverbrauch und Kernspannung auf. Dabei sind ist der Stromverbrauch der Eingangstermninierung nicht enthalten, weil für alle Messungen das zweite Oszilloskop mit Schaltung 2 verwendet wurde.&lt;br /&gt;
&lt;br /&gt;
== Messung 2 - FPGA mit leerer Logik == &lt;br /&gt;
&lt;br /&gt;
Ein Design mit einer einfachen Schleife von einem Eingang auf einen Ausgang ist jetzt in das FPGA geladen. Nach der Konfiguration &#039;&#039;&#039;sinkt&#039;&#039;&#039; der Stromverbrauch, weil die Konfigurationslogik im FPGA abgeschaltet wurde, welche permanant den Konfigurationsspeicher löscht. Die Leistungsaufnahme dieser Minimalschaltung wird als Kalibrierungspunkt für alle nachfolgenden Messungen verwendet.&lt;br /&gt;
&lt;br /&gt;
== Messung 3 - FPGA konfiguriert ohne schaltende Logik ==&lt;br /&gt;
&lt;br /&gt;
Jetzt steigt die Leistungsaufnahme deutlich. Auf den ersten Blick ist das unerwartet, denn im FPGA werden keinerlei Signale geschaltet , die FlipFlips laden immer den gleichen Wert. Aber das ist nicht ganz korrekt. Das Taktnetzwerk läuft auf voller Leistung. Daran erkennt man, dass die Taktverteilung signifikant Leistung benötigt. Darum nutzen [[Ultra low power | stromsparende ICs]] eine saubere Methode zur [[Taktung FPGA/CPLD | Taktabschaltung (clock gating)]], um die Leitungsaufnahme zu verringern. Aber das muss auf sichere Weise erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Messung 4 - FPGA mit dauerhaft schaltenden Signalen ==&lt;br /&gt;
&lt;br /&gt;
Jetzt starten wir ein Feurwerk! Die Stromversorgung erfährt jetzt ihren schlimmsten Albtraum. 1500 FlipFlops die gleichzeitig mit 147 MHz umschalten (togglen)&lt;br /&gt;
ist kein Kindergeburtstag! Schau auf den Strommesser! Das FPGA wird schnell sehr heiß. Aber was sehen wir auf dem Oszilloskop? Da die Stromaufnahme konstant ist, können wir nur Hochfrequenzstörungen durch die schaltende Logik sehen, welche durch unzureichende Entkopplung der Keramikkondensatoren verursacht werden könnte. Mit einem schnellen Oszilloskop (1GHz++) und schlechten Versorgungslagen und Keramikkondensatoren, könnte man die &#039;&#039;&#039;wirklich&#039;&#039;&#039; hochfrequenten Störungen sehen. Mit dem 1 GHz Oszilloskop sieht man in diesem Fall aber nichts, eben weil die Kondensatoren und Stromversorgungslagen gut funktionieren. Mit langsameren Oszilloskopen (300MHz oder weniger) sieht man nur den Effekt der Kondensatoren. Hier können wir auch die Kernspannung unter Volllast messen. Aber man muss sicherstellen, die Spannung zu messen, welche wirklich am FPGA ankommt, d.h. man muss &#039;&#039;&#039;direkt&#039;&#039;&#039; an den Pins des FPGA messen, nicht irgendwo auf dem Board! Denn das Stromversorgungsnetz hat einen endlichen Widerstand, welcher einen Spannungsabfall vom Spannungsregler bis zum FPGA verursacht. In einem guten Entwurf sollte der Spannungsabfall kleiner als 1% der Nennspannung sein.&lt;br /&gt;
&lt;br /&gt;
== Messung 5 - Burstbetrieb ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß erreichen wir den interessantesten Punkt. Mit dem 16-Bit Zähler wird das Umschalten des FlipFlop-Arrays mit einer niedrigen Frequenz moduliert, die Modulationsfrequenz ist 1/65356 der Taktfrequenz, hier ~2,2 kHz. Das ist die Sprungfunktion, welche in den Abschnitten weiter oben genannt wurde. Und wir sehen die Reaktion des Stromversorgungsnetzes. Wenn es ideal wäre, würden wir nur eine gerade Linie auf dem Oszilloskop sehen. Aber da es numal keine Idealfälle gibt, sehen wir Überschwinger und einen verbleibenden Offset. Das nachfolgende Bild zeigt das deutlich. Der blaue Kanal ist das Modulationssignal des 16-Bit Zählers (MSB), der gelbe Kanal die Kernspannung.&lt;br /&gt;
&lt;br /&gt;
[[bild:01.gif|framed|left| Sprungantwort mit 10µF]]&lt;br /&gt;
[[bild:02.gif|framed|left| Sprungantwort mit 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:03.gif|framed|left| Abschaltflanke 10µF]]&lt;br /&gt;
[[bild:04.gif|framed|left| Abschaltflanke 110µF]]&lt;br /&gt;
[[bild:05.gif|framed|left| Zoom, Abschaltflanke 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:06.gif|framed|left| Anschaltflanke 10µF]]&lt;br /&gt;
[[bild:07.gif|framed|left| Anschaltflanke 110µF]]&lt;br /&gt;
[[bild:08.gif|framed|left| Zoom, Anschaltflanke 110µF]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Erklärung ==&lt;br /&gt;
&lt;br /&gt;
Der Unterschwinger beim Einschalten wird verursacht durch unzureichende Entkopplung im mittleren Frequenzbereich. Der sprunghaft steigende Stromverbrauch kann nicht von den Mittelfrequenzkondensatoren geliefert werden (zu wenig Kapazität), auch nicht vom Spannungsregler (er ist zu langsam dafür). Das originale Demoboard ist nur mit einem 10µF Tantalkondensator hinter dem Spannungsregler bestückt, welche für so eine große Last viel zu klein ist. Durch Ergänzung eines 100µF Kondensatores kann der Unterschwinger deutlich verkleinert werden.&lt;br /&gt;
&lt;br /&gt;
Der Überschwinger beim Abschalten ist ähnlich, aber hier ist der Spannungsregler ist zu langsam, den Ausgangsstrom herunterzuregeln. Der überschüssige Strom (Ladung) wird in den Mittelfrequenzkondensatoren gespeichert, aber da dieser nur 10µF hat, steigt die Spannung schnell an. Ein einfacher Vergleich. Es ist genauso wie wenn man mit einem kleinen Fass das Regenwasser von einem großen Dach auffangen will, das Faß füllt sich schnell.&lt;br /&gt;
&lt;br /&gt;
Was verursacht den verbliebenden Offset? Nun, das ist der Gleichstromwiderstand des Stromversorgungsnetzwerks vom Spannungsregler (wo dieser die Ausgangsspanung misst und regelt) bis zum VCC-Pin des FPGAs. Die Stromaufnahme des FPGAs schwankt zwischen Messung 3 (kein Umschalten) und Messung 4 (konstantes Umschalten). Auf dem Oszilloskop sehen wir eine Spannungsdifferenz von ~70mV bei einer Stromdifferenz von 912 mA, woraus ca. 76m&amp;amp;Omega; Widerstand resultieren. Die Schlußfolgerung daraus ist, dass die Verbindung zwischen dem Punkt der Spannungsmessung durch den Spannungsregler und den VCC-Pins einen möglichst niedrigen Widerstand haben muss. Das beste sind komplette Lagen für die Stromversorgung (Power Planes), aber kurze, dicke Leitungen sind meist auch OK. Es gibt auch Spannungsregler mit extra Messeingängen, welche den Spannungsabfall über der Zuleitung kompensieren können, weil sie direkt am Verbraucher die Spannung messen. Als weitere Möglichkeit werden heutzutage meist sog. Point of Load Module eingesetzt. Das sind Spannungsregler (Schaltregler), welche direkt am zu versorgenden FPGA sitzen und mit einer hohen Spannung von 5..48V über das Board versorgt werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Messergebnisse&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Messung || FPGA-Inhalt                || Icc [mA] || Vcc [V] || P [mW]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || keine Konfiguration              || 80 || 2.501 || 200&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Minimallogik                     || 40 || 2.502 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Testlogik, inaktiv               || 235 || 2.487 || 584&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Testlogik, konstantes Umschalten || 1147 || 2.433 || 2790&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Testlogik, Burstbetrieb           || 690 || 2.464 || 1700&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wurde eine einfache aber leistungsfähige Methode zur Messung des Frequenzgangs des Stromversorgungsnetzwerks für FPGAs gezeigt. Die Messung kann deutlich einfacher und mit leicht verfügbaren Messgeräten unter realistischeren Bedingungen durchgeführt werden als eine klassische Messung mit einem Netzwerkanalysator. Es läßt viel Raum für Experimente mit der Entkopplung der Stromversorgung in Bezug auf die Platzierung und Werte der Kondensatoren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56269</id>
		<title>Stromversorgung für FPGAs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56269"/>
		<updated>2011-04-04T05:43:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Messungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht == &lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll eine kurze Erklärung zum Entwurfsproblem von Stromversorgungen für Hochleistungs-[[FPGA]]s gegeben werden. Ein neuer Ansatz zur Messung des Frequenzgangs wird dargestellt. Praktische Messungen werden gezeigt.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs werden immer mehr Bestandteil moderner Elektronik. Die Bausteine werden größer, schneller und leistungsstärker mit jedem Tag. Und so steigt auch die Leistungsaufnahme. Obwohl die Leistung pro Gatter sich durch bessere Technologie und kleinere Geometrien verringert, steigt die Taktfrequenz und die Anzahl der Gatter pro Bauteil. Mit steigender Schaltgeschwindigkeit wird die Stromversorgung zu einem kritischen Teil im Systementwurf. Das Stromversorgungsnetz muss eine Quelle mit niedriger Impedanz über einen sehr weiten Frequenzbereich sein. Anderenfalls könnnen Überschwinger, Spannungsabfall oder Störpulse auf VCC/GND die Funktion des FPGAs stören, welche durch den schnell wechselnden Leistungsbedarf des FPGAs verursacht wird.&lt;br /&gt;
&lt;br /&gt;
== Breitbandentkopplung ist Teamwork ==&lt;br /&gt;
&lt;br /&gt;
Der Spannungsregler muss die Gleichstromkomponente für das Stromversorgungsnetzwerk liefern. Bei maximaler Leistung und Umgebungstemperatur muss er immer noch sauber funktionieren ohne zu überhitzen, Spannungseinbrüche etc. Seine Aufgabe ist es, auf niederfrequente Lastsprünge zu reagieren (ca. 0..30kHz).&lt;br /&gt;
&lt;br /&gt;
Im mittleren Frequenzbereich kann der Spannungsregler nicht mehr reagieren, er ist zu langsam. Der Strom muss dann von großen Elektrolytkondensatoren geliefert werden. Diese Kondensatoren können bis einige MHz Strom liefern, danach begrenzen der parasitäre Widerstand (ESR, engl. effective series resistance) bzw. die parasitäre Induktivität (ESL, engl. effective series inductance) die Stromlieferfähigkeit des Kondensators und machen ihn irgendwann bei höheren Frequenzen nutzlos.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt die Zeit der kleinen Keramikkondensatoren, typisch 10 oder 100nF. Sie gibt es in kleinen [[SMD]]-Gehäusen wie 0603 und kleiner mit sehr wenig parasitärer Induktivität. Sie können Strom bis einige hundert MHz liefern und sind damit eine niederohmige Quelle für Hochfrequenzströme.&lt;br /&gt;
&lt;br /&gt;
Aber für die &#039;&#039;&#039;wirklich&#039;&#039;&#039; schnell schaltenden ICs sind auch diese Keramikkondensatoren nicht ausreichend, um das Stromversorgungsnetzwerk ausreichend zu entkoppeln. Hier braucht man die Kapazität der Stromversorgungsflächen, welche duch VCC- und Masseflächen in mehrlagigen Platinen gebildet wird. Um ein Maximum an Kapazität zu erreichen sollte ein dünnes Dielektrikum mit einer hohen Dielektrizitätskonstante und niedrigen Verlusten benutzen. Außerdem sollte man ein VIA für jedes VCC/GND Pin benutzen, um die parasitären Induktivitäten zu minimieren, nicht ein VIA für mehrere Pins! [[IC-Gehäuseformen#BGA | BGA-Gehäuse]] bieten zusätzlich kürzere Verbindungen vom eigentlichen IC zur Platine, sie sind aber schwieriger zu handhaben (Layout und [[SMD Löten | Löten]]).&lt;br /&gt;
&lt;br /&gt;
== Der klassische Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Theorien und Application Notes zum Thema Entkopplung von Stromversorgungen. Einige nehmen einfach die Brechstange und bauen einen Friedhof für unzählige Kondensatoren, andere sind schlauer. Es gibt auch sehr viele Simulationen zu dem Thema. Aber am Ende sind die Eigenschaften des Stromversorgungsnetzes definiert duch das Zusammenspiel von&lt;br /&gt;
&lt;br /&gt;
* dem FPGA und dessen Leistungsaufnahme, welche von der Schaltfrequenz abhängt&lt;br /&gt;
* dem Layout der Platine mit der Platzierung der verschiedenen Kondensatoren&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit zur Messung der Qualität des Stromversorgungsnetzwerkes ist die Nutzung eines Netzwerkanalysators. Dafür benötigt man eine Platine, welche nur mit den passiven Komponenten bestückt ist. Dabei wird ein Testsignal in das Netzwerk eingespeist (meist an Stelle des Spannungsreglers) und an einer anderen Stelle gemessen (meist an Stelle der ICs). Der Netzwerkanalysator variiert dann die Frequenz und zeichnet eine Kurve des Widerstand über die Frequenz auf. Diese Methode hat einige Nachteile.&lt;br /&gt;
&lt;br /&gt;
*Man braucht einen teuren Netzwerkanalysator&lt;br /&gt;
*Man benötigt eine zusätzliches Board, welches nur mit den Kondensatoren bestückt ist, welches nicht immer verfügbar ist&lt;br /&gt;
*Die Messung spiegelt nicht die wahren Bedingungen wieder, weil alle ICs und aktiven Teile fehlen. Ausserdem sind nur Punkt zu Punkt Messungen möglich, welche das reale Verhalten nicht korrekt wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Die Methode in diesem Artikel versucht, die meisten Nachteile zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
== Ein direkter Ansatz ==&lt;br /&gt;
&lt;br /&gt;
Da wir hier über FPGAs reden, haben wir die Möglichkeit, &#039;&#039;&#039;jede&#039;&#039;&#039; beliebige digitale Funktion hineinzuprogrammieren. Also sollten wir eine digitale Funktion entwerfen, welche dem schlimmstmöglichen Fall der Belastung der Stromversorgung entspricht. Aus der Theorie der linearen Netzwerke wissen wir, dass der Frequenzgang eines linearen Systems aus der Sprungantwort am Eingang und der Reaktion am Ausgang gemessen werden kann. Für das Stromversorgungsnetzwerk funktioniert das sogar wenn es nicht vollständig linear ist, da wir ja die reale Reaktion auf konstante Last und Lastsprünge messen wollen. Was ist nun der schlimmste Belastungsfall für die Stromversorgung? Da fast alle ICs auf CMOS-Technologie beruhen, wird die meiste Leistung umgesetzt, wenn Signalnetze ihren Pegel wechseln. Bei einem FPGA heißt das, dass alle [[FlipFlop]]s ihren Pegel gleichzeitig wechseln und dabei große Signalnetze treiben (parasitäre Kapazität). Also entwerfen wir die folgende Schaltung. &lt;br /&gt;
&lt;br /&gt;
[[bild:Schematic.gif|thumb|left|600px|Logik für Lasttest]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
Der Kern besteht aus einer Matrix aus 30x50 FlipFlops, wobei jeweils 50 FlipFlops aus einem Puffer-FlipFlop gespeist werden, um die Ausgangslast relativ niedrig zu halten und damit eine hohe Taktfrequenz zu erreichen. Um etwas kombinatorische Logik zu erzeugen und um die HDL Compiler davon abzuhalten, die FlipFlops wegzuoptimieren, verbinden wir alle FlipFlops über ein gigantisches ODER-Gatter und leiten den Ausgang auf ein IO-Pad. Dieser Ausgang wird aber nicht weiter genutzt. Dann haben wir noch einen 16-Bit  Zähler und etwas Steuerlogik, welche das Toggle-FlipFlop gemäß folgender Tabelle steuert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Steuerung der Testlogik&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! sel&amp;lt;1&amp;gt; || sel&amp;lt;0&amp;gt; || Modus&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || inaktiv&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || konstante Umschaltung&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || Burstbetrieb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VHDL Code ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Code synthetisiert wird, muss die Option &amp;quot;remove duplicate registers&amp;quot; in der Synthesesoftware ausgeschaltet werden.&lt;br /&gt;
&amp;lt;VHDL&amp;gt;&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity power is&lt;br /&gt;
    Port ( clk_in  : in std_logic;                      -- clock input&lt;br /&gt;
           sel     : in std_logic_vector(1 downto 0);   -- select modulation ON/OFF&lt;br /&gt;
           gnd     : out std_logic_vector(5 downto 0);  -- artificial gnd&lt;br /&gt;
           mod_out : out std_logic;                     -- modulation signal&lt;br /&gt;
           reset   : in std_logic;                      -- reset for DLL&lt;br /&gt;
           dummy   : out std_logic);                    -- dummy out, to fool the synthesizer&lt;br /&gt;
           &lt;br /&gt;
end power;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of power is&lt;br /&gt;
&lt;br /&gt;
COMPONENT row&lt;br /&gt;
    PORT(&lt;br /&gt;
        clk  : IN std_logic;&lt;br /&gt;
        data : IN std_logic;    &lt;br /&gt;
        dout : OUT std_logic&lt;br /&gt;
        );&lt;br /&gt;
END COMPONENT;&lt;br /&gt;
&lt;br /&gt;
-- DLL (Delay Locked Loop), a Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component CLKDLL&lt;br /&gt;
    port (  &lt;br /&gt;
        CLKIN   : in    std_logic;&lt;br /&gt;
        CLKFB   : in    std_logic;&lt;br /&gt;
        RST     : in    std_logic;&lt;br /&gt;
        CLK0    : out   std_logic;&lt;br /&gt;
        CLK90   : out   std_logic;&lt;br /&gt;
        CLK180  : out   std_logic;&lt;br /&gt;
        CLK270  : out   std_logic;&lt;br /&gt;
        CLK2X   : out   std_logic;&lt;br /&gt;
        CLKDV   : out   std_logic;&lt;br /&gt;
        LOCKED  : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- BUFG (Global Clock buffer), a Virtex  primitive&lt;br /&gt;
&lt;br /&gt;
component BUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
-- IBUFG (Global Clock input buffer ), aa Virtex primitive&lt;br /&gt;
&lt;br /&gt;
component IBUFG&lt;br /&gt;
    port (  I   : in    std_logic;&lt;br /&gt;
            O   : out   std_logic);&lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
component SRL16     -- virtex primitive&lt;br /&gt;
  port (&lt;br /&gt;
        D    : in std_logic;        &lt;br /&gt;
        CLK  : in std_logic;&lt;br /&gt;
        A0   : in std_logic;&lt;br /&gt;
        A1   : in std_logic;&lt;br /&gt;
        A2   : in std_logic;&lt;br /&gt;
        A3   : in std_logic;        &lt;br /&gt;
        Q    : out std_logic&lt;br /&gt;
       ); &lt;br /&gt;
end component;&lt;br /&gt;
&lt;br /&gt;
constant rows: integer:=30;&lt;br /&gt;
&lt;br /&gt;
type flop_array is array (rows-1 downto 0) of std_logic_vector(49 downto 0);&lt;br /&gt;
&lt;br /&gt;
signal toggle   : std_logic;                            -- a toggle flipflop&lt;br /&gt;
signal ff_ar    : flop_array;&lt;br /&gt;
signal drive_ar : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal dout_ar  : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal or_ar    : std_logic_vector (rows-1 downto 0);   -- driver array for toggeling rows&lt;br /&gt;
signal cnt      : std_logic_vector (15 downto 0);       -- modulation divider&lt;br /&gt;
&lt;br /&gt;
signal CLKIN_w, RESET_w, CLK2X_dll, CLK2X_g, CLK4X_dll, CLK4X_g, CLK8X_dll, CLK8X_g: std_logic;&lt;br /&gt;
signal LOCKED2X, LOCKED2X_delay, RESET4X, RESET8X, LOCKED4X, LOCKED4X_delay, LOCKED8X : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal logic1,clk : std_logic;&lt;br /&gt;
&lt;br /&gt;
signal clk2x,clk4x,clk8x, clkmux: std_logic;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- use two DLL to get 147 MHz&lt;br /&gt;
&lt;br /&gt;
logic1&amp;lt;=&#039;1&#039;;&lt;br /&gt;
&lt;br /&gt;
clkpad : IBUFG  port map (I=&amp;gt;CLK_IN, O=&amp;gt;CLKIN_w);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dll2x  : CLKDLL port map (CLKIN=&amp;gt;CLKIN_w,   CLKFB=&amp;gt;CLK2X_g, RST=&amp;gt;RESET,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK2X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED2X);&lt;br /&gt;
&lt;br /&gt;
clk2xg : BUFG   port map (I=&amp;gt;CLK2X_dll,   O=&amp;gt;CLK2X_g);&lt;br /&gt;
&lt;br /&gt;
rstsrl : SRL16  port map (D=&amp;gt;LOCKED2X, CLK=&amp;gt;CLK2X_g, Q=&amp;gt;LOCKED2X_delay,&lt;br /&gt;
                          A3=&amp;gt;logic1, A2=&amp;gt;logic1, A1=&amp;gt;logic1, A0=&amp;gt;logic1);&lt;br /&gt;
&lt;br /&gt;
RESET4X &amp;lt;= not LOCKED2X_delay;&lt;br /&gt;
&lt;br /&gt;
dll4x  : CLKDLL port map (CLKIN=&amp;gt;CLK2X_g,  CLKFB=&amp;gt;CLK4X_g, RST=&amp;gt;RESET4X,&lt;br /&gt;
                          CLK0=&amp;gt;open,   CLK90=&amp;gt;open, CLK180=&amp;gt;open, CLK270=&amp;gt;open,&lt;br /&gt;
                          CLK2X=&amp;gt;CLK4X_dll, CLKDV=&amp;gt;open, LOCKED=&amp;gt;LOCKED4X);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clk4xg : BUFG   port map (I=&amp;gt;CLK4X_dll,  O=&amp;gt;CLK4X_g);&lt;br /&gt;
&lt;br /&gt;
clk&amp;lt;=clk4x_g;&lt;br /&gt;
&lt;br /&gt;
-- the toggeling array&lt;br /&gt;
&lt;br /&gt;
l_rows: for i in 0 to rows-1 generate&lt;br /&gt;
    Inst_row: row PORT MAP(&lt;br /&gt;
        clk  =&amp;gt; clk,&lt;br /&gt;
        data =&amp;gt; drive_ar(i),&lt;br /&gt;
        dout =&amp;gt; dout_ar(i)&lt;br /&gt;
    );&lt;br /&gt;
  end generate;&lt;br /&gt;
&lt;br /&gt;
-- combine all douts via a BIG or-gate&lt;br /&gt;
&lt;br /&gt;
  process(dout_ar)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l_or: for i in 0 to rows-1 loop&lt;br /&gt;
      tmp:=tmp or dout_ar(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dummy&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- prescaler&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      cnt&amp;lt;=cnt+1;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- toggle fliplop and distribution&lt;br /&gt;
&lt;br /&gt;
  process(clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clk&#039;event then&lt;br /&gt;
      case sel is&lt;br /&gt;
        when &amp;quot;00&amp;quot;       =&amp;gt; toggle &amp;lt;= &#039;0&#039;;&lt;br /&gt;
        when &amp;quot;01&amp;quot;       =&amp;gt; toggle &amp;lt;= not toggle;&lt;br /&gt;
        when &amp;quot;10&amp;quot;       =&amp;gt; if cnt(15)=&#039;1&#039; then toggle &amp;lt;= not toggle; else toggle&amp;lt;=&#039;0&#039;; end if;&lt;br /&gt;
        when others     =&amp;gt; null;&lt;br /&gt;
      end case;&lt;br /&gt;
      drive_ar&amp;lt;=(others=&amp;gt;toggle);&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
gnd&amp;lt;=(others=&amp;gt;&#039;0&#039;);&lt;br /&gt;
mod_out&amp;lt;=cnt(15);&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
entity row is&lt;br /&gt;
    Port ( clk  : in std_logic;&lt;br /&gt;
           data : in std_logic;&lt;br /&gt;
           dout : out std_logic);&lt;br /&gt;
end row;&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of row is&lt;br /&gt;
&lt;br /&gt;
signal my_array: std_logic_vector (49 downto 0);&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
-- generate 50 FFs with clock enable&lt;br /&gt;
&lt;br /&gt;
  process (clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if clk=&#039;1&#039; and clK&#039;event then&lt;br /&gt;
      my_array&amp;lt;=(others=&amp;gt;data);     &lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
-- combine all into a BIG OR&lt;br /&gt;
&lt;br /&gt;
  process(my_array)&lt;br /&gt;
  variable tmp: std_logic;&lt;br /&gt;
  begin&lt;br /&gt;
    tmp:=&#039;0&#039;;&lt;br /&gt;
    l: for i in 0 to 49 loop&lt;br /&gt;
      tmp:=tmp or my_array(i);&lt;br /&gt;
    end loop;&lt;br /&gt;
    dout&amp;lt;=tmp;&lt;br /&gt;
  end process;&lt;br /&gt;
&lt;br /&gt;
end Behavioral;&lt;br /&gt;
&amp;lt;/VHDL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Messungen ==&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Messungen wurden mit einem Spartan-II Demoboard von Insight Electronics durchgeführt. Es ist mit einem XC2S100-5 im PQ208 Gehäuse bestückt. Es nutzt eine Kernspannung von 2,5V und eine IO-Spannung von 3,3V. Beide Spannungen werden durch Linearregler geliefert. Ein 36.864 MHz Oszillator wurde hinzugefügt. Für die Messung wurde der Takt mittels DLL vervierfacht auf 147 MHz. Diese hohe Frequenz wurde gewählt, um die Effekte gut demonstrieren zu können. In einer praktischen Anwendung wird man diesen Test nur mit der normalen Frequenz betreiben, welche auch in der realen Anwendung genutzt wird. Das Board wird durch ein starkes Netzteil versorgt.&lt;br /&gt;
&lt;br /&gt;
Die Kernspannung wird mit einem Stück Koaxialkabel vom Typ RG 174 gemessen, welches direkt an ein VCC/GND Pin des FPGAs angelötet ist. Das [[Oszilloskop]] ist auf 50 Ohm Eingangsimpedanz mit AC-Kopplung geschaltet. Wir sind nicht an der absoluten Größe der Versorgungsspannung interessiert sind, nur an Wechselanteilen, welche hoffentlich deutlich kleiner sind. Mit AC-Kopplung kann man einen deutlich kleineren Messbereich für die vertikale Auflösung verwenden. Dieser Aufbau hat eine gute Abschirmung gegen Störungen und eine sehr hohe Bandbreite zur Messung der hochfrequenten Störungen.&lt;br /&gt;
&lt;br /&gt;
Während der Messung wurde festgestellt, dass es zwei verschiedene [[Wellenwiderstand | Terminierungsmethoden]] in Oszilloskopen gibt. Das alte Tektronix CSA 404 mit einem 11A34 Verstärker nutzt Terminierung 1 am 50 Ohm Eingang. Daraus ergibt sich eine untere Grenzfrequenz des Hochpasses von ~10 Hz. Das zweite Oszilloskop, ein Tektronix TDS 3034, mit welchem die Screenshots gemacht wurden, nutz Terminierung 2, welche in einer unteren Grenzfrequenz von ~200 kHz resultiert. Das ist nicht akzeptabel für die Messung der Sprungantwort, weswegen die 1 M&amp;amp;Omega; Eingangsterminierung benutzt wurde. Das ist OK für die Messung niedriger Frequenzen (&amp;lt;10 MHz). Zur Messung der Hochfrequenzstörungen (Messung 4) ist die Grenzfrequenz von 200 kHz kein Problem.&lt;br /&gt;
&lt;br /&gt;
[[bild:Term1.gif|framed|left| Terminierung 1 : 50&amp;amp;Omega; vor dem Koppelkondensator, f_g 10 Hz ]].&lt;br /&gt;
[[bild:Term2.gif|framed|left| Terminierung 2 : 50&amp;amp;Omega; nach dem Koppelkondensator, f_g 200kHz]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Messung 1 - FPGA unkonfiguriert ==&lt;br /&gt;
&lt;br /&gt;
Bei diesem Schritt können wir die Leistungsaufnahme in Ruhezustand messen, welche größtenteils durch Leckströme verursacht wird. Zu beachten ist auch, dass unser Oszilloskop mit Eingangsschaltung 1 viel Strom zieht (50 @ 2,5V = 50mA). Wir können mittles Multimeter messen, ob unsere Spannungsregler die korrekte Spannung liefern. Wir schreiben den aktuellen Stromverbrauch und Kernspannung auf. Dabei sind ist der Stromverbrauch der Eingangstermninierung nicht enthalten, weil für alle Messungen das zweite Oszilloskop mit Schaltung 2 verwendet wurde.&lt;br /&gt;
&lt;br /&gt;
== Messung 2 - FPGA mit leerer Logik == &lt;br /&gt;
&lt;br /&gt;
Ein Design mit einer einfachen Schleife von einem Eingang auf einen Ausgang ist jetzt in das FPGA geladen. Nach der Konfiguration &#039;&#039;&#039;sinkt&#039;&#039;&#039; der Stromverbrauch, weil die Konfigurationslogik im FPGA abgeschaltet wurde, welche permanant den Konfigurationsspeicher löscht. Die Leistungsaufnahme dieser Minimalschaltung wird als Kalibrierungspunkt für alle nachfolgenden Messungen verwendet.&lt;br /&gt;
&lt;br /&gt;
== Messung 3 - FPGA konfiguriert ohne schaltende Logik ==&lt;br /&gt;
&lt;br /&gt;
Jetzt steigt die Leistungsaufnahme deutlich. Auf den ersten Blick ist das unerwartet, denn im FPGA werden keinerlei Signale geschaltet , die FlipFlips laden immer den gleichen Wert. Aber das ist nicht ganz korrekt. Das Taktnetzwerk läuft auf voller Leistung. Daran erkennt man, dass die Taktverteilung signifikant Leistung benötigt. Darum nutzen [[Ultra low power | stromsparende ICs]] eine saubere Methode zur [[Taktung FPGA/CPLD | Taktabschaltung (clock gating)]], um die Leitungsaufnahme zu verringern. Aber das muss auf sichere Weise erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Messung 4 - FPGA mit dauerhaft schaltenden Signalen ==&lt;br /&gt;
&lt;br /&gt;
Jetzt starten wir ein Feurwerk! Die Stromversorgung erfährt jetzt ihren schlimmsten Albtraum. 1500 FlipFlops die gleichzeitig mit 147 MHz umschalten (togglen)&lt;br /&gt;
ist kein Kindergeburtstag! Schau auf den Strommesser! Das FPGA wird schnell sehr heiß. Aber was sehen wir auf dem Oszilloskop? Da die Stromaufnahme konstant ist, können wir nur Hochfrequenzstörungen durch die schaltende Logik sehen, welche durch unzureichende Entkopplung der Keramikkondensatoren verursacht werden könnte. Mit einem schnellen Oszilloskop (1GHz++) und schlechten Versorgungslagen und Keramikkondensatoren, könnte man die &#039;&#039;&#039;wirklich&#039;&#039;&#039; hochfrequenten Störungen sehen. Mit dem 1 GHz Oszilloskop sieht man in diesem Fall aber nichts, eben weil die Kondensatoren und Stromversorgungslagen gut funktionieren. Mit langsameren Oszilloskopen (300MHz oder weniger) sieht man nur den Effekt der Kondensatoren. Hier können wir auch die Kernspannung unter Volllast messen. Aber man muss sicherstellen, die Spannung zu messen, welche wirklich am FPGA ankommt, d.h. man muss &#039;&#039;&#039;direkt&#039;&#039;&#039; an den Pins des FPGA messen, nicht irgendwo auf dem Board! Denn das Stromversorgungsnetz hat einen endlichen Widerstand, welcher einen Spannungsabfall vom Spannungsregler bis zum FPGA verursacht. In einem guten Entwurf sollte der Spannungsabfall kleiner als 1% der Nennspannung sein.&lt;br /&gt;
&lt;br /&gt;
== Messung 5 - Burstbetrieb ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß erreichen wir den interessantesten Punkt. Mit dem 16-Bit Zähler wird das Umschalten des FlipFlop-Arrays mit einer niedrigen Frequenz moduliert, die Modulationsfrequenz ist 1/65356 der Taktfrequenz, hier ~2,2 kHz. Das ist die Sprungfunktion, welche in den Abschnitten weiter oben genannt wurde. Und wir sehen die Reaktion des Stromversorgungsnetzes. Wenn es ideal wäre, würden wir nur eine gerade Linie auf dem Oszilloskop sehen. Aber da es numal keine Idealfälle gibt, sehen wir Überschwinger und einen verbleibenden Offset. Das nachfolgende Bild zeigt das deutlich. Der blaue Kanal ist das Modulationssignal des 16-Bit Zählers (MSB), der gelbe Kanal die Kernspannung.&lt;br /&gt;
&lt;br /&gt;
[[bild:01.gif|framed|left| Sprungantwort mit 10µF]]&lt;br /&gt;
[[bild:02.gif|framed|left| Sprungantwort mit 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:03.gif|framed|left| Abschaltflanke 10µF]]&lt;br /&gt;
[[bild:04.gif|framed|left| Abschaltflanke 110µF]]&lt;br /&gt;
[[bild:05.gif|framed|left| Zoom, Abschaltflanke 110µF]]&lt;br /&gt;
&lt;br /&gt;
[[bild:06.gif|framed|left| Anschaltflanke 10µF]]&lt;br /&gt;
[[bild:07.gif|framed|left| Anschaltflanke 110µF]]&lt;br /&gt;
[[bild:08.gif|framed|left| Zoom, Anschaltflanke 110µF]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Erklärung ==&lt;br /&gt;
&lt;br /&gt;
Der Unterschwinger beim Einschalten wird verursacht durch unzureichende Entkopplung im mittleren Frequenzbereich. Der sprunghaft steigende Stromverbrauch kann nicht von den Mittelfrequenzkondensatoren geliefert werden (zu wenig Kapazität), auch nicht vom Spannungsregler (er ist zu langsam dafür). Das originale Demoboard ist nur mit einem 10µF Tantalkondensator hinter dem Spannungsregler bestückt, welche für so eine große Last viel zu klein ist. Durch Ergänzung eines 100µF Kondensatores kann der Unterschwinger deutlich verkleinert werden.&lt;br /&gt;
&lt;br /&gt;
Der Überschwinger beim Abschalten ist ähnlich, aber hier ist der Spannungsregler ist zu langsam, den Ausgangsstrom herunterzuregeln. Der überschüssige Strom (Ladung) wird in den Mittelfrequenzkondensatoren gespeichert, aber da dieser nur 10µF hat, steigt die Spannung schnell an. Ein einfacher Vergleich. Es ist genauso wie wenn man mit einem kleinen Fass das Regenwasser von einem großen Dach auffangen will, das Faß füllt sich schnell.&lt;br /&gt;
&lt;br /&gt;
Was verursacht den verbliebenden Offset? Nun, das ist der Gleichstromwiderstand des Stromversorgungsnetzwerks vom Spannungsregler (wo dieser die Ausgangsspanung misst und regelt) bis zum VCC-Pin des FPGAs. Die Stromaufnahme des FPGAs schwankt zwischen Messung 3 (kein Umschalten) und Messung 4 (konstantes Umschalten). Auf dem Oszilloskop sehen wir eine Spannungsdifferenz von ~70mV bei einer Stromdifferenz von 912 mA, woraus ca. 76m&amp;amp;Omega; Widerstand resultieren. Die Schlußfolgerung daraus ist, dass die Verbindung zwischen dem Punkt der Spannungsmessung durch den Spannungsregler und den VCC-Pins einen möglichst niedrigen Widerstand haben muss. Das beste sind komplette Lagen für die Stromversorgung (Power Planes), aber kurze, dicke Leitungen sind meist auch OK. Es gibt auch Spannungsregler mit extra Messeingängen, welche den Spannungsabfall über der Zuleitung kompensieren können, weil sie direkt am Verbraucher die Spannung messen. Als weitere Möglichkeit werden heutzutage meist sog. Point of Load Module eingesetzt. Das sind Spannungsregler (Schaltregler), welche direkt am zu versorgenden FPGA sitzen und mit einer hohen Spannung von 5..48V über das Board versorgt werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Messergebnisse&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Messung || FPGA-Inhalt                || Icc [mA] || Vcc [V] || P [mW]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || keine Konfiguration              || 80 || 2.501 || 200&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Minimallogik                     || 40 || 2.502 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Testlogik, inaktiv               || 235 || 2.487 || 584&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Testlogik, konstantes Umschalten || 1147 || 2.433 || 2790&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Testlogik, Burstbetrieb           || 690 || 2.464 || 1700&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wurde eine einfache aber leistungsfähige Methode zur Messung des Frequenzgangs des Stromversorgungsnetzwerks für FPGAs gezeigt. Die Messung kann deutlich einfacher und mit leicht verfügbaren Messgeräten unter realistischeren Bedingungen durchgeführt werden als eine klassische Messung mit einem Netzwerkanalysator. Es läßt viel Raum für Experimente mit der Entkopplung der Stromversorgung in Bezug auf die Platzierung und Werte der Kondensatoren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56267</id>
		<title>Diskussion:Stromversorgung für FPGAs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56267"/>
		<updated>2011-04-04T05:38:37Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sind die beiden Bilder zu den Eingangsbeschaltungen der Oszilloskope nicht vertauscht? Sowohl die Grenzfrequenzen als auch der Text bei &amp;quot;Messung 1 - FPGA unkonfiguriert&amp;quot; suggerieren, dass die Bilder andersrum gehören.&lt;br /&gt;
----&lt;br /&gt;
Nein, das passt. Der Eingang der Frontplatte ist RECHTS, der Y-Verstärker mit relativ hohem Eingangswiderstand links.&lt;br /&gt;
&lt;br /&gt;
MfG&lt;br /&gt;
Falk&lt;br /&gt;
----&lt;br /&gt;
Ups, da war ich wohl blind. Danke für den Hinweis.&lt;br /&gt;
--[[Benutzer:Hoal|Hoal]] 11:25, 10. Jul. 2010 (UTC)&lt;br /&gt;
----&lt;br /&gt;
Das &#039;E&#039; in ESR und ESL habe ich noch nie als &amp;quot;effective&amp;quot; übersetzt gesehen.&lt;br /&gt;
&lt;br /&gt;
AFAIK und laut Wikipedia bedeutet es &amp;quot;Equivalent&amp;quot;. Also &amp;quot;Equivalent Series Resistance/Inductance&amp;quot;&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56266</id>
		<title>Diskussion:Stromversorgung für FPGAs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Stromversorgung_f%C3%BCr_FPGAs&amp;diff=56266"/>
		<updated>2011-04-04T05:38:15Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sind die beiden Bilder zu den Eingangsbeschaltungen der Oszilloskope nicht vertauscht? Sowohl die Grenzfrequenzen als auch der Text bei &amp;quot;Messung 1 - FPGA unkonfiguriert&amp;quot; suggerieren, dass die Bilder andersrum gehören.&lt;br /&gt;
----&lt;br /&gt;
Nein, das passt. Der Eingang der Frontplatte ist RECHTS, der Y-Verstärker mit relativ hohem Eingangswiderstand links.&lt;br /&gt;
&lt;br /&gt;
MfG&lt;br /&gt;
Falk&lt;br /&gt;
----&lt;br /&gt;
Ups, da war ich wohl blind. Danke für den Hinweis.&lt;br /&gt;
--[[Benutzer:Hoal|Hoal]] 11:25, 10. Jul. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Das &#039;E&#039; in ESR und ESL habe ich noch nie als &amp;quot;effective&amp;quot; übersetzt gesehen.&lt;br /&gt;
&lt;br /&gt;
AFAIK und laut Wikipedia bedeutet es &amp;quot;Equivalent&amp;quot;. Also &amp;quot;Equivalent Series Resistance/Inductance&amp;quot;&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Standardbauteile&amp;diff=53964</id>
		<title>Standardbauteile</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Standardbauteile&amp;diff=53964"/>
		<updated>2011-01-02T00:03:48Z</updated>

		<summary type="html">&lt;p&gt;Simon: Weiterleitung nach Standardbauelemente erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Standardbauelemente]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Standardbauteile&amp;diff=53963</id>
		<title>Standardbauteile</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Standardbauteile&amp;diff=53963"/>
		<updated>2011-01-02T00:03:37Z</updated>

		<summary type="html">&lt;p&gt;Simon: Weiterleitung nach Standardbautelemente erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Standardbautelemente]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=50400</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=50400"/>
		<updated>2010-09-05T23:05:07Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=49694</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=49694"/>
		<updated>2010-08-04T17:57:40Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;br /&gt;
&lt;br /&gt;
(ENC28J60 Mikrowebserver, T6963c Library, Geek Clock)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Pulsweitenmodulation&amp;diff=48926</id>
		<title>Pulsweitenmodulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Pulsweitenmodulation&amp;diff=48926"/>
		<updated>2010-07-01T18:12:04Z</updated>

		<summary type="html">&lt;p&gt;Simon: Link zum Thread &amp;quot;PWM Tiefpass Restwelligkeit Berechnung&amp;quot; hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Bei der &#039;&#039;&#039;Pulsweitenmodulation&#039;&#039;&#039; (engl. Pulse Width Modulation, abgekürzt &#039;&#039;&#039;PWM&#039;&#039;&#039;) wird die Ein- und Ausschaltzeit eines Rechtecksignals bei fester Grundfrequenz variiert. Das Verhältnis &amp;lt;math&amp;gt;t_{ein} / (t_{ein} + t_{aus})&amp;lt;/math&amp;gt; bezeichnet man als &#039;&#039;&#039;Tastverhältnis&#039;&#039;&#039; (engl. Duty Cycle, meist abgekürzt DC, bitte nicht verwechseln mit Direct Current = Gleichstrom ). Das Tastverhältnis ist eine Zahl zwischen 0..1.&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen ist gilt für den &#039;&#039;&#039;Mittelwert&#039;&#039;&#039; der Spannung mit der Periode &amp;lt;math&amp;gt; t_{ein} + t_{aus} = T &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = \frac{1}{T} \int_0^T u(t)dt = \frac{1}{T}\int_0^{t_e} U_{ein}dt + \frac{1}{T} \int_{t_{ein}}^T U_{aus}dt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = U_{aus} + (U_{ein} - U_{aus}) \cdot \frac{t_{ein}}{t_{ein}+t_{aus}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}&amp;lt;/math&amp;gt; ist dabei normalerweise 0V, &amp;lt;math&amp;gt;U_{ein}&amp;lt;/math&amp;gt; die Betriebsspannung &amp;lt;math&amp;gt;V_{CC}&amp;lt;/math&amp;gt;, z.&amp;amp;nbsp;B. 5V. Deshalb kann man vereinfacht schreiben:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = V_{CC} \cdot DC&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele zeigen PWM-Signale mit einem Tastverhältnis von 75% bzw. 25%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein}=5\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}=0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein}=3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus}=1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 0\,\mathrm{V} + (5\,\mathrm{V} - 0\,\mathrm{V}) \cdot \frac{3\,\mathrm{ms}}{3\,\mathrm{ms}+1\,\mathrm{ms}} = 3,75\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Pwm1.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein}=5\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}=0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein}=1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus}=3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 0\,\mathrm{V} + (5\,\mathrm{V} - 0\,\mathrm{V}) \cdot \frac{1\,\mathrm{ms}}{1\,\mathrm{ms}+3\,\mathrm{ms}} = 1,25\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Pwm2.png]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Leistung ==&lt;br /&gt;
&lt;br /&gt;
Steuert man mit einem pulsweitenmodulierten Signal direkt einen ohmschen Verbraucher an (z.&amp;amp;nbsp;B. Heizdraht), so ist darauf zu achten, dass man zur Bestimmung der Leistung &#039;&#039;&#039;nicht&#039;&#039;&#039; einfach&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_m}^2}{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rechnen darf, sondern die Leistung während der Ein- und Ausschaltzeit getrennt betrachten muss:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_{ein}}^2}{R} \cdot \frac{t_{ein}}{t_{ein} + t_{aus}} +&lt;br /&gt;
\frac{{U_{aus}}^2}{R} \cdot \frac{t_{aus}}{t_{ein} + t_{aus}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Da praktisch fast immer gilt &amp;lt;math&amp;gt;U_{aus}=0V&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;U_{ein}=V_{CC}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann man vereinfacht schreiben und damit rechnen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac {{V_{CC}}^2}{R} \cdot DC&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein} = 4\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus} = 0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein} = 1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus} = 3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;R = 10\,\mathrm{\Omega}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Mittelwert dieser Spannung ist&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 1\,\mathrm{V}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Würde man mit diesem Wert die Leistung berechnen, so käme man auf&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_m}^2}{R} = \frac{(1\,\mathrm{V})^2}{10\,\mathrm{\Omega}} = 0,1\,\mathrm{W}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der richtige Wert ist jedoch&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{(4\,\mathrm{V})^2}{10\,\mathrm{\Omega}} \cdot \frac{1\,\mathrm{ms}}{4\,\mathrm{ms}} +&lt;br /&gt;
\frac{(0\,\mathrm{V})^2}{10\,\mathrm{\Omega}} \cdot \frac{3\,\mathrm{ms}}{4\,\mathrm{ms}} =&lt;br /&gt;
0,4\,\mathrm{W}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
===Digitaler Verstärker statt linearer Verstärker===&lt;br /&gt;
Eine Heizung (Beispiel) mit 10 Ohm-Widerstand soll mit bis zu 12 V angesteuert werden. Dazu wird ein 13 V-Netzteil sowie ein linearer Verstärker verwendet (ein linearer Verstärker braucht immer eine etwas höhere Betriebsspannung als die maximale Ausgangsspannung). &lt;br /&gt;
&lt;br /&gt;
Sollen nun 12 V auf die Heizung gegeben werden, fällt (fast) die gesamte Spannung über der Heizung selber ab, der Verstärker &amp;quot;verbraucht&amp;quot; nur 1 V. Es fliessen ca. 1,2 A, es werden ca. 14,4 W in der Heizung in Wärme umgesetzt, im Verstärker ca. 1,2 W, der Wirkungsgrad beträgt 92%.&lt;br /&gt;
&lt;br /&gt;
Wenn jetzt aber nur noch 6 V an der Heizung anliegen sollen, muss der lineare Verstärker die &amp;quot;übrigen&amp;quot; 7 V verbrauchen, d.h. von den 13 V, welche konstant vom Netzteil geliefert werden, fallen 7 V über dem Verstärker und 6 V über der Heizung ab. Die Transistoren des linearen Verstärkers sind nur halb durchgesteuert. Es fliesst ein Strom von ca. 600 mA, in der Heizung werden ca. 3,6 W in Wärme umgesetzt. Allerdings werden auch 4,2 W im Verstärker in Wärme umgesetzt! Der Wirkungsgrad ist nur noch 46%!&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz dazu sind bei einer PWM die Transistoren des digitalen Verstärkers immer nur entweder voll durchgesteuert oder gar nicht durchgesteuert. Im ersteren Fall fällt nur eine geringe Verlustleistung über dem Transistor ab, da die Sättigungsspannung &amp;lt;math&amp;gt;V_{SAT}&amp;lt;/math&amp;gt; sehr gering ist (meist weniger als 1 V). Im zweiten Fall fällt gar keine Verlustleistung über dem Transistor ab, da kein Strom fliesst (P=U*I). Im Fall der 6 V an der Heizung beträgt das notwendige Tastverhältnis 0,23. D.h. nur während 23% der PWM-Periode wird Verlustleistung im digitalen Verstärker erzeugt und zwar ca.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_V=DC \cdot \frac {V_{CC}}{R} \cdot V_{SAT} = 0,23 \cdot \frac {12V}{10\Omega} \cdot 1V = 0,28 W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wirkungsgrad liegt bei 92%!&lt;br /&gt;
&lt;br /&gt;
=== Motorsteuerung ===&lt;br /&gt;
&lt;br /&gt;
Eine der Hauptanwendungen für PWM ist die Ansteuerung von (Gleichstrom-) Motoren. Der große Vorteil von PWM ist hier der gute Wirkungsgrad. Würde man einen Digital-Analog-Wandler mit einem nachgeschalteten analogen Verstärker zur Ansteuerung verwenden, dann würde im Verstärker eine sehr hohe Verlustleistung in Wärme umgewandelt werden. Ein digitaler Verstärker mit PWM hat dagegen sehr geringe Verluste. Die verwendete Frequenz liegt meist im Bereich von einigen 10kHz. Zur Berechnung der Drehzahl eines Motors kann im Normalfall der Mittelwert der PWM-Spannung als Betriebsspannung angenommen werden.&lt;br /&gt;
&lt;br /&gt;
=== AD-Wandlung mit PWM ===&lt;br /&gt;
&lt;br /&gt;
Einen recht billigen und einfachen AD-Wandler mit &amp;quot;1-Draht Kommunikation&amp;quot; kann man mit dem IC 556 (NE556 o.ä.) realisieren: der eine Timer des 556 arbeitet als 50% duty-cycle Rechteckgenerator bei beispielsweise 1 kHz und steuert den zweiten Timer an. Dieser besitzt einen Steuereingang zu Beeinflussung des Tastverhältnisses und auf diesen Pin gibt man das analoge Signal. Ein angeschlossener µC oder PC misst bei jedem Impuls die Impulslänge und man erhält so das Messergebnis. Bei &amp;gt;10 kHz kann man so auch prima digital Sprache übertragen oder speichern (Tip stammt noch aus der Zeit als es keinen Mikroprozessor mit AD-Wandler gab.). Allerdings gibt es auch heute noch einige Controller ohne AD-Wandler.&lt;br /&gt;
&lt;br /&gt;
=== DA-Wandlung mit PWM ===&lt;br /&gt;
&lt;br /&gt;
Die meisten Mikrocontroller haben keine DA-Wandler integriert, da diese relativ aufwändig sind. Allerdings kann man mittels eines PWM-Ausgangs auch eine DA-Wandlung vornehmen und eine Gleichspannung bereitstellen. Wird ein PWM-Signal über einen Tiefpass gefiltert (geglättet), entsteht eine Gleichspannung mit Wechselanteil, deren Mittelwert dem des PWM-Signals entspricht und dessen Wechselanteil von der Beschaltung abhängig ist. Nun bleibt das Problem der Dimensionierung des Tiefpasses. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
PWM-Takt 1 MHz, 8 Bit Auflösung (256 Stufen), 0/5V.&lt;br /&gt;
-&amp;gt; 3906 Hz PWM Frequenz&lt;br /&gt;
&lt;br /&gt;
RC-Tiefpass 22nF, 100k&amp;amp;Omega;&lt;br /&gt;
-&amp;gt; 72 Hz Grenzfrequenz&lt;br /&gt;
&lt;br /&gt;
(Die Grenzfrequenz errechnet sich über &amp;lt;math&amp;gt;f_c=\frac{1}{2\,\pi\,R\cdot C}&amp;lt;/math&amp;gt; .)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[bild:pwm_filter_1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei diesem Tiefpass mit 72 Hz Bandbreite verbleibt am Ausgang noch ein Ripple auf der Gleichspannung, da die PWM nie ideal gefiltert werden kann. Eine Rechnung bzw. Simulation in PSPICE zeigen ca. 150mV Ripple. Das ist ziemlich viel, da ein idealer 8-Bit DA-Wandler bei 5V Referenzspannung eine Auflösung von 20mV hat. Wir haben hier also ein Störsignal von 150mV/20mv=7,5 LSB. Um den Ripple bis auf die Auflösungsgrenze von 20mV zu reduzieren, muss die Grenzfrequenz auf ca. 10 Hz reduziert werden. Es ist somit effektiv nur ein 390tel der PWM-Frequenz nutzbar. Das ist für einige Anwendungen ausreichend, wo praktisch nur statische Gleichspannungen erzeugt werden sollen, z.&amp;amp;nbsp;B. für programierbare Netzteile. Für Anwendungen, in denen schneller ändernde Gleichspannungen generiert werden sollen, muss die PWM-Frequenz entsprechend erhöht werden.&lt;br /&gt;
&lt;br /&gt;
==== RC-Filter dimensionieren ====&lt;br /&gt;
&lt;br /&gt;
Allgemein kann man den Ripple eines einfachen RC-Tiefpasses so abschätzen:&lt;br /&gt;
&lt;br /&gt;
Kritischster Punkt ist eine PWM mit 50% Tastverhältnis. Dabei tritt der&lt;br /&gt;
stärkste absolute Ripple auf. Dort liegt 1/2 VCC über dem R an und lädt C annähernd mit Konstantstrom.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I = \frac{\frac{1}{2}Vcc}{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über die Definition des Kondensators kann man den Ripple berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \frac{I \cdot t}{U}; [F = \frac{As}{V}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U = \frac{I \cdot t}{C}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ladung in As (Amperesekunden) ergeben sich aus der halben PWM-Periode mal I. Damit kann man brauchbar den Ripple abschätzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{Ripple} = \frac{\frac {\frac{1}{2}Vcc}{R} \cdot \frac{1}{2}T_{PWM}}{C} = \frac{ Vcc \cdot T_{PWM}}{4RC}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Einschwingzeit &amp;lt;math&amp;gt;\!\,t_S&amp;lt;/math&amp;gt; des Signals bei einem neuen PWM-Wert beträgt etwa &amp;lt;math&amp;gt;\!\,5RC&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Abschätzung gilt aber nur dann, wenn der Ausgang des RC-Filter kaum belastet ist, wie z.&amp;amp;nbsp;B. durch einen Operationsverstärker oder einen andern hochohmigen IC-Eingang.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
100 Hz PWM Frequenz(T_PWM=10ms), R=100k&amp;amp;Omega;, C=1&amp;amp;mu;F, Vcc=5V&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{Ripple} = \frac{5V \cdot 10ms}{4 \cdot 100k\Omega \cdot 1 \mu F} = 125 mV&amp;lt;/math&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_s=5RC=5 \cdot 100k \Omega \cdot 1 \mu F = 500ms&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man aber nicht soviel Bandbreite verschenken, muss man anders filtern. Das Problem des einfachen RC-Tiefpasses ist der relativ langsame Anstieg der Dämpfung oberhalb der Grenzfrequenz. Genauer gesagt steigt die Dämpfung mit 20dB/Dekade. Das heisst, dass ein Signal mit der 10fachen Frequenz (Dekade) um den Faktor 10 (20dB) gedämpft wird. Will man nun eine höhere Dämpfung ereichen, müssen mehrere Tiefpässe in Kette geschaltet werden. Bei dem gleichen Beispiel erreicht man mit zwei Tiefpässen mit 6,8nF/100k&amp;amp;Omega; eine Grenzfrequenz von ca. 70 Hz, bei gleicher Dämpfung des Ripples auf 20mV. Die Dämpfung dieses sogenannten Tiefpasses 2. Ordnung beträgt 40dB/Dekade. Das heisst, ein Signal mit zehnfacher Frequenz (Dekade) wird um den Faktor 100 (40dB) gedämpft! Damit erzielt man hier bereits die 7fache Bandbreite! Zum Schluss muss beachtet werden, dass die passiven Tiefpässe nur sehr schwach belastet werden können. Hier ist fast immer ein Operationsverstärker als Spannungsfolger nötig. Der kann auch genutzt werden, um das gefilterte Signal weiter zu verstärken (nichtinvertierender Verstärker).&lt;br /&gt;
&lt;br /&gt;
[[bild:pwm_filter_2.png]]&lt;br /&gt;
&lt;br /&gt;
Mehr Informationen zur Restwelligkeit bei RC Tiefpässen kann man [http://www.mikrocontroller.net/topic/181033#1747063 diesem] Thread entnehmen.&lt;br /&gt;
&lt;br /&gt;
Das Spiel kann noch um einiges gesteigt werden, wenn man Tiefpässe dritter, vierter und noch höherer Ordung einsetzt. Das wird vor allem im Audiobereich gemacht. Dazu werden praktisch Operationsverstärker eingesetzt. In der [[AVR]] Application-Note [http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf AVR335: Digital Sound Recorder with AVR and DataFlash] wird zum Beispiel ein mit Operationsverstärkern aufgebauter Chebychev-Tiefpass fünfter Ordnung verwendet. Man findet im Audiobereich gelegentlich auch Schaltungen ohne expliziten Tiefpass. Dabei wird der Ausgang eines Class-D Verstärkers (der nichts anderes als ein PWM-Signal erzeugt) über einen Widerstand auf einen Lautsprecher gegeben. Die mechanische Trägheit und die Induktivität der Lautsprecherspule bilden mit dem Widerstand einen Tiefpass.&lt;br /&gt;
&lt;br /&gt;
=== Dimmen von Leuchtmitteln ===&lt;br /&gt;
&lt;br /&gt;
Siehe Artikel:&lt;br /&gt;
* [[LED-Fading]] - LED dimmen mit PWM &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Oft gestellte Fragen (FAQ)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
F: Mit welcher Frequenz dimmt man?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Bei Glühlampen kannst Du alles über 20Hz nehmen. Die sind derart träge... Über 9kHz sollte man wegen [[EMV]] nicht gehen. Für [[LED]]s ist alles über 1kHz und unter 9kHz gut. (Autor: Travel Rec. (travelrec), Datum: 27.12.2008 11:32)&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: PWM]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#PWM (Pulsweitenmodulation)|AVR-GCC-Tutorial: PWM]]&lt;br /&gt;
* [[Soft-PWM]] - PWM in Software&lt;br /&gt;
* [[Motoransteuerung mit PWM]]&lt;br /&gt;
* [[LED-Fading]] - LED dimmen mit PWM&lt;br /&gt;
* [[AVR PWM]] (noch nicht fertig)&lt;br /&gt;
* [[Ambilight in Hardware]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Treiber&amp;diff=47145</id>
		<title>Treiber</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Treiber&amp;diff=47145"/>
		<updated>2010-05-06T20:21:48Z</updated>

		<summary type="html">&lt;p&gt;Simon: Tippfehler korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;quot;Treiber&amp;quot; ist eine Schaltung, welche den nötigen Strom zur Verfügung stellt, um einen großen [[Transistor]] in der erforderlichen Zeit ein- bzw. auszuschalten. Es handelt sich dabei meist um einen Verstärker mit zusätzlichem [[Pegelwandler]]. Dadurch ist es möglich, mit einem Logikausgang, welcher meist mit 5 oder 3,3V betrieben wird, große Lasten mit [[FET|MOSFETs]] bzw. [[IGBT|IGBTs]] zu schalten. Dieser Treiber kann analog (linear) oder digital arbeiten.&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird hauptsächlich auf die Besonderheiten zur Ansteuerung von MOSFETs und IGBTs in der Leistungselektronik Bezug genommen, welche geschaltet betrieben werden. Diese Treiber sind digitale [[MOSFET-Übersicht#Mosfet-Treiber | MOSFET-Treiber]]&lt;br /&gt;
&lt;br /&gt;
==Anwendung ==&lt;br /&gt;
&lt;br /&gt;
[[FET | MOSFETs]] und [[IGBT]]s werden mit einer Spannung gesteuert. Bei einer Gate-Source bzw. Gate-Emitter Spannung von 0V ist das Bauteil gesperrt bzw. hochohmig. Steigt die Spannung über die sogenannte &amp;quot;Schwellenspannung&amp;quot; (engl. threshold voltage) - die für Leistungsbauteile zwischen ca. 3 und 4,5V liegt - &lt;br /&gt;
geht das Bauteil langsam vom gesperrten in den leitenden Zustand über. Bei einem weiteren Spannungsanstieg bis zu einem Level von ca. 12V verringert sich der Einschaltwiderstand beim MOSFET bzw. der Kollektor-Emitter Spannungsabfall beim IGBT auf den im Datenblatt angegebenen minimalen Wert. Eine weitere Erhöhung führt nur zu einer vergleichsweise geringen Reduktion des Widerstandes bzw. Spannungsabfalls und erhöht die Energiemenge die beim Schalten durch den Treiber &lt;br /&gt;
umgeladen werden muß dramatisch (P~U² !). Praktisch beschränkt man sich daher meist auf Gatespannungen zwischen 12...18V. Aufgrund von unvermeidbaren, sehr kleinen parasitären Effekten tritt meist ein geringes Überschwingen der Gatespannung auf. Zusammen mit diesem Überschwingen darf die Gatespannung bei nicht &amp;quot;Logic-Level&amp;quot; FETs 20V nie überschreiten.&lt;br /&gt;
&lt;br /&gt;
Im Betrieb fällt an einem Leistungstransistor immer eine bestimmte Verlustleistung an. Diese Verluste teilen sich auf in &amp;quot;Schaltverluste&amp;quot; und &amp;quot;Leitend- bzw. ON-Verluste&amp;quot;. Die ON-Verluste sind hauptsächlich vom Leistungsschalter selbst abhängig, die Schaltverluste hingegen von der Schaltgeschwindigkeit. Je schneller ein FET/IGBT ein- bzw. ausgeschaltet wird, desto geringer sind die Schaltverluste.&amp;lt;br&amp;gt;&lt;br /&gt;
Leider gibt es hier neben physikalischen Grenzen insbesondere unerwünschte Nebenwirkungen, nämlich die EMV (&#039;&#039;&#039;E&#039;&#039;&#039;lektro &#039;&#039;&#039;M&#039;&#039;&#039;agnetische &#039;&#039;&#039;V&#039;&#039;&#039;erträglichkeit). Je schneller geschaltet wird, desto stärker sind die Störungen die dadurch erzeugt werden. Diese Störungen sind sehr schnell so stark, daß andere Schaltungen im Umkreis von einigen Metern beeinflußt werden d.h. die USB Maus leuchtet plötzlich auf, ohne daß sie bewegt wurde bzw. der eigene Mikrocontroller macht nicht mehr was er eigentlich sollte. EMV ist Heute eines der wichtigsten &amp;quot;Krisenthemen&amp;quot; während der Entwicklungsphase, daher nicht auf die leichte Schulter nehmen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gatebeschaltung ===&lt;br /&gt;
&lt;br /&gt;
Zwischen Treiberstufe und Schalter sind in fast allen Fällen einige passive Bauteile vorhanden. Dies wird hier im Weiteren als &amp;quot;Gatebeschaltung&amp;quot; bezeichnet.&lt;br /&gt;
&amp;lt;br&amp;gt; Hier ein Beispiel mit &amp;quot;Vollausstattung&amp;quot; und die dazugehörige Erklärung:&lt;br /&gt;
&lt;br /&gt;
# Gatewiderstand &amp;quot;R_g1&amp;quot;, um die Schaltgeschwindigkeit den Erfordernissen anzupassen. Je schneller die Schaltflanke, desto geringer die Schaltverluste. ABER Je schneller die Schaltflanke, desto größer die erzeugten Störungen (EMV). Gleichzeitig hat ein schnelles &amp;quot;Abschalten&amp;quot; auch einen starken Überschwinger (snap-off einer Diode und/oder Selbstinduktion (inductive kick)) zur Folge. Aus diesem Grund wird häufig&lt;br /&gt;
# ein Widerstand &amp;quot;R&amp;quot;_g2 und eine Diode &amp;quot;D&amp;quot; in Serienschaltung dem o.g. Gatewiderstand &amp;quot;R_g1&amp;quot; parallelgeschaltet, und zwar so, daß ein langsames ausschalten (D gesperrt) aber ein schnelles einschalten (D leitend und damit R_g1 parallel zu R_g2) ermöglicht wird, d.h. R_g1 || (R_g2+D).&lt;br /&gt;
# Um das empfindliche Gate zu schützen, wird oft eine Z-Diode, besser eine schnellere Transil-Diode (Transient Suppressor Diode) so zwischen &amp;quot;Gate&amp;quot; und &amp;quot;Source&amp;quot; bzw. &amp;quot;Emitter&amp;quot; geschaltet (&amp;quot;Kathode&amp;quot; am &amp;quot;Gate&amp;quot;), daß das &amp;quot;Gate&amp;quot; vor Spannungen &amp;gt; 20V geschützt wird. Bei einem sauberen Aufbau kann diese Sicherheitsfunktion normalerweise entfallen. Bei Testaufbauten ist eine 16V Transil-Diode Aufgrund der dort häufig vorkommenden Induktivitäten (Drahtverhau ;-) SEHR zu empfehlen. Das gleiche gilt für die&lt;br /&gt;
# Klemmdiodenkombination (Z- bzw. Transil Diode, antiseriell mit einer normalen Diode) zwischen &amp;quot;Drain&amp;quot; bzw. &amp;quot;Kollektor&amp;quot; und Gate so (&amp;quot;Kathode&amp;quot; der Z-Diode an &amp;quot;Drain&amp;quot; bzw. &amp;quot;Kollektor&amp;quot;), daß die Diode das Gatepotential anhebt, wenn die &amp;quot;Drain-Source&amp;quot; bzw. &amp;quot;Kollektor-Emitter&amp;quot; Potential in die Nähe der maximalen Blockierspannung (Spannungsfestigkeit) des Schalters kommt bzw. den vom Entwickler definierten, maximalen Spannungslevel erreicht. Dieses &amp;quot;anheben&amp;quot; führt dann zu einem vergleichsweise hochohmigen Einschalten des Schalters und damit zum VERLUSTBEHAFTETEN Energieabbau. Bei einem 30V FET verwendet man üblicherweise z.&amp;amp;nbsp;B. eine 24V Transil-Diode, bei 150V FET z.&amp;amp;nbsp;B. eine 130V Transil-Diode und bei einem 600V IGBT z.&amp;amp;nbsp;B. eine 540V Transil-Diode. Die antiserielle Diode, die verhindert, daß die Gatespannung bei fehlender Leistungsversorgung über die Transildiode abfließt, muß die gleiche Spannungsfestigkeit wie der Schalter aufweisen.&lt;br /&gt;
&lt;br /&gt;
=== Treiberleistung ===&lt;br /&gt;
&lt;br /&gt;
IGBT und FET sind zwar spannungsgesteuerte Bauelemente, trotzdem muß bei jedem Einschalten und bei jedem Ausschalten die Gatekapazität umgeladen werden, wozu &amp;quot;Strom&amp;quot; erforderlich ist ;-). Der Energiegehalt eines Kondensators wird mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E= \frac{1}{2} \cdot C \cdot U^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
berechnet. Es ist jedoch der Energiebedarf bei jedem &amp;quot;Aufladen&amp;quot; und &amp;quot;Entladen&amp;quot; zu berücksichtigen. Zur Ermittlung der wirksamen Kapazität, welche in der Formel benötigt wird, hat es sich bewährt die Datenblattangabe für &amp;quot;Cies&amp;quot; beim IGBT, bzw. den Datenblattwert für &amp;quot;Ciss&amp;quot; beim FET mit dem Faktor &amp;quot;5&amp;quot; zu multiplizieren.&lt;br /&gt;
Daher ergibt sich die Treiberleistung wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_{treiber} = 5 \cdot Cx \cdot U_g^2 \cdot f_{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel bei Ug = 18V, Cies=4nF und f_schalt=5kHz  beträgt P_treiber = 32mW. &amp;lt;br&amp;gt;Bei größeren Strömen mit einer höheren Frequenz - z.&amp;amp;nbsp;B. Induktionsheizung - wird die Ansteuerleistung schon sehr interessant, z.&amp;amp;nbsp;B. Ug = 18V, Cies=20nF und f_schalt=250kHz, hier beträgt P_treiber = 8,1W. Zusätzlich muß der Eigenverbrauch des Treibers  berücksichtigt werden, der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
=== Definition zu Low- und High-Side Schalter=== &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;L&#039;&#039;&#039;ow-&#039;&#039;&#039;S&#039;&#039;&#039;ide - Schalter: Der FET schaltet eine Last gegen GND - auch als LS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;H&#039;&#039;&#039;igh-&#039;&#039;&#039;S&#039;&#039;&#039;ide - Schalter: Der FET schaltet eine Last an die Versorgungsspannung - auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
===Beispiele zu Low-Side Treibern===&lt;br /&gt;
&lt;br /&gt;
Nachfolgend ein paar Beispiele, die sowohl für FETs, als auch für IGBTs verwendet werden können. Achtung! Auch wenn bei FETs eine Diode (Bodydiode) implementiert ist, muß bei induktiven Lasten oder langen Zuleitungen sowohl bei FETs als auch bei IGBTs eine schnelle Diode parallel zum Leistungsschalter eingesetzt werden. Diese Diode - die hier im Beispiel nicht gezeigt ist - muß räumlich direkt neben dem Leistungsschalter platziert werden. Bitte beachten, daß jede Treiberschaltung sowohl an den Leistungsschalter, als auch an den gesamten Lastkreis individuell angepaßt werden muß.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_LS_Treiber_1_2.png|miniatur|ohne|600px|Beispiele zu diskreten LS-Treibern ]]&lt;br /&gt;
&lt;br /&gt;
Treiber-1 eignet sich eher dazu langsamere Schaltvorgänge mit Kleinsignal-FETs durchzuführen, aber auch höhere Leistungen sind prinzipiell so machbar, wenn man sich die höhere Verluste durch die langsame Ansteuerung erlauben kann.&lt;br /&gt;
Der Widerstand R26 sollte an das gewünschte Schaltverhalten angepaßt werden, weniger als ca. 100Ohm ist wegen der Stromtragfähigkeit des gewählen T4 nicht zu empfehlen. Das Schaltverhalten ist hier sehr unsymmetrisch (&amp;quot;langsam ein&amp;quot;, sehr schnell &amp;quot;aus&amp;quot;). Sollten größere Ströme geschaltet werden wird eine andere Ansteuermöglichkeit empfohlen.&lt;br /&gt;
&lt;br /&gt;
Treiber-2 ist durchaus in der Lage höhere Impulsleistungen an den Leistungstransistor zu liefern.&lt;br /&gt;
Letztendlich ist der maximale Strom von der Stromtragfähigkeit von T1&amp;amp;T2 abhängig. Die Gatewiderstände sind für schnelles (stromloses!) Einschalten und etwas langsameres Abschalten ausgelegt. Das oben gezeigte Beispiel kann so angepaßt werden, daß beim Abschalten nur ein kleiner Spannungsüberschwinger (10..20% der Betriebsspannung) zu sehen ist. Die Anbindung von C1 ist relativ kritisch, auf kürzest mögliche Anbindung ist zu achten&lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_LS_Treiber_3.png|miniatur|ohne|600px|Beispiel eines LS-Treibers mit Logikbausteinen]]&lt;br /&gt;
&lt;br /&gt;
Dieses Schaltungsbeispiel ist gut geeignet, um Leistungsfets mit einer mittleren Leistung anzusteuern. Es ist zu empfehlen einen Leistungsschalter mit geringer Gateladung (Qg) auszusuchen. Achtung auf den Maximalstrom den der Inverter liefern kann. Der 4069 sollte mit ca. 12V, max. 15V betrieben werden. Wenn ein Logic-Level Schalter ausgesucht wird, ist ein auch 74AC14 (kein AHC) zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_LS_Treiber_4.png|miniatur|ohne|600px|Beispiele eines LS-Treibers mit einem fertigen IC]]&lt;br /&gt;
&lt;br /&gt;
Oben im Bild ist ein kommerzieller Treiber-IC zu sehen - hier im Beispiel 2127 von IR. Hierzu gibt es jedoch sehr viele Alternativen, sowohl von IR, alsauch von anderen Firmen. Die Beschaltung ist jedoch immer relativ ähnlich, siehe dazu [[MOSFET-Übersicht#Mosfet-Treiber | MOSFET-Treiber]]. &amp;lt;br&amp;gt;&lt;br /&gt;
Achtung! Der GND-Zweig des Leistungskreises hat bei unsachgemäßem Aufbau einen recht großen Einfluß auf die beim Schalter ankommende Gatespannung. Je nach Aufbau führt das zu einer zu geringen Gatespannung im Schaltmoment - U_gs direkt am Schalter bricht beim Einschalten ein - oder zu einer Überspannung am Gate - U_gs schwingt über die Gatetreiberversorgung hinaus. Beides führt vermutlich früher oder später zu einer Zerstörung des Leistungsschalters. Letzters kann oft durch eine 15V-Z-Diode direkt am Schalter zwischen Gate und Source bzw. Emitter verhindert werden, eine Optimierung des Layouts bzw. der Verdrahtung ist jedoch zielführender. Beschreibungen hierzu im weiteren Verlauf des Artikels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben gezeigte Masseführung ist nicht zum Spaß &#039;&#039;&#039;genau so&#039;&#039;&#039; gezeichnet. Durch eine unsaubere Masseführung - und dazu zählt z.&amp;amp;nbsp;B. auch schon der Anschluß der Treiber-Masse direkt am GND-Symbol statt direkt am Schalter - kann der Treiber oder der Schalter durch Überspannung zerstört werden. Auch ein zu starkes &amp;quot;Unterschwingen&amp;quot; des GND-Potentials gegenüber des gerade auf Masse gelegten Gatesignals führt unweigerlich zur Zerstörung des Treibers. Viele Bausteine sind bis zu einer Spannungsdifferenz von ca. -5V betriebsfähig.&amp;lt;br&amp;gt;&lt;br /&gt;
10cm Kabel besitzen eine parasitäre Induktivität von ca. 100nH. Werden 50A in 1µs geschaltet - was schon relativ langsam ist - entsteht bei jedem Schalten eine Selbstinduktionsspannung von 100nH*50A/1µs = 5V.&lt;br /&gt;
&lt;br /&gt;
===Beispiele zu High-Side Treibern===&lt;br /&gt;
&lt;br /&gt;
Nachfolgend ein paar Beispiele zu HS-Treibern, die sowohl für FETs, als auch für IGBTs verwendet werden können. Bitte beachten, daß jede Treiberschaltung sowohl an den Leistungsschalter, alsauch an den gesamten Lastkreis individuell angepaßt werden muß.&lt;br /&gt;
High-Side Treiber sind etwas komplexer aufgebaut. Der Versorgungsspannungskreis muss isoliert zur restlichen Beschaltung aufgebaut werden. Auf die Isolationsabstände ist besonders zu achten.&amp;lt;br&amp;gt;&lt;br /&gt;
Achtung: Auch wenn bei FETs eine  - meist unzureichende - Diode implementiert ist, sollte bei induktiven Lasten (oder langen Zuleitungen) sowohl bei FETs, als auch bei IGBTs eine schnelle Diode parallel zum Leistungsschalter eingesetzt werden. Diese Diode - die hier im Beispiel nicht gezeigt ist - muß räumlich direkt neben dem Leistungsschalter implementiert werden. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_HS_Treiber_1.png|miniatur|ohne|600px|Beispiel eines diskreten HS-Treibers ]]&lt;br /&gt;
&lt;br /&gt;
Hier im ersten Beispiel eine diskrete Ansteuerung für einen HS-Schalter. Achtung, das Signal durch die Push-Pull-Stufe invertiert. Statt Q5/Q6 wird empfohlen einen integrierten high speed Treiber wie z.&amp;amp;nbsp;B. die sehr preisgünstigen MC34151 oder MC34152 zu verwenden.&lt;br /&gt;
Die hier abgebildete Beschaltung  - die ohne weitere Veränderung bei geringerer Schaltleistung auch ohne die Push-Pull Stufe betrieben werden kann - ist für eine Betriebsspannung von ca. 400V ausgelegt. Der Widerstand R12 (hier 4k7) muß an eine geänderte Spannung angepaßt werden. Für 40V beträgt er in dieser Beschaltung 3k3. Diese Schaltung kann auch sehr einfach simuliert werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_HS_Treiber_2.png|miniatur|ohne|600px|Beispiel eines HS-Treibers mit einem fertigen IC ]]&lt;br /&gt;
&lt;br /&gt;
Das zweite Beispiel verwendet einen integrierten HS-Schalter von International Rectifier (IR) und eine separate, isolierte Versorgungsspannung. Zum IC gibt es sehr viele Alternativen, sowohl von IR, als auch von anderen Firmen. Die Beschaltung ist jedoch immer relativ ähnlich, siehe dazu [[MOSFET-Übersicht#Mosfet-Treiber|MOSFET-Treiber]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Beispiel_HS_Treiber_3.png|miniatur|ohne|600px|Beispiel eines HS-Treibers mit Bootstrap Versorgung ]]&lt;br /&gt;
&lt;br /&gt;
Das dritte Beipiel unterscheidet sich zum vorhergehenden nur dadurch, daß die Versorgungsspannung für den Treiber über eine Bootstrap-Schaltung gewonnen wird. Näheres im weiteren Verlauf dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
Die oben gezeigte Leitungsführung für Treiberbezugspotential und GND-Potential ist auch hier nicht zum Spaß &#039;&#039;&#039;genau so&#039;&#039;&#039; gezeichnet. Durch eine unsaubere Leitungsführung - und dazu zählt z.&amp;amp;nbsp;B. auch schon der Anschluß des Treiber-Bezugspotentials nicht direkt an Emitter bzw. Source - kann der Treiber oder der Schalter durch Überspannung zerstört werden. Auch ein zu starkes &amp;quot;Unterschwingen&amp;quot; des GND-Potentials gegenüber des gerade auf Bezugspotential gelegten Gatesignals führt unweigerlich zur Zerstörung des Treibers. Viele Bausteine sind bis zu einer Spannungsdifferenz von ca. -5V betriebsfähig.&lt;br /&gt;
10cm Kabel besitzen eine parasitäre Induktivität von ca. 100nH. Werden 50A in 1µs geschaltet - was schon relativ langsam ist - entsteht bei jedem Schalten eine Selbstinduktionsspannung von 100nH*50A/1µs = 5V.&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung eines High-Side Treibers ===&lt;br /&gt;
&lt;br /&gt;
Jede Treiberstufe benötigt eine entsprechende Spannungsversorgung.&lt;br /&gt;
Bei einem LS-Schalter gestaltet sich dies relativ einfach, da die Versorgungsspannung im Bereich von 12..15V über dem GND Potential&lt;br /&gt;
liegt. &lt;br /&gt;
&lt;br /&gt;
Bei einem High Side N-Kanal Schalter ist deutlich mehr Aufwand nötig, da hier die Treiberspannung 12..15V über dem Sourcepotential des HS-Schalters liegen muß. Das Source-Potential liegt beim HS-Schalter je nach Anwendungsfall auf 12V bis 400V, manchmal sogar noch höher.&lt;br /&gt;
&lt;br /&gt;
==== Versorgung über isolierte DCDC Wandler ====&lt;br /&gt;
&lt;br /&gt;
Die Versorgung hierfür kann relativ einfach mit integrierten DCDC-Wandlermodulen aufgebaut werden, wie sie für wenig Geld bei Conrad oder Reichelt verfügbar sind (Leistung und Isolationsspannung beachten!).&lt;br /&gt;
&lt;br /&gt;
==== Versorgung durch eine Bootstrap Schaltung====&lt;br /&gt;
&lt;br /&gt;
Wenn es sich bei der Applikation um eine Halbbrücke handelt und der HS-Schalter nicht dauerhaft eingeschaltet sein muß (Tastverhältnis &amp;lt;100%), sondern regelmäßig getaktet wird ([[PWM]]), kann die Versorgung des HS-Schalters auch aus der massebezogenen Versorgung des LS-Schalters generiert werden. Diese Schaltung nennt sich &amp;quot;Bootstrap&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Immer wenn der LS einer Halbbrücke eingeschaltet ist, liegt das Source Potential des High Side Schalters auf GND. In diesem Zeitraum kann der Kondensator am Treiber des HS-Schalters über eine Diode aufgeladen werden. Energiequelle ist hierbei die Spannungsversorgung des LS-Schalters. Siehe dazu eines der Beispiele oben.&lt;br /&gt;
&lt;br /&gt;
=====Bootstrapkondensator=====&lt;br /&gt;
&lt;br /&gt;
Der Bootstrapkondensator soll eine niederinduktive und niederohmige Pufferung des Energiebedarfes für einen Schaltvorgang bereitstellen, daher ist ein Keramikkondensator oder auch ein Folienkondensator erforderlich. Den Energiebedarf eines Schaltvorganges ergibt sich recht einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; C = \frac{Q_{gate}}{\Delta U}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Als erlaubten Spannungseinbruch während der Energieentnahme wird hier 0,5V festgelegt. Die gesamte Gateladung Q_gate (Total gate charge) ist hier z.&amp;amp;nbsp;B. 58nC bei U_g=10V. Daraus errechnet sich eine Minimalkapazität von 58nC / 0,5V = 116nF. Die Erfahrung zeigt, daß ein großzügiges erhöhen um den Faktor 3..8 sinnvoll ist, da in der Rechnung weder Leckströme des FETs und des Kondensators noch der Energieverbrauch der Treiberschaltung selbst berücksichtigt wird. Des Weiteren ist die Gateladung nur für 10V angegeben. Höhere Gatespannungen erfordern eine höhere Energiemenge. Achtung: je größer der Kondensator gewählt wird, desto mehr Zeit wird zum Laden des Kondensators über die strombegrenzende Bootstrapdiode benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Auch wenn der Kerko für die Pufferung der Schaltenergie ausreichend ist, ist es meist sinnvoll einen Elko/Tako parallel zu schalten. Die dort gespeicherte Energie hilft z.&amp;amp;nbsp;B. wenn eine längere &amp;quot;on&amp;quot; Zeit erforderlich ist. Genauso verringert der zusätzliche Energiespeicher den zum Ladungsausgleich erforderlichen Strompuls des Kerkos. Dadurch verbessert sich das EMV-Verhalten des Treibers meßbar.&lt;br /&gt;
&lt;br /&gt;
=====Auslegung des Bootstrapdiodenzweiges =====&lt;br /&gt;
&lt;br /&gt;
# Die Spannungsfestigkeit der Diode muß größer sein, als die auftretende Maximalspannung des Lastkreises. &lt;br /&gt;
# Im ersten Ansatz muß die Recovery-Zeit der Diode (t_rr) mindestens um den Faktor 10 kürzer sein, als die minimale &amp;quot;on&amp;quot; Zeit des LS-FETs. Ist z.&amp;amp;nbsp;B. der LS-FET immer für mindestens 10ms ein, ist eine 1N4007 (t_rr ca. 1µs) ausreichend. Bei höheren Schaltfrequenzen genügt oft eine UF4007 (t_rr ca. 75ns). In einer Halbbrücke bedeutet eine längere t_rr Zeit jedoch, daß der Bootstrapkondensator des HS-Treibers beim Einschalten solange entladen wird, bis die Diode wieder sperrt. In diesem Fall muß die schnellere Diode unabhängig von der &amp;quot;on&amp;quot; Zeit ausgewählt werden&lt;br /&gt;
#Der zulässige Strom durch die Diode ist das letzte Auswahlkriterium. Da der Strom kaum kontrollierbar ist muß er mit einem Widerstand begrenzt werden. Bei einer 1N4007 beträgt der wiederholbare Maximalstrom 1A. Die Diode hat als sogenannten &amp;quot;Single pulse&amp;quot; aber eine deutlich größere Strombelastung (Datenblattangabe UF4007 = 30A). Da der Kondensator nur beim ersten Einschalten komplett vollgeladen, im Betrieb aber wie hier im Beispiel berechnet nur um &amp;lt;0,5V  aufgeladen wird, kann der Widerstand kleiner ausfallen. Daher ist in diesem Beispiel bei 15V Versorgungsspannung und Ausnutzung eines 50% = 15A Peaks für das erste Aufladen ein Minimalwiderstand von (15V - 1,5V) / 15A = 0,9Ohm erforderlich. Der Widerstand wird auf 1Ohm festgelegt. Die 1,5V stammen vom Spannungsabfall an der Diode bei 1A, bei höheren Strömen steigt der Spannungsabfall an.&lt;br /&gt;
&lt;br /&gt;
Aus dem Wert des Bootstrap-Kondensators, des -widerstandes  und des Tastverhältnisses (hier im Beispiel auf 2% festgelegt) ergibt sich eine minimale &amp;quot;on&amp;quot; Zeit für den LS-Schalter von t=R_bt * C_bt / D   d.h. 1Ohm * 470nF / 0,02 = 23,5µs. Schneller als gut 40kHz sollte in diesem Beispiel also nicht geschaltet werden, da sonst der Bootstrapkondensator nur unzureichend nachgeladen werden kann.&lt;br /&gt;
&lt;br /&gt;
===Besonderheiten beim Treiberaufbau===&lt;br /&gt;
&lt;br /&gt;
Fast jeder, der schon einmal eine geschaltete Leistungsendstufe in Betrieb genommen hat, mußte feststellen, daß der Leistungsschalter nicht immer genau das macht, was man vorher geplant hatte. Die Hauptursache ist meist - neben Problemen mit der Leistungsversorgung selbst, siehe weiter unten - der Gatekreis.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Gatekreis_Bild1.png|miniatur|ohne|300px|Gatekreis, wie im Schaltplan gezeichnet]] &lt;br /&gt;
&lt;br /&gt;
Die oben stehende Schaltung zeigt einen Aufbau wie er - unabhängig wie die Treiberstufe selbst umgesetzt wird - standardmäßig im Schaltplan implementiert ist. Im nächsten Bild ist der Gatekreis so gezeichnet, wie er sich unter realen Bedingungen wirklich darstellt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Gatekreis_Bild2.png|miniatur|ohne|400px|Gatekreis, wie er real auf der PCB vorhanden ist]]&lt;br /&gt;
&lt;br /&gt;
Es ist hier nicht die Frage ob diese parasitären Einflüsse wirklich vorhanden sind, oder nicht, sondern nur wie groß die Werte sind. Hier sind unterschiedliche Einflüsse dargestellt, die sich teilweise gegenseitig beeinflussen.&lt;br /&gt;
&lt;br /&gt;
# R &amp;amp; L zwischen Source und GND: &amp;lt;br&amp;gt;Das &amp;quot;Treiber GND&amp;quot; Signal ist wie deutlich zu sehen DIREKT am Source Anschluß des FETs angeschlossen, und nicht am GND-Fußpunkt des Leistungspfades von &amp;quot;Vcc&amp;quot; zu &amp;quot;GND&amp;quot;.Jeder Zentimeter der Leitung zwischen Source und GND beeinflußt den Gatekreis. Sobald der FET durchschaltet entsteht an den o.g. parasitären Bauteilen (Induktivität und Widerstand) ein Spannungsabfall, der dem Gatesignal entgegenwirkt, und damit z.&amp;amp;nbsp;B. beim Einschalten die am FET anliegende Gatespannung reduziert.&lt;br /&gt;
# R &amp;amp; L zwischen den Treiberausgängen &amp;quot;Gate Signal&amp;quot; und &amp;quot;Treiber GND&amp;quot;: &amp;lt;br&amp;gt;Da der Widerstand im unteren mOhm Bereich liegt kann dieser Einfluß hier ignoriert werden. Die Induktivität im Gatekreis bremst jedoch den Signalanstieg am Gate, sodaß auch das Schaltverhalten beeinflußt wird. Hier besteht auch die Gefahr, daß die Induktivität mit der Gatekapazität einen Schwingkreis bildet.&lt;br /&gt;
# Überkopplung über Ciss:&amp;lt;br&amp;gt; Wenn das Drainpotential z.&amp;amp;nbsp;B. beim abschalten plötzlich von &amp;quot;GND&amp;quot; auf &amp;quot;Vcc&amp;quot; springt, findet über Ciss eine überkopplung auf das Gatesignal statt. Diese Potentialanhebung kann im schlimmsten Fall zum wiedereinschalten des FETs oder zu Oszillationen führen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FAZIT:&#039;&#039;&#039; &amp;lt;br&amp;gt;Die Schleife zwischen den Treiberausgängen &amp;quot;Gate Signal&amp;quot; und &amp;quot;Treiber GND&amp;quot; muß &#039;&#039;&#039;unbedingt&#039;&#039;&#039; so klein wie möglich gehalten werden. Sitzt der Treiber nicht direkt am Leistungs-FET, ist es empfehlenswert die zwei Kabel so kurz wie möglich halten und zu verdrillen. Auf eine direkte Anbindung an Source bzw. Emitter ist zu achten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FAQ:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fet wird zu heiß:&lt;br /&gt;
*Verlustleistung zu hoch, Ursache könnte sein daß &lt;br /&gt;
**die Gatespannung zu niedrig ist, &lt;br /&gt;
**die Schaltgeschwindigkeit und damit die Treiberleistung zu gering ist oder  &lt;br /&gt;
**Schwingungen auf der Gateleitung vorhanden sind.&lt;br /&gt;
*Die Kühlung ist unzureichend&lt;br /&gt;
**da keine oder falsche Isolierfolie oder,&lt;br /&gt;
**ein zu kleiner Kühlkörper verwendet wird.&lt;br /&gt;
&lt;br /&gt;
== Leistungselektronik ==&lt;br /&gt;
&lt;br /&gt;
=== Parallelschalten von Leistungstransistoren===&lt;br /&gt;
&lt;br /&gt;
FETs und IGBTs lassen sich relativ einfach parallelschalten, wenn ein paar wenige Grundsätze beachtet werden:&lt;br /&gt;
# Jeder Transistor bekommt einen eigenen Gate-Vorwiderstand bzw. eine eigene R||RD Beschaltung (Gatebeschaltung).&lt;br /&gt;
# Die Gatebeschaltung wird möglichst nahe am Gate- und Source-Anschluß angebracht, und bezüglich Leitungslänge (Induktivität) symmetriert. (Die Zuleitung zu den Gatebeschaltungen ist unkritischer.)&lt;br /&gt;
# Die Leistungsanbindung an Drain und Source - hier zählt &amp;quot;mOhm&amp;quot; und &amp;quot;nH&amp;quot; - wird symmetrisch aufgebaut.&lt;br /&gt;
# Die Schleife &amp;quot;Kondensator - Last - FET - Kondensator&amp;quot; wird minimieren.&lt;br /&gt;
# Jedes Bauteil wird nur zu &amp;lt;80% des maximal Möglichen ausgelastet. (Trotz der hier genannten Maßnahmen können Unsymmetrieen auftreten.)&lt;br /&gt;
&lt;br /&gt;
Sollten auf den Gateleitungen Schwingungen zu beobachten sein, kann es helfen in jede Verbindung von Gatetreiber-Source zum Sourceanschluß des Schalters JE einen Widerstand zu integrieren. Der Wert sollte bei etwa 10..30% des Gatewiderstandes liegen.&lt;br /&gt;
&lt;br /&gt;
=== Stützkondensator ===&lt;br /&gt;
&lt;br /&gt;
==== Einführung ====&lt;br /&gt;
&lt;br /&gt;
Im nachfolgenden Bild ist der &amp;quot;Standard-Schaltplan&amp;quot; einer Endstufe mit ohmscher Last zu sehen. &amp;lt;br&amp;gt;&lt;br /&gt;
Nehmen wir an, der Entwickler hat eine neue Autobatterie mit 13,5V als Stromquelle, und einen Heizwiderstand (L des Widerstandes hier vernachlässigt) mit 0,1 Ohm. Der FET und die je 1m langen Zuleitungen haben zusammen 4mOhm. Dies ergibt einen Maximalstrom von ca. 130A.&lt;br /&gt;
Die Leistung des Heizwiderstandes soll mit einer PWM-Frequenz von 10kHz geregelt werden. In den nachfolgenden Beispielen wird ein Tastverhältnis von 50% fest vorgegeben&lt;br /&gt;
&lt;br /&gt;
[[Bild:Leistungsteil_Bild1.png|miniatur|ohne|400px|Einfache Endstufe wie im Schaltplan gezeichnet]]&lt;br /&gt;
&lt;br /&gt;
Und hier der &#039;&#039;&#039;ideale&#039;&#039;&#039; Spannungs- und Stromverlauf zwischen FET und Lastwiderstand.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Zwischenkreiskondensator_Ideal.png|miniatur|ohne|400px|Idealer Spannung- und Stromverlauf an einer ohmschen Last]]&lt;br /&gt;
&lt;br /&gt;
Jetzt blicken wir der Realität ins Auge, und fügen bei unveränderter Gateansteuerung für die je 1m langen Versorgungsleitungen von- und zu der Batterie eine 1µH große (oder vielmehr kleine) Induktivität in das Simulationsmodell ein (Ohne genaue Kentniss des Lastkreises bzw. der Verdrahtung kann eine parasitäre Induktivität von 10nH/cm angenommen werden):&lt;br /&gt;
&lt;br /&gt;
[[Bild:Zwischenkreiskondensator_Real1.png|miniatur|ohne|400px|Annähernd realer Spannung- und Stromverlauf an der ohmschen Last mit Induktivitäten in der Zuleitung]]&lt;br /&gt;
&lt;br /&gt;
Deutlich ist zu erkennen, daß der Strom gerade einmal 120A, statt 130A erreicht. Die Stromformen ist nicht vergleichbar. &lt;br /&gt;
Des Weiteren erreicht die Spannung am Drain des 30V FETs knapp 900V, was schnell zu einem zerstörten Bauelement führt.&lt;br /&gt;
&lt;br /&gt;
Ist kein Stützkondensator vorhanden, wird der gesammte AC Stromrippel direkt aus der Batterie gezogen, was&lt;br /&gt;
# einen hohen Überspannungsimpuls erzeugt.&lt;br /&gt;
# die Zuleitungen als Sendeantenne mißbraucht (EMV).&lt;br /&gt;
# nicht den gewünschten Strom und Stromverlauf im Widerstand erzeugt.&lt;br /&gt;
# die Batterie selbst mit Mikrozyklen belastet.&lt;br /&gt;
# mit höchster Warscheinlichkeit einen häßlichen Ausschwinvorgang erzeugt (EMV).&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel mit einem Stützkondensator. Die beim Kondensator vorhandenen, parasitären Einflüsse sind in dieser Simulation nicht berücksichtigt um die Komplexität zu minimieren. &amp;lt;br&amp;gt;Designkriterien für den Kondensator folgen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Zwischenkreiskondensator_Real2.png|miniatur|ohne|400px|Annähernd kompensierter Spannung- und Stromverlauf an der ohmschen Last mit Induktivitäten in der Zuleitung ]]&lt;br /&gt;
&lt;br /&gt;
Der Einfluß des Kondensators ist deutlich sichtbar. Der rechteckförmige Stromverlauf ist schon fast wieder erkennbar.... genauso wie eine Schwingneigung im entstandenen LC-Kreis ;-(&lt;br /&gt;
&lt;br /&gt;
==== Design des Stützkondensators ====&lt;br /&gt;
&lt;br /&gt;
Den im Vergleich zwischen den beiden obigen Simulationen fehlende Strom liefert der Kondensator. Die parasitären Elemente dieses Bauteiles haben je nach Typ mehr oder weniger Einfluß in dieser Anwendung.&lt;br /&gt;
&lt;br /&gt;
=====Ersatzschaltbild eines Kondensators=====&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kondensator_Ersatzschaltbild_einfach.png|miniatur|ohne|500px|Vereinfachtes Ersatzschaltbild eines Kondensators]]&lt;br /&gt;
&lt;br /&gt;
Unabhängig vom Kondensatortyp besitzt jeder Kondensator nicht nur die aufgedruckte Kapazität, sondern auch einen internen Widerstand (ESR), und eine interne Induktivität (ESL).&lt;br /&gt;
&lt;br /&gt;
Bei gewickelten Kondenstoren (fast alle Elkos und viele Folienkondensatoren) ist die parasitäre Induktivität aufbaubedingt größer, als bei geschichteten Folienkondensatoren. Für die meisten Anwendungen genügen jedoch Elektrolytkondensatoren, die bezahlbar und mit fast beliebigen Werten verfügbar sind. Sehr häufig ist es einfacher und preiswerter mehrere Elkos parallel zu schalten, als auf Folienkondensatoren umzusteigen  (Achtung: auf symmetrische Anbindung der parallelgeschalteten Bauteile zum Leistungsschalter achten!). Es gibt jedoch einige Anwendungen - meist mit höherer Frequenz oder sehr kurzer Impulszeit (Induktionsheizung [Resonanz-C], elektromagnetische Beschleuniger, Coin-Schrinker, ... ) die die Verwendung von impulsfesten Folienkondensatoren (z.&amp;amp;nbsp;B. MKP10, FKP1,... ) erforderlich machen.&lt;br /&gt;
&lt;br /&gt;
=====Kondensatorauswahl=====&lt;br /&gt;
&lt;br /&gt;
Die Bestimmung der benötigten Kapazität und Anzahl der Kondensatoren hängt ab von...&lt;br /&gt;
&lt;br /&gt;
# Frequenz (Schaltfrequenz * 2!)&lt;br /&gt;
# Flankensteilheit (t_rise, t_fall)&lt;br /&gt;
# Tastverhältnis = Effektive Strombelastung (nicht Mittelwert!)&lt;br /&gt;
# Kühlmöglichkeiten (Verluste im Kondensator, Temperaturerhöhung, Kühlanbindung)&lt;br /&gt;
# ESR&lt;br /&gt;
# Betriebsspannung&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielfältigen Möglichkeiten wird ein stark vereinfachter Ansatz verfolgt, der für den nicht professionellen Anwendungsfall als ausreichend erscheint. (Verbesserungsvorschläge sind jederzeit erwünscht! bitte über PN)&lt;br /&gt;
&lt;br /&gt;
# Betriebsspannung definieren. Diese Spannung nur zu ca. 80% ausnutzen.&lt;br /&gt;
# Betriebspunkte festlegen: a) Wie lange dauert die Stromentnahme (dt in s), b) wie hoch ist der Peakstrom (I in A) und c) um welchen Wert darf die Spannung dadurch einbrechen (dU in V)? &lt;br /&gt;
# Über die Näherung C = I *dt/dU die dafür benötige Kapazität in Farad berechnen. &amp;lt;br&amp;gt;  Den nächsten, größeren Wert als minimum Wert wählen.&lt;br /&gt;
# Effektivwert der Strombelastung berechnen. -- siehe die folgende Übersicht unten -- Wenn die Stromform im Augenblick unbekannt ist wäre der Versuch angebracht die ungefähre Stromform und damit die Belastung durch eine Simulation zu ermitteln. Ansonsten bleibt nur der Ansatz die Kondensatoren zuerst auf den Peakstrom auszulegen, was bei entsprechendem Geldbeutel der sichere Ansatz ist, und dann Stück für Stück die Anzahl der Kondensatoren zu reduzieren (siehe Punkt 8). &lt;br /&gt;
# Maximalstrom des Kondensators (bei Elkos bei 100Hz) aus dem Datenblatt auslesen. (Bei Folienkondensatoren den nächsten Punkt überspringen)&lt;br /&gt;
# Umrechnen des Datenblattwertes auf die Schaltfrequenz der eigenen Applikation (Umrechnungsbeispiel gilt nur für Elkos!): (von 100Hz auf 10Hz: I[10Hz] = I[100Hz] * 0,8; von 100Hz auf 1kHz: I[1kHz] = I[100Hz] * 1,3. (Eine weitere Vergrößerung für höhere Frequenzen &amp;gt;1kHz ist so nicht zulässig, der 1kHz Wert bleibt bestehen).&lt;br /&gt;
# Wenn die Strombelastung größer als die im Datenblatt angegebene ist, mehrere Kondensatoren parallel schalten oder anderen Kondensatortyp wählen.&lt;br /&gt;
# Kondensator im Betrieb testen. &amp;lt;br&amp;gt;Dazu wird der Kondensator in der Schaltung betrieben und dabei die Minimalspannung, die Maximalspannung und die Temperatur gemessen. Der Spannungseinbruch muß im selbst gewählten Rahmen bleiben, die Maximalspannung darf nie erreicht werden (Sicherheitsabstand!) und die maximal zulässige Betriebstemperatur des Bauteiles darf nicht erreicht werden (Messungen Anfangs in kurzen, dann je nach Änderungsgeschwindigkeit der Temperatur in längeren Abständen aufnehmen, bis sich die Temperatur auch nach einigen Minuten nicht mehr erhöht, sofortiger Abbruch bei erreichen der Maximaltemperatur!). &amp;lt;br&amp;gt; Als Daumenregel gilt... Kann das Bauteil nicht mehr angefaßt werden (Vorsicht bei Spannungen über 40V!) ist es vermutlich überbelastet. ;-)&lt;br /&gt;
# Den Test unter Punkt 8. an mehreren Betriebspunkten wiederholen.&lt;br /&gt;
&lt;br /&gt;
Auslegungskriterium bei Elkos ist die max. Rippelstrombelastbarkeit, bei Folienkondensatoren der erlaubte Spannungsrippel bzw. -einbruch. Nur in den seltensten Fällen wird die Verwendung von einem einzelnen Kondensator alle Probleme lösen. Die Parallelschaltung von mehreren Kondensatoren des gleichen Typs ist daher grundsätzlich zu empfehlen. Lieber mehrere Elko mit dem besten Preis-Leistungs Verhältnis, als ein Spezialtyp.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Übersicht zur Berechnung des RMS Wertes der häufigsten Signalformen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:RMS-Berechnung.png|miniatur|ohne|400px|Berechnung der RMS-Ströme für die am häufigsten vorkommenden Signalformen]]&lt;br /&gt;
&lt;br /&gt;
=== Anbindung des Stützkondensators an den Leistungsteil ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Leistungsteil_Bild2.png|miniatur|ohne|400px|Einfache Endstufe wie mit Verdrahtung und PCB umgesetzt ]]&lt;br /&gt;
&lt;br /&gt;
Im obigen Bild ist der Leistungspfad - bestehend aus Zuleitungen, Kondensator und Endstufe - mit den wirksamen parasitären Einflüssen dargestellt.&lt;br /&gt;
Die dort gezeigten parasitären Elemente zwischen Kondensator und Leistungsschalter stellen den kompletten Leistungszweig dar, der im Schaltvorgang belastet wird.&lt;br /&gt;
&amp;lt;br&amp;gt;Die Optimierung der im Bild gezeigte Schleife - d.h. kürzest mögliche Verbindung mit minimierter Induktivität - muß beim Design oberste Priorität besitzen.&lt;br /&gt;
&lt;br /&gt;
===Kühlung der Leistungshalbleiter===&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb von Leistungshalbleitern wird Abwärme erzeugt. Dies geschieht sowohl im eingeschalteten Zustand, als auch bei jedem Ein- und Ausschalten.&lt;br /&gt;
Um eine Überhitzung und damit eine Zerstörung des Bauteiles zu verhindern muß diese Wärmeenergie entsprechend abgeführt werden. Ab einer Verlustleistung von 1..5W - je nach Größe des Bauteiles - ist es nicht mehr ausreichend wenn das Bauteil diese Energie nur abstrahlt. Am häufigsten werden diese Bauteile auf einen [[Kühlkörper]] geschraubt oder geklemmt, selten geklebt. &lt;br /&gt;
&lt;br /&gt;
Sowohl die Oberfläche des Kühlkörpers als auch des wärmeerzeugende Bauteiles sind nicht eben und weisen eine gewisse Rauhigkeit auf. Dies bedeutet, daß sich die zwei Oberflächen nur punktuell berühren (meist nur mit wenigen Prozent der Gesamtfläche) und nicht auf der gesamten Fläche. &lt;br /&gt;
&lt;br /&gt;
Luft hat eine sehr schlechte Wärmeleitfähigkeit und die Luft, die zwischen den zwei Oberflächen liegt, verhindert eine Wärmeleitung zwischen den zwei Teilen sehr effektiv. Als Daumenwert kann man sagen, daß 1µm Luft in etwa einem absoluten Wärmewiderstand von ca. 1K/W entspricht... jedoch wird es sich nur in den seltensten Fällen nur um einen Mikrometer handeln, meisten deutlich mehr. &lt;br /&gt;
&lt;br /&gt;
====Wärmeleitmaterialien:====&lt;br /&gt;
&lt;br /&gt;
Diese Materialien verbessern die thermische Verbindung zwischen einem Bauteil, das Wärme erzeugt, und dem Bauteil, das diese Wärme durch Wärmestrahlung, Konvektion oder Wärmeleitung in ein Kühlmittel (Zwangskühlung durch Luft oder Wasser) abführt. Diese Materialien werden zwar &amp;quot;wärmeleit&amp;quot; -Folie bzw. -Paste genannt, leiten die Wärme jedoch nicht besonders gut...aber immer noch um mindestens den Faktor 100 besser als Luft... und genau das ist der Grund, warum diese verwendet werden müssen. (Kupfer leitet Wärme um den Faktor 15400 besser als Luft) Die Pasten enthalten meist Öle bzw. Wachse und Fette als Bindemittel und zur besseren Wärmeleitung Metalloxide bzw. Metall- oder Kohlenstoffpartikel als wärmeleitende Füllstoffe. Achtung: Die meisten Pasten neigen zur Austrocknung, verlieren also nach ca. 5 Jahren ihre wärmeleitenden Fähigkeiten und sind nur mehr als &amp;quot;Krümel&amp;quot; sichtbar.&lt;br /&gt;
&lt;br /&gt;
Besondere Beachtung finden die Wärmeleitfolien, die auf beiden Seiten eine thermisch leitfähige, wachsartige Beschichtung aufweisen. Diese Beschichtung schmilzt unter Wärmeeinwirkung auf und füllt die Spalten zwischen den Oberflächen besonders gut. Folien dieser Art werden &amp;quot;Phase Change&amp;quot; Material genannt. Diesererste Schmelzprozeß erfordert unter Umständen ein Nachspannen des Bauteiles nach dem ersten Aufheizen, da sich durch den Druck die Schichtdicke verringern kann. Achtung: VOR dem Aufheizen und Nachspannen hat die Wärmeleitfähigkeit noch nicht die möglichen Minimalwerte erreicht. Zum Teil ist die Wärmeanbindung noch um Faktoren schlechter, daher beim ersten Einschalten noch nicht voll belasten.&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Wärmeleitfähigkeit von verschiedenen Materialien&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Material || Wärmeleitfähigkeit&amp;lt;br&amp;gt; [W/(m*K)] || Kommentar&lt;br /&gt;
|-&lt;br /&gt;
|Kupfer		|| 370 || schwankt zwischen ca. 350..400&lt;br /&gt;
|-&lt;br /&gt;
|Aluminium		|| 220 || &lt;br /&gt;
|-&lt;br /&gt;
|Stahl		|| 50 || hochlegierte Stähle &amp;lt;20&lt;br /&gt;
|-&lt;br /&gt;
|Eisen          	|| 80||&lt;br /&gt;
|-&lt;br /&gt;
|Silber		|| 430 ||&lt;br /&gt;
|-&lt;br /&gt;
|Zinn		||  67 ||&lt;br /&gt;
|-&lt;br /&gt;
|Blei		|| 35||&lt;br /&gt;
|-&lt;br /&gt;
|Wärmeleitpasten	|| 3..10 ||&lt;br /&gt;
|-&lt;br /&gt;
|Luft		|| 0,024 ||&lt;br /&gt;
|-&lt;br /&gt;
|Wasser		|| 0,6||&lt;br /&gt;
|-&lt;br /&gt;
|Öl		|| 0,15||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Wärmeleitfähigkeit von AUSGEWÄHLTEN Isolierfolien  um dem Nutzer die Entscheidung zu erleichtern. Wenn jemand gute und bezahlbare Folien findet/kennt, bitte hier mit allen Daten angeben. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Material || Wärmeleitfähigkeit&amp;lt;br&amp;gt;[W/(m*K)] || Größe / Menge ||Bezugsquelle || ungefähre&amp;lt;br&amp;gt;Kosten&lt;br /&gt;
|-&lt;br /&gt;
|WÄRMELEITFOL.86/82 ROT ||6,5 ||100x100x0,25mm || C|| 14€&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Hinweis: &amp;lt;br&amp;gt; Die Wärmeleitfähigkeit von Folien bezieht sich ausschließlich auf die Folie selbst. Selbst unter besten Bedingungen wird man die genannten Werte nicht erreichen, da durch den Übergang vom Bauteil in die Folie und von dort in den Kühlkörper ein zusätzlicher Wärmewiderstand entsteht. Eine Verschlechterung von ca. 30% oder mindestens 0,5K/W bei einem TO220-Bauteil ist zu erwarten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Wärmeleitfähigkeit von AUSGEWÄHLTEN Wärmeleitpasten um dem Nutzer die Entscheidung zu erleichtern:&amp;lt;br&amp;gt; Wenn jemand gute und bezahlbare Pasten findet/kennt, bitte hier mit allen Daten angeben. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Material || Wärmeleitfähigkeit&amp;lt;br&amp;gt;[W/(m*K)] || Größe / Menge ||Bezugsquelle || ungefähre&amp;lt;br&amp;gt;Kosten&lt;br /&gt;
|-&lt;br /&gt;
|Artic Silver  	||8,9  ||  3,5g || C || 13,95€ &lt;br /&gt;
|-&lt;br /&gt;
|Standard Pasten auf Silikonbasis ||3,0|| 3g..150g|| C / Rei / ... || wenige €/g &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Montagerichtlinien:&lt;br /&gt;
* Die so beliebten Bohrungen in eine blanken Kühlfahne des Transistors wie z.&amp;amp;nbsp;B. beim TO-220 Gehäuse suggerieren eine fantastisch einfache Montierbarkteit. Wird die Schraube aber nur ein klein wenig zu fest angezogen, verformt sich das Kupfer der Kühlfahne und sorgt dafür, daß sich der Kunststoff umpresste Teil des Transistors ein klein wenig abhebt. Dies hat eine deutlich schlechtere Wärmeanbindung zur Folge. Die isolierte Bohrung bei vollständig umspritzten - nicht zu verwechseln mit auch auf der Rückseite isolierten -  Bauteilen umgeht dieses Risiko, genauso wie der nachfolgende Montagevorschlag.&lt;br /&gt;
* Bei hohen Verlustleistungen ist zu empfehlen, das Bauteil gegenüber der Stelle aufzupressen, an der die Verlustleistung entsteht, also direkt auf dem Kunststoff des Transistors über dem Chip.&lt;br /&gt;
* Werden mehrere Bauteile parallel auf dem Kühlkörper montiert sollte zwischen den Bauteilen MINDESTENS soviel Abstand vorgesehen werden, wie die Breite des Bauteiles beträgt. Dies vermindert die gegenseitige, thermische Beeinflussing der Bauteile und ermöglicht eine bessere Wärmeabfuhr&lt;br /&gt;
* Zur Montage mehrerer Bauteile eignet sich eine Metallschiene die direkt auf den Kunststoff drückt sehr gut. Zwischen &#039;&#039;&#039;jedem&#039;&#039;&#039; Bauteil ist ein Verschraubungspunkt vorzusehen, damit jedes Bauteil gleichmäßig aufgedrückt wird.&lt;br /&gt;
* Vor dem Aufbringen der Paste/Folie sowohl Bauteil als auch Kühlkörper mit Alkohol reinigen.&lt;br /&gt;
* Die Wärmeleitwerte für eine Paste beziehen sich auf eine meist nicht genannte  aber trotzdem MINIMALE Schichtdicke. Diese gelingt relativ reproduzierbar, wenn die Paste mit einem flachen Gegenstand (Rasierklinge, Lineal, ...) aufgebracht, verteilt und vorsichtig abgezogen wird, sodaß nur eine &#039;&#039;&#039;dünne&#039;&#039;&#039; Schicht auf dem Kühlkörper verbleibt. Dies erfordert einige Übung. Paste aufhäufeln, Bauteil eindrücken und befestigen erzielt bei weitem nicht die optimale Kühlleistung.&lt;br /&gt;
&lt;br /&gt;
==== Kühlkörper====&lt;br /&gt;
&lt;br /&gt;
Siehe Artikel [[Kühlkörper]].&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Hinweise ==&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen bitte per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel soll dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[FET]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Aquarium_Controller&amp;diff=43206</id>
		<title>Aquarium Controller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Aquarium_Controller&amp;diff=43206"/>
		<updated>2010-02-13T19:42:23Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Temperatursensor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
[[Bild:AquaCtrlHousing2.jpg|thumb|400px]]&lt;br /&gt;
&lt;br /&gt;
Die folgende Artikel beschreibt den Aquarium Controller, ein Gerät, mit dem alle elektischen Geräte eines Aquariums zentral gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Ziel war es, ein Gerät zu entwickeln, welches nicht nur als kurzweiliges Experiment meinen Hobbyzwecken dienen sollte. Vielmehr war es wichtig, die Liste der Features so einzugrenzen, dass in endlicher und der mir zur Verfügung stehenden Zeit ein nutzbringendes Gerät entsteht, welches zuverlässig seinen Dienst verrichtet.&lt;br /&gt;
&lt;br /&gt;
End of Einleitung...&lt;br /&gt;
&lt;br /&gt;
== Anschlußmöglichkeiten ==&lt;br /&gt;
&lt;br /&gt;
Steuerung folgender Geräte:&lt;br /&gt;
&lt;br /&gt;
* Taglicht (Leuchtstoffröhren, 230V)&lt;br /&gt;
* Nachtlicht (LED-Leiste, 12V)&lt;br /&gt;
* CO2 (230V)&lt;br /&gt;
* Heizung (230V)&lt;br /&gt;
* Pumpe (230V)&lt;br /&gt;
&lt;br /&gt;
Anschluß für folgende Messwertaufnehmer:&lt;br /&gt;
&lt;br /&gt;
* 1 x Temperatursensor (NTC)&lt;br /&gt;
* 1 x pH-Sonde&lt;br /&gt;
&lt;br /&gt;
Sonstiges:&lt;br /&gt;
&lt;br /&gt;
* Eingebautes Netzteil, Anschluß direkt an 230V&lt;br /&gt;
* Eingebaute Steckdosen für die 230V-Verbraucher&lt;br /&gt;
* RS232-Schnittstelle zum Debuggen und Fernsteuern&lt;br /&gt;
* Anschluß eines DCF77-Empfängers&lt;br /&gt;
&lt;br /&gt;
== Elektronik ==&lt;br /&gt;
&lt;br /&gt;
Das Herz des Designs ist ein AVR-Prozessor ATmega644, an den sämtliche Komponenten direkt angeschlossen sind:&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrlSchematic001.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensor ===&lt;br /&gt;
&lt;br /&gt;
Als Temperatursensor kommt ein NTC-Sensor, Typ Epcos B57861S0103, 10kΩ&lt;br /&gt;
zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
Die Begradigung der Kennlinie erfolgt über einen Polynom 3. Ordnung.&lt;br /&gt;
&lt;br /&gt;
Der Abgleich erfolgt rein in Software über zwei Messpunkte, bei denen Soll- und Istwert anzugeben sind.&lt;br /&gt;
&lt;br /&gt;
=== pH-Sonde ===&lt;br /&gt;
&lt;br /&gt;
Tatsächlich ist diese Schnittstelle bis heute (Stand 6.09.2009) ungetestet, müßte aber theoretisch funktionieren (Ich liebe diesen Satz: Damit ist die Schaltung zum Scheitern verurteilt)&lt;br /&gt;
&lt;br /&gt;
Der Abgleich erfolgt rein in Software über zwei Messpunkte, bei denen Soll- und Istwert anzugeben sind.&lt;br /&gt;
&lt;br /&gt;
=== Leuchtstoffröhren (Taglicht) ===&lt;br /&gt;
&lt;br /&gt;
Die Leuchtstoffröhren können per Software geschaltet werden und über eine 1-10V-Schnittstelle in der Helligkeit gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
=== LED-Leiste (Mondlicht) ===&lt;br /&gt;
&lt;br /&gt;
Die LED-Leiste wird über einen PWM-Ausgang in der Helligkeit gesteuert, wobei eine Spannung von 12V für die Versorgung der LEDs verwendet wird.&lt;br /&gt;
&lt;br /&gt;
=== DCF77-Empfänger ===&lt;br /&gt;
&lt;br /&gt;
Um eine optimale Ausrichtung der Antenne zu erzielen, wird der DCF77-Empfänger über eine 3-poligen Klinkenstecker extern angeschlossen. Im Einsatz befindet sich jener Empfänger aus dem Doppelheft der Elrad 7/8 &#039;85 (welche ich eigenhändig gekauft habe ;-)&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Ooops, das riecht nach Arbeit. Behelfsmäßig kann hier der sich praktisch selbst erklärende Quelltext ;-) herunter geladen werden: [[Media:AquaCtrlSrc016.zip|Aquarium Controller Firmware V0.16]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praxisbetrieb ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät ging am 11.06.2009 mit der Softwareversion V0.15 unter Realbedingungen in den Dauerbetrieb. Seitdem ergaben sich die Änderungen in der Firmware, ansonsten sind keine Auffälligkeiten zu verzeichnen (Stand 6.09.2009).&lt;br /&gt;
&lt;br /&gt;
Im Hochsommer kam es zu einer übermäßigen Wassererwärmung (&amp;gt;29°C), welche das Gerät ordnungsgemäß als Alarmsignal ausgab. Die Abhilfe ist in diesem Fall rein manueller Natur: Klappen auf, um das Wasser herunterzukühlen.&lt;br /&gt;
&lt;br /&gt;
== Impressionen ==&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Bilder von den ersten Tests, im rechten Bild sieht man die mit Silikon an die Leuchtstoffröhreneinheit angeklebte LED-Leiste.&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrl 1st Test 01.jpg|500px]]  [[Bild:AquaCtrl 1st Test 02.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Das geöffnete Gerät und das Aquarium komplett (die Steuerung ist rechts unten zu sehen):&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrl Opened.jpg|500px]]  [[Bild:Aquarium_Complete.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Verbesserungen ==&lt;br /&gt;
&lt;br /&gt;
* Das Design verzichtet komplett auf geschaltete Stromversorgungen um Problemen mit der Meßwertaufnahme vorzubeugen. Damit ist das Gerät aber nicht gerade ein Stromsparwunder: Die Umstellung der Erzeugung der Betriebsspannungen 5V/12V auf Stepdown wären sinnvoll. Weiterhin würde man in diesem Fall die Hintergrundbeleuchtung an 5V anschließen, was eine deutliche Reduzierung der Leistungsaufnahme bedeuten würde.&lt;br /&gt;
&lt;br /&gt;
* Einsatz einer Anzeige mit mehr Zeilen oder gleich ein Grafikdisplay um alle relevanten Informationen gleichzeitig darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
* Enstörmaßnahmen an den Schaltkontakten der Relais.&lt;br /&gt;
== Firmware-History ==&lt;br /&gt;
&lt;br /&gt;
=== V0.14 ===&lt;br /&gt;
* Erste veröffentlichte Version&lt;br /&gt;
&lt;br /&gt;
=== V0.15 ===&lt;br /&gt;
* Unterstützung der Alarmfunktionen&lt;br /&gt;
* Bugs bereinigt in den Funktionen &#039;NewSwitchEvent&#039; und &#039;NewDimEvent&#039;&lt;br /&gt;
&lt;br /&gt;
=== V0.16 ===&lt;br /&gt;
* Minimal einstellbare Temperatur ist 0°, um auch eine kleine Hysterese bei der Temperaturregelung einstellen zu können&lt;br /&gt;
* Default Temperatur-Hysterese ist 2.0°&lt;br /&gt;
* Default pH-Hysterese 0.2&lt;br /&gt;
* Verlängerte Alarm-Wiederholzeit&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Royer-Converter&amp;diff=42531</id>
		<title>Royer-Converter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Royer-Converter&amp;diff=42531"/>
		<updated>2010-01-24T19:38:23Z</updated>

		<summary type="html">&lt;p&gt;Simon: Weiterleitung nach Royer Converter erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Royer Converter]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED_dimmen&amp;diff=41245</id>
		<title>LED dimmen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED_dimmen&amp;diff=41245"/>
		<updated>2009-12-09T16:18:02Z</updated>

		<summary type="html">&lt;p&gt;Simon: Weiterleitung nach LED-Fading erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LED-Fading]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Dos_and_don%27ts_-_Platinenlayout&amp;diff=40204</id>
		<title>Diskussion:Dos and don&#039;ts - Platinenlayout</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Dos_and_don%27ts_-_Platinenlayout&amp;diff=40204"/>
		<updated>2009-10-26T15:24:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Diskussion:Dos and don&amp;#039;ts - Platinenlayout“ nach „Diskussion:Richtiges Designen von Platinenlayouts“ verschoben:&amp;amp;#32;Mit dem jetzigen Namen findet den Artikel kein Mensch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Diskussion:Richtiges Designen von Platinenlayouts]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Richtiges_Designen_von_Platinenlayouts&amp;diff=40203</id>
		<title>Diskussion:Richtiges Designen von Platinenlayouts</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Richtiges_Designen_von_Platinenlayouts&amp;diff=40203"/>
		<updated>2009-10-26T15:24:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Diskussion:Dos and don&amp;#039;ts - Platinenlayout“ nach „Diskussion:Richtiges Designen von Platinenlayouts“ verschoben:&amp;amp;#32;Mit dem jetzigen Namen findet den Artikel kein Mensch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hoi! Ich würde vorschlagen, den Artikeltitel umzudrehen. --[[Benutzer:Yahp|Yahp]] 00:26, 17. Dez 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Letzthin gab&#039;s mal einen Thread, der deutlich machte, warum 100nF||10nF wenig sinnvoll ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Stelle mit diesem Text, reicht das? [[Benutzer:Stefan|Stefan]] 14:44, 7. Feb. 2008 (CET)&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Niemals unterschiedliche große Abblock-Kondensatoren parallel schaltet, z.B. 10nF und 100nF. Es entstehen durch die parasitären Elemente Resonanzstellen, die genau das gegenteil des gewünschten erzeugen!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
_niemals_ ist auch nicht ganz richtig. gerade bei hf-schaltungen sieht man oft 100nF || ~22pF als hf-block.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Dos_and_don%27ts_-_Platinenlayout&amp;diff=40202</id>
		<title>Dos and don&#039;ts - Platinenlayout</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Dos_and_don%27ts_-_Platinenlayout&amp;diff=40202"/>
		<updated>2009-10-26T15:24:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Dos and don&amp;#039;ts - Platinenlayout“ nach „Richtiges Designen von Platinenlayouts“ verschoben:&amp;amp;#32;Mit dem jetzigen Namen findet den Artikel kein Mensch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Richtiges Designen von Platinenlayouts]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Richtiges_Designen_von_Platinenlayouts&amp;diff=40201</id>
		<title>Richtiges Designen von Platinenlayouts</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Richtiges_Designen_von_Platinenlayouts&amp;diff=40201"/>
		<updated>2009-10-26T15:24:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Dos and don&amp;#039;ts - Platinenlayout“ nach „Richtiges Designen von Platinenlayouts“ verschoben:&amp;amp;#32;Mit dem jetzigen Namen findet den Artikel kein Mensch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim Erstellen von Platinenlayouts muss man vieles beachten. Dieser Artikel zählt auf, was man machen sollte (Dos), und was man keinesfalls machen sollte (Don&#039;ts).&lt;br /&gt;
&lt;br /&gt;
== Gutes Platinenlayout (Dos) ==&lt;br /&gt;
&lt;br /&gt;
* Berechne vor dem Zeichnen, welche Ströme über die Leiterbahn fließen werden und bestimme anhand dessen ihre Breite. Faustformel: 0,35mm können mit einem Ampere belastet werden. Weiteres siehe unter [[Leiterbahnbreite]].&lt;br /&gt;
* Halte die Leiterplatte klein und kompakt. Jeder Leiterzug wirkt wie eine Antenne, welche Störungen aussendet oder empfängt. Je länger um so intensiver. Zumindest auf der Eingangsseite.&lt;br /&gt;
* Nutze die Flächen zwischen den Leiterzügen und verbinde sie mit Masse (Polygone). So kann man Strahlung von außen abschirmen und Abstrahlung minimieren. Vermeide aber freie Kupferflächen, die nicht an GND angeschlossen sind. &lt;br /&gt;
* Geize nicht mit Blockkondensatoren. Für jeden VCC-Pin o.ä. ist mindestens ein 100nF Kondensator, bei schnelleren Sachen evtl. ein kleinerer (z.B. 10nF) einzusetzen. Ausserdem kann es meist notwendig, pro IC noch zusätzlich einen 10µF Kondensator und eine Ferritperle (engl. bead) zur Entkopplung von Vcc zu spendieren.&lt;br /&gt;
* Digitale und analoge Signale getrennt routen und nur in einem Punkt verbinden. Und zwar idealerweise am [[AD-Wandler]], wenn dieser vorhanden ist, sonst in der Nähe des Spannungsreglers. Eine Massefläche für analoge und digitale Schaltungsteile sollte durchgängig sein, getrennte Masseflächen sind nur in sehr seltenen Fällen sinnvoll. &lt;br /&gt;
* Nutze die Anschlüsse der bedrahteten Bauelemente für Durchkontaktierungen.&lt;br /&gt;
* Wenn es sich nicht vermeiden lässt 230V (400V) Netzspannung auf die Platine zu führen, so trenne die Bereiche der Kleinspannung und Netzspannung deutlich voneinander und mit vieeel Platz. Dabei unterscheidet man zwischen Luft- und Kriechstrecken. Eine Kriechstrecke ist die Strecke auf der Oberfläche einer Leiterplatte oder eines Bauteils. Die Luftstrecke ist sozusagen die kürzeste Verbindung zwischen den beiden Potentialen. Die Luft- und Kriechstrecken betragen zwischen 3 und 8 mm. Der notwendige Abstand hängt von der Gefährdung ab, siehe auch [[Leiterbahnabstände]].&lt;br /&gt;
&lt;br /&gt;
== Schlechtes Platinenlayout (Don&#039;ts) ==&lt;br /&gt;
&lt;br /&gt;
* Analoge und digitale Schaltungsteile direkt ohne Filter aus der gleichen Stromquelle versorgen.&lt;br /&gt;
* Digitale Signalleitungen in unmittelbarer Nachbarschaft analoger Signale.&lt;br /&gt;
* Zu wenig Abstand zwischen Leiterplattenrand und Leiterzügen.&lt;br /&gt;
* 90° oder spitze Winkel beim Routen von hochfrequenzführenden Leiterbahnen. (Wegen der Reflexionen. Die Effekte werden jedoch erst ab 1GHz und höher wirklich messbar. Mehr dazu im Artikel [[Wellenwiderstand#Leitungsf.C3.BChrung_und_Layout | Wellenwiderstand]])&lt;br /&gt;
* Durchkontaktierungen auf SMD-Pads.&lt;br /&gt;
* Durchkontaktierungen nur von einer Seite mit Stopplack verschließen.&lt;br /&gt;
&lt;br /&gt;
== Beträge im Forum ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/forum/read-6-178710.html#254235 Regeln beim Platinenentwurf]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93602#804338 Vorschlag für Lötpads bei Hobbyeinsteigerplatinen]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
* [[EMV]]&lt;br /&gt;
* [[Eagle im Hobbybereich]]&lt;br /&gt;
* [http://www.ilfa.de/download/C/pb-id=wd7c584f8c9d73e6df32d52cabe12bcbbba8624a4eci8/453/Design-Optimierung.pdf Optimierung von Layouts]&lt;br /&gt;
*[http://www.ilfa.de/de/_design/index.html?a-Common_menu-n_Selected=6&amp;amp;button-CurrentMenuTree-setmenutree=&amp;amp;a-Common_storyOutput-n_SearchNodeId=6&amp;amp;button-Common_storyOutput-find_story=&amp;amp;uypb-id=wd7c584f8c9d73e6df32d52cabe12bcbbba8624a4eci8 Weitere Dokumente zum Thema professionelle Platinenherstellung]&lt;br /&gt;
* [http://www.analog.com/library/analogDialogue/Anniversary/12.html Grounding (Again)], Ask The Applications Engineer - 12, Fa. Analog Devices, (englisch)&lt;br /&gt;
&amp;lt;!-- * http://edaboard.com --&amp;gt;&lt;br /&gt;
* [http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=115 Designing a Better PCB] von Sparkfun (engl.)&lt;br /&gt;
&lt;br /&gt;
[[Category:Platinen]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:AVR_PIC_51-Vergleich&amp;diff=39819</id>
		<title>Diskussion:AVR PIC 51-Vergleich</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:AVR_PIC_51-Vergleich&amp;diff=39819"/>
		<updated>2009-10-10T15:24:45Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Diskussion:AVR PIC 51-Vergleich“ nach „Diskussion:Mikrocontroller Vergleich“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Diskussion:Mikrocontroller Vergleich]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Mikrocontroller_Vergleich&amp;diff=39818</id>
		<title>Diskussion:Mikrocontroller Vergleich</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Mikrocontroller_Vergleich&amp;diff=39818"/>
		<updated>2009-10-10T15:24:45Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „Diskussion:AVR PIC 51-Vergleich“ nach „Diskussion:Mikrocontroller Vergleich“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auch hier sollte man den urspruenglichen Author noch fragen, ob er mit einer Veroeffentlichung hier im Wiki, d.h. dann auch mit den Lizenzbedingungen, einverstanden ist...&lt;br /&gt;
&lt;br /&gt;
Bin einverstanden - A.K.&lt;br /&gt;
&lt;br /&gt;
== Vergleich der Grenzwerte ==&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Was mich noch interessieren würde, wären ein Vergleich der Grenzwerte der AVR-, Pic- und 8051er Modelle. Also Programmspeichergrößen, E²PROM-Größen, RAM-Größen, MIPS und MHz.&lt;br /&gt;
Suche schon seit einiger Zeit nach diesen Informationen, kann sie aber nirgends finden.&lt;br /&gt;
Vielleicht könntet ihr/du mir weiterhelfen.&lt;br /&gt;
&lt;br /&gt;
Danke im Vorraus,&lt;br /&gt;
&lt;br /&gt;
mit freundlichen Grüßen&lt;br /&gt;
Tom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt zur Skalierbarkeit könnte schon etwas mehr Details vertragen. Allein - mir fehlt da die Übersicht, besonders bei den i51ern mit beliebig vielen Herstellern. MIPS/MHz zu vergleichen ist arg problematisch und konfliktträchtig, Vorsicht dabei - schon mit meinen knappen Kommentaren zur C-Eignung bin ich offenbar einem PIC-Freund sehr auf die Nerven gegangen.&lt;br /&gt;
&lt;br /&gt;
Letztlich helfen aber meist nur die parametrischen Suchseiten vom Hersteller. Und wenn es i51-er mit 0,5MB Flash geben mag, heisst das nicht, dass man für Neu-Projekte darauf setzen sollte. Darum meine Bemerkung, jenseits von natürlichen Grenzen (bei 8bittern 40-60KB oder notfalls KW Flash) den hier betrachteten Sektor zu verlassen.&lt;br /&gt;
&lt;br /&gt;
A.K.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Hi!&lt;br /&gt;
Als interessierter Neuling würde mich bei so einem Vergleich auch den Aufwand der Grundbeschaltung interessieren. Was wird ausser dem Controller benötigt? Kosten der Entwicklerboards, günstige Alternativen? &lt;br /&gt;
MGF jan&lt;br /&gt;
&lt;br /&gt;
:Sehr gute Fragen, deren erschöpfende Antwort nicht so einfach ist. Bei Dingen, die man noch benötigt, fallen einem schnell Programmer ein und da werden Antworten gerade bei der Vielfalt der 8051&#039;er schnell diffus :) Nichtsdestotrotz können wir ja versuchen, dazu noch was einzubauen. Wegen Devkits kann man schon mal auf die vorhandenen Artikel verweisen. --[[Benutzer:Yahp|Yahp]] 22:08, 1. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die geänderte Sortierung bitte nicht wertend verstehen oder als Angriff nehmen :-) Ich bin der Meinung, dass eine gleichartige Sortierung in den einzelnen Abschnitten dem Erfassen der relevanten Informationen nur zuträglich ist. Alles in allem schreien diese Infos natürlich nach tabellarischer Darstellung, aber das wäre ein Monster von Tabelle... --[[Benutzer:Yahp|Yahp]] 22:36, 1. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Übersichtlichkeit ==&lt;br /&gt;
&lt;br /&gt;
Hallo, ich finde, dass der Artikel mit zunehmender Zahl an Codebeispielen einzelner Architekturen an abnehmender Übersichtlichkeit zu leiden beginnt. Je komplexer und weiter ausholend das Ganze ist, desto weniger wird der Einsteiger daraus entnehmen können... --[[Benutzer:Yahp|Yahp]] 01:18, 11. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
&lt;br /&gt;
Ein paar kleine Anmerkungen:&lt;br /&gt;
&lt;br /&gt;
* Compilerverfuegbarkeit: Das der gcc fuer AVR und msp gut handhabbar ist, liegt an der Verfuegbarkeit fertiger Linker-Skripts und Startup-Codes und nicht aussschliesslich &amp;quot;am gcc&amp;quot;. Hat man &amp;quot;vorgekaute&amp;quot; Linker-Skripte und Startup-Code fuer gcc/gas/ld und den betreffenden ARM-Controller, ist fuer Standardanwendungen auch keine &amp;quot;Handarbeit&amp;quot; mehr noetig. IAR auch keine gute Empfehlung, falls die Kickstart-Version nicht mehr ausreicht, da Anwendung und interne Einstellung sehr firmenspezifisch. Meiner Meinung bessere Alternative wenn schon kommerzieller Compiler: Keil Testversion. Auf 16kB beschraenkt bei Keil-eigenem Compiler, unbeschraenkt (ausser Debugger/Simulator) mit gcc-Toolchain von Keil. Bei spaeterem Umstieg auf &amp;quot;gnu-only&amp;quot; kann man viel des Gelernten mitnehmen.&lt;br /&gt;
&lt;br /&gt;
* Architektur: ARM: Thumb ist auf jeden Fall kompakt, muss aber nicht unbedingt langsamer sein, kommt auf Cache und Pipeline an, da Lesezugriff auf Programmspeicher/Flash viel Zeit verbraucht.&lt;br /&gt;
&lt;br /&gt;
* CPU-spezifische Erweiterungen: Sind die Besonderheiten zur Programmierung von ISRs nicht bei allen Plattformen Erweiterungen? Ob nun durch Macros/Attribute getarnt oder nicht. Falls &amp;quot;Progmem&amp;quot; fuer AVR als Erweiterung bezeichnet wird, muessten es die ISR Macros/Attribute auch. Vgl. auch gcc-Dokumentation &amp;quot;target specific...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Skalierbarkeit: ARM != ARM. Speicher/Pinanzahl ist nicht alles. Integrierte &amp;quot;Zellen&amp;quot; um den ARM-Kern sind teilweise unterschiedlich (vgl. z.B. Interrupt-System STR7/LPC2k/SAM7, UART LPC/AT91SAM7, ...). Uprade von zu klein gewordenem ARM-Controller zu einen groesseren eines anderen Herstellers mglw. mit viel Codeaenderung verbunden.&lt;br /&gt;
&lt;br /&gt;
* Interruptfeste I/O-Ports: warum die scheinbar bei allen ARM-GPIO uebliche SET/CLR-Methode nicht &amp;quot;interruptfest&amp;quot; sein soll, ist mir nicht klar. Wenn schon SAM7 &amp;quot;besser&amp;quot; als LPC2k (welcher? die &amp;quot;aelteren&amp;quot; oder auch die &amp;quot;neuen&amp;quot; lpc213x/214x), dann muesste man eigentlich die herstellerspezifische GPIO-Ansteuerung um den ARM-Kern erlaeutern.&lt;br /&gt;
&lt;br /&gt;
-- Martin Thomas&lt;br /&gt;
&lt;br /&gt;
* GCC Scripte: Wenn man mal saubere Versionen von crt.s und Linker-Scripten hat, ja dann. Einfach aus den Netz klauben ist arg problematisch, bei vielen fehlt beispielsweise der C++-Support, die Speicherparameter müssen angepasst werden, weil für das falsche Modell, die Exceptions heissen überall anders, ... Der Weg dahin ist die erwähnte Handarbeit und setzt recht viel Verständnis voraus.&lt;br /&gt;
&lt;br /&gt;
* Das Kriterium &amp;quot;Performance&amp;quot; würde m.E. den Rahmen sprengen. Ja, man kann nicht alle ARMs über einen Kamm scheren, mir ging es hier um die grundlegende Architektur, nicht die konkrete Implementierungen. Die &amp;quot;Krone&amp;quot; gebührt wohl ADuC7000 mit 16bit-Flash.&lt;br /&gt;
&lt;br /&gt;
* Skalierbarkeit: Bei 256KB Code dürfte der Anteil modellspezifischen Codes recht gering sein. Saubere Programmierung vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
* Erweiterungen: Wenn man ins crt.s einen besseren IRQ-Handler steckt, sind spezielle Frames nicht erforderlich. Nebenbei gibt&#039;s dann auch Thumb Interrupts, das IRQ/FIQ-Maskierungsproblem ist weg, und bei Interrupt-Nesting muss man sich nicht um den Stack-Switch kümmern. Aber wie auch immer, Exception-Attribute sind vergleichweise selten und unproblematisch, Erweiterungen für Datenadressierung durchziehen jedoch oft den ganzen Code.&lt;br /&gt;
&lt;br /&gt;
* Interruptfeste I/O-Ports: Bei LPC2000 fehlen SET/CLR bei der Richtungssteuerung. Bei Open-Drain Funktion wird aber genau damit der Pin gesteuert.&lt;br /&gt;
&lt;br /&gt;
* Compiler: yep, schreib&#039;s rein.&lt;br /&gt;
&lt;br /&gt;
-- A.K.&lt;br /&gt;
&lt;br /&gt;
== verfügbare Libs ==&lt;br /&gt;
&lt;br /&gt;
Ich denke ein sehr wichtiger Punkt wäre auch die Verfügbarkeit von kostenlosen Librarys. Denn man will ja das Rad nicht 2 mal erfinden.&lt;br /&gt;
&lt;br /&gt;
== Code zum Compiler-Vergleich ==&lt;br /&gt;
&lt;br /&gt;
Der Code zum Compiler-Vergleich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define CRC8POLY	0x18	//0X18 = X^8+X^5+X^4+X^0&lt;br /&gt;
&lt;br /&gt;
typedef unsigned char	data_t; // 8-Bit&lt;br /&gt;
//typedef unsigned	data_t; // 16/32-Bit&lt;br /&gt;
&lt;br /&gt;
data_t&lt;br /&gt;
crc8(data_t accu, data_t dat) reentrant&lt;br /&gt;
{&lt;br /&gt;
    data_t bit_counter = 8;&lt;br /&gt;
    do {&lt;br /&gt;
	data_t feedback = accu ^ dat;&lt;br /&gt;
	if (feedback &amp;amp; 1)&lt;br /&gt;
	    accu = accu ^ CRC8POLY;&lt;br /&gt;
	accu = (accu &amp;gt;&amp;gt; 1) &amp;amp; 0x7F;&lt;br /&gt;
	if (feedback &amp;amp; 1)&lt;br /&gt;
	    accu = accu | 0x80;&lt;br /&gt;
	dat = dat &amp;gt;&amp;gt; 1;&lt;br /&gt;
	bit_counter--;&lt;br /&gt;
    } while (bit_counter &amp;gt; 0);&lt;br /&gt;
    return accu;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This is based on code from :&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2002 Colin O&#039;Flynn&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of&lt;br /&gt;
this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in&lt;br /&gt;
the Software without restriction, including without limitation the rights to&lt;br /&gt;
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of&lt;br /&gt;
the Software, and to permit persons to whom the Software is furnished to do so,&lt;br /&gt;
subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all&lt;br /&gt;
copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS&lt;br /&gt;
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR&lt;br /&gt;
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER&lt;br /&gt;
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN&lt;br /&gt;
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- A.K.&lt;br /&gt;
&lt;br /&gt;
== EmbeddedArtists-Baords &amp;quot;sinnvoller konstruiert als die Olimex-Boards&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Das habe ich entfernt. Die früheren Olimex-Boards waren z.T. etwas seltsam designt, aber das ist IMO inzwischen nicht mehr der Fall, und die Boards vom EmbeddedArtists haben auch so ihre Merkwürdigkeiten (USB-Port nur zur Stromversorgung, Datenleitungen überhaupt nicht angeschlossen).&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Wir können ja mal eine Sammlung an Denkwürdigkeiten aufmachen. &lt;br /&gt;
&lt;br /&gt;
Für Olimex hätte ich da zu bieten:&lt;br /&gt;
* Sub-D-Buchsen so dicht beisammen, dass oftmals nur ein Stecker reingeht, der zweite passt dann nicht mehr (lpc2129). Neuere Boards sind zwar besser, aber am alten Layout wird natürlich nichts geändert.&lt;br /&gt;
* Nett, eine Reset-Control per DTR einzubauen, wie Philips nahelegt. Aber ziemlich sinnlos, wenn man konsequent die Bootselect-Control per RTS vergisst. Unverändert bis heute.&lt;br /&gt;
* Prima Idee, einen CAN Controller mit einem Baudratenquarz zu versehen. Schon mal versucht, aus 59MHz irgend eine sinnvolle CAN-Rate abzuleiten? Ich verstehe ja, dass 10 und 12MHz ein Problem sind, aber RS232 dürfte mit 15 statt 14,7MHz kein Problem haben und CAN wäre glücklich.&lt;br /&gt;
&lt;br /&gt;
Und zu Embedded-Artists:&lt;br /&gt;
* Sub-D Buchse auf dem Baseboard so genial plaziert, dass alle Quickstart-Boards mit Sub-D (also fast alle) grundsätzlich nicht ohne zusätzliche Etage etwas kontaktunfreudiger Zwischenstecker reinpassen, von denen immerhin ein paar vom falschen Typ beiliegen. Immerhin haben sie&#039;s allerdings schon selber gemerkt und laut Auskunft die nä£¨ste Charge umkonstruiert.&lt;br /&gt;
* Ein Ground-Plane auf der Lötseite einer Lötpunktrasterfläche erschwert eine sinnvolle Nutzung dieser Fläche erheblich (oben ist&#039;s ok, aber unten kriegt man so keinen blanken Draht mehr drauf). Ausserdem merkt man, dass die noch sehr junge Augen haben müssen. Die freien Flächen zwischen Lötauge und Umgebung sind so extrem eng, dass ich ?lles mit der Lupe dr?uss, was sonst nur in Ausnahmefällen nötig ist.&lt;br /&gt;
* Bei einem der Quickstart-Boards die Pfostenleisten im Abstand von 850mil plaziert. Was folglich nirgends reinpasst, wo man ein solches Board braucht, denn wer mit einem 50mil-Raster etwas anfangen kann, der braucht kein solches Board. Abhilfe angekündigt.&lt;br /&gt;
&lt;br /&gt;
A.K.&lt;br /&gt;
&lt;br /&gt;
== Interruptprioritäten beim PIC (16F84) ==&lt;br /&gt;
&lt;br /&gt;
Beim PIC kann man den einzelnen Interrupts Prioritäten zuweisen, anderfalls hätte meine SMBUS Implementiereung in den 16F84 nicht funktioniert. Der SMBUS braucht einfach eine höhere Priorität, sonst gibt es &amp;quot;Bit-verschlucker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Langes Gerede kurzer Sinn, hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
org 0x04&lt;br /&gt;
goto INT_VECTOR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INT_VECTOR:&lt;br /&gt;
  &amp;lt;status &amp;amp; W sichern (push)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  btfsc INTCON, 6&lt;br /&gt;
    goto INT_VECTOR_1&lt;br /&gt;
&lt;br /&gt;
  btfsc INTCON, 5&lt;br /&gt;
    goto INT_VECTOR_2&lt;br /&gt;
&lt;br /&gt;
  btfsc INTCON, 4&lt;br /&gt;
    goto INT_VECTOR_3&lt;br /&gt;
&lt;br /&gt;
  INT_VECTOR_EXIT:&lt;br /&gt;
  &amp;lt;status &amp;amp; W wiederherstellen (pop)&amp;gt;&lt;br /&gt;
  retfie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INT_VECTOR_1:&lt;br /&gt;
  &amp;lt;ISR&amp;gt;&lt;br /&gt;
  goto INT_VECTOR_EXIT&lt;br /&gt;
&lt;br /&gt;
INT_VECTOR_2:&lt;br /&gt;
  &amp;lt;ISR&amp;gt;&lt;br /&gt;
  goto INT_VECTOR_EXIT&lt;br /&gt;
&lt;br /&gt;
INT_VECTOR_3:&lt;br /&gt;
  &amp;lt;ISR&amp;gt;&lt;br /&gt;
  goto INT_VECTOR_EXIT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, hier kann man sehen dass INT_VECTOR_1 die hÃ¶chste PrioritÃ¤t hat.&lt;br /&gt;
&lt;br /&gt;
- Feadi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Priorisierte Interrupts heisst üblicherweise: Ein höher priorisierter Interrupt kann einen niedriger oder gleich priorisierten Interrupt-Handler unterbrechen, aber nicht umgekehrt. Und in diesem Kontext ist entsprechender Hardware-Support gemeint. &lt;br /&gt;
&lt;br /&gt;
Was damit nicht gemeint ist: Welcher Vektor bei gleichzeitig auflaufenden Anforderungen vom Prozessor angesprungen wird (AVR) oder vom Interrupt-Handler nacheinander abgefragt wird (o.A. Beispiel - sowas geht überall und immer, kann also kein Kriterium sein).&lt;br /&gt;
&lt;br /&gt;
Mit vektorisieren Interrupts ist es ähnlich. Auch da lässt sich natürlich immer wie gezeigt ein Handler schreiben, der alle Quellen abfragt und entsprechend verzweigt. Wenn sowas in Hardware geschieht, dann sind die Interrupts im Sinne des Textes vektorisiert, sonst nicht.&lt;br /&gt;
&lt;br /&gt;
A.K.&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_PIC_51-Vergleich&amp;diff=39817</id>
		<title>AVR PIC 51-Vergleich</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_PIC_51-Vergleich&amp;diff=39817"/>
		<updated>2009-10-10T15:24:44Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „AVR PIC 51-Vergleich“ nach „Mikrocontroller Vergleich“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Mikrocontroller Vergleich]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mikrocontroller_Vergleich&amp;diff=39816</id>
		<title>Mikrocontroller Vergleich</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mikrocontroller_Vergleich&amp;diff=39816"/>
		<updated>2009-10-10T15:24:44Z</updated>

		<summary type="html">&lt;p&gt;Simon: hat „AVR PIC 51-Vergleich“ nach „Mikrocontroller Vergleich“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein paar Kriterien für den CPU-Core und die µC-Familie.&lt;br /&gt;
&lt;br /&gt;
==Compiler verfügbar, bzw wieviel will man dafür ausgeben?==&lt;br /&gt;
&lt;br /&gt;
Und wie verbreitet ist der Compiler? Finde ich dafür Hilfe, beispielsweise in Form von Support-Foren?&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;[[ARM]]&#039;&#039;&#039;, &#039;&#039;&#039;[[AVR]]&#039;&#039;&#039; und &#039;&#039;&#039;[[MSP430]]&#039;&#039;&#039; gibt es mit GCC einen guten und kostenlosen Compiler. Bei &#039;&#039;&#039;ARM&#039;&#039;&#039; sind jedoch die Schritte zum fertigen Programm recht komplex und Library/Laufzeitsystem benötigen einige Handarbeit. &lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;ARM&#039;&#039;&#039; gibt es von IAR eine auf 32KB begrenzte kostenlose Version eines umgänglicheren kommerziellen Compilers.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren gibt es für &#039;&#039;&#039;[[MSP430]]&#039;&#039;&#039; eine auf 4KB begrenzte kostenlose Version der Entwicklungsumgebung von IAR und eine auf 8KB begrenzte kostenlose Version der Entwicklungsumgebung Code Composer Essentials (basiert auf Eclipse) von Texas Instruments.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;[[PIC]]&#039;&#039;&#039; und &#039;&#039;&#039;[[8051]]&#039;&#039;&#039; kann man entweder den Open-Source-Compiler [http://www.sf.net/projects/sdcc SDCC] verwenden (brauchbar, aber nicht mit GCC vergleichbar) oder diverse Löhnwares, bis 4-stellige Beträge (Keil: 2600&amp;amp;#8364; , freie Version codegrösseneingeschränkt), teils auch als Demoversion mit Tricks. Auch der offizielle C18-Compiler kann als großzügiges Demo heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;[[PIC]] 10/12/16&#039;&#039;&#039; gibt es den HI-TECH C-PRO von HI-TECH(Microchip) in einer freien Version. Der CC5X unterstützt zwar keine High-End PICs, dafür die meisten Mid-Range. Die einzige Einschränkung der freien Version des CC5X ist die Limitierung auf 1024 Instruktionen pro Modul, nicht so gute Codeoptimierung und die Begrenzung von Variablen auf 16-Bit.&lt;br /&gt;
&lt;br /&gt;
Für die &#039;&#039;&#039;[[PIC]] 18&#039;&#039;&#039; gibt es den C18 von Microchip. Er ist frei erhältlich und hat ähnliche Einschränkungen wie der C30.&lt;br /&gt;
&lt;br /&gt;
Für die &#039;&#039;&#039;[[PIC24]]&#039;&#039;&#039; und &#039;&#039;&#039;[[dsPIC]]&#039;&#039;&#039; gibt es den C30 von Microchip. Er basiert auf gcc und ist frei erhältlich, wobei nach 6 Wochen nicht mehr alle Optimierungsstufen wählbar sind, dann maximal -O1. Wie für alle PIC ist mit dem MPLAB eine kostenlose IDE mit Debugger und Simulator verfügbar.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;[[R8C]]/M16C&#039;&#039;&#039; gibt es eine Demoversion des Herstellers und eine noch ziemlich frische (lies: Stand 2005 nicht ausgereifte) Version vom GCC.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;[[ST7]]&#039;&#039;&#039; gibt es (teils limitierte) C-Compiler, teils mit IDE (z.ß. Cosmic und Ride). Toolchain von ST kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
Von Toshiba gibt es für &#039;&#039;&#039;[[TLCS-870]]&#039;&#039;&#039; mit den Starterkits eine IDE mit C-Compiler und Assembler. Ausserdem gibt es Toshibas eigene &amp;quot;C-Like Language&amp;quot;. Diese Tools sind nicht frei downloadbar.&lt;br /&gt;
&lt;br /&gt;
Zilog stellt für &#039;&#039;&#039;[[Z8]]e&#039;&#039;&#039; eine unbeschränkte IDE mit C-Compiler, Debugger und Simulator kostenlos per Download zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pascal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Für PIC,DSPIC und AVR gibt es einen sehr guten PASCAL-Compiler &amp;quot;MikroPascal&amp;quot;&lt;br /&gt;
der, in der Downloadversion Code-Size begrenzt ist,&lt;br /&gt;
und den man zu moderaten Preisen zur &amp;quot;Vollversion&amp;quot; aufrüsten kann.&lt;br /&gt;
http://www.mikroelektronika.co.yu/&lt;br /&gt;
( ab 149,- &amp;amp;#8364; )&lt;br /&gt;
&lt;br /&gt;
Elektor-Verlag &#039;Pascal für 8051 und Derivate&#039; Buch+Compiler(Vollversion)&lt;br /&gt;
&lt;br /&gt;
AVRco Pascal Compiler (http://www.e-lab.de/), &lt;br /&gt;
Kostenlose Version für Mega8/88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BASIC:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sowohl für den AVR als auch für die 8051er gibts von MCS-Electronics eine Demoversion eines BASIC-Compilers,&lt;br /&gt;
der leicht im Funktionsumfang und Codegröße eingeschränkt ist. &lt;br /&gt;
[http://www.mcselec.com/]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kursieren im Netz Versionen eines BASIC-Interpreters für 8052er mit dem Namen &amp;quot;8052 AH-BASIC&amp;quot;, wobei die Originalversion von INTEL stammt. Dieser Interpreter unterstützt sogar Fließkomma-Arithmetik und ist als Freeware verfügbar.&lt;br /&gt;
&lt;br /&gt;
==Architektur==&lt;br /&gt;
&lt;br /&gt;
Betrifft vor allem Assembler-Programmierung und die Frage, wie einfach oder umständlich sich C-Code in Maschinensprache übersetzen lässt. &lt;br /&gt;
&lt;br /&gt;
Dass für alle Architekturen teils mehrere C-Compiler existieren, hat wenig mit Eignung und viel mit Markt zu tun. Zudem ist meist nur entscheidend, ob ein Controller die Anforderungen erfüllt, nicht jedoch wie gut er das tut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Manches davon ist durchaus subjektiv. Bei abweichender Meinung bitte als Diskussion starten, nicht einfach löschen.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: Typische Akkumulator-orientierte 8-Bit Architektur. Eine gewisse Komplexität entstand durch die sukzessive Erweiterung auf mehr RAM als ursprünglich vorgesehen war, mit etlichen unterschiedlich adressierten RAM-Bereichen als Folge. Für C-Compiler nur eingeschränkt geeignet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: 32bit RISC-Architektur. In den gängigen Implementierungen mit dem  ARM7TDMI-Core (Architektur V4 = ARMv4T) stehen 2 Befehlssätze zur Verfügung: 32bit-codiert für Tempo, sofern der Speicherdurchsatz das zulässt, und 16bit-codiert (Thumb) für kompakte Programme. Cortex M3 (ARMv7) kennt ausschliesslich Thumb2 codierte Befehle, wurde gegenüber Thumb erheblich erweitert. Einheitlicher 32bit-Adressraum. Exzellente Zielmaschine für C-Compiler.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: Register-orientierte, an RISC Prinzipien angelehnte 8-Bit Architektur. Getrennte Adressräume für RAM und ROM. Registersatz nicht einheitlich nutzbar. I/O-Bereich nicht einheitlich adressierbar. Nur ein Teil des I/O-Bereiches ist bitweise manipulierbar. Einheitliche RAM-Adressierung. Für C-Compiler geeignet.Bemerkung: Laut Wikipedia wurde der Controller während der Entwicklungsphase für den Einsatz von C-Compilern optimiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: Register-orientierte 16-Bit RISC-Architektur mit vollständiger Orthogonalität. Einheitlicher Adressraum für RAM und ROM. Exzellente Zielmaschine für C-Compiler. Angelehnt an die legendäre PDP-11, vieles wurde übernommen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: Akkumulator-orientierte 8-Bit Architektur. Getrennte Adressräume für RAM und ROM. RAM-Banking, ROM-banking. Umständlicher Zugriff auf Daten im ROM (nur 12/14-Bit Versionen). Viele für C-Compiler wesentliche Elemente sind nur umständlich realisierbar (z.B. Code/Datenadressierung mit Banking, Vergleich mit Vorzeichen).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC24&#039;&#039;&#039;: Register-orientierte 16-Bit Architektur mit getrennten Adressräumen für RAM und ROM, wobei ein Teil des ROM in den RAM-Adressbereich eingeblendet werden kann. Fast alle Befehle sind auf Register und RAM anwendbar, incl. Bitmanipulationen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dsPIC&#039;&#039;&#039;: wie &#039;&#039;&#039;PIC24&#039;&#039;&#039;, mit zusätzlichen DSP Befehlen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R8C&#039;&#039;&#039;: 16-Bit 2-Adress CISC-Architektur. Einheitlicher 64KB Adressraum für RAM und ROM. Gute Zielmaschine für C-Compiler.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;M16C&#039;&#039;&#039;: Unter Bezeichnung M16C existieren zwei verschiedene inkompatible Architekturen. Die Modelle bis /6x sind grundsätzlich identisch mit R8C, die /8x Modelle mit M32C (hier nicht näher betrachtet). Der 64KB RAM-I/O-Adressraum ist ein Teil des 1MB großen Gesamtadressraumes, Daten im ROM liegen jedoch ausserhalb dieser 64KB und sind daher anders als beim R8C nicht mit 16-Bit Zeigern adressierbar. Gute Zielmaschine für spezialisierte C-Compiler, GCC jedoch tut sich etwas schwer mit den Adressräumen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7&#039;&#039;&#039;:Akkumulatorarchitektur, Gemeinsamter Code/Datenadressraum (von-Neumann). 63 Befehle. Einheitlicher 64KB Adressraum für RAM und ROM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TLCS-870&#039;&#039;&#039;: 8-Bit CISC-Architektur, aus Z80 weiterentwickelt. Gemeinsamer Adressraum für RAM und ROM bis 60KB ROM, darüber getrennt. Adressraum 64/128KB. Serie 870/X mit 1MB Adressraum existiert, aber nur als OTP/Maskenversion.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: Register-orientierte 8-Bit Architektur, 2-Adress-CISC. Getrennte Adressräume für RAM und ROM. Historisch bedingt 3 RAM-Adressräume (8-Bit, 12-Bit, 16-Bit). Für C-Compiler geeignet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kleiner nicht repräsentativer Compiler-Vergleich. Verwendet wurde eine Variante des crc8-Code von Colin O&#039;Flynn. Jeweils kleinstes Speichermodell, auf Platz optimiert:&lt;br /&gt;
{|&lt;br /&gt;
|Compiler&lt;br /&gt;
|  Befehle(1)&lt;br /&gt;
|  Bytes(1)&lt;br /&gt;
|  Befehle(2)&lt;br /&gt;
|  Bytes(2)&lt;br /&gt;
|-&lt;br /&gt;
|GCC AVR&lt;br /&gt;
|24&lt;br /&gt;
|48&lt;br /&gt;
|24&lt;br /&gt;
|48&lt;br /&gt;
|-&lt;br /&gt;
|Keil 8051&lt;br /&gt;
|24&lt;br /&gt;
|38&lt;br /&gt;
|74&lt;br /&gt;
|109&lt;br /&gt;
|-&lt;br /&gt;
|SDCC 8051&lt;br /&gt;
|24&lt;br /&gt;
|40&lt;br /&gt;
|35&lt;br /&gt;
|54&lt;br /&gt;
|-&lt;br /&gt;
|Zilog Z8e&lt;br /&gt;
|21&lt;br /&gt;
|54&lt;br /&gt;
|27&lt;br /&gt;
|73&lt;br /&gt;
|-&lt;br /&gt;
|PIC C18&lt;br /&gt;
|26&lt;br /&gt;
|52&lt;br /&gt;
|95&lt;br /&gt;
|206&lt;br /&gt;
|-&lt;br /&gt;
|SDCC PIC18&lt;br /&gt;
|41&lt;br /&gt;
|112&lt;br /&gt;
|41&lt;br /&gt;
|112&lt;br /&gt;
|-&lt;br /&gt;
|SDCC PIC16&lt;br /&gt;
|26&lt;br /&gt;
|52&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| (for pic16f84)&lt;br /&gt;
|-&lt;br /&gt;
|HEW R8C/M16C&lt;br /&gt;
|20&lt;br /&gt;
|48&lt;br /&gt;
|20&lt;br /&gt;
|48&lt;br /&gt;
|-&lt;br /&gt;
|GCC 68HC11&lt;br /&gt;
|36&lt;br /&gt;
|65&lt;br /&gt;
|36&lt;br /&gt;
|65&lt;br /&gt;
|-&lt;br /&gt;
|GCC MSP430&lt;br /&gt;
|17&lt;br /&gt;
|40&lt;br /&gt;
|17&lt;br /&gt;
|40&lt;br /&gt;
|-&lt;br /&gt;
|GCC ARM7&lt;br /&gt;
|12&lt;br /&gt;
|48&lt;br /&gt;
|12&lt;br /&gt;
|48&lt;br /&gt;
|-&lt;br /&gt;
|GCC ARM7-Thumb&lt;br /&gt;
|20&lt;br /&gt;
|40&lt;br /&gt;
|20&lt;br /&gt;
|40&lt;br /&gt;
|}&lt;br /&gt;
(1): Lokale Daten ggf. statisch gespeichert, nicht reentrant.&lt;br /&gt;
&lt;br /&gt;
(2): Lokale Daten auf dem Stack, also reentrant.&lt;br /&gt;
&lt;br /&gt;
==Sind CPU-spezifische Erweiterungen in C erforderlich?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: &lt;br /&gt;
* 5-6 Speicherklassen für Datenspeicher (direkt, indirekt, 8-Bit &amp;quot;external&amp;quot;, 16-Bit &amp;quot;external&amp;quot;, Flash, evtl. noch Einzelbits). &lt;br /&gt;
*Außerdem noch Adresserweiterungen durch Mapping, Paging und Banking &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: &lt;br /&gt;
* 3 Speicherklassen für Datenspeicher (RAM, ROM, EEPROM).&lt;br /&gt;
* In neueren Versionen von avr-libc kommt zwar eine 4. Klasse für die Fuse-Bits hinzu, die aber nur für die Konfiguration des Controllers verwendet wird und für das C-Programm selbst nicht relevant ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;, &#039;&#039;&#039;MSP430&#039;&#039;&#039;, &#039;&#039;&#039;R8C&#039;&#039;&#039;: nein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: &lt;br /&gt;
* 3 Speicherklassen für Datenspeicher (shared RAM, banked RAM, ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;:&lt;br /&gt;
* Für atomic execution (s.u.) notwendig, aber nicht existent.&lt;br /&gt;
* 4 Speicherklassen für Datenspeicher (256B, 4KB, 64KB, Flash).&lt;br /&gt;
&lt;br /&gt;
==Sind Daten in RAM und ROM mit dem gleichen Code benutzbar?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;, &#039;&#039;&#039;AVR&#039;&#039;&#039;, &#039;&#039;&#039;PIC&#039;&#039;&#039;, &#039;&#039;&#039;Z8e&#039;&#039;&#039; wie generell alle [[Harvard-Architektur|Harvard-Architekturen]]: NEIN. Daten im ROM&lt;br /&gt;
erfordern anderen Zugriff als Daten im RAM. Entweder versteckt das der Compiler in Runtime-Routinen für Pointerzugriffe, oder man kann Routinen nicht so schreiben, dass sie beides als Parameter verdauen können. Bei kleinen Programmen von ein paar KB kein Problem, bei größeren jedoch schon. Bei AVR/GCC ziemlich fehlerträchtig.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC24&#039;&#039;&#039; und &#039;&#039;&#039;dsPIC&#039;&#039;&#039; können einen Teil des ROM in den RAM-Adressbereich einblenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;M16C&#039;&#039;&#039;: Hängt vom Compiler ab. Mit 16-Bit Zeigern (GCC) nicht, 20-Bit Zeiger sind ineffizient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;, &#039;&#039;&#039;MSP430&#039;&#039;&#039;, &#039;&#039;&#039;R8C&#039;&#039;&#039;, &#039;&#039;&#039;ST7&#039;&#039;&#039;, &#039;&#039;&#039;TLCS-870&#039;&#039;&#039;: [[von Neumann-Architektur]], problemlos.&lt;br /&gt;
&lt;br /&gt;
==Lineare Adressierung vom RAM?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;, &#039;&#039;&#039;ARM&#039;&#039;&#039;, &#039;&#039;&#039;AVR&#039;&#039;&#039;, &#039;&#039;&#039;MSP430&#039;&#039;&#039;, &#039;&#039;&#039;R8C/M16C&#039;&#039;&#039;, &#039;&#039;&#039;ST7&#039;&#039;&#039;, &#039;&#039;&#039;TLCS-870&#039;&#039;&#039;, &#039;&#039;&#039;Z8e&#039;&#039;&#039;: kein Problem.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: PIC18 ja, PIC16,PIC12,PIC10 nein. RAM-Puffer die größer sind als das RAM in einer Bank sind nur mit Klimmzügen möglich.&lt;br /&gt;
&lt;br /&gt;
==Skalierbarkeit==&lt;br /&gt;
&lt;br /&gt;
Vor allem für jene wichtig, die sich scheuen, für&lt;br /&gt;
verschiedene Aufgaben verschiedene Lösungen zu verwenden. &lt;br /&gt;
&lt;br /&gt;
Spezielle Versionen für LCD-Ansteuerung wurden in dieser Übersicht nicht berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: 8-Pin/1KB aufwärts, überwiegend 40/44-Pin und 64/68-Pin. Architekturbedingte Grenze bei 64KB Code, 64KB RAM - Versionen mit mehr Flash  nutzbar via Banking (Compiler-Support vorhanden) existieren, Versionen mit bis zu 100 MHz Taktfrequenz verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: 48-Pin/32KB, bis 512K mit internem Flash. Versionen mit internem Cache und externem Speicher sind praktisch beliebig weit ausbaufähig.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: 8-Pin/1KB bis 100-Pin/256KB. Architekturbedingte  Grenze bei 8MB Code, 64KB RAM. GCC/WinAVR derzeit nur bis 128KB Code möglich (in Arbeit).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: 14-Pin DIP/1KB bis 113-Pin BGA/256KB. DIP, SOIC, TSSOP, QFN, TQFP und BGA erhältlich, in DIP und BGA jedoch nur wenige Typen verfügbar. Architekturbedingte Grenze von 64KB für Code+Daten wird in den großen Versionen durch 20-bittige Adressen umschifft. Taktfrequenz: maximal 8, 16 und 18 MHz je nach Familie. 25 MHz-Versionen in Kürze. Stromaufnahme: Rund 2 uA im LPM3 (real time clock mode) bis ca. 5 mA, typisch 200 µA pro MHz.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: 6-Pin/512B aufwärts. Im Prinzip großer Bereich, aber innerhalb der Familie deutlich verschiedene inkompatible Architekturen mit unterschiedlichen architekturbedingen Grenzen und unterschiedlichem Compiler-Support.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC24&#039;&#039;&#039; und &#039;&#039;&#039;dsPIC&#039;&#039;&#039;: 18 bis 100-Pin mit 16 bis 256kB Code und bis zu 16kB RAM. Generell sind alle als TQFP und QFN erhältlich, die 18 und 28 Pin Modelle gibt es auch als SDIP und SSOP und SOIC. Es gibt Modelle mit 16 und 40MHz.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7:&#039;&#039;&#039; 8 bis 80 Pins. SDIP, SOIC, LQFP, TQFP, QFN. 128 bis 2048 Bytes SRAM, 1 bis 60 kBytes Flash.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TLCS-870&#039;&#039;&#039;: 20pin DIP bis 267FBGA. Daneben SDIP, SOIC, SSOP und (L/T)QFP. Relativ wenige Flash-Typen. RAM: 128 Bytes bis 4kB. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: Bis 64KB Flash. Architekturbedingte Grenze bei 64KB Code, 64KB RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Empfehlung hier: Auch wenn teilweise mehr möglich ist, sind 8/16-Bit-Controller nur bis maximal 40-60K empfehlenswert. Darüber sollte eine 32-Bit-Architektur — z.B. mit [[ARM]]-Core — in Betracht gezogen werden. Insbesondere auch, weil große Programme zu Programm- und Datenstrukturen neigen, die sich auf 8-Bit-Prozessoren schlecht abbilden lassen.&lt;br /&gt;
&lt;br /&gt;
==Interrupt-feste Programmierung von I/O-Ports==&lt;br /&gt;
&lt;br /&gt;
Siehe http://www.mikrocontroller.net/articles/Interrupt.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders bei &#039;&#039;&#039;AVR&#039;&#039;&#039; (ausser den Typen seit 2004: ATtiny2313 usw.) ein Problem. Architekturbedingt ist nur ein Teil der Ports bitweise schaltbar, kein Port kann mehrere Bits gleichzeitig interrupt-fest schalten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;, &#039;&#039;&#039;8051&#039;&#039;&#039;, &#039;&#039;&#039;MSP430&#039;&#039;&#039;, &#039;&#039;&#039;R8C/M16C&#039;&#039;&#039;, &#039;&#039;&#039;Z8e&#039;&#039;&#039; können AND/OR/XOR zum Port hin, daher ist bei geeigneter Programmierung das Problem auch ohne Abschalten der Interrupts vermeidbar.&lt;br /&gt;
&lt;br /&gt;
Zu &#039;&#039;&#039;ARM&#039;&#039;&#039; ist dazu keine allgemeine Aussage möglich. Je nach Implementierung wird das Problem teilweise durch entsprechend gestaltete I/O-Ports gelöst, in anderen Fällen ist erhebliche Wachsamkeit geboten. Atmel SAM7 bereitet hier weniger Probleme als Philips LPC2000. Bei den  LPC2000 gibt es zwei getrennte Register, eines zum Setzen, das andere zum Löschen einzelner Pins. In einem weiteren Register können Bits ausmaskiert werden. Es gibt also kein read-modify-write. Gut gelöst für Push/Pull-Ausgänge, aber eine äquivalente Steuerung der Richtung wurde vergessen, was Open-Drain Pins erschwert. Implementierungen auf Basis des Cortex M3 oder der ARM Port-Macrocell verwenden statt dessen Adressbits zur Maskierung.&lt;br /&gt;
&lt;br /&gt;
Besonders pfiffig ist das beim &#039;&#039;&#039;Z8e&#039;&#039;&#039; gelöst. Ein Befehl fasst die nächsten 3 Befehle zu einer nicht unterbrechbaren Einheit zusammen (atomic execution). Allerdings wird das vom Zilog Compiler nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
==Zugriff auf I/O-Ports==&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;8051&#039;&#039;&#039; verfügt weder über eigene Register für die Steuerung der Richtung der I/O-Ports, noch über die Möglichkeit, lesend auf den Sollzustand der Ausgänge zuzugreifen. In Assembler ist das kein Problem, da abhängig vom Befehl entweder vom Zustand der Pins (Leseoperationen) oder vom Sollzustand der Ausgänge (kombinierte Lese/Schreiboperationen) ausgegangen wird. Ein korrekt arbeitender C Compiler kann damit jedoch nicht umgehen, weshalb für die Steuerung von Port-Pins spezielle Zugriffsfunktionen und eine sehr genaue Kenntnis der Arbeitsweise der Ports erforderlich sind.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zum Keil 8051-Compiler: Port-Zugriff erfolgt über Pseudo-Variablen wie bei µC üblich. Infolgedessen ist in C Code nicht ersichtlich, ob beispielsweise die Port-Variable P1 für den Zustand der Pins oder den Sollzustand der Ausgänge steht. Nur der erzeugte Assembler-Code kann hier Klarheit schaffen. So haben die beiden prinzipiell identischen Zeilen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
P1 = P1 | 0x01;&lt;br /&gt;
P1 = (P1 | 0x01) &amp;amp; ~0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
völlig unterschiedliche Auswirkung auf den Port. Der Code der ersten Zeile setzt Bit 0 und lässt alle anderen Bits unverändert. Der von der zweiten Zeile erzeugte Code setzt zusätzlich auch alle vorher als Eingang definierten Pins im Zustand 0 auf Ausgang mit Zustand 0. Das ist weder hilfreich, noch mit der Sprachdefinition von C vereinbar.&lt;br /&gt;
&lt;br /&gt;
Auch manche Modelle der &#039;&#039;&#039;PIC&#039;&#039;&#039;-Familie können nur auf den Zustand der Pins zugreifen, nicht auf den Sollzustand der Ausgänge.&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen ist folglich bei Ports, die sowohl für Aus- als auch für Eingänge benutzt werden, besondere Sorgfalt nötig.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;, &#039;&#039;&#039;AVR&#039;&#039;&#039;, &#039;&#039;&#039;MSP430&#039;&#039;&#039;, &#039;&#039;&#039;Z8e&#039;&#039;&#039; und neuere Modelle der &#039;&#039;&#039;PIC&#039;&#039;&#039;-Familie besitzen diese Probleme nicht.&lt;br /&gt;
&lt;br /&gt;
==Priorisierte Interrupts==&lt;br /&gt;
&lt;br /&gt;
Unter priorisierten Interrupts versteht man die Fähigkeit, den einzelnen Interrupt-Quellen eine Priorität zuweisen zu können um ohne Reprogrammierung der Interrupt-Quellen einen laufenden Interrupt ausschliesslich durch Interrupts höherer Priorität unterbrechbar machen zu können. Die bei separaten Vektoren selbstverständliche Fähigkeit, anstehende Interrupts nach fester Priorität zu sortieren, ist damit nicht gemeint.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: Ja.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: Der ARM7/9-Core unterstützt 2 Prioritäten mit entsprechenden Vektoren. Oft ist jedoch ein separater priorisierter und vektorisierter Interrupt-Controller mit integriert (Atmel, NXP, Cortex ja, Analog Devices nein). Interrupt-Nesting ist dank eines Designfehlers etwas umständlich.&lt;br /&gt;
&lt;br /&gt;
ARMv7 aka Cortex-M3: Ein priorisierender Interrupt Controller ist Teil des Cores und Nesting ist problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR:&#039;&#039;&#039; Nein, aber separate Vektoren für die einzelnen Interrupt-Quellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anmerkung: Eine weniger wichtiger Interrupt Handler kann oft sofort nach Ansprung ein SEI ausführen, damit ein möglicherweise wichtigerer Interrupt Handler aufgerufen werden kann, weil bei den meisten Interrupts der Request bereits mit dem Aufruf des Handlers automatisch zurück gesetzt wird. Das trifft aber beispielsweise nicht beim TWI zu.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430:&#039;&#039;&#039; Nein, aber separate Vektoren für die einzelnen Interrupt-Quellen. Keine Priorisierung im Sinne der Präambel.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC12 &amp;amp; PIC16:&#039;&#039;&#039; Nein, nur ein Interruptvektor.  Einfache PIC12 (12F508/509, 16F505) kennen gar keine Interrupts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC18:&#039;&#039;&#039; Jeder Interruptquelle kann separat eine niedrige oder hohe Priorität zugewiesen werden, die dann auf zwei Interruptvektoren verzweigen. Welche Quelle den Interrupt ausgelöst hat, muss aber immer noch händisch festgestellt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC17:&#039;&#039;&#039; Vier Interruptvektoren mit unterschiedlicher Priorität. Scheint es allerdings nur als OTP zu geben, deswegen wohl eher uninteressant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC24&#039;&#039;&#039; und &#039;&#039;&#039;dsPIC&#039;&#039;&#039; haben 7 Prioritäten und für jeden Interrupt einen eigenen Interruptvektor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R8C/M16C&#039;&#039;&#039;: 7 Prioritäten, vektorisiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7&#039;&#039;&#039;: Nein. 16 Vektoren mit fixer (absteigender) Priorität.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: 3 Prioritäten, vektorisiert.&lt;br /&gt;
&lt;br /&gt;
== Spannungsversorgung ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;, &#039;&#039;&#039;AVR&#039;&#039;&#039;, &#039;&#039;&#039;PIC&#039;&#039;&#039;: Modellabhängig 2-5V problemlos, ältere ab 3V. PICs für 2-4V sind schlecht verfügbar. Ungeregelter Batteriebetrieb möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: 3,3V-Versorgung, je nach Modell mehr oder weniger 5V-kompatibel. Einige (vor allem ältere) Modelle benötigen eine separate 1,8V-Versorgung für den Core. Kein ungeregelter Batteriebetrieb möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC24&#039;&#039;&#039; und &#039;&#039;&#039;dsPIC33&#039;&#039;&#039;: 2-3,6V. Pins die keine analogen Funktionen übernehmen können sind 5V tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: nur 1.8-3.6V. Nicht 5V-kompatibel, 5V-Peripherie für I2C/RS485/CAN/... ist also nur mit Pegelkonvertierung einsetzbar. Ungeregelter Batteriebetrieb möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7&#039;&#039;&#039;: 2,4-5,5V&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TLCS-870&#039;&#039;&#039;: 2,7-5,5V. Serie 870/C 1,8-5,5V.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: 3,3V-Versorgung, 5V-kompatibel.&lt;br /&gt;
&lt;br /&gt;
==Programmierung in der Schaltung==&lt;br /&gt;
&lt;br /&gt;
Geräte mit Debugging-Interface (s.U.) lassen sich i.d.R. auch damit programmieren. Siehe dazu nächsten Abschnitt.&lt;br /&gt;
&lt;br /&gt;
Die meisten Controller können sich selbst programmieren, Bootloader per RS232,CAN,usw sind dann problemlos realisierbar. Nur müssen solche Bootloader erst einmal auf den Chip programmiert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: Verschieden, je nach Hersteller und Modell. Im Unterschied zu den anderen hier betrachtete Controllern existieren viele nicht in der Schaltung, sondern nur mit speziellen Interfaces programmierbare 8051 Modelle. Modelle mit seriellem Bootloader via UART, SPI, CAN oder USB existieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: Am besten über JTAG, je nach Hersteller und Familie auch mit Bootloader, z.B. bei Philips LPC2000 über RS232 und Atmel SAM7 über USB (bei letzterem sehr unbequem und langsam!).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: Über ein an SPI orientiertes proprietäres Interface. Ist via Parallelport günstig herzustellen; der Adapter ist im besten Fall genau 5 Widerstände teuer, professioneller mit einem [[Ausgangsstufen_Logik-ICs#Tri-state|Tri-State]]-Bustreiber etwa 5-15 EUR. Darüberhinaus auch mit HV-Programmer (z.B. auf dem [[STK500]]), der u.U. auch nötig ist um falsch gesetzte Fuses wieder zu &amp;quot;reparieren&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: Via JTAG-Interface, TI &amp;quot;Spy BiWire&amp;quot; und über integrierten  Bootloader. (Schaltung zur Ansteuerung via RS232 im Datenblatt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: Entweder über die serielle ICSP-Schnittstelle (dafür gibt es Baupläne für billige ParPort-Programmer incl. guter Software) oder mit dem InCircuit-Debugger (~150&amp;amp;#8364;, ICD2 von Microchip). Bootloader müssen generell vorher mit einer der vorher genannten Möglichkeiten auf den Chip geflasht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R8C&#039;&#039;&#039;: Via UART (RS-232 oder USB-RS-232 Konverter) mit Flash-Tool (Windows, Linux). Variante über Bootloader ebenfalls möglich (wird vom Software Emulator-Debugger benutzt).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7&#039;&#039;&#039;: Via ein mit der Schaltung (mittels mindestens 4poligen Kabels) kommunizieredes Debug-Interface. Offenes ST-Protokoll &amp;quot;ICC&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TLCS-870&#039;&#039;&#039;: Flash-Typen besitzen maskenprogrammierten Bootloader.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: Via Debug-Interface.&lt;br /&gt;
&lt;br /&gt;
==Debugging in der Schaltung==&lt;br /&gt;
&lt;br /&gt;
Ist beispielsweise ein günstiges [[JTAG]]-Interface für In-Circuit&lt;br /&gt;
Debugging verfügbar?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: Derivate mit JTAG verfügbar. ICEen gebraucht erschwinglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: alle mit JTAG.&lt;br /&gt;
* Günstiges Parallel-Port-Interface verfügbar und einfach zu bauen (Wiggler), aber langsam und problematisch im Betrieb unter WinNT+ (besser: ocdremote unter Win9x auf Zweitrechner, via LAN). Kostenlose Debugger ([[GDB]]) unterstützen seit OCDremote 2.14 mit Einschränkungen auch Programme im Flash. &lt;br /&gt;
* Schnelles JTAG Interface basierend auf FT2232C für [[GDB]]/OpenOCD günstig und einfach zu bauen (http://www.fh-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html) oder fertig erhältlich (http://www.amontec.com/jtagkey.shtml).&lt;br /&gt;
* Kommerzielle Debugger per USB sind besser und schneller, aber recht teuer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: für ATmega16/162/32/128 ist JTAG günstig verfügbar&lt;br /&gt;
(Olimex, Erostech) bzw. einfach zu bauen (Evertool). ATmegas ab 2005/2006 mit JTAG sind zu dieser Billigvariante inkompatibel. Für diese und den [[debugWIRE]] der ATtinys und ATmegaX8 existiert das JTAG ICE mkII von Atmel, aber recht teuer, sowie der preiswerte AVR Dragon.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: alle mit JTAG, Adapter sehr günstig/einfach zu bauen. Neuere Geräte mit Spy-by-Wire (braucht weniger Pins als JTAG).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: Entweder Microchips MPLAB ICD2 (&amp;amp;#8364;150-200) oder ein kompatibler Nachbau, wie z.B. http://www.stolz.de.be/. Alternativ das PICKit 2 für ~40€, dass neben dem Programmieren und Debuggen über USB auch noch als RS232-Brücke und einfacher Logic-Analyzer benutzt werden kann. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R8C&#039;&#039;&#039;: On-Chip Debugging ist mit dem E8 Hardware On-Chip Debugging Emulator möglich (kein JTAG). Ausserdem ist Debugging auch über einen normalen RS232 Anschluss möglich. Der E8 verwendet ein syncrones serielles Protokoll, die RS232 ein asyncrones. Daher ermöglicht der E8 das Debugging bei jeder beliebigen Taktfrequenz, bei RS232 gibt es da Einschränkungen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST7&#039;&#039;&#039;: Via ein mit der Schaltung (mittels mindestens 4poligen Kabels) kommunizieredes Debug-Interface. Offenes ST-Protokoll &amp;quot;ICC&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: Debugging möglich mit &amp;quot;Smart Cable&amp;quot; (kein JTAG), Anschluss über USB oder Seriell&lt;br /&gt;
&lt;br /&gt;
==Starterkits==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051&#039;&#039;&#039;: Keil MCBx51 http://www.keil.com/mcbx51 (z.B. für ~240&amp;amp;#8364; von [http://de.mouser.com/Search/Refine.aspx?Keyword=830-MCBX51 mouser.com])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: http://www.olimex.com (z.T. hier im Shop erhältlich), http://www.embeddedartists.com,&lt;br /&gt;
http://www.mct.de&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AVR&#039;&#039;&#039;: [[STK200]], [[STK500]], [[AVR_Butterfly]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MSP430&#039;&#039;&#039;: http://www.olimex.com (z.T. hier im Shop erhältlich), ez430 (http://www.ti.com/ez430)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIC&#039;&#039;&#039;: http://www.microchipdirect.com/ , Velleman-Kit K8048 (www.velleman.be)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R8C&#039;&#039;&#039;: Mehrere (Google Suche). Am weitesten verbreitet ist vielleicht das R8C/13 Starterkit inkl. Entwickler-CD von Glyn/Elektor (Beilage Elektor 12/2005 (ausverkauft) bzw. diverse Drittanbieter). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Z8e&#039;&#039;&#039;: Günstig verfügbar [~50&amp;amp;#8364;], teils hier im Shop, komplett inklusive unbeschränktem Compiler und In-System-Debugging. Nachteile: für jede Prozessorklasse ein eigenes Kit; eingelöteter SMD-Chip obwohl viele Typen auch im DIL-Gehäuse existieren.&lt;br /&gt;
&lt;br /&gt;
==Gehäuse==&lt;br /&gt;
&lt;br /&gt;
Mit DIP oder PLCC bastelt es sich leichter als mit *QFP. Die Domäne von&lt;br /&gt;
AVR/PIC/i51. Für MSP430 gibt es günstige fertig bestückte DIP-Adapter hier im Shop (MSP430x2xx gibt es auch in 14-Pin DIP-Gehäuse). Z8e-Chips existieren ebenfalls in DIP, sind aber schlechter verfügbar.&lt;br /&gt;
&lt;br /&gt;
==Beschaltungsaufwand==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8051, AVR, PIC, MSP430, R8C, ST7 Z8e,&#039;&#039;&#039;: gering, i.d.R. sind Versionen mit integriertem Oszillator verfügbar, so dass man praktisch nur die Versorgungsspannung (nebst Abblockkondensator) braucht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARM&#039;&#039;&#039;: aufwendigere externe Takt- und Spannungserzeugung, manchmal 2 Betriebsspannungen benötigt; Tendenz aber fallend.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-185133.html#new Forum]&lt;br /&gt;
* [[8051]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[PIC]]&lt;br /&gt;
* [[Z8]]&lt;br /&gt;
* [[ARM]]&lt;br /&gt;
* [[MSP430]]&lt;br /&gt;
* [[R8C]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32395</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32395"/>
		<updated>2008-11-07T16:35:38Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* MicroWebServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs auf 38x31mm².&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32394</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32394"/>
		<updated>2008-11-07T16:34:57Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* MicroWebServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs.&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32393</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32393"/>
		<updated>2008-11-07T16:34:02Z</updated>

		<summary type="html">&lt;p&gt;Simon: &amp;quot;unfertig&amp;quot; entfernt. Was soll der Quatsch?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
[[Bild:MicroWebServer.jpg|thumb|MicroWebServer]]&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs.&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32392</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32392"/>
		<updated>2008-11-07T16:32:10Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* MicroWebServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
[[Bild:MicroWebServer.jpg|thumb|MicroWebServer]]&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs.&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===unfertig===&lt;br /&gt;
*[[ENC28J60]]&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:NetAction|NetAction]] 15:00, 16. Mai 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:MicroWebServer.jpg&amp;diff=32391</id>
		<title>Datei:MicroWebServer.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:MicroWebServer.jpg&amp;diff=32391"/>
		<updated>2008-11-07T16:31:40Z</updated>

		<summary type="html">&lt;p&gt;Simon: http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32390</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32390"/>
		<updated>2008-11-07T16:30:00Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* MicroWebServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs.&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===unfertig===&lt;br /&gt;
*[[ENC28J60]]&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:NetAction|NetAction]] 15:00, 16. Mai 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32389</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=32389"/>
		<updated>2008-11-07T16:29:51Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* private Projekte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 65 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Webseiten, aber nur abrufbar, keine serverseitigen Programme&lt;br /&gt;
*3 I/O Ports direkt ansprechbar per UDP und TCP&lt;br /&gt;
*RS232-Schnittstelle&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dalls OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===unfertig===&lt;br /&gt;
*[[ENC28J60]]&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:NetAction|NetAction]] 15:00, 16. Mai 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=31650</id>
		<title>AVR Net-IO Bausatz von Pollin</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=31650"/>
		<updated>2008-10-04T12:51:47Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Simon Ks Webserver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hier steht eine Beschreibung des Pollin Bausatzes [http://www.pollin.de/shop/shop.php?cf=detail.php&amp;amp;pg=NQ==&amp;amp;a=MTQ5OTgxOTk= AVR-NET-IO. Best.Nr. 810 058]&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Features:&lt;br /&gt;
&lt;br /&gt;
Ethernet-Platine mit ATMega32 und Netzwerkcontroller ENC28J60. Die Platine verfügt über 8 digitale Ausgänge, 4 digitale und 4 ADC-Eingänge, welche alle über einen Netzwerkanschluss (TCP/IP) abgerufen bzw. geschalten werden können.&lt;br /&gt;
&lt;br /&gt;
Technische Daten:&lt;br /&gt;
&lt;br /&gt;
* Betriebsspannung 9 V~&lt;br /&gt;
* Stromaufnahme ca. 190 mA&lt;br /&gt;
* 8 digitale Ausgänge (0/5 V)&lt;br /&gt;
* 4 digitale Eingänge (0/5 V)&lt;br /&gt;
* 4 ADC-Eingänge (10 Bit)&lt;br /&gt;
* [[ENC28J60]]&lt;br /&gt;
* [http://www.atmel.com/dyn/Products/Product_card.asp?part_id=2014 ATmega32] Mikrocontroller&lt;br /&gt;
&lt;br /&gt;
Maße (LxBxH): 108x76x22 mm.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
[[Bild:AVR-NET-IO.JPG|thumb|400px|AVR-NET-IO (links) mit zusätzlicher SUB-D Anschlussplatine (rechts, nicht im Lieferumfang). Ebenso ist zusätzlich ein nicht im Lieferumfang enthaltener kleiner Kühlkörper auf einem der Spannungsregler montiert und die Schraubklemmen sind nicht wie vorgesehen angereiht.]]Die Schaltung des AVR-NET-IO ist recht einfach:&lt;br /&gt;
* Ein ATmega32 Mikrocontroller enthält die gesamte Software&lt;br /&gt;
* Ein ENC28J60 Ethernet-Controller für das Senden und Empfangen von Ethernet Frames (MAC und PHY Ethernet Layer) ist über [[SPI]] mit dem ATmega32 verbunden&lt;br /&gt;
* Ein Ethernet RJ-45 MagJack TRJ 0011 BA NL von [http://www.trxcom.com/ Trxcom] mit eingebautem Übertrager und Anzeige-LEDs am ENC28J60.&lt;br /&gt;
* Ein MAX232 für die serielle Schnittstelle&lt;br /&gt;
* Zwei Spannungsregler, 5 V und 3,3 V&lt;br /&gt;
* &amp;quot;Hühnerfutter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fast alle I/O Pins des ATmega32 sind irgendwo auf Anschlüssen herausgeführt. Entweder auf dem SUB-D Stecker, dem EXT oder ISP Wannensteckern oder den blauen Anschlussklemmen. Sie sind nicht(!) besonders geschützt, es finden sich zum Beispiel keine Schutzdioden für die Pins in der Schaltung.&lt;br /&gt;
&lt;br /&gt;
Die blauen Anschlussklemmen haben eine Nut und eine Feder mit denen man&lt;br /&gt;
sie zusammenstecken kann, dadurch ist das Anlöten wesentlich leichter&lt;br /&gt;
und sie stehen auch sauber in der Reihe (nicht wie auf dem Foto).&lt;br /&gt;
&lt;br /&gt;
==== Hardware-Umbauten &amp;amp; -Verbesserungen ====&lt;br /&gt;
&lt;br /&gt;
* Kühlkörper auf dem 7805&lt;br /&gt;
* MAX232 nach anfänglicher Konfiguration nicht bestücken um Strom zu sparen oder um zwei weitere I/O-Pins zu gewinnen&lt;br /&gt;
* 10µF-Elkos für MAX232N (C14-C17) durch 1µF ersetzen. Eine 10µF-Version für den MAX232 gibt es nicht. Die 10µF-Elkos können auch Ursache einer nicht funktionierenden RS232 sein.&lt;br /&gt;
* Die IC-Fassungen aus &amp;quot;Pollins Resterampe&amp;quot; durch Fassungen mit gedrehten Kontakten ersetzen. &lt;br /&gt;
* &#039;&#039;Netz&#039;&#039; LED nicht bestücken um Strom zu sparen&lt;br /&gt;
* Linear-Spannungsregler ersetzen&lt;br /&gt;
* Kondensator an AREF-Pin des ATmega32 (ATmega32 Datenblatt) (100uF gegen Masse?)&lt;br /&gt;
* Kondensator an den RESET-Pin des ATmega32 ([http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf Atmel Application Note AVR042: AVR Hardware Design Considerations]) Wenn man diese Quelle genauer liest, ist das aber eher unnötig.&lt;br /&gt;
* Umbau auf 3,3 V:&lt;br /&gt;
** Ersatz der Spannungsregler durch einen einzigen 3,3 V Regler&lt;br /&gt;
** Anpassen (verkleinern) des LED-Vorwiderstands R3 für 3,3 Volt Betrieb&lt;br /&gt;
** Reduktion der Taktfrequenz (Austausch von Q2) auf den bei 3,3V erlaubten Bereich des ATmega32&lt;br /&gt;
** Ersatz des MAX232 durch einen MAX3232&lt;br /&gt;
* ATmega32 vom ENC28J60 takten (OSC2)&lt;br /&gt;
* Betrieb mit Gleichspannung:&lt;br /&gt;
** Dioden D2 und D5 durch Drahtbrücken ersetzen, D1 und D4 nicht bestücken (komplette Entfernung des Brückengleichrichters, beinhaltet Verlust des Verpolungsschutzes)&lt;br /&gt;
** Diode D2 bestücken, D5 durch Drahtbrücke ersetzen, D1 und D4 nicht bestücken (Brückengleichrichter durch Verpolungsschutze ersetzen)&lt;br /&gt;
* Ersatz des ATmega32 durch einen ATmega644 mit mehr FLASH-Speicher.&lt;br /&gt;
&lt;br /&gt;
== Inbetriebnahme der Originalsoftware ==&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
Die bei Auslieferung (Stand September 2008) in den ATmega32 gebrannte Firmware stellt sich manchmal recht zickig an. Es scheint dann weder die serielle Schnittstelle, noch die Netzwerkschnittstelle zu funktionieren. Falls es Probleme geben sollte kann mit den im folgenden beschriebenen Schritten die Inbetriebnahme der Software möglich sein. Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* Einen Windows-PC mit Ethernet-Schnittstelle und RS232-Schnittstelle (ein Prolific RS232-USB Konverter funktioniert)&lt;br /&gt;
* Entweder&lt;br /&gt;
**zwei normale (&#039;&#039;straight through&#039;&#039;) Ethernet-Kabel und einen Ethernet Switch/Hub, oder&lt;br /&gt;
**ein gekreuztes(&#039;&#039;cross over&#039;&#039;) Ethernet-Kabel&lt;br /&gt;
* Einen AVR Programmer (Hardware und Software). Zum Beispiel einen [[AVR Dragon]] oder [[STK500]] mit [[AVR Studio]] oder das [[Pollin ATMEL Evaluations-Board]] und [[avrdude]].&lt;br /&gt;
* Die [http://www.pollin.de/shop/shop.php?cf=downloads_suchergebnis.php&amp;amp;fp=OA==&amp;amp;pg=NQ==&amp;amp;a=MTQ5OTgxOTk= Pollin NetServer Software], Version 1.01 (oder neuer)&lt;br /&gt;
&lt;br /&gt;
=== Gelieferten ATmega32 richtig einstellen ===&lt;br /&gt;
&lt;br /&gt;
Die Fuses der gelieferten ATmega32s scheinen nicht immer mit den im Handbuch auf Seite 12 als erforderlich angegebenen Fuse-Einstellungen übereinzustimmen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man mittels eines Programmers ändern. LFuse = 0xBF, HFuse = 0xD2. Das genaue Vorgehen hängt dabei vom verwendeten Programmer ab. Bei der Gelegenheit kann man ebenfalls eine Sicherheitskopie des ursprünglichen Flash-Inhalts und des EEPROMs anfertigen. Das EEPROM scheint die MAC-Adresse des Ethernet-Ports zu enthalten.&lt;br /&gt;
&lt;br /&gt;
Entgegen der Spezifikation im Handbuch von Pollin sollten die &#039;&#039;&#039;HFuses auf 0xC2&#039;&#039;&#039; gesetzt werden, d. h. CKOPT-Fuse programmiert. Das sorgt für einen stabilen Betrieb des AVR-Oszillators im &amp;quot;full rail-to-rail swing&amp;quot;-Mode bei 16 MHz. Atmel garantiert ansonsten nur stabilen Betrieb bis 8 MHz. Siehe ATmega32-Datenblatt, Kapitel 8.4, Crystal Oscillator.&lt;br /&gt;
&lt;br /&gt;
=== PC Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
==== PC normalerweise nicht im 192.168.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
Betreibt man den PC normalerweise nicht im 192.168.0/24 Subnetz, muss er wie folgt umkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Den PC vom normalen Netzwerk abstecken. Zur Umkonfiguration dazu bei Windows XP in der Systemsteuerung &#039;&#039;Netzwerkverbindungen&#039;&#039; aufrufen und die lokale &#039;&#039;LAN-Verbindung&#039;&#039; markieren. Dann in der rechten Leiste &#039;&#039;Einstellungen dieser Verbindung ändern&#039;&#039; aufrufen. &lt;br /&gt;
&lt;br /&gt;
Es erscheint der Dialog &#039;&#039;Eigenschaften von &amp;lt;Verbindungsname&amp;gt;&#039;&#039;. In der Liste im Dialog zu &#039;&#039;Internetprotokoll (TCP/IP)&#039;&#039; gehen. Ein Doppelklick auf den Eintrag öffnet den &#039;&#039;Eigenschaften von Internetprotokoll (TCP/IP)&#039;&#039; Dialog.&lt;br /&gt;
&lt;br /&gt;
In diesem Dialog &#039;&#039;Folgende IP-Adresse verwenden:&#039;&#039; auswählen und zum Beispiel&lt;br /&gt;
&lt;br /&gt;
IP-Adresse: &#039;&#039;&#039;192.168.0.100&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Subnetzmaske: &#039;&#039;&#039;255.255.255.0&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Standardgateway: &#039;&#039;&#039;192.168.0.1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
eingeben. &lt;br /&gt;
&lt;br /&gt;
Alle geöffneten Dialoge nacheinander mit OK schließen.&lt;br /&gt;
&lt;br /&gt;
==== PC bereits im 192.168.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muss man prüfen, ob die IP-Adresse 192.168.0.90 bereits im Subnetz verwendet wird. Ist dies der Fall, muss das verwendete Gerät mit dieser IP vorübergehend aus dem Subnetz entfernt werden. Es sei denn, dabei handelt es sich um den PC. In diesem Fall muss er wie zuvor umkonfiguriert werden. Ansonsten kann der unverändert im Netz verbleiben.&lt;br /&gt;
&lt;br /&gt;
Dem AVR-NET-IO gibt man eine neue, zuvor unbenutzte Adresse (siehe unten). Dann kann das abgekoppelte Gerät wieder angeschlossen werden, beziehungsweise der PC zurückkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR-NET-IO anschließen ===&lt;br /&gt;
&lt;br /&gt;
Musste man den PC umkonfigurieren, so werden jetzt nur der PC und der AVR-NET-IO über Ethernet miteinander verbunden. Je nach Ethernet-Kabel benötigt man dazu einen Switch/Hub oder nicht.&lt;br /&gt;
&lt;br /&gt;
Musste man den PC nicht umkonfigurieren, so kann man den AVR-NET-IO wie einen normalen Rechner an das vorhandenen Netz anschließen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich schließt man die serielle Schnittstelle des AVR-NET-IO an den PC an.&lt;br /&gt;
&lt;br /&gt;
=== Firmware 1.01 einspielen ===&lt;br /&gt;
&lt;br /&gt;
Laut Handbuch sollte der AVR-NET-IO jetzt über Ethernet funktionieren. Ebenso sollte er über die serielle Schnittstelle und ein Terminalprogramm konfigurierbar sein. Beides ist offensichtlich im Auslieferungszustand selten der Fall.&lt;br /&gt;
&lt;br /&gt;
Auch wenn sich Pollins NetServer Software nicht mit dem AVR-NET-IO verbinden lässt, so ist sie jedoch in der Lage eine neue Firmware 1.01 einzuspielen. Das Vorgehen ist im Handbuch auf Seite 12 beschrieben. NetServer präsentiert dabei ein paar einfache Anweisungen denen man folgen sollte.&lt;br /&gt;
&lt;br /&gt;
=== Abschluss ===&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte sich die NetServer Software mit dem AVR-NET-IO über Ethernet verbinden lassen. Dies macht es wiederum möglich, den AVR-NET-IO mit einer anderen IP-Adresse zu versehen. Will man den AVR-NET-IO in einem anderen Subnetz betreiben kann man dies jetzt einstellen.&lt;br /&gt;
&lt;br /&gt;
Nachdem man die IP-Adresse neu eingestellt hat, muss man den PC zurückkonfigurieren und kann dann sowohl den AVR-NET-IO und den PC zusammen betreiben.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehler ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[#Hardware-Umbauten_.26_-Verbesserungen|Hardware-Umbauten und Verbesserungen]]&lt;br /&gt;
&lt;br /&gt;
* Die Stückliste auf Seite 4 in den Anleitung mit den Versionsangaben&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
:ist falsch. Pollin legt dem Bausatz irgendwann ab September 2008 einen gedruckten Korrekturzettel bei. Die Online-Version der Anleitung ist korrigiert.&lt;br /&gt;
* Im Schaltplan auf Seite 7 in den Anleitungen mit den Versionen&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
** &#039;&#039;Stand 03.09.2008, online, #all, wpe&#039;&#039; (Online)&lt;br /&gt;
:ist eine 25-polig SUB-D Buchse gezeichnet. Geliefert wird und in der Stückliste verzeichnet ist ein Stecker.&lt;br /&gt;
&lt;br /&gt;
* Die September 2008 ausgelieferte Firmware im ATmega32  funktioniert bei diversen Leuten nicht und muss erst upgedatet werden (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Im Flash der gelieferten AVR ist anders als beschrieben nur der Bootloader enthalten, die eigentliche Firmware muss erst mit Hilfe der Updatefunktion geladen werden. Wenn zusätzlich auch die Fuses falsch gebrannt sind, dann funktioniert das Update nicht, auch wenn das PC Programm was anderes behauptet.&lt;br /&gt;
&lt;br /&gt;
* Die Fuse-Einstellungen des ausgelieferten ATmega32 entspricht nicht der Anleitung (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Käufer berichten von fehlenden Bauteilen im Bausatz (Wannenstecker, Widerstände, Kondensatoren). Für Reklamationen: [https://www.pollin.de/shop/fragen_reklamation.php]&lt;br /&gt;
&lt;br /&gt;
== Andere Software statt der Originalsoftware ==&lt;br /&gt;
&lt;br /&gt;
Die Umrüstung auf einen Webserver durch Austausch der Software (und ev. des ATmega32) bietet sich an.&lt;br /&gt;
&lt;br /&gt;
=== U. Radigs Webserver ===&lt;br /&gt;
&lt;br /&gt;
Angepasster Sourcecode von U.Radig: http://www.mikrocontroller.net/attachment/40027/Webserver_MEGA32.hex&lt;br /&gt;
oder selbst anpassen: &lt;br /&gt;
Ändere im File ENC28J60.H&lt;br /&gt;
 #define ENC28J60_PIN_SS    3&lt;br /&gt;
 #define ENC28J60_PIN_CS    4&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#988386)&lt;br /&gt;
&lt;br /&gt;
Wer gerne als Link-LED die grüne nutzen möchte&lt;br /&gt;
(U.Radig-Source)&lt;br /&gt;
&lt;br /&gt;
enc28j60.c Zeile 150&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;enc28j60_write_phy(ENC28J60_PHY_PHLCON, 0x347A)&lt;br /&gt;
&lt;br /&gt;
Wert 0x347A in 0x374A ändern&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#994943)&lt;br /&gt;
&lt;br /&gt;
IP: 192.168.1.90&amp;lt;br&amp;gt;&lt;br /&gt;
User: admin&amp;lt;br&amp;gt;&lt;br /&gt;
Pass: tim&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://beitz-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://pieper-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Simon Ks Webserver (uip-Stack) ===&lt;br /&gt;
Angepasster Sourcecode von Simon K: http://www.mikrocontroller.net/attachment/39939/uWebSrv.zip&lt;br /&gt;
IP: 192.168.0.93:8080&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ethersex Server ===&lt;br /&gt;
&lt;br /&gt;
Wen der infantile Name nicht stört:&lt;br /&gt;
&lt;br /&gt;
http://www.ethersex.de - Einfach für atmega32 compilieren und funktioniert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Etherrape Server ===&lt;br /&gt;
&lt;br /&gt;
http://www.lochraster.org/etherrape/ &lt;br /&gt;
&lt;br /&gt;
ist in jedem Fall hier auf zu erwähnen zumal es sich beim etherrape um die mutter des ethersex handelt!&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/109988&lt;br /&gt;
* [http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022889 ENC28J60 Produktseite]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf ENC28J60 Datenblatt(pdf)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte|P]]&lt;br /&gt;
[[Category:AVR|P]]&lt;br /&gt;
[[Category:Ethernet|P]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=31410</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=31410"/>
		<updated>2008-09-26T11:13:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;br /&gt;
&lt;br /&gt;
(ENC28J60 Mikrowebserver, T6963c Library, AVR-Eclipse Tutorial, Geek Clock)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzumrichter_mit_Raumzeigermodulation&amp;diff=30072</id>
		<title>Frequenzumrichter mit Raumzeigermodulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzumrichter_mit_Raumzeigermodulation&amp;diff=30072"/>
		<updated>2008-08-13T20:01:21Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Einspeisung und Bremschopper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Axel Jeromin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein Frequenzumrichter ist ein Gerät zur Veränderung der Drehzahl eines Drehstrom Asynchronmotors.&lt;br /&gt;
Die Drehzahl eines Drehstrom Asynchronmotors ist nur von der Frequenz der angelegten Spannung abhängig. Eine Verringerung der Netzspannung bei konstanter Frequenz über einen Trafo oder Vorwiderstände verändert durch den zunehmen Schlupf irgendwann auch die Drehzahl, das Ganze ist dann aber stark lastabhängig und somit unbrauchbar. Diese Methode wurde mal vor sehr vielen Jahren für einen Sanftanlauf genutzt.&lt;br /&gt;
Ebenfall vor vielen Jahren nutzte man zur Frequenzänderung einen Umformer bestehend aus einem Gleichstrommotor und einem Drehstromgenerator. (Hier und Dort auch Heute noch im Einsatz, z.B. Walzwerk).&lt;br /&gt;
&lt;br /&gt;
Heute wird die Netzspannung gleichgerichtet, geglättet und eine Leistungselektronik erzeugt dann die dreiphasige Wechselspannung mit variabler Frequenz und Spannung.&lt;br /&gt;
&lt;br /&gt;
Die nachfolgend beschriebene Schaltung eignet sich für DC-Spannungen von 30V bis 325V. Mit 30V kann z.B. ein Motor einer Festplatte betrieben werden (dies war mein Testmotor, bevor es an die höheren Spannungen ging) und 325V für einen 230/400V Motor in Dreieckschaltung. Natürlich kann man so ein Gerät mittlerweile für kleines Geld fertig kaufen, aber bei nicht gebräuchlichen Spannungen (Elektroauto) oder ungewöhnlichen Anwendungen ist man mit einem Selbstbau flexibler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Achtung: die Schaltung ist potentialbehaftet. D.h das Massepotentional der Steuerspannung liegt bei Betrieb mit 230V auf ca. 127V gegen Erde! Daher ist bei Progammmodifikationen die Schaltung unbedingt von Netz zu trennen und aus einer Batterie zu speisen.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Ein moderner Frequenzumrichter besitzt in der Regel einen Gleichrichter, einen Zwischenkreis und einen Wechselrichter. Davor kommt noch ein Filter zur Verminderung von Störungen zurück in das einspeisende Netz. Der Gleichrichter soll die angelegte Wechselspannung gleichrichten. (na klar) Die erzeugte pulsierende Gleichspannung ist bei einer 2 phasigen Einspeisung mit 230V ==&amp;gt; UDC = 230V * Wurzel 2 = 325V. &lt;br /&gt;
&lt;br /&gt;
Der Zwischenkreis glättet und puffert die Gleichspannung. Er besteht aus einem oder mehreren Glättungskondensatoren. Bei Spezialanwendungen wie z.B. einem Elektroauto wird auf die Einspeisung verzichtet und der Zwischenkreis direkt an die Akkus angeschlossen. &lt;br /&gt;
&lt;br /&gt;
Der Wechselrichter besteht aus drei Halbbrücken. Jede Halbbrücke hat zwei Mos-Fet Transistoren. Je nachdem welcher FET der Halbbrücke leitet, liegt der Brückenabgriff an Plus oder Minus. Sind beide Transistoren leitend, gibt es einen prima Kurzschluss, den es zu vermeiden gilt.&lt;br /&gt;
 &lt;br /&gt;
Arbeitet der Motor generatorisch, d.h. die Motordrehzahl ist größer als der Umrichtersollwert, wird Energie in den Zwischenkreis gespeist. Da die Energie nicht durch den Einspeisegleichrichter zurück ins Netz gelangen kann, steigt in diesen Fall die Zwischenkreisspannung. Die Zwischenkreisspannung muss daher überwacht werden, ab einem bestimmten Wert wird ein sogenannter Bremswiderstand eingeschaltet, in welchen die überschüssige Energie in Wärme umgewandelt wird.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Einspeisung und Bremschopper ===&lt;br /&gt;
Die Einspeisung besteht aus: den Eingangsklemmen, dem Filter, dem Gleichrichter und dem ersten Zwischenkreiskondensator.&lt;br /&gt;
Im Eingangskreis ist ein Ladewiderstand, welcher mittels eines Relais überbrückt werden kann. Das Relais wird ab einer eingestellten Zwischenkreisspannung geschaltet, um die Kondensatoren zuerst über den Widerstand langsam zu laden.&lt;br /&gt;
&lt;br /&gt;
Der Bremschopper FET wird vom Low-Side Teil eines IR2101 getrieben. Als Bremswiderstand nutze ich eine Glühlampe.&lt;br /&gt;
&lt;br /&gt;
Von einem Tiny45 wird die Zwischenkreisspannung gemessen. Ist die Spannung grösser 243V und kleiner 408V wird die Meldung “Zwischenkreis OK” herausgegeben. Ab einer Spannung von 243V wird das Relais zur Überbrückung des Ladewiderstands geschaltet. Ab 375V wird der Bremswiderstand gepulst. 375V entspricht 0% PWM, 400V entspricht 100% PWM. Die PWM Frequenz ist 150Hz.&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Einspeisung.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
Der Leistungsteil besteht im Wesentlichen aus drei Halbbrücken. Jeweils zwei FET´s in einer Halbbrücke werden von einem IR2109 getrieben, welcher wieder direkt durch den Atmel Mega 88 auf der Steuerungsplatine angesteuert wird. Der IR 2109 steuert immer in Abhängigkeit vom Eingang “IN” entweder den High side- oder den Low side FET durch. Zwischen dem Wechsel liegt immer eine Totzeit von 540ns. Dadurch ist der Programmierer von der Kurzschlussproblematik befreit.&lt;br /&gt;
 &lt;br /&gt;
In den Halbbrücken sind auch auf der High-Side N-Kanal Fet´s eingesetzt. Diese haben den Vorteil, dass sie günstiger und leistungsfähiger gegenüber P-Kanal Fet´s sind. „Problematisch“ ist an ihnen jedoch, dass ihre Gatespannung oberhalb der Zwischenkreisspannung liegen muss. Zur Erzeugung dieser Spannung wird bei jedem Schalten des Low side FET über eine Diode ein Kondensator geladen, aus welchem die Spannungsversorgung zur Ansteuerung des High side FET gewonnen wird. Low und Highside werden über eine Periode der Ausgangsspannung gleich oft geschaltet, so kann der sogenannte Bootstrap Kondensator immer nachgeladen werden. (&#039;&#039; Bootstrap ist lt. Wikipedia: englisch für Stiefelschlaufe, sinngemäß: sich an den eigenen Stiefeln [aus dem Sumpf] herausziehen &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
In der Schaltung sind zwei Satz FET´s parallel geschaltet. Der zweite Satz braucht nur bei größerem Strombedarf bestückt werden.&lt;br /&gt;
&lt;br /&gt;
Die Platine ist zusätzlich mit Lack isoliert, in sauberer Umgebung reicht der Leiterbahnabstand auch so, aber bei etwas Luftfeuchte ist Lack besser als ein Loch in der Platine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Wechselrichter.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Steuerung ===&lt;br /&gt;
Die Ansteuerung des Leistungskreis wird mittels Software-PWM realisiert. Zu einer präzisen Bildung der notwendigen Steuersignale ist eine kurze Programmlaufzeit notwendig. Eine LCD Ausgabe oder das Einlesen von Analogwerten sprengt den möglichen Rahmen. Daher ist die Steuerung auf zwei Prozessoren aufgeteilt.&lt;br /&gt;
&lt;br /&gt;
Ein Mega 88 @20Mhz steuert die Halbbrücken. Er erhält den Frequenz- und Motorspannungssollwert über parallele Eingänge von einem Mega32. Dadurch konnte das Programm und damit auch die Zykluszeit kurz gehalten werden (12,15µs im Hauptprogramm).&lt;br /&gt;
&lt;br /&gt;
Der Mega 32 ist der gemütliche Verwalter. Er liest den analogen Sollwert, Ist-Zwischenkreisspannung, Ist-Zwischenkreisstrom , Ist-Drehzahl ein und stellt die Werte auf dem LCD dar.&lt;br /&gt;
&lt;br /&gt;
Der analoge Sollwert ändert sich durch die Rampe des Hoch- und Rücklaufgebers entsprechend langsam, sodass Sollwertsprünge und damit Stromspitzen z.B. beim Motoranlauf vermieden werden. Zur Zeit ist eine Rampe von 2 Sekunden für eine Änderung von 0 auf 50 Hz eingestellt. Der Wert kann im Programm angepasst werden.&lt;br /&gt;
 &lt;br /&gt;
Die Ist-Drehzahlerfassung soll mit einem Hallgeber und einem Magneten an der Motorachse realisiert werden. Dieser Programmteil ist aber noch nicht getestet. Ein Drehzahl von 3000U/min ergibt 50U/sec, dies sollte sich über einen normalen Portpin erfassen lassen.&lt;br /&gt;
&lt;br /&gt;
Der Ist-Strom wird nur im Zwischenkreis gemessen. Ein OP verstärkt den Spannungsabfall über einen Shunt. Durch die Zwischenkreiskondensatoren ist der Strom hier einigermaßen glatt und lässt sich mit dem Analogeingang messen. Eine Messung der Phasenstromes hab ich nicht mehr auf der Platine unterbekommen und müsste extern erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Steuerprogramm ===&lt;br /&gt;
Da der IR 2109 immer den High &#039;&#039;&#039;oder&#039;&#039;&#039; Low Side FET ansteuert, sind &#039;&#039;&#039;immer drei&#039;&#039;&#039; der sechs FET´s des Leistungsteils leitend. Es ergeben sich die folgenden Ausgangsmuster, wobei z.B. 001 bedeutet, dass den Halbbrücken 1 und 2 der Low Side FET und in der Halbbrücke 3 der High Side FET leitet. Je nach Motorschaltung (Stern oder Dreieck) ergeben sich unterschiedliche Spannungen an den Motorwicklungen &#039;&#039;&#039;u&#039;&#039;&#039; , &#039;&#039;&#039;v&#039;&#039;&#039; und &#039;&#039;&#039;w&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Stern&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|Dreieck&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
|-&lt;br /&gt;
| Muster 1&lt;br /&gt;
|&#039;&#039;&#039;001&#039;&#039;&#039;&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| - Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 2&lt;br /&gt;
|&#039;&#039;&#039;011&#039;&#039;&#039;&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| + Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 3&lt;br /&gt;
|&#039;&#039;&#039;010&#039;&#039;&#039;&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
|-&lt;br /&gt;
|Muster 4&lt;br /&gt;
|&#039;&#039;&#039;110&#039;&#039;&#039;&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| + Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 5&lt;br /&gt;
|&#039;&#039;&#039;100&#039;&#039;&#039;&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| - Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 6&lt;br /&gt;
|&#039;&#039;&#039;101&#039;&#039;&#039;&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| -Udc	&lt;br /&gt;
| 0 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Motorspannungen.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
Durch die Parallelschaltung von jeweils zwei Motorwicklungen in der Sternschaltung teilt sich die Zwischenkreisspannung im Verhältnis 1/3 zu 2/3 auf. Bei der Dreiecksschaltung wird jeweils eine Wicklung kurzgeschlossen, die Spannung ist hier 0 Volt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden die Ausgangsmuster der Reihe nach ausgegeben, so wird der Rotor des angeschlossenen Motors seine Lage um jeweils 60 Grad verändern. Man spricht von den sechs Spannungsvektoren oder Raumzeigern. Hinzu kommen noch die Muster 000 und 111 bei welchen die Motorspannung 0V ist, da alle Wicklungen an + Udc oder - Udc hängen (Nullspannungsvektor). &lt;br /&gt;
Gibt man nun die Ausgangsmuster 1 bis 6 mit der entsprechenden Frequenz heraus, bekommt man eine Drehbewegung des Motors hin. Der Lauf des Motors ist aber ruckelig und der Motor erwärmt sich, da durch das Schalten der Rechtecke eine Menge Blindstrom in Motor unterwegs ist.&lt;br /&gt;
&lt;br /&gt;
=== Raumzeigermodulation ===&lt;br /&gt;
Für einen runden Lauf des Motors und natürlich zur Minimierung der Verluste, muß der Motorstrom möglichst sinusförmin sein. Eine Ansteuerung durch eine analoge Verstärkerschaltung wurde imense Verlustleistung hervorrufen. Daher kommt nur eine Realisierung mittels PWM in Frage.&lt;br /&gt;
&lt;br /&gt;
Gemäß der obigen Tabelle ergibt sich zum Beispiel bei einem im Stern geschaltetem Motor und einem Ausgangsmuster von 001 eine Spannung von -1/3 Udc in der Wicklung &#039;&#039;&#039;u&#039;&#039;&#039; des Motors (-1/3 Udc in &#039;&#039;&#039;v&#039;&#039;&#039; und  +2/3 Udc in &#039;&#039;&#039;w&#039;&#039;&#039;). Bei dem Muster 011 eine Spannung von -2/3Udc in &#039;&#039;&#039;u&#039;&#039;&#039;, +1/3 Udc in &#039;&#039;&#039;v&#039;&#039;&#039;  und +1/3 Udc in &#039;&#039;&#039;w&#039;&#039;&#039; .&lt;br /&gt;
Gibt man die beiden Muster abwechselnd aus, so ergibt sich in der Motorwicklung ein Mittelwert aus den beiden Spannungen. Vorausgesetzt man macht es schell genug, so dass die Induktivität der Motorwicklung den Strom glättet.&lt;br /&gt;
&lt;br /&gt;
Je nach zeitlichem Anteil der beiden Schaltzustände kann die Spannung im Verhältnis zu den beiden Zeitanteilen variiert werden. Wird z.B. das Muster 001 zu 25% der Zeit und das Muster 011 zu 75% der Zeit ausgegeben so ist die Spannung in der Wicklung &#039;&#039;&#039;u&#039;&#039;&#039;: (0,25*-1/3Udc + 0,75*-2/3Udc)/2 = -0,58Udc&lt;br /&gt;
&lt;br /&gt;
Für einen sinusförmigen Verlauf der Ausgangsspannung werden die Zeitanteile der beiden jeweiligen Ausgangsmuster in Verhältnis zu Sinus des Umlaufwinkels bewertet. &lt;br /&gt;
Für eine möglichst feine Nachbildung einer Sinuswelle, wird die Ausgabe in meinem Programm in 400µs lange Stücke geteilt. =&amp;gt; Pulsfrequenz = 2500 Hz. Hier gilt: je höher die Pulsfrequenz umso besser wird der Sinus getroffen. &lt;br /&gt;
&lt;br /&gt;
Durch die 6 Raumzeiger ist die Periode einer kompletten Sinusschwingung (und damit auch eine gesamte Motorumdrehung) in 6 Sektoren von jeweils 60 Grad Länge geteilt. Jeder Sektor hat eine Anfangsvektor und einen Endvektor mit dem entsprechenden Ausgangsmuster. Je nach dem Wert des Umlaufwinkels Omega wird der Anfangsvektor oder der Endvektor länger, bzw. kürzer eingeschaltet. Durch die Induktivität des Motors bildet sich ein Mittelwert der Spannung in der jeweiligen Motorwicklung proportional zu den Einschaltzeiten. &lt;br /&gt;
Im Programm läuft ein Zähler für Omega von 0 bis 59, dann wird der Sektorzähler erhöht und der Omega Zähler auf 0 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Ta = Zeit Anfangsvektor = proportional zu: sin (60-omega)&lt;br /&gt;
&lt;br /&gt;
Te = Zeit Endvektor = proportional zu: sin (omega)&lt;br /&gt;
&lt;br /&gt;
Da jedes Ausgangsmuster alle drei Wicklungen beeinflusst, braucht zur Erzeugung der benötigten Spannungen nur eine Berechnung der Schaltzeiten für alle drei Wicklungen stattfinden. Die Spannung in den anderen beiden Wicklungen ändern sich genauso. &lt;br /&gt;
&lt;br /&gt;
Da der induktive Widerstand der Motorwicklungen frequenzabhängig ist, muss die Motorspannung umgekehrt proportional zur Frequenz verändert werden. Dies wird durch Verkleinerung der Einschaltdauer der spannungsführenden Vektoren und Ausgabe eines Nullspannungsvektors (Muster 000 oder 111) erreicht.&lt;br /&gt;
&lt;br /&gt;
Ta = Zeit Anfangsvektor = proportional zu:  sin (60-omega)* Motorspannung in %&lt;br /&gt;
&lt;br /&gt;
Te = Zeit Endvektor = proportional zu:   sin (omega)* Motorspannung in %&lt;br /&gt;
&lt;br /&gt;
To = Zeit Nullspannungsvektor = Pulsperiode-(Zeit Anfangsvektor + Zeit Endvektor)&lt;br /&gt;
&lt;br /&gt;
Für eine bessere Symmetrie wird To halbiert und jeweils vor und nach den Spannungsvektoren ausgegeben. &lt;br /&gt;
Die Nullspannung kann mit dem Muster 000 oder 111 erreicht werden. Zur Minimierung der Schaltverluste in den FET´s wird das Nullspannungsmuster gewählt, bei welchem nur eine Halbbrücke umgeschaltet werden muss. Die Schaltvorgänge werden ebenfalls minimiert, wenn in zwei aufeinander folgenden Pulsperioden die Muster in umgekehrter Reihenfolge ausgegeben werden. Der Mittelwert der erzeugten Spannung wird hierdurch nicht verändert.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Anfangsvektor&lt;br /&gt;
|Endvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Endvektor&lt;br /&gt;
|Anfangsvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|-&lt;br /&gt;
|000&lt;br /&gt;
|010&lt;br /&gt;
|110&lt;br /&gt;
|111&lt;br /&gt;
|111&lt;br /&gt;
|110&lt;br /&gt;
|010&lt;br /&gt;
|000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Werden anstelle eines Motors drei im Dreieck geschaltete Widerstände angeschlossen erhält man folgenden Spannungsverlauf:&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Spannung_an_ohmschen_Widerstand.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Es ist zu erkennen, wie der Anteil der positiven Spannungsanteile mit jeder Pulsperiode (0,4ms oder 2 Einheiten lang) zunimmt.&lt;br /&gt;
&lt;br /&gt;
=== Programm für Atmel Mega 32 ===&lt;br /&gt;
Der Prozessor bekommt über 8 Eingänge (analog oder digital) die Steuerbefehle und gibt über parallele Ausgänge die Steuerbefehle an den Mega88 für die Raumzeigermodulation. Angesteuert wird auch ein LCD zur Anzeige vom Ist-Spannung, Ist-Strom, Ist-Drehzahl und Sollwerten.&lt;br /&gt;
Da sich die Ausgangssignale nur relativ langsam ändern, wird der Prozessor mit 1Mhz internem Oszillator betrieben&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Timerinterrupts&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Timer 0 = Hoch- und Rücklaufgeber. Sollwertintegraton, damit bei Sollwertsprüngen die Motordrehzahl langsam geändert wird. Der Eingangssollwert sollvh wird intergriert zum vorzeichenbehafteten Sollwert sollnh&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hauptprogrammablauf:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einlesen des Sollwerts sollvh, Bildung des absoluten Sollwerts sollabs, Bildung des Richtungssignals und Bildung des Freigabesignals.&lt;br /&gt;
&lt;br /&gt;
Einlesen von Ist-Spannung, Ist-Strom, und analogen Sollwerten.&lt;br /&gt;
&lt;br /&gt;
Ausgaben an des LCD&lt;br /&gt;
&lt;br /&gt;
Messung der Ist-Drehzahl&lt;br /&gt;
&lt;br /&gt;
Und wieder nach oben in der Endlosschleife&lt;br /&gt;
&lt;br /&gt;
=== Programm für Atmel Mega 88 ===&lt;br /&gt;
Der Prozessor bekommt den Frequenzsollwert, den Spannungssollwert, die Drehrichtung und das Freigabesignal über parallele Eingänge übermittelt. Angesteuert werden die drei Halbbrücken (IN), die Freigabeeingänge der Brückentreiber (SD) über einen gemeinsamen Ausgang und zwei LED`s.&lt;br /&gt;
Hochgezählt wird im Programm der Zeiger für den aktuellen Stand Sinusschwingung am Ausgang (Omega), aufgeteilt in 6 Sektoren. Daraus berechnet werden die Einschaltzeiten der Halbbrücken für jeweils zwei PWM-Perioden (Pulsperioden, zur Unterscheidung von der Periode der Ausgangsspannung). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timerinterrupts&#039;&#039;&#039; &lt;br /&gt;
Timer 1 = Ausgabe der Ausgangsmuster. Die Timerwerte werden im Hauptprogramm berechnet. Es wird der pulszykluszaehler für die Ausgabe des gewünschten Ausgangsmusters über die dazugehörige Zeit von 0 bis 7 hochgezählt. 7 entspricht dem Ende der zweiten Pulsperiode. Damit die Timerwerte möglichst genau eingehalten werden, werden während der Abarbeitung dieses Programmteils die Interrupts gesperrt. &lt;br /&gt;
Timer 0 = Zähler für dem Umlaufwinkel und für den aktuellen Sektor. Die Timerwerte sind in einer Tabelle gespeichert und werden im Abhängigkeit vom Sollwert  sollabs an den Timer gegeben Es wird omega bis 59 und sektor bis 6 hochgezählt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hauptprogrammablauf:&#039;&#039;&#039;&lt;br /&gt;
Einlesen des Sollwerts sollabs, der Ausgangsspannung spg, des Richtungssignals richtung und des Freigabesignals enable&lt;br /&gt;
Laden der Timerwerte aus der Tabelle fbwfl[sollabs] für den Timer 0 zum Zählen von Omega und den Sektoren&lt;br /&gt;
Zwischenspeicherung von Omega und Sektor, damit während der Berechnungen mit den gleichen Werten gerechnet wird. Berechnung der Timerwerte für Timer 1: Ta, Te, To gemäss Raumzeigermodulation mit den dazugehörigen Ausgangsmustern. Die Werte für Sinus Omega 0 bis 69 sind in der Tabelle sin[omega] gespeichert, die Werte für Sinus (60-omega) in der Tabelle sinkomp[omega].&lt;br /&gt;
&lt;br /&gt;
Ta= (sinkomp[omega]*spannung[sollabs]);&lt;br /&gt;
&lt;br /&gt;
Te= (sin[omega]*spannung[sollabs]);&lt;br /&gt;
&lt;br /&gt;
To= ((1000-(Ta+Te))/2);&lt;br /&gt;
&lt;br /&gt;
Speicherung der Ausgangsmuster und Timerwerte für zwei Pulsperioden&lt;br /&gt;
 &lt;br /&gt;
Und wieder nach oben in der Endlosschleife&lt;br /&gt;
&lt;br /&gt;
== Motorstrom ==&lt;br /&gt;
Hier das Ergebnis aller Bemühungen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Motorstrom_30Hz.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Motorstrom in einem angeschossenen Drehstrommotor über einen Shunt gemessen bei 30Hz Ausgangsfrequenz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foto ==&lt;br /&gt;
Projektfoto vom Wechselrichter und der Steuerung. Der Wechselrichter ist über das aufgefächerte Flachbandkabel in der Bildmitte mit der Steuerung verbunden. Der Wannenstecker ist auch Programmierstecker für den Mega88.&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_WR_und_Steuerung.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Die FET´s befinden sich auf der Unterseite der Platine, so ließ sich der Kühlkörper leicher montieren.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* Einspeisung   [[Media:FU_Einspeisung.zip‎|download zip-File]]&lt;br /&gt;
 &lt;br /&gt;
* Leistungsteil [[Media:FU_Wechselrichter.zip‎|download zip-File]]&lt;br /&gt;
&lt;br /&gt;
* Steuerung     [[Media:FU_Steuerung.zip|download zip-File]]&lt;br /&gt;
‎&lt;br /&gt;
&lt;br /&gt;
== Verluste ==&lt;br /&gt;
&lt;br /&gt;
3 Stück IR2109 , 1 Stück Mega 8 , 1 Stück Mega 88 , 4 Stück IRFP150 verstarben in treuer Plichterfüllung durch Unachtsamkeiten des Benutzers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:Wettbewerb]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzumrichter_mit_Raumzeigermodulation&amp;diff=30071</id>
		<title>Frequenzumrichter mit Raumzeigermodulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzumrichter_mit_Raumzeigermodulation&amp;diff=30071"/>
		<updated>2008-08-13T20:01:02Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* Einspeisung und Bremsshopper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Axel Jeromin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein Frequenzumrichter ist ein Gerät zur Veränderung der Drehzahl eines Drehstrom Asynchronmotors.&lt;br /&gt;
Die Drehzahl eines Drehstrom Asynchronmotors ist nur von der Frequenz der angelegten Spannung abhängig. Eine Verringerung der Netzspannung bei konstanter Frequenz über einen Trafo oder Vorwiderstände verändert durch den zunehmen Schlupf irgendwann auch die Drehzahl, das Ganze ist dann aber stark lastabhängig und somit unbrauchbar. Diese Methode wurde mal vor sehr vielen Jahren für einen Sanftanlauf genutzt.&lt;br /&gt;
Ebenfall vor vielen Jahren nutzte man zur Frequenzänderung einen Umformer bestehend aus einem Gleichstrommotor und einem Drehstromgenerator. (Hier und Dort auch Heute noch im Einsatz, z.B. Walzwerk).&lt;br /&gt;
&lt;br /&gt;
Heute wird die Netzspannung gleichgerichtet, geglättet und eine Leistungselektronik erzeugt dann die dreiphasige Wechselspannung mit variabler Frequenz und Spannung.&lt;br /&gt;
&lt;br /&gt;
Die nachfolgend beschriebene Schaltung eignet sich für DC-Spannungen von 30V bis 325V. Mit 30V kann z.B. ein Motor einer Festplatte betrieben werden (dies war mein Testmotor, bevor es an die höheren Spannungen ging) und 325V für einen 230/400V Motor in Dreieckschaltung. Natürlich kann man so ein Gerät mittlerweile für kleines Geld fertig kaufen, aber bei nicht gebräuchlichen Spannungen (Elektroauto) oder ungewöhnlichen Anwendungen ist man mit einem Selbstbau flexibler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Achtung: die Schaltung ist potentialbehaftet. D.h das Massepotentional der Steuerspannung liegt bei Betrieb mit 230V auf ca. 127V gegen Erde! Daher ist bei Progammmodifikationen die Schaltung unbedingt von Netz zu trennen und aus einer Batterie zu speisen.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Ein moderner Frequenzumrichter besitzt in der Regel einen Gleichrichter, einen Zwischenkreis und einen Wechselrichter. Davor kommt noch ein Filter zur Verminderung von Störungen zurück in das einspeisende Netz. Der Gleichrichter soll die angelegte Wechselspannung gleichrichten. (na klar) Die erzeugte pulsierende Gleichspannung ist bei einer 2 phasigen Einspeisung mit 230V ==&amp;gt; UDC = 230V * Wurzel 2 = 325V. &lt;br /&gt;
&lt;br /&gt;
Der Zwischenkreis glättet und puffert die Gleichspannung. Er besteht aus einem oder mehreren Glättungskondensatoren. Bei Spezialanwendungen wie z.B. einem Elektroauto wird auf die Einspeisung verzichtet und der Zwischenkreis direkt an die Akkus angeschlossen. &lt;br /&gt;
&lt;br /&gt;
Der Wechselrichter besteht aus drei Halbbrücken. Jede Halbbrücke hat zwei Mos-Fet Transistoren. Je nachdem welcher FET der Halbbrücke leitet, liegt der Brückenabgriff an Plus oder Minus. Sind beide Transistoren leitend, gibt es einen prima Kurzschluss, den es zu vermeiden gilt.&lt;br /&gt;
 &lt;br /&gt;
Arbeitet der Motor generatorisch, d.h. die Motordrehzahl ist größer als der Umrichtersollwert, wird Energie in den Zwischenkreis gespeist. Da die Energie nicht durch den Einspeisegleichrichter zurück ins Netz gelangen kann, steigt in diesen Fall die Zwischenkreisspannung. Die Zwischenkreisspannung muss daher überwacht werden, ab einem bestimmten Wert wird ein sogenannter Bremswiderstand eingeschaltet, in welchen die überschüssige Energie in Wärme umgewandelt wird.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Einspeisung und Bremschopper ===&lt;br /&gt;
Die Einspeisung besteht aus: den Eingangsklemmen, dem Filter, dem Gleichrichter und dem ersten Zwischenkreiskondensator.&lt;br /&gt;
Im Eingangskreis ist ein Ladewiderstand, welcher mittels eines Relais überbrückt werden kann. Das Relais wird ab einer eingestellten Zwischenkreisspannung geschaltet, um die Kondensatoren zuerst über den Widerstand langsam zu laden.&lt;br /&gt;
&lt;br /&gt;
Der Bremsshopper FET wird vom Low-Side Teil eines IR2101 getrieben. Als Bremswiderstand nutze ich eine Glühlampe.&lt;br /&gt;
&lt;br /&gt;
Von einem Tiny45 wird die Zwischenkreisspannung gemessen. Ist die Spannung grösser 243V und kleiner 408V wird die Meldung “Zwischenkreis OK” herausgegeben. Ab einer Spannung von 243V wird das Relais zur Überbrückung des Ladewiderstands geschaltet. Ab 375V wird der Bremswiderstand gepulst. 375V entspricht 0% PWM, 400V entspricht 100% PWM. Die PWM Frequenz ist 150Hz.&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Einspeisung.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
Der Leistungsteil besteht im Wesentlichen aus drei Halbbrücken. Jeweils zwei FET´s in einer Halbbrücke werden von einem IR2109 getrieben, welcher wieder direkt durch den Atmel Mega 88 auf der Steuerungsplatine angesteuert wird. Der IR 2109 steuert immer in Abhängigkeit vom Eingang “IN” entweder den High side- oder den Low side FET durch. Zwischen dem Wechsel liegt immer eine Totzeit von 540ns. Dadurch ist der Programmierer von der Kurzschlussproblematik befreit.&lt;br /&gt;
 &lt;br /&gt;
In den Halbbrücken sind auch auf der High-Side N-Kanal Fet´s eingesetzt. Diese haben den Vorteil, dass sie günstiger und leistungsfähiger gegenüber P-Kanal Fet´s sind. „Problematisch“ ist an ihnen jedoch, dass ihre Gatespannung oberhalb der Zwischenkreisspannung liegen muss. Zur Erzeugung dieser Spannung wird bei jedem Schalten des Low side FET über eine Diode ein Kondensator geladen, aus welchem die Spannungsversorgung zur Ansteuerung des High side FET gewonnen wird. Low und Highside werden über eine Periode der Ausgangsspannung gleich oft geschaltet, so kann der sogenannte Bootstrap Kondensator immer nachgeladen werden. (&#039;&#039; Bootstrap ist lt. Wikipedia: englisch für Stiefelschlaufe, sinngemäß: sich an den eigenen Stiefeln [aus dem Sumpf] herausziehen &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
In der Schaltung sind zwei Satz FET´s parallel geschaltet. Der zweite Satz braucht nur bei größerem Strombedarf bestückt werden.&lt;br /&gt;
&lt;br /&gt;
Die Platine ist zusätzlich mit Lack isoliert, in sauberer Umgebung reicht der Leiterbahnabstand auch so, aber bei etwas Luftfeuchte ist Lack besser als ein Loch in der Platine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Wechselrichter.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Steuerung ===&lt;br /&gt;
Die Ansteuerung des Leistungskreis wird mittels Software-PWM realisiert. Zu einer präzisen Bildung der notwendigen Steuersignale ist eine kurze Programmlaufzeit notwendig. Eine LCD Ausgabe oder das Einlesen von Analogwerten sprengt den möglichen Rahmen. Daher ist die Steuerung auf zwei Prozessoren aufgeteilt.&lt;br /&gt;
&lt;br /&gt;
Ein Mega 88 @20Mhz steuert die Halbbrücken. Er erhält den Frequenz- und Motorspannungssollwert über parallele Eingänge von einem Mega32. Dadurch konnte das Programm und damit auch die Zykluszeit kurz gehalten werden (12,15µs im Hauptprogramm).&lt;br /&gt;
&lt;br /&gt;
Der Mega 32 ist der gemütliche Verwalter. Er liest den analogen Sollwert, Ist-Zwischenkreisspannung, Ist-Zwischenkreisstrom , Ist-Drehzahl ein und stellt die Werte auf dem LCD dar.&lt;br /&gt;
&lt;br /&gt;
Der analoge Sollwert ändert sich durch die Rampe des Hoch- und Rücklaufgebers entsprechend langsam, sodass Sollwertsprünge und damit Stromspitzen z.B. beim Motoranlauf vermieden werden. Zur Zeit ist eine Rampe von 2 Sekunden für eine Änderung von 0 auf 50 Hz eingestellt. Der Wert kann im Programm angepasst werden.&lt;br /&gt;
 &lt;br /&gt;
Die Ist-Drehzahlerfassung soll mit einem Hallgeber und einem Magneten an der Motorachse realisiert werden. Dieser Programmteil ist aber noch nicht getestet. Ein Drehzahl von 3000U/min ergibt 50U/sec, dies sollte sich über einen normalen Portpin erfassen lassen.&lt;br /&gt;
&lt;br /&gt;
Der Ist-Strom wird nur im Zwischenkreis gemessen. Ein OP verstärkt den Spannungsabfall über einen Shunt. Durch die Zwischenkreiskondensatoren ist der Strom hier einigermaßen glatt und lässt sich mit dem Analogeingang messen. Eine Messung der Phasenstromes hab ich nicht mehr auf der Platine unterbekommen und müsste extern erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Steuerprogramm ===&lt;br /&gt;
Da der IR 2109 immer den High &#039;&#039;&#039;oder&#039;&#039;&#039; Low Side FET ansteuert, sind &#039;&#039;&#039;immer drei&#039;&#039;&#039; der sechs FET´s des Leistungsteils leitend. Es ergeben sich die folgenden Ausgangsmuster, wobei z.B. 001 bedeutet, dass den Halbbrücken 1 und 2 der Low Side FET und in der Halbbrücke 3 der High Side FET leitet. Je nach Motorschaltung (Stern oder Dreieck) ergeben sich unterschiedliche Spannungen an den Motorwicklungen &#039;&#039;&#039;u&#039;&#039;&#039; , &#039;&#039;&#039;v&#039;&#039;&#039; und &#039;&#039;&#039;w&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Stern&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|Dreieck&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
|-&lt;br /&gt;
| Muster 1&lt;br /&gt;
|&#039;&#039;&#039;001&#039;&#039;&#039;&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| - Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 2&lt;br /&gt;
|&#039;&#039;&#039;011&#039;&#039;&#039;&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| + Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 3&lt;br /&gt;
|&#039;&#039;&#039;010&#039;&#039;&#039;&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
|-&lt;br /&gt;
|Muster 4&lt;br /&gt;
|&#039;&#039;&#039;110&#039;&#039;&#039;&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| + Udc&lt;br /&gt;
| - Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 5&lt;br /&gt;
|&#039;&#039;&#039;100&#039;&#039;&#039;&lt;br /&gt;
| +2/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| -1/3 Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| 0 V&lt;br /&gt;
| - Udc&lt;br /&gt;
|-&lt;br /&gt;
|Muster 6&lt;br /&gt;
|&#039;&#039;&#039;101&#039;&#039;&#039;&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| -2/3 Udc&lt;br /&gt;
| +1/3 Udc&lt;br /&gt;
| + Udc&lt;br /&gt;
| -Udc	&lt;br /&gt;
| 0 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Motorspannungen.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
Durch die Parallelschaltung von jeweils zwei Motorwicklungen in der Sternschaltung teilt sich die Zwischenkreisspannung im Verhältnis 1/3 zu 2/3 auf. Bei der Dreiecksschaltung wird jeweils eine Wicklung kurzgeschlossen, die Spannung ist hier 0 Volt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden die Ausgangsmuster der Reihe nach ausgegeben, so wird der Rotor des angeschlossenen Motors seine Lage um jeweils 60 Grad verändern. Man spricht von den sechs Spannungsvektoren oder Raumzeigern. Hinzu kommen noch die Muster 000 und 111 bei welchen die Motorspannung 0V ist, da alle Wicklungen an + Udc oder - Udc hängen (Nullspannungsvektor). &lt;br /&gt;
Gibt man nun die Ausgangsmuster 1 bis 6 mit der entsprechenden Frequenz heraus, bekommt man eine Drehbewegung des Motors hin. Der Lauf des Motors ist aber ruckelig und der Motor erwärmt sich, da durch das Schalten der Rechtecke eine Menge Blindstrom in Motor unterwegs ist.&lt;br /&gt;
&lt;br /&gt;
=== Raumzeigermodulation ===&lt;br /&gt;
Für einen runden Lauf des Motors und natürlich zur Minimierung der Verluste, muß der Motorstrom möglichst sinusförmin sein. Eine Ansteuerung durch eine analoge Verstärkerschaltung wurde imense Verlustleistung hervorrufen. Daher kommt nur eine Realisierung mittels PWM in Frage.&lt;br /&gt;
&lt;br /&gt;
Gemäß der obigen Tabelle ergibt sich zum Beispiel bei einem im Stern geschaltetem Motor und einem Ausgangsmuster von 001 eine Spannung von -1/3 Udc in der Wicklung &#039;&#039;&#039;u&#039;&#039;&#039; des Motors (-1/3 Udc in &#039;&#039;&#039;v&#039;&#039;&#039; und  +2/3 Udc in &#039;&#039;&#039;w&#039;&#039;&#039;). Bei dem Muster 011 eine Spannung von -2/3Udc in &#039;&#039;&#039;u&#039;&#039;&#039;, +1/3 Udc in &#039;&#039;&#039;v&#039;&#039;&#039;  und +1/3 Udc in &#039;&#039;&#039;w&#039;&#039;&#039; .&lt;br /&gt;
Gibt man die beiden Muster abwechselnd aus, so ergibt sich in der Motorwicklung ein Mittelwert aus den beiden Spannungen. Vorausgesetzt man macht es schell genug, so dass die Induktivität der Motorwicklung den Strom glättet.&lt;br /&gt;
&lt;br /&gt;
Je nach zeitlichem Anteil der beiden Schaltzustände kann die Spannung im Verhältnis zu den beiden Zeitanteilen variiert werden. Wird z.B. das Muster 001 zu 25% der Zeit und das Muster 011 zu 75% der Zeit ausgegeben so ist die Spannung in der Wicklung &#039;&#039;&#039;u&#039;&#039;&#039;: (0,25*-1/3Udc + 0,75*-2/3Udc)/2 = -0,58Udc&lt;br /&gt;
&lt;br /&gt;
Für einen sinusförmigen Verlauf der Ausgangsspannung werden die Zeitanteile der beiden jeweiligen Ausgangsmuster in Verhältnis zu Sinus des Umlaufwinkels bewertet. &lt;br /&gt;
Für eine möglichst feine Nachbildung einer Sinuswelle, wird die Ausgabe in meinem Programm in 400µs lange Stücke geteilt. =&amp;gt; Pulsfrequenz = 2500 Hz. Hier gilt: je höher die Pulsfrequenz umso besser wird der Sinus getroffen. &lt;br /&gt;
&lt;br /&gt;
Durch die 6 Raumzeiger ist die Periode einer kompletten Sinusschwingung (und damit auch eine gesamte Motorumdrehung) in 6 Sektoren von jeweils 60 Grad Länge geteilt. Jeder Sektor hat eine Anfangsvektor und einen Endvektor mit dem entsprechenden Ausgangsmuster. Je nach dem Wert des Umlaufwinkels Omega wird der Anfangsvektor oder der Endvektor länger, bzw. kürzer eingeschaltet. Durch die Induktivität des Motors bildet sich ein Mittelwert der Spannung in der jeweiligen Motorwicklung proportional zu den Einschaltzeiten. &lt;br /&gt;
Im Programm läuft ein Zähler für Omega von 0 bis 59, dann wird der Sektorzähler erhöht und der Omega Zähler auf 0 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Ta = Zeit Anfangsvektor = proportional zu: sin (60-omega)&lt;br /&gt;
&lt;br /&gt;
Te = Zeit Endvektor = proportional zu: sin (omega)&lt;br /&gt;
&lt;br /&gt;
Da jedes Ausgangsmuster alle drei Wicklungen beeinflusst, braucht zur Erzeugung der benötigten Spannungen nur eine Berechnung der Schaltzeiten für alle drei Wicklungen stattfinden. Die Spannung in den anderen beiden Wicklungen ändern sich genauso. &lt;br /&gt;
&lt;br /&gt;
Da der induktive Widerstand der Motorwicklungen frequenzabhängig ist, muss die Motorspannung umgekehrt proportional zur Frequenz verändert werden. Dies wird durch Verkleinerung der Einschaltdauer der spannungsführenden Vektoren und Ausgabe eines Nullspannungsvektors (Muster 000 oder 111) erreicht.&lt;br /&gt;
&lt;br /&gt;
Ta = Zeit Anfangsvektor = proportional zu:  sin (60-omega)* Motorspannung in %&lt;br /&gt;
&lt;br /&gt;
Te = Zeit Endvektor = proportional zu:   sin (omega)* Motorspannung in %&lt;br /&gt;
&lt;br /&gt;
To = Zeit Nullspannungsvektor = Pulsperiode-(Zeit Anfangsvektor + Zeit Endvektor)&lt;br /&gt;
&lt;br /&gt;
Für eine bessere Symmetrie wird To halbiert und jeweils vor und nach den Spannungsvektoren ausgegeben. &lt;br /&gt;
Die Nullspannung kann mit dem Muster 000 oder 111 erreicht werden. Zur Minimierung der Schaltverluste in den FET´s wird das Nullspannungsmuster gewählt, bei welchem nur eine Halbbrücke umgeschaltet werden muss. Die Schaltvorgänge werden ebenfalls minimiert, wenn in zwei aufeinander folgenden Pulsperioden die Muster in umgekehrter Reihenfolge ausgegeben werden. Der Mittelwert der erzeugten Spannung wird hierdurch nicht verändert.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Anfangsvektor&lt;br /&gt;
|Endvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|Endvektor&lt;br /&gt;
|Anfangsvektor&lt;br /&gt;
|Nullspannungsvektor&lt;br /&gt;
|-&lt;br /&gt;
|000&lt;br /&gt;
|010&lt;br /&gt;
|110&lt;br /&gt;
|111&lt;br /&gt;
|111&lt;br /&gt;
|110&lt;br /&gt;
|010&lt;br /&gt;
|000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Werden anstelle eines Motors drei im Dreieck geschaltete Widerstände angeschlossen erhält man folgenden Spannungsverlauf:&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Spannung_an_ohmschen_Widerstand.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Es ist zu erkennen, wie der Anteil der positiven Spannungsanteile mit jeder Pulsperiode (0,4ms oder 2 Einheiten lang) zunimmt.&lt;br /&gt;
&lt;br /&gt;
=== Programm für Atmel Mega 32 ===&lt;br /&gt;
Der Prozessor bekommt über 8 Eingänge (analog oder digital) die Steuerbefehle und gibt über parallele Ausgänge die Steuerbefehle an den Mega88 für die Raumzeigermodulation. Angesteuert wird auch ein LCD zur Anzeige vom Ist-Spannung, Ist-Strom, Ist-Drehzahl und Sollwerten.&lt;br /&gt;
Da sich die Ausgangssignale nur relativ langsam ändern, wird der Prozessor mit 1Mhz internem Oszillator betrieben&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Timerinterrupts&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Timer 0 = Hoch- und Rücklaufgeber. Sollwertintegraton, damit bei Sollwertsprüngen die Motordrehzahl langsam geändert wird. Der Eingangssollwert sollvh wird intergriert zum vorzeichenbehafteten Sollwert sollnh&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hauptprogrammablauf:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einlesen des Sollwerts sollvh, Bildung des absoluten Sollwerts sollabs, Bildung des Richtungssignals und Bildung des Freigabesignals.&lt;br /&gt;
&lt;br /&gt;
Einlesen von Ist-Spannung, Ist-Strom, und analogen Sollwerten.&lt;br /&gt;
&lt;br /&gt;
Ausgaben an des LCD&lt;br /&gt;
&lt;br /&gt;
Messung der Ist-Drehzahl&lt;br /&gt;
&lt;br /&gt;
Und wieder nach oben in der Endlosschleife&lt;br /&gt;
&lt;br /&gt;
=== Programm für Atmel Mega 88 ===&lt;br /&gt;
Der Prozessor bekommt den Frequenzsollwert, den Spannungssollwert, die Drehrichtung und das Freigabesignal über parallele Eingänge übermittelt. Angesteuert werden die drei Halbbrücken (IN), die Freigabeeingänge der Brückentreiber (SD) über einen gemeinsamen Ausgang und zwei LED`s.&lt;br /&gt;
Hochgezählt wird im Programm der Zeiger für den aktuellen Stand Sinusschwingung am Ausgang (Omega), aufgeteilt in 6 Sektoren. Daraus berechnet werden die Einschaltzeiten der Halbbrücken für jeweils zwei PWM-Perioden (Pulsperioden, zur Unterscheidung von der Periode der Ausgangsspannung). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timerinterrupts&#039;&#039;&#039; &lt;br /&gt;
Timer 1 = Ausgabe der Ausgangsmuster. Die Timerwerte werden im Hauptprogramm berechnet. Es wird der pulszykluszaehler für die Ausgabe des gewünschten Ausgangsmusters über die dazugehörige Zeit von 0 bis 7 hochgezählt. 7 entspricht dem Ende der zweiten Pulsperiode. Damit die Timerwerte möglichst genau eingehalten werden, werden während der Abarbeitung dieses Programmteils die Interrupts gesperrt. &lt;br /&gt;
Timer 0 = Zähler für dem Umlaufwinkel und für den aktuellen Sektor. Die Timerwerte sind in einer Tabelle gespeichert und werden im Abhängigkeit vom Sollwert  sollabs an den Timer gegeben Es wird omega bis 59 und sektor bis 6 hochgezählt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hauptprogrammablauf:&#039;&#039;&#039;&lt;br /&gt;
Einlesen des Sollwerts sollabs, der Ausgangsspannung spg, des Richtungssignals richtung und des Freigabesignals enable&lt;br /&gt;
Laden der Timerwerte aus der Tabelle fbwfl[sollabs] für den Timer 0 zum Zählen von Omega und den Sektoren&lt;br /&gt;
Zwischenspeicherung von Omega und Sektor, damit während der Berechnungen mit den gleichen Werten gerechnet wird. Berechnung der Timerwerte für Timer 1: Ta, Te, To gemäss Raumzeigermodulation mit den dazugehörigen Ausgangsmustern. Die Werte für Sinus Omega 0 bis 69 sind in der Tabelle sin[omega] gespeichert, die Werte für Sinus (60-omega) in der Tabelle sinkomp[omega].&lt;br /&gt;
&lt;br /&gt;
Ta= (sinkomp[omega]*spannung[sollabs]);&lt;br /&gt;
&lt;br /&gt;
Te= (sin[omega]*spannung[sollabs]);&lt;br /&gt;
&lt;br /&gt;
To= ((1000-(Ta+Te))/2);&lt;br /&gt;
&lt;br /&gt;
Speicherung der Ausgangsmuster und Timerwerte für zwei Pulsperioden&lt;br /&gt;
 &lt;br /&gt;
Und wieder nach oben in der Endlosschleife&lt;br /&gt;
&lt;br /&gt;
== Motorstrom ==&lt;br /&gt;
Hier das Ergebnis aller Bemühungen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_Motorstrom_30Hz.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Motorstrom in einem angeschossenen Drehstrommotor über einen Shunt gemessen bei 30Hz Ausgangsfrequenz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foto ==&lt;br /&gt;
Projektfoto vom Wechselrichter und der Steuerung. Der Wechselrichter ist über das aufgefächerte Flachbandkabel in der Bildmitte mit der Steuerung verbunden. Der Wannenstecker ist auch Programmierstecker für den Mega88.&lt;br /&gt;
&lt;br /&gt;
[[Bild:FU_WR_und_Steuerung.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Die FET´s befinden sich auf der Unterseite der Platine, so ließ sich der Kühlkörper leicher montieren.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* Einspeisung   [[Media:FU_Einspeisung.zip‎|download zip-File]]&lt;br /&gt;
 &lt;br /&gt;
* Leistungsteil [[Media:FU_Wechselrichter.zip‎|download zip-File]]&lt;br /&gt;
&lt;br /&gt;
* Steuerung     [[Media:FU_Steuerung.zip|download zip-File]]&lt;br /&gt;
‎&lt;br /&gt;
&lt;br /&gt;
== Verluste ==&lt;br /&gt;
&lt;br /&gt;
3 Stück IR2109 , 1 Stück Mega 8 , 1 Stück Mega 88 , 4 Stück IRFP150 verstarben in treuer Plichterfüllung durch Unachtsamkeiten des Benutzers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]] [[Category:Wettbewerb]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=28899</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=28899"/>
		<updated>2008-07-03T20:15:27Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;br /&gt;
&lt;br /&gt;
(ENC28J60 Mikrowebserver, T6963c Library, AVR-Eclipse Tutorial)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=28661</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=28661"/>
		<updated>2008-06-26T15:10:16Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;br /&gt;
&lt;br /&gt;
(ENC28J60 Mikrowebserver)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=25876</id>
		<title>AVR Softwarepool</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=25876"/>
		<updated>2008-01-28T22:20:31Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die interessantesten Softwareprojekte aus der Codesammlung...&lt;br /&gt;
&lt;br /&gt;
(A)  ... Projekt ist in &#039;&#039;&#039;Assembler&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C)  ... Projekt ist in &#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(B)  ... Projekt ist in &#039;&#039;&#039;Bascom&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(PC) ... Projekt ist nicht für einen µC, sondern für den PC&lt;br /&gt;
&lt;br /&gt;
==1-Wire==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14792  DS1820, DS18B20 in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6505 Mehrere DS1820/DS18B20 auslesen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Mehrere DS1820/DS18B20/DS18S20/DS1822 über einen Webserver auslesbar]&lt;br /&gt;
&lt;br /&gt;
==Akkulader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72627#594587 Bleiakku-Lader 12/24V]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bootloader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72308#591159 ATtiny45 Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/56818#439359 SD/MMC Card Bootloader (passt in 2kb bootsection)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/61170#480765 boofa - Bootloader für AVR über UART (AVR109)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53130#413058 Bootloader ATmega168]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/73196#600293 UART Bootloader ATtiny13 - ATmega644]&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Bootloader]]&lt;br /&gt;
&lt;br /&gt;
==DCC==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31397#241300 DCC Decoder]&lt;br /&gt;
&lt;br /&gt;
==DCF==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38914#287867 DCF77 AVR-Assemblerbaustein ]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6500#41738 DCF77-Uhr mit ATTINY12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31385#241104 DCF Digital Empfangsmodul - Korrelation - (Assembler)ATmega8 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25071#186286 DCF 77 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14788#101528 DCF-Uhr mit DotMatrix-Anzeige für avr-gcc]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12154#79501 PC DCF Timer ( PC Zeitschaltuhr)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25116#187197 DCF 77 Uhr mit CodeVision ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/58769#456232 DCF77 Uhr in C mit ATtiny26]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48597#372164 DCF77 Uhr, zum X.ten Mal, jetzt mit SAF]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 DCF77 mit beliebig gepoltem Eingangssignal innerhalb eines Webservers]&lt;br /&gt;
&lt;br /&gt;
== DRAM ==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR] und Anwendung als [http://www.mikrocontroller.net/topic/25053#186089 Audiorekorder]&lt;br /&gt;
&lt;br /&gt;
==Drehgeber==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6526#41978 Drehgeber auslesen]&lt;br /&gt;
&lt;br /&gt;
==Drehzahlmesser==&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/1518#8469 Drehzahlmesser 4 mal 7-segment mit 90S2313]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungssysteme==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/65156#521012 BASIC-Computer mit Mega32]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/74198#611404 AVR Code Wizard]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/64129#511368 AVR Tiny BASIC anpassung für ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/59189#460273 Mini-Computer mit BASIC]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62500#493931 Fixpoint-Arithmetik in &amp;quot;C&amp;quot;]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/30110#230503 Multitasking kernel für ATtinys in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/55807 Forth System für Atmegas in Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/85256#717037 64 Bit float Emulator in C, IEEE754 compatibel]&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25095#186536 FFT auf dem AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25062#186225 128point FFT in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/27001#203911 Schnelle FFT in Assembler]&lt;br /&gt;
&lt;br /&gt;
==Frequenzmesser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62610#495030 Frequenzmesser bis 2Mhz -- mit AVR ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48582#372072 Frequenzmessung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62517#494146 Input Capture Pin (ICP) auslesen ( Frequenz messen)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25144#187587 Frequenzmessund und Impulszählung über den Parallelport-IR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31394#241251 einfacher 5 MHz Frequenzzähler (Assembler) ATmega8]&lt;br /&gt;
&lt;br /&gt;
==Funksteckdosen==&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 Ansteuerung von Funksteckdosen mit einem Webserver]&lt;br /&gt;
==GPS==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48544#371717 GPS - MOUSE - MINI- NAVIGATOR (Assembler) ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/72507#593252 GPS an mega8,88 oder 168]&lt;br /&gt;
&lt;br /&gt;
==Kryptographie==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/73468 Verschiedene kryptographische Funktionen] &lt;br /&gt;
&lt;br /&gt;
==LANC==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/40463#302754 Sony LANC Auswertung mit AVR] (Atmega 128 @ 16 MHz)&lt;br /&gt;
&lt;br /&gt;
==LCD==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/53137#413137 Programm zum Erstellen eigener Schriftarten (LCD)]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/54860#423255 LCD Schriftarten ( Fonts in veschiedenen Größen )]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31403  The Siemens S65 132x176, 65536 color display with AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48501#371218 LCD Ansteuerung im 4bit-Modus]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48456#370782 LCD Library T6963c]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76399#633680 &amp;quot;Bessere&amp;quot; T6963c Library]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25099#186569 LCD Controller für 640x480 LCD mit mega8515]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38923#287939 LCD Controller KS0073 Support im 4-Bit Mode]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/79609#664268 KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/81793#683135 Pollin E0855-2 SED1530-Treiber]&lt;br /&gt;
&lt;br /&gt;
==Licht==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31388#241192 AVR-Lauflicht]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/73776#606472 LED-Touch-Panel] (ARM)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/54561#421940 HSV RGB Led Dimmer, C Code &amp;amp; Video &amp;amp; Doku]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/67567#543492 Mini RGB Lichteffektgenerator mit Menü für Pic16F84]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76839#638278 Solarlicht Steuerung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48464#370871 Ansteuerung einer RGB LED (PWM)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/87149#737282 3x7 Segment und 1 I/O-Pin (Assembler)]&lt;br /&gt;
&lt;br /&gt;
==Messgeräte für elektr. Bauteile==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60797#477026 LC-METER / LC-Messgerät ATmega8 Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60591#474873 Widerstandstester]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56770#438957 Ladungsmessgerät]&lt;br /&gt;
&lt;br /&gt;
==Midi==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
&lt;br /&gt;
==MMC==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25056#186117 SourceCode MMC die Zweite]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48481#370950 MMC/SD-Karte mit FAT16 an AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14800#102024 MMC/SD ansteuern mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
&lt;br /&gt;
==Netzgerät==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/60786#476904 Labornetzgerät]&lt;br /&gt;
&lt;br /&gt;
==Netzwerk==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87517#new Kleiner ENC28J60 µWebserver von SimonK]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/82127#new Ulrich Radigs ENC28J60 mit leicht lötbaren/beschaffbaren Bauteilen]&lt;br /&gt;
&lt;br /&gt;
==Oszilloskop==&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/53129#413011 Einfacher Osziloskop - Bascom]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48586#372093 Oszi- &amp;amp; Logikanalyser mit LCD]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31376#240880 einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56616#437772 Einfaches &amp;quot;Oszilloskop&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64763#517245 Zwei Parser für numerische Ausdrücke]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76842#638283 uShell - ein universeller Parser für uCs]&lt;br /&gt;
&lt;br /&gt;
==RFID==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
&lt;br /&gt;
==RC5==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/14789#101536 RC5 Sender auf einem Attiny11L]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12216#80856 Fernbedien RC5 Empfänger]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/59235#460765 RC5 Sender selber bauen ???]&lt;br /&gt;
&lt;br /&gt;
==Ringpuffer==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66789#536189 Ringpuffer AVR]&lt;br /&gt;
&lt;br /&gt;
==SD==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
&lt;br /&gt;
==Spiele==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48505#371259 Tetris auf dem AtMega8]&lt;br /&gt;
&lt;br /&gt;
==Taster / Schalter==&lt;br /&gt;
===mechanisch===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6492#41625 Tasten entprellen - Bulletproof] (siehe auch: [[Entprellung]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48465#370877 Universelle Tastenabfrage]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6491#41624 Tasten-Matrix entprellen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64731#517001 Tastenmatrix auslesen über nur 2 Leitungen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64743#517105 Tasten Entprellen für N00bs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
===kapazitiv===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38904  Sensor mit nur einer Kontaktfläche]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25045 Einfache Sensortaste]&lt;br /&gt;
&lt;br /&gt;
==Thermometer==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53127#413006 Thermometer mit LED &amp;amp; LM35]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Viele DS18x20-Thermometer in einem Webserver]&lt;br /&gt;
&lt;br /&gt;
==Tonerzeugung==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6502#41754 Melodieklingel mit PIC]&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/75254#622120 USB Host Stack für Eingebettete Systeme (LGPL)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53140#413249 AVR ASCII Video Terminal - 40 x 25 - BAS Signal]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53139#413225 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler]&lt;br /&gt;
* (A) [http://www.electronicspit.com/users/pit/ Videosignal in Farbe]&lt;br /&gt;
&lt;br /&gt;
==Zeitgeber==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12185#80055 Die genaue Sekunde / RTC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74673#616226 LCD-Timer für Belichtungsgerät]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31374#240878 AVR Library für RTC 12C887 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25136#187534 RTC DS1302 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25087#186454 RTC + Scheduler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53131#413059 Jumbo-LED Uhr]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25069 Sekunden in Zeit/Datum umwandeln (mit Sommerzeit/Schaltjahren)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/48560#371911 BASCOM Uhr mit Butterfly]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48450#370765 Countdown timer für UV Belichter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Schaltuhr mit DCF77-Referenz in einem Webserver, Steuerung von Funksteckdosen]&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=25514</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=25514"/>
		<updated>2008-01-13T20:42:04Z</updated>

		<summary type="html">&lt;p&gt;Simon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;br /&gt;
&lt;br /&gt;
(ENC28J60 Mikrowebserver, uFS Filesystem, usw)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Pulsweitenmodulation&amp;diff=25512</id>
		<title>Pulsweitenmodulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Pulsweitenmodulation&amp;diff=25512"/>
		<updated>2008-01-13T20:11:56Z</updated>

		<summary type="html">&lt;p&gt;Simon: /* DA-Wandlung mit PWM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Bei der &#039;&#039;&#039;Pulsweitenmodulation&#039;&#039;&#039; (engl. Pulse Width Modulation, abgekürzt &#039;&#039;&#039;PWM&#039;&#039;&#039;) wird die Ein- und Ausschaltzeit eines Rechtecksignals bei fester Grundfrequenz variiert. Das Verhältnis &amp;lt;math&amp;gt;t_{ein} / (t_{ein} + t_{aus})&amp;lt;/math&amp;gt; bezeichnet man als &#039;&#039;&#039;Tastverhältnis&#039;&#039;&#039; (engl. Duty Cycle, meist abgekürzt DC, bitte nicht verwechseln mit Direct Current = Gleichstrom ). Das Tastverhältnis ist eine Zahl zwischen 0..1.&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen ist gilt für den &#039;&#039;&#039;Mittelwert&#039;&#039;&#039; der Spannung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = U_{aus} + (U_{ein} - U_{aus}) \cdot \frac{t_{ein}}{t_{ein}+t_{aus}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}&amp;lt;/math&amp;gt; ist dabei normalerweise 0V, &amp;lt;math&amp;gt;U_{ein}&amp;lt;/math&amp;gt; die Betriebsspannung &amp;lt;math&amp;gt;V_{CC}&amp;lt;/math&amp;gt;, z.B. 5V. Deshalb kann man vereinfacht schreiben:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = V_{CC} \cdot DC&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele zeigen PWM-Signale mit einem Tastverhältnis von 75% bzw. 25%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein}=5\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}=0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein}=3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus}=1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 0\,\mathrm{V} + (5\,\mathrm{V} - 0\,\mathrm{V}) \cdot \frac{3\,\mathrm{ms}}{3\,\mathrm{ms}+1\,\mathrm{ms}} = 3,75\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Pwm1.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein}=5\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus}=0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein}=1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus}=3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 0\,\mathrm{V} + (5\,\mathrm{V} - 0\,\mathrm{V}) \cdot \frac{1\,\mathrm{ms}}{1\,\mathrm{ms}+3\,\mathrm{ms}} = 1,25\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Pwm2.png]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Leistung ==&lt;br /&gt;
&lt;br /&gt;
Steuert man mit einem pulsweitenmodulierten Signal direkt einen ohmschen Verbraucher an (z.B. Heizdraht), so ist darauf zu achten, dass man zur Bestimmung der Leistung &#039;&#039;&#039;nicht&#039;&#039;&#039; einfach&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_m}^2}{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rechnen darf, sondern die Leistung während der Ein- und Ausschaltzeit getrennt betrachten muss:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_{ein}}^2}{R} \cdot \frac{t_{ein}}{t_{ein} + t_{aus}} +&lt;br /&gt;
\frac{{U_{aus}}^2}{R} \cdot \frac{t_{aus}}{t_{ein} + t_{aus}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Da praktisch fast immer gilt &amp;lt;math&amp;gt;U_{aus}=0V&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt;U_{ein}=V_{CC}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann man vereinfacht schreiben und damit rechnen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac {{V_{CC}}^2}{R} \cdot DC&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ein} = 4\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;U_{aus} = 0\,\mathrm{V}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{ein} = 1\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_{aus} = 3\,\mathrm{ms}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;R = 10\,\mathrm{\Omega}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Mittelwert dieser Spannung ist&lt;br /&gt;
:&amp;lt;math&amp;gt;U_m = 1\,\mathrm{V}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Würde man mit diesem Wert die Leistung berechnen, so käme man auf&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{{U_m}^2}{R} = \frac{(1\,\mathrm{V})^2}{10\,\mathrm{\Omega}} = 0,1\,\mathrm{W}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der richtige Wert ist jedoch&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P = \frac{(4\,\mathrm{V})^2}{10\,\mathrm{\Omega}} \cdot \frac{1\,\mathrm{ms}}{4\,\mathrm{ms}} +&lt;br /&gt;
\frac{(0\,\mathrm{V})^2}{10\,\mathrm{\Omega}} \cdot \frac{3\,\mathrm{ms}}{4\,\mathrm{ms}} =&lt;br /&gt;
0,4\,\mathrm{W}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Eine Heizung mit 10Ohm-Widerstand soll mit bis zu 12V angesteuert werden. Dazu wird ein 13V-Netzteil sowie ein linearer Verstärker verwendet (ein linearer Verstärker braucht immer eine etwas höhere Betriebsspannung als die maximale Ausgangsspannung). Sollen nun 12V auf die Heizung gegeben werden, fällt (fast) die gesamte Spannung über der Heizung selber ab, der Verstärker &amp;quot;verbraucht&amp;quot; nur 1V. Es fliessen ca. 1,2A, es werden ca. 14,4W in der Heizung in Wärme umgesetzt, im Verstärker ca. 1,2W, der Wirkungsgrad beträgt 92%.&lt;br /&gt;
Wenn jetzt aber nur noch 6V an der Heizung anliegen sollen, muss der lineare Verstärker die &amp;quot;übrigen&amp;quot; 7V verbrauchen, d.h. von den 13V, welche konstant vom Netzteil geliefert werden, fallen 7V über dem Verstärker und 6V über der Heizung ab. Die Transistoren des linearen Verstärkers sind nur halb durchgesteuert. Es fliesst ein Strom von ca. 600mA, in der Heizung werden ca. 3,6W in Wärme umgesetzt. Allerdings werden auch 4,2W im Verstärker in Wärme umgesetzt!&amp;lt;BR&amp;gt;&lt;br /&gt;
Der Wirkungsgrad ist nur noch 46%!&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz dazu sind bei einer PWM die Transistoren des digitalen Verstärkers immer nur entweder voll durchgesteuert oder gar nicht durchgesteuert. Im ersteren Fall fällt nur eine geringe Verlustleistung über dem Transistor ab, da die Sättigungsspannung &amp;lt;math&amp;gt;V_{SAT}&amp;lt;/math&amp;gt; sehr gering ist (meist weniger als 1V). Im zweiten Fall fällt gar keine Verlustleistung über dem Transistor ab, da kein Strom fliesst (P=U*I). Im Fall der 6V an der Heizung beträgt das notwendige Tastverhältnis 0,23. D.h. nur während 23% der PWM-Periode wird Verlustleistung im digitalen Verstärker erzeugt und zwar ca.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_V=DC \cdot \frac {V_{CC}}{R} \cdot V_{SAT} = 0,23 \cdot \frac {12V}{10\Omega} \cdot 1V = 0,28W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wirkungsgrad liegt bei 92%!&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Motorsteuerung ===&lt;br /&gt;
&lt;br /&gt;
Eine der Hauptanwendungen für PWM ist die Ansteuerung von (Gleichstrom-) Motoren. Der große Vorteil von PWM ist hier der gute Wirkungsgrad. Würde man einen Digital-Analog-Wandler mit einem nachgeschalteten analogen Verstärker zur Ansteuerung verwenden, dann würde im Verstärker eine sehr hohe Verlustleistung in Wärme umgewandelt werden. Ein digitaler Verstärker mit PWM hat dagegen sehr geringe Verluste. Die verwendete Frequenz liegt meist im Bereich von einigen 10kHz. Zur Berechnung der Drehzahl eines Motors kann im Normalfall der Mittelwert der PWM-Spannung als Betriebsspannung angenommen werden.&lt;br /&gt;
&lt;br /&gt;
=== AD-Wandlung mit PWM ===&lt;br /&gt;
&lt;br /&gt;
Einen recht billigen und einfachen AD-Wandler mit &amp;quot;1-Draht Kommunikation&amp;quot; kann man mit dem IC 556 (NE556 o.ä.) realisieren: der eine Timer des 556 arbeitet als 50% duty-cycle Rechteckgenerator bei beispielsweise 1 kHz und steuert den zweiten Timer an. Dieser besitzt einen Steuereingang zu Beeinflussung des Tastverhältnisses und auf diesen Pin gibt man das analoge Signal. Ein angeschlossener µC oder PC misst bei jedem Impuls die Impulslänge und man erhält so das Messergebnis. Bei &amp;gt;10 kHz kann man so auch prima digital Sprache übertragen oder speichern (Tip stammt noch aus der Zeit als es keinen Mikroprozessor mit AD-Wandler gab.). Allerdings gibt es auch heute noch einige Controller ohne AD-Wandler.&lt;br /&gt;
&lt;br /&gt;
=== DA-Wandlung mit PWM ===&lt;br /&gt;
&lt;br /&gt;
Die meisten Mikrocontroller haben keine DA-Wandler integriert, da diese relativ aufwändig sind. Allerdings kann man mit PWM auch eine DA-Wandlung vornehmen. Wird ein PWM-Signal über einen Tiefpass gefiltert (geglättet), entsteht eine Gleichspannung, die dem Mittelwert des PWM-Signals entspricht. So weit, so gut. Das Problem ist nur die Dimensionierung des Tiefpasses. Ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
PWM-Takt 1 MHz, 8 Bit Auflösung (256 Stufen), 0/5V.&lt;br /&gt;
-&amp;gt; 3906 Hz PWM Frequenz&lt;br /&gt;
&lt;br /&gt;
RC-Tiefpass 22nF, 100k&amp;amp;Omega;&lt;br /&gt;
-&amp;gt; 72 Hz Grenzfrequenz&lt;br /&gt;
&lt;br /&gt;
[[bild:pwm_filter_1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei diesem Tiefpass mit 72 Hz Bandbreite verbleibt am Ausgang noch ein Ripple auf der Gleichspannung, da die PWM nie ideal gefiltert werden kann. Eine Rechnung bzw. Simulation in PSPICE zeigen ca. 150mV Ripple. Das ist ziemlich viel, da ein idealer 8-Bit DA-Wandler bei 5V Referenzspannung eine Auflösung von 20mV hat. Wir haben hier also ein Störsignal von 150mV/20mv=7,5 LSB.&lt;br /&gt;
Um den Ripple bis auf die Auflösungsgrenze von 20mV zu reduzieren, muss die Grenzfrequenz auf ca. 10 Hz reduziert werden. Es ist somit effektiv nur ein 390tel der PWM-Frequenz nutzbar. Das ist für einige Anwendungen ausreichend, wo praktisch nur statische Gleichspannungen erzeugt werden sollen, z.B. für programierbare Netzteile.&lt;br /&gt;
&lt;br /&gt;
Allgemein kann man den Ripple eines einfachen RC-Tiefpasses so abschätzen. &lt;br /&gt;
&lt;br /&gt;
Kritischster Punkt ist eine PWM mit 50% Duty Cycle. Das macht den&lt;br /&gt;
stärksten Ripple. Dort liegt 1/2 VCC über dem R an und lädt C annähernd&lt;br /&gt;
mit Konstantstrom.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I = \frac{\frac{1}{2}Vcc}{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über die Definition des Kondensators kann man den Ripple berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \frac{As}{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V = \frac{As}{C}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ladung in As (Amperesekunden) ergeben sich aus der halben PWM-Periode mal I. Damit kann man brauchbar den Ripple abschätzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{Ripple} = \frac{\frac {\frac{1}{2}Vcc}{R} \cdot \frac{1}{2}T_{PWM}}{C} = \frac{ Vcc \cdot T_{PWM}}{4RC}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Einschwingzeit des Signals t_s bei einem neuen PWM-Wert ist in etwa 5RC.&lt;br /&gt;
&lt;br /&gt;
Die Abschätzung gilt aber nur dann, wenn der Ausgang des RC-Filter kaum belastet ist, wie z.B. durch einen Operationsverstärker oder einen andern hochohmigen IC-Eingang.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
100 Hz PWM Frequenz(T_PWM=10ms), R=100k&amp;amp;Omega;, C=1&amp;amp;mu;F, Vcc=5V&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{Ripple} = \frac{5V \cdot 10ms}{4 \cdot 100k\Omega \cdot 1 \mu F} = 125 mV&amp;lt;/math&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t_s=5RC=5 \cdot 100k \Omega \cdot 1 \mu F = 500ms&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man aber nicht soviel Bandbreite verschenken, muss man anders filtern. Das Problem des einfachen RC-Tiefpasses ist der relativ langsame Anstieg der Dämpfung oberhalb der Grenzfrequenz. Genauer gesagt steigt die Dämpfung mit 20dB/Dekade. Das heisst, dass ein Signal mit der 10fachen Frequenz (Dekade) um den Faktor 10 (20dB) gedämpft wird. Will man nun eine höhere Dämpfung ereichen, müssen mehrere Tiefpässe in Kette geschaltet werden. Bei dem gleichen Beispiel erreicht man mit zwei Tiefpässen mit 6,8nF/100k&amp;amp;Omega; eine Grenzfrequenz von ca. 70 Hz, bei gleicher Dämpfung des Ripples auf 20mV. Die Dämpfung dieses sogenannten Tiefpasses 2. Ordnung beträgt 40dB/Dekade. Das heisst, ein Signal mit zehnfacher Frequenz (Dekade) wird um den Faktor 100 (40dB) gedämpft! Damit erzielt man hier bereits die 7fache Bandbreite! Zum Schluss muss beachtet werden, dass die passiven Tiefpässe nur sehr schwach belastet werden können. Hier ist fast immer ein Operationsverstärker als Spannungsfolger nötig. Der kann auch genutzt werden, um das gefilterte Signal weiter zu verstärken (nichtinvertierender Verstärker).&lt;br /&gt;
&lt;br /&gt;
[[bild:pwm_filter_2.png]]&lt;br /&gt;
&lt;br /&gt;
Das Spiel kann noch um einiges gesteigt werden, wenn man Tiefpässe dritter, vierter und noch höherer Ordung einsetzt. Das wird vor allem im Audiobereich gemacht. Dazu werden praktisch Operationsverstärker eingesetzt. In der [[AVR]] Application-Note [http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf AVR335: Digital Sound Recorder with AVR and DataFlash] wird zum Beispiel ein mit Operationsverstärkern aufgebauter Chebychev-Tiefpass fünfter Ordnung verwendet. Man findet im Audiobereich gelegentlich auch Schaltungen ohne expliziten Tiefpass. Dabei wird der Ausgang eines Class-D Verstärkers (der nichts anderes als ein PWM-Signal erzeugt) über einen Widerstand auf einen Lautsprecher gegeben. Die mechanische Trägheit und die Induktivität der Lautsprecherspule bilden mit dem Widerstand einen Tiefpass.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: PWM]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#PWM (Pulsweitenmodulation)|AVR-GCC-Tutorial: PWM]]&lt;br /&gt;
* [[Soft-PWM]] - PWM in Software&lt;br /&gt;
* [[LED-Fading]] - LED dimmen mit PWM&lt;br /&gt;
* [[AVR PWM]] (noch nicht fertig)&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=25510</id>
		<title>Benutzer:Simon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Simon&amp;diff=25510"/>
		<updated>2008-01-13T19:54:11Z</updated>

		<summary type="html">&lt;p&gt;Simon: Die Seite wurde neu angelegt: Homepage mit Projekten:  http://klinkerstein.m-faq.de&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage mit Projekten:&lt;br /&gt;
&lt;br /&gt;
http://klinkerstein.m-faq.de&lt;/div&gt;</summary>
		<author><name>Simon</name></author>
	</entry>
</feed>