<?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=172.26.6.136</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=172.26.6.136"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/172.26.6.136"/>
	<updated>2026-04-09T23:11:14Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Umstieg_von_Arduino_auf_AVR&amp;diff=105031</id>
		<title>Umstieg von Arduino auf AVR</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Umstieg_von_Arduino_auf_AVR&amp;diff=105031"/>
		<updated>2022-02-24T08:59:08Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: Schreibfehler korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von newgenertion&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll eine kleine Hilfestellung für alle sein, die aktuell mit einem Arduino-Board arbeiten, sich aber mehr für die Materie interessieren und auf richtige Mikrocontroller-Programmierung umsteigen wollen. &lt;br /&gt;
&lt;br /&gt;
Um den Umstieg zu erleichtern werden hier einige kleine, aber hilfreiche Schritte aufgezeigt.&lt;br /&gt;
Diese Anleitung ist nur für die Arduinos mit einem 8bit-AVR als Prozessor (Uno, Mega, Leonardo, ...) gedacht und nicht für 32bit-Mikrocontroller (Due, ...).&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller wird in dieser Anleitung in C programmiert. Grund dafür ist die Verteilung von Programmiersprachen und deren Schwierigkeit zu erlernen.&lt;br /&gt;
Auf Mikrocontrollern gibt es hauptsächlich Assembler und C, wobei auch andere Sprachen im Kommen sind, so zum Beispiel C++ (das Arduino-Framework ist in C++ geschrieben). &lt;br /&gt;
&lt;br /&gt;
Trotzdem soll sich hier auf C beschränkt werden, weil&lt;br /&gt;
# C++ schwerer zu Beherrschen ist als C&lt;br /&gt;
# Die meisten Arduino-Sketches eher in C geschrieben sind, mit Ausnahme der Arduino-Libraries und derer Objekte&lt;br /&gt;
# Assembler nochmal eine ganz andere Sprache ist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== C-Kenntnisse ===&lt;br /&gt;
Wer schon C programmieren kann - damit ist mehr als if-else- und Copy&amp;amp;Paste-Programmierung gemeint - kann diesen Punkt selbstverständlich überspringen. Allen anderen kann ich nur wärmstens empfehlen, ein C-Buch oder wenigstens ein (gutes) C-Tutorial durchzuarbeiten.&lt;br /&gt;
&lt;br /&gt;
Im Artikel [[C#PC-Programmierung|C]] stehen einige Links zu Tutorials und Einführungen zur Sprache C. Es dürfte einfacher sein, sich die C-Kenntnisse auf einem PC zu erarbeiten, da man dort viel mehr Möglichkeiten hat, sein Programm zu analysieren und auf Fehler zu reagieren. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Tutorials, vor allem die in deutscher Sprache, sollten teilweise Hinterfragt werden. Oftmals schreibt der Autor einfach nur seine (zum Teil begrenzte) Sicht der Dinge. Es kann nicht schaden, mehr als ein Tutorial zu lesen und bei Diskrepanzen den C-Standard zu Rate zu ziehen.&lt;br /&gt;
&lt;br /&gt;
=== Andere Vorkenntnisse ===&lt;br /&gt;
* [[Bitmanipulation]]&lt;br /&gt;
* [[Harvard-Architektur]]&lt;br /&gt;
* Wissen über [[AVR]] und [[Mikrocontroller]] allgemein kann nicht schaden&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
* Compiler: Man sollte entweder die Pfade zu den Executables des avr-gccs in der Arduino-Umgebung zur Umgebungsvariable PATH hinzufügen oder, vor allem wenn man die Arduino-IDE später deinstallieren möchte, eine separate Compiler-Installation vornehmen. Siehe dazu [[AVR-GCC]]. &lt;br /&gt;
* Ein Terminal-Programm wie Putty oder HTerm kann nie schaden.&lt;br /&gt;
&lt;br /&gt;
== Verändern des Arduino-Sketches ==&lt;br /&gt;
Als Erstes sollte man sich abgewöhnen von &#039;&#039;Sketchen&#039;&#039; zu reden, damit wird man nur belächelt. Es sind &#039;&#039;Programme&#039;&#039;, &#039;&#039;Anwendungen&#039;&#039;, &#039;&#039;Applikationen&#039;&#039;, ...&lt;br /&gt;
&lt;br /&gt;
=== Anpassung von int-Typen ===&lt;br /&gt;
Fast sämtliche Arduino-Beispiele sehen irgendwie so aus (hier ein kleines Lauflicht):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int ledPin = 13;                  // LED connected to digital pin 13&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    pinMode(ledPin, OUTPUT);      // sets the digital pin as output&lt;br /&gt;
    for(int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        pinMode(i, OUTPUT);       // sets the digital pin as output&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    digitalWrite(ledPin, HIGH);   // sets the Board-LED on&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        digitalWrite(i, HIGH);    // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
        delay(100);               // waits 100 milliseconds&lt;br /&gt;
        digitalWrite(i, LOW);     // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
    }&lt;br /&gt;
    delay(1000);                  // waits for a second&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
Der Sketch verwendet 1006 Bytes (3%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fällt euch etwas auf? Nein?&lt;br /&gt;
Wie groß ist ein &#039;&#039;int&#039;&#039;? Genau mindestens 16 bit. Und es ist ein Typ mit Vorzeichen. &lt;br /&gt;
&lt;br /&gt;
Eine Variable vom Typ &#039;&#039;int&#039;&#039; kann auf einem AVR also Werte von -2^15 bis 2^15 - 1 annehmen. Das sind Zahlen zwischen -32768 und 32767. Und was wird in diesem Typ gespeichert? &lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;Variable&#039;&#039;, deren Wert sich nie ändert: int ledPin = 13;&lt;br /&gt;
* Und zwei Laufvariablen von 0 bis 7. &lt;br /&gt;
Also beides nicht wirklich das, wofür man 16 bit Variablen braucht.&lt;br /&gt;
&lt;br /&gt;
Okay, dann hat man halt Variablen mit einem zu großen Typ definiert, was macht das? Schon etwas, denn der AVR ist ein 8bit-Mikrocontroller, das bedeutet grob, dass er immer nur 8bit-Zahlen auf einmal manipulieren kann, alles größere braucht mehrere Befehle und ist somit langsamer. Mikrocontroller mögen vorzeichenlose Zahlen auch lieber, als solche mit Vorzeichen. &lt;br /&gt;
&lt;br /&gt;
Man sollte also bei jeder Variable überlegen, welchen Wertebereich man benötigt und dann immer den Typen so klein wie möglich, aber so groß wie nötig nehmen.&lt;br /&gt;
&lt;br /&gt;
Der C-Standard bietet Typen mit genauer Bitbreite an, dafür muss nur eine Header-Datei eingebunden werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In dieser werden dann unter anderem die folgenden Typen definiert:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Größe     || Vorzeichenlos || Vorzeichenbehaftet &lt;br /&gt;
|-&lt;br /&gt;
| 8 bit     || uint8_t       || int8_t&lt;br /&gt;
|-&lt;br /&gt;
| 16 bit    || uint16_t      || int16_t&lt;br /&gt;
|-&lt;br /&gt;
| 32 bit    || uint32_t      || int32_t&lt;br /&gt;
|-&lt;br /&gt;
| 64 bit    || uint64_t      || int64_t&lt;br /&gt;
|}&lt;br /&gt;
Die Nomenklatur ist eigentlich ganz einfach:&lt;br /&gt;
[u]int[bits]_t, wobei das [u] für unsigned, also vorzeichenlos, steht und [bits] eben die Anzahl der Bits für die Variable angibt.&lt;br /&gt;
&lt;br /&gt;
Der geänderte Source-Code sieht dann so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define LED_PIN 13                // ein Define erzeugt keinen Zusätzlichen Code, &lt;br /&gt;
                                  // es erfolgt schließlich nur eine Textersetzung.&lt;br /&gt;
                                  // Defines immer in GROSSBUCHSTABEN&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    pinMode(LED_PIN, OUTPUT);     // sets the digital pin as output&lt;br /&gt;
    for(uint8_t i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        pinMode(i, OUTPUT);       // sets the digital pin as output&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH);  // sets the Board-LED on&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    for(uint8_t i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        digitalWrite(i, HIGH);    // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
        delay(100);               // waits 100 milliseconds&lt;br /&gt;
        digitalWrite(i, LOW);     // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
    }&lt;br /&gt;
    delay(1000);                  // waits for a second&lt;br /&gt;
}&lt;br /&gt;
/*Der Sketch verwendet 1006 Bytes (3%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2039 Bytes für lokale Variablen verbleiben. &lt;br /&gt;
Das Maximum sind 2048 Bytes. &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Bei diesem Minimal-Programm hat diese Änderung wie man sieht nichts gebracht, das zeigt aber &#039;&#039;&#039;nicht&#039;&#039;&#039;, dass diese Anpassung sinnlos ist, sondern, dass der Compiler sehr gut optimiert und diese unnötig großen Variablen eliminiert.&lt;br /&gt;
&lt;br /&gt;
Ein anderes Beispiel ist dieses Programm. Es macht nichts außer eine volatile-Variable hochzuzählen. (Volatile zum Verbieten der Optimierungen).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
// 64bit&lt;br /&gt;
volatile int64_t a;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    a = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    a++;&lt;br /&gt;
}&lt;br /&gt;
/* &lt;br /&gt;
Der Sketch verwendet 570 Bytes (1%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 17 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2031 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn man jetzt die Variable verkleinert und auf unsigned ändert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
// 8bit&lt;br /&gt;
volatile uint8_t a;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    a = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    a++;&lt;br /&gt;
}&lt;br /&gt;
/* &lt;br /&gt;
Der Sketch verwendet 458 Bytes (1%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 10 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2038 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Schon bei diesem Minimal-Programm sieht man einen kleinen Unterschied&lt;br /&gt;
&lt;br /&gt;
Bei größeren Programmen mit mehreren Modulen kann der Compiler aber nicht mehr alles überblicken, deswegen lohnt sich spätestens dort diese Änderung.&lt;br /&gt;
&lt;br /&gt;
=== Entfernen der Arduino-Libraries ===&lt;br /&gt;
Wer seinen Mikrocontroller richtig verstehen will, der sollte auch versuchen sämtliche Hardware-Ansteuerung selber zu programmieren.&lt;br /&gt;
&lt;br /&gt;
==== Entfernen der delay()-Aufrufen ====&lt;br /&gt;
Zuerst einmal: delays sind so gut wie immer schlecht! Während der Controller im delay() wartet, kann er nichts anderes mehr tun!&lt;br /&gt;
&lt;br /&gt;
Die Implementierung vom delay() in der Arduino-Bibliothek benutzt Interrupts und kann deswegen in Interrupts nicht funktionieren (Obwohl das sowieso eine sehr schlechte Idee ist). Um aber von Arduino und deren Library wegzukommen, benutzen wie eine andere Impementierung, nämlich die von der avr-libc. Diese bietet _delay_ms() und _delay_us() für taktgenaue Verzögerungen in Milli- bzw. Mikrosekunden-Bereich an. Dafür ist nur das Einbinden von &amp;lt;util/delay.h&amp;gt; nötig.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define LED_PIN 13                // ein Define erzeugt keinen Zusätzlichen Code, &lt;br /&gt;
                                  // es erfolgt schließlich nur eine Textersetzung.&lt;br /&gt;
                                  // Defines immer in GROSSBUCHSTABEN&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    pinMode(LED_PIN, OUTPUT);     // sets the digital pin as output&lt;br /&gt;
    for(uint8_t i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        pinMode(i, OUTPUT);       // sets the digital pin as output&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH);  // sets the Board-LED on&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    for(uint8_t i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
        digitalWrite(i, HIGH);    // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
        _delay_ms(100);           // waits 100 milliseconds&lt;br /&gt;
        digitalWrite(i, LOW);     // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
    }&lt;br /&gt;
    _delay_ms(1000);              // waits for a second&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
Der Sketch verwendet 828 Bytes (2%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Entfernen der I/O-Aufrufe ====&lt;br /&gt;
Dazu zählen unter anderem pinMode, digitalWrite und ditigalRead. Diese verbindet allesamt eines: Die eigenwillige Nummerierung der Pins.&lt;br /&gt;
&lt;br /&gt;
Auf dem Arduino-Board sind sie zwar logisch angeordnet, aber nicht unbedingt logisch mit dem Prozessor verbunden! Deswegen muss man einmal nach seinem arduino board + Pinout googlen, dann kommen schöne Bilder, die recht Anschaulich zeigen, was womit verbunden ist. Beim Arduino Uno ist das Ganze noch recht ordentlich, beim Arduino Mega erinnert es mehr an Chaos...&lt;br /&gt;
&lt;br /&gt;
Eine Seite, die viele Pinouts hat ist [https://libraries.io/github/Bouni/Arduino-Pinout libraries.io]. Dort sucht man sich einfach sein Board heraus und speichert sich am besten das Bild, denn das wird noch häufiger benötigt.&lt;br /&gt;
&lt;br /&gt;
Um jetzt wirklich starten zu können fehlt nur noch eins: das Datenblatt des Prozessors. Auf der Arduino-Seite steht, was für ein Prozessor dort verbaut ist, nach diesem Datenblatt sollte man dann bei Google oder direkt beim Hersteller Atmel suchen. Beim Arduino Uno ist es der [http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf ATmega328p]. &lt;br /&gt;
&lt;br /&gt;
Im Datenblatt gibt es ein Kaptiel &amp;quot;I/O-Ports&amp;quot;, wo haarklein erklärt wird, wie die Pins funktionieren und anzusteuern sind. Wichtig sind dazu vor allem drei [[Register]]:&lt;br /&gt;
* PORT&#039;&#039;x&#039;&#039; - The Port &#039;&#039;x&#039;&#039; Data Register&lt;br /&gt;
* DDR&#039;&#039;x&#039;&#039; - The Port &#039;&#039;x&#039;&#039; Data Direction Register&lt;br /&gt;
* PIN&#039;&#039;x&#039;&#039; - The Port &#039;&#039;x&#039;&#039; Input Pin Register&lt;br /&gt;
Wobei das &#039;&#039;x&#039;&#039; für den Port steht. Welche Ports es gibt hängt vom jeweiligen AVR ab. Der Atmega328p hat zum Beispiel vier Stück: PORTA, PORTB, PORTC, PORTD. Ein ATmega2560 hingegen hat derer elf: PORTA - PORTH und PORTJ - PORTL.&lt;br /&gt;
Gemeinsam ist allen, dass ein Port maximal 8 Pins enthält (P&#039;&#039;XN&#039;&#039;, &#039;&#039;X&#039;&#039;=Port-Buchstabe, &#039;&#039;N&#039;&#039;=Port-Bit).&lt;br /&gt;
&lt;br /&gt;
Genaueres gibt es hier:&lt;br /&gt;
* [[AVR-GCC-Tutorial#Zugriff_auf_Register| Register-Zugriffe]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#Zugriff_auf_IO-Ports| I/O-Ports]]&lt;br /&gt;
Eine Kurzfassung folgt nun:&lt;br /&gt;
&lt;br /&gt;
Um auf die I/O-Register (beziehungsweise Register allgemein) zugreifen zu können braucht man eine weitere Header-Datei:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels diesen Registern kann man dann jeden einzelnen Pin steuern. Die folgende Tabelle zeigt die Einstellungsmöglichkeiten:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! DDRx   || PORTx  ||  IO-Pin-Zustand&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
|| Eingang ohne Pull-Up (Resetzustand)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|| Eingang mit Pull-Up&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
|| [[Ausgangsstufen_Logik-ICs#Push-Pull | Push-Pull]]-Ausgang auf LOW&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|| [[Ausgangsstufen_Logik-ICs#Push-Pull | Push-Pull]]-Ausgang auf HIGH&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Das übrige PINx-Register hat nun auch wieder zwei Einsatzmöglichkeiten. Wenn der Pin ein Input-Pin ist (DDxn = 0), dann gibt dieses Register den Zustand des Pins aus, eine 1 für High und eine 0 für Low. Ist der Pin jedoch als Ausgang konfiguriert, dann können neuere AVRs (praktisch alle auf Arduinos) den Pin direkt &amp;quot;togglen&amp;quot;, also umschalten: ist er aktuell High, dann wird er auf Low geschaltet, und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Mit diesem Wissen können wir wieder unseren Code anpacken:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Der Arduino-Pin 13 ist auf dem Arduino Uno der Pin PB5&lt;br /&gt;
#define LED_DDR DDRB&lt;br /&gt;
#define LED_PORT PORTB&lt;br /&gt;
#define LED_BIT PB5&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
    LED_DDR |= (1 &amp;lt;&amp;lt; LED_BIT);    // sets the digital pin as output&lt;br /&gt;
    &lt;br /&gt;
    //die 8 LEDs leigen alle auf PORTD, also diesen komplett auf Ausgang&lt;br /&gt;
    DDRD = 0xFF;&lt;br /&gt;
&lt;br /&gt;
    LED_PORT |= (1 &amp;lt;&amp;lt; LED_BIT);  // sets the Board-LED on&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    for(uint8_t i = 0; i &amp;lt; 8; i++) &lt;br /&gt;
    {&lt;br /&gt;
        PORTD |= (1 &amp;lt;&amp;lt; i);        // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
        _delay_ms(100);           // waits 100 milliseconds&lt;br /&gt;
        PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; i);       // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
    }&lt;br /&gt;
    _delay_ms(1000);              // waits for a second&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
Der Sketch verwendet 534 Bytes (1%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Man sieht: der Speicherverbrauch wurde nochmal gedrückt, und schneller wurde das Programm auch noch.&lt;br /&gt;
&lt;br /&gt;
Bleiben aber noch Fragen: Warum verbraucht dieses Mini-Programm immer noch so viel Flash? Un warum wird RAM verbraucht, obwohl keine einzige Variable verwendet wird?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;TODO&#039;&#039;&#039;&#039;&#039;: Geschwindigkeit mittels Oszi messen &#039;&#039;(Darf gerne auch von jemand anderem gemacht werden)&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=== main()-Funktion statt setup() &amp;amp; loop() ===&lt;br /&gt;
Die Arduino-IDE hat im Vergleich zu anderen IDEs eine &amp;quot;Gemeinheit&amp;quot; eingebaut. Um es dem Benutzer einfacher zu manchen, ändert diese stillschweigend den Code (fügt etwa eine main()-Funktion hinzu und das include &amp;lt;Arduino.h&amp;gt;) und zieht Code mitein, selbst wenn dieser nicht genutzt wird. &lt;br /&gt;
&lt;br /&gt;
So zum Beispiel die Interrupt-Routine, die den Millisekunden-Timer für die delay()-Funktion bildet: Sowohl die Routine an sich, als auch die Konfigurierung des Interrupts und auch die generelle Erlaubnis aller ISRs geschieht automatisch, ohne das der User daran etwas ändern kann. &lt;br /&gt;
&lt;br /&gt;
Das ist im Normalfall auch in Ordnung, da sich der 08/15-Arduino-Benutzer gar nicht dafür interessiert.&lt;br /&gt;
&lt;br /&gt;
Bei uns ist das aber etwas anderes! Also wird das Programm an ein richtiges C-Programm angeglichen, also mit einer main()-Funktion, statt setup() und loop().&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Der Arduino-Pin 13 ist auf dem Arduino Uno der Pin PB5&lt;br /&gt;
#define LED_DDR DDRB&lt;br /&gt;
#define LED_PORT PORTB&lt;br /&gt;
#define LED_BIT PB5&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    LED_DDR |= (1 &amp;lt;&amp;lt; LED_BIT);    // sets the digital pin as output&lt;br /&gt;
    &lt;br /&gt;
    //die 8 LEDs leigen alle auf PORTD, also diesen komplett auf Ausgang&lt;br /&gt;
    DDRD = 0xFF;&lt;br /&gt;
&lt;br /&gt;
    LED_PORT |= (1 &amp;lt;&amp;lt; LED_BIT);  // sets the Board-LED on&lt;br /&gt;
    while(1)&lt;br /&gt;
    {&lt;br /&gt;
        for(uint8_t i = 0; i &amp;lt; 8; i++) &lt;br /&gt;
        {&lt;br /&gt;
            PORTD |= (1 &amp;lt;&amp;lt; i);        // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
            _delay_ms(100);           // waits 100 milliseconds&lt;br /&gt;
            PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; i);       // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
        }&lt;br /&gt;
        _delay_ms(1000);              // waits for a second&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
Der Sketch verwendet 222 Bytes (0%) des Programmspeicherplatzes. &lt;br /&gt;
Das Maximum sind 32256 Bytes.&lt;br /&gt;
Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers, &lt;br /&gt;
2048 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Et voilà! Da haben wir es: Der Code-Verbrauch ist nochmal drastisch gesunken und vor allem: keine Varaible, kein RAM-Verbrauch!&lt;br /&gt;
&lt;br /&gt;
Damit ist jeder Arduino-Code, der im Hintergrund dazukam, getilgt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Der Compiler mag shiften um Variablen nicht, also das (1 &amp;lt;&amp;lt; i). Es ist wesentlich besser, wenn man so etwas schreibt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t mask = (1 &amp;lt;&amp;lt; 0);&lt;br /&gt;
for(uint8_t i = 0; i &amp;lt; 8; i++) &lt;br /&gt;
{&lt;br /&gt;
    PORTD |= mask;            // sets the LED on pin &amp;lt;i&amp;gt; on &lt;br /&gt;
    _delay_ms(100);           // waits 100 milliseconds&lt;br /&gt;
    PORTD &amp;amp;= ~mask;           // sets the LED on pin &amp;lt;i&amp;gt; off&lt;br /&gt;
    mask = (mask &amp;lt;&amp;lt; 1);       // shift the bit to the left&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das ist erstens schneller und verbraucht zweitens weniger Speicher (im Beispiel nur noch 204 Bytes).&lt;br /&gt;
&lt;br /&gt;
== Weg von der Arduino-IDE ==&lt;br /&gt;
=== Auswahl der neuen IDE ===&lt;br /&gt;
So, nun ist man an dem Punkt angelangt, an welchem man sich dazu entscheiden kann (und &#039;&#039;meiner&#039;&#039; Meinung auch sollte), Abschied von der Arduino-IDE zu nehmen. Diese ist in vielerlei Hinsicht nicht optimal, sei es zum Beispiel beim highlighting von Code oder der mangelnden Konfigurationsmöglichkeit.&lt;br /&gt;
&lt;br /&gt;
Es gibt zahlreiche Möglichkeiten, wie man nun weiter verfahren kann:&lt;br /&gt;
* bei der Arduino-IDE bleiben&lt;br /&gt;
* auf das [[Atmel Studio]] umsteigen (entweder Version 7 mit zahlreichen neuen Features, oder VErsion 4, falls es schnell und zuverlässig sein soll)&lt;br /&gt;
* auf eine andere IDE (z.B. [[eclipse]]) umsteigen&lt;br /&gt;
* Mittels [[AVR-GCC-Tutorial/Exkurs_Makefiles|Makefiles]] und einem Editor/einer IDE seiner Wahl arbeiten&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe mich nach langem Arbeiten mit jeder dieser Möglichkeiten (abgesehen von der Arduino-IDE, diese habe ich mehr oder weniger direkt verworfen) für die letzte, für das Arbeiten mit Makefiles, entschieden. Dort hat man völlige Kontrolle über alles: was wird wann mit welchen Option kompiliert und was wird hinzugelinkt?&lt;br /&gt;
&lt;br /&gt;
Das sollte aber jeder für sich selber herausfinden. Die Liste oben ist von der Schwierigkeit her sortiert, das bedeutet, das Makefiles das anspruchsvollste sind.&lt;br /&gt;
&lt;br /&gt;
=== Einarbeiten in die neue Umgebung ===&lt;br /&gt;
Sobald man sich auf eine IDE festgelegt hat, sollte man sich in diese erst einmal Einarbeiten. Auf diesem Punkt kann in dieser Anleitung nicht eingegangen werden, da sich mögliche Tipps oder Ähnliches ja nach IDE unterscheiden würden.&lt;br /&gt;
&lt;br /&gt;
Am besten versucht man erstmal die für sich wichtigen Funktionen zu finden und mit der neuen Umgebung allgemein zurech zu kommen.&lt;br /&gt;
&lt;br /&gt;
Ziel ist auf jeden Fall, das obige Programm kompiliert zu bekommen.&lt;br /&gt;
&lt;br /&gt;
=== Das Programm übertragen ===&lt;br /&gt;
So weit, so gut. &lt;br /&gt;
&lt;br /&gt;
Der neue Editor/Die neue IDE läuft, der Code kompiliert.&lt;br /&gt;
&lt;br /&gt;
Doch wie bringt man nun den Code auf den AVR? Dazu gibt es unter Anderem zwei Möglichkeiten auf die ich hier eingehen möchte:&lt;br /&gt;
* mit extra [[AVR_In_System_Programmer|Programmer/Debugger]]&lt;br /&gt;
* mittels dem eingebrannten [[Bootloader]]&lt;br /&gt;
Was das ist wird hier nicht erklärt, dafür sind die Artikel verlinkt.&lt;br /&gt;
&lt;br /&gt;
==== Programmer/Debugger ====&lt;br /&gt;
Wer schon einen Programmer oder gar Debugger für AVRs sein Eigen nennen kann, der sollte diesen verwenden, da damit noch einmal der Speicherplatz für den Bootloader frei wird (Dadurch kann das Programm noch einmal ~2kB größer werden) und auch die Wartezeit nach jedem Reset entfällt.&lt;br /&gt;
&lt;br /&gt;
Wer noch keinen Programmer hat, der muss sich nicht unbedingt einen solchen kaufen, solange er mit den eben genannten Nachteilen leben kann. &lt;br /&gt;
&lt;br /&gt;
Wer aber jetzt in die Tasche greifen will, der kann sich überlegen, ob er vielleicht nicht lieber direkt einen vollwertigen Debugger kauft. Damit kann man, wie auch am PC, ein laufendes Programm anhalten, Werte von Registern anzeigen, etc. So etwas kann sehr hilfreich sein, wenn &amp;quot;unerklärliche&amp;quot; Phänomene auftreten.&lt;br /&gt;
&lt;br /&gt;
Wie man mit dem Programmer dann schließlich den AVR programmiert hängt wieder von der IDE ab. Beim Atmel Studio wird man sicherlich auf den Programming Dialog zurückgreifen, bei anderen IDEs wird wahrscheinlich ein Drittprogram wie [[AVRDUDE|avrdude]] verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader ====&lt;br /&gt;
Die meisten Arduinos kommen mit einem vorinstalliertem Bootloader. Clones werden auch gerne mal ohne verkauft. Mit dem Bootloader lässt sich der Prozessor auch ohne Programmer über USB direkt flashen.&lt;br /&gt;
&lt;br /&gt;
Also PC-Programm bietet sich dazu [[AVRDUDE|avrdude]] an. Dieses ist ein mehr oder weniger &amp;quot;universales&amp;quot; Brennprogramm für fast alle AVR-Typen. Es beherrscht auch die Kommunikation mit dem Arduino-Bootloader. Damit kann man dann ganz einfach sein Programm übertragen. Die Kommandozeile ist leider je nach Arduino- und Bootloader-Version etwas anderes&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beim Arduino mega ist es &lt;br /&gt;
$ avrdude -cwiring -patmega2560 -P&amp;lt;serial port&amp;gt; -b115200 -U flash:w:&amp;lt;file&amp;gt; -D&lt;br /&gt;
# andere Konfigurationen könnten sein (von mir ungetestet, gerne zu Vervollständigen)&lt;br /&gt;
$ avrdude -carduino -patmega328p -P&amp;lt;serial port&amp;gt; -b115200 -U flash:w:&amp;lt;file&amp;gt; -D&lt;br /&gt;
$ avrdude -carduino -patmega328p -P&amp;lt;serial port&amp;gt; -b57600 -U flash:w:&amp;lt;file&amp;gt; -D&lt;br /&gt;
$ avrdude -cstk500v2 -patmega328p -P&amp;lt;serial port&amp;gt; -b115200 -U flash:w:&amp;lt;file&amp;gt; -D&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino-Library Ersatz ==&lt;br /&gt;
Nachdem das Minimal-Programm von oben nun auf dem AVR-Board getestet wurde, geht es weiter. &lt;br /&gt;
&lt;br /&gt;
Wir haben uns von Arduino verabschiedet, damit aber auch von allen Arduino-Libraries! Das bedeutet, dass selbst so banale Sachen wie Serial.println() nicht mehr existieren. Diese müssen wir nun selber schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen eigener Libraries ===&lt;br /&gt;
Hier soll nun ein Beispiel mit einer Schritt-für-Schritt-Anleitung gegeben werden. Dazu habe ich mir das UART-Modul ausgesucht.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Kommunikation mittels UART-Hardware ====&lt;br /&gt;
Das wird zwar dann die X-te UART library, aber zur Demonstration eignet sich das UART-Modul hervorragend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;TODO&#039;&#039;&#039;&#039;&#039;: Verlinkungen zu weiterführenden Artikeln, Beispiel für UART und LCD library selbst geschrieben, ...&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:C]]&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial]]&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:AVR-Boards]]&lt;br /&gt;
[[Kategorie:avr-gcc]]&lt;br /&gt;
[[Kategorie:Baustelle]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MOSFET-%C3%9Cbersicht&amp;diff=105027</id>
		<title>MOSFET-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MOSFET-%C3%9Cbersicht&amp;diff=105027"/>
		<updated>2022-02-23T18:27:56Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* N-Kanal MOSFET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welchen Mosfet-Transistor man für ein Projekt einsetzen sollte. Und wo man die herbekommt. Deshalb soll hier eine Übersicht mit gängigen Mosfet-Transistoren und Bezugsquellen entstehen. Bezugsquellen sollten nach Möglichkeit solche sein, die auch für den privaten Bastler in Frage kommen.&lt;br /&gt;
&lt;br /&gt;
Der Thread zum Thema: http://www.mikrocontroller.net/topic/41588&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Transistor-Übersicht]] - [[Dioden-Übersicht]] - [[Standardbauelemente]]&lt;br /&gt;
&lt;br /&gt;
== P-Kanal MOSFET==&lt;br /&gt;
Alles selbstsperrend, sog. Anreicherungstypen.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%;&amp;quot; | Name&lt;br /&gt;
! Gehäuse&lt;br /&gt;
! Her&amp;lt;br&amp;gt;steller&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{GS(th)}&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{DS}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;I_D&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/A&lt;br /&gt;
! &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/W&lt;br /&gt;
! &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;m\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis&amp;lt;br&amp;gt;/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLML2244 IRLML2244]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| IRF&lt;br /&gt;
| 1,1&lt;br /&gt;
| 20&lt;br /&gt;
| 4,3&lt;br /&gt;
| 1,3&lt;br /&gt;
| 54&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#TME_.28Transfer_Multisort_Elektronik.29|TME]],[[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]],[[Elektronikversender#Farnell|Far]],[[Elektronikversender#Mouser|Mou]]&lt;br /&gt;
| 0,10 &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BS250 BS250]&lt;br /&gt;
| TO-92, SOT-23&lt;br /&gt;
| Siliconix&lt;br /&gt;
| 4,0&lt;br /&gt;
| 60&lt;br /&gt;
| 0,12&lt;br /&gt;
| 0,35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Buerklin|Bü]]&lt;br /&gt;
| 0,32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSH205 BSH205]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Phi&lt;br /&gt;
| 1,0&lt;br /&gt;
| 12&lt;br /&gt;
| 0,75&lt;br /&gt;
| 0,4&lt;br /&gt;
| 500&lt;br /&gt;
| Qg = 3,8nC&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.)&lt;br /&gt;
| 0,30&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/SI2301 SI2301]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Vishay&lt;br /&gt;
| 1,5&lt;br /&gt;
| 20&lt;br /&gt;
| 2,0&lt;br /&gt;
| 0,7&lt;br /&gt;
| 150&lt;br /&gt;
| Qg =4,5nC&lt;br /&gt;
| [[Elektronikversender#farnell|farnell]]&lt;br /&gt;
| 0,30&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLML6402  IRLML6402PBF]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| IRF&lt;br /&gt;
| 1,2&lt;br /&gt;
| 20&lt;br /&gt;
| 3,7&lt;br /&gt;
| 1,3&lt;br /&gt;
| 65&lt;br /&gt;
| 2,5V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#csd-electronics|csd]],[[Elektronikversender#Buerklin|Bü]]&lt;br /&gt;
| 0,15&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLML6302  IRLML6302PBF]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| IRF&lt;br /&gt;
| 1,5&lt;br /&gt;
| 20&lt;br /&gt;
| 0,75&lt;br /&gt;
| 0,54&lt;br /&gt;
| 600&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#csd-electronics|csd]],[[Elektronikversender#Buerklin|Bü]]&lt;br /&gt;
| 0,18&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS83P BSS83P]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Inf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 0,33&lt;br /&gt;
| 0,36&lt;br /&gt;
| 2000&lt;br /&gt;
| nicht mit BSS83 (ohne P) verwechseln&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,11&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS84 BSS84]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Fairchild,NXP&lt;br /&gt;
| 2,0&lt;br /&gt;
| 50&lt;br /&gt;
| 0,13&lt;br /&gt;
| 0,35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Farnell|Fa]]&lt;br /&gt;
| 0,28&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS110 BSS110]&lt;br /&gt;
| TO-97, SOT-23&lt;br /&gt;
| Phi&lt;br /&gt;
| 3,0&lt;br /&gt;
| 50&lt;br /&gt;
| 0,17&lt;br /&gt;
| 0,35&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/PMV65XP PMV65XP]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Phi&lt;br /&gt;
| 1,4&lt;br /&gt;
| 20&lt;br /&gt;
| 3,9&lt;br /&gt;
| ?&lt;br /&gt;
| 76&lt;br /&gt;
| grosser ID für Bauform&lt;br /&gt;
| [[Elektronikversender#Spoerle|Spo]], [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
| 0,10&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF4905S IRF4905S]&lt;br /&gt;
| D2Pack&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,0&lt;br /&gt;
| 55&lt;br /&gt;
| 64&lt;br /&gt;
| 3,8&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,10&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF4905 IRF4905]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,0&lt;br /&gt;
| 55&lt;br /&gt;
| 74&lt;br /&gt;
| 200&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,93&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF5210 IRF5210]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| IRF&lt;br /&gt;
| 10,0&lt;br /&gt;
| 100&lt;br /&gt;
| 40&lt;br /&gt;
| 200&lt;br /&gt;
| 60&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,15&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF5210S IRF5210S]&lt;br /&gt;
| D2Pack&lt;br /&gt;
| IRF&lt;br /&gt;
| 10,0&lt;br /&gt;
| 100&lt;br /&gt;
| 40&lt;br /&gt;
| ?&lt;br /&gt;
| 60&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,25&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7205 IRF7205]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 3,0&lt;br /&gt;
| 30&lt;br /&gt;
| 4,6&lt;br /&gt;
| 2,5&lt;br /&gt;
| 70&lt;br /&gt;
| ?&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]] &lt;br /&gt;
| 0,34&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FDC604P FDC604P]&lt;br /&gt;
| SuperSOT-6&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1,5&lt;br /&gt;
| 20&lt;br /&gt;
| 5,5&lt;br /&gt;
| 0,8-1,6&lt;br /&gt;
| 33&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.)&lt;br /&gt;
| 0,70&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NDS0610 NDS0610]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1,8&lt;br /&gt;
| 60&lt;br /&gt;
| 0,12&lt;br /&gt;
| 0,36&lt;br /&gt;
| 10000&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]]&lt;br /&gt;
| 0,07&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF5305 IRF5305]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| IRF&lt;br /&gt;
| 3,0&lt;br /&gt;
| 55&lt;br /&gt;
| 31&lt;br /&gt;
| 110&lt;br /&gt;
| 60&lt;br /&gt;
| -&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]], [[Elektronikversender#CBoden|CBo]]&lt;br /&gt;
| 0,42&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NDS352P NDS352P]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 4,5&lt;br /&gt;
| 20&lt;br /&gt;
| 0,85&lt;br /&gt;
| 0,5&lt;br /&gt;
| 500&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,76&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSP171 BSP171]&lt;br /&gt;
| SOT-223&lt;br /&gt;
| Siemens&lt;br /&gt;
| 1,4&lt;br /&gt;
| 60&lt;br /&gt;
| 1,7&lt;br /&gt;
| 1,8&lt;br /&gt;
| 350&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFD9014 IRFD9014]&lt;br /&gt;
| HEXDIP, DIP4&lt;br /&gt;
| IRF&lt;br /&gt;
| 2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 1,1&lt;br /&gt;
| 1,3&lt;br /&gt;
| 500&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,65&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFD9024 IRFD9024]&lt;br /&gt;
| HEXDIP, DIP4&lt;br /&gt;
| IRF&lt;br /&gt;
| 2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 1,6&lt;br /&gt;
| 1,3&lt;br /&gt;
| 280&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7416 IRF7416]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 1,0&lt;br /&gt;
| 30&lt;br /&gt;
| 10&lt;br /&gt;
| 2,5&lt;br /&gt;
| 20&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,43&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/SUP75P03 SUP75P03-007]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| Vishay&lt;br /&gt;
| 3,0&lt;br /&gt;
| 30&lt;br /&gt;
| 75&lt;br /&gt;
| 187&lt;br /&gt;
| 7&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
| 2,30&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7220 IRF7220]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 0,6&lt;br /&gt;
| 14&lt;br /&gt;
| 11&lt;br /&gt;
| 2,5&lt;br /&gt;
| 8,2&lt;br /&gt;
| 2,5V LL, Qg=84nC&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]], [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,58&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7410 IRF7410]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 0,4...0,9&lt;br /&gt;
| 12&lt;br /&gt;
| 16&lt;br /&gt;
| 2,5&lt;br /&gt;
| 7&lt;br /&gt;
| 1,8V LL, Qg=91nC &lt;br /&gt;
| [[Elektronikversender#Distrelec|Dis]], [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,85&lt;br /&gt;
|-&lt;br /&gt;
| AOC2413&lt;br /&gt;
| MCSP&lt;br /&gt;
| Alpha&amp;amp;Omega&lt;br /&gt;
| 0,42&lt;br /&gt;
| 8&lt;br /&gt;
| 3,5&lt;br /&gt;
| 0,55&lt;br /&gt;
| 28&lt;br /&gt;
| 1,2V LL, Qg=19nC &lt;br /&gt;
| [[Elektronikversender#Digi-Key|Digikey]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar; a.A. = Auf Anfrage, LL Logic Level, LIN Linearbetrieb möglich)&lt;br /&gt;
&lt;br /&gt;
== N-Kanal MOSFET==&lt;br /&gt;
Alles selbstsperrend, also Anreicherungstypen. Statt MOS-Verarmungstypen auf sFET/jFET(s.u.) zurückgreifen!&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;nkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%;&amp;quot; | Name&lt;br /&gt;
! Gehäuse&lt;br /&gt;
! Her&amp;lt;br&amp;gt;steller&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{GS(th)}&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{DS}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;I_D&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/A&lt;br /&gt;
! &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/W&lt;br /&gt;
! &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;m\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis&amp;lt;br&amp;gt;/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLML6244 IRLML6244]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| IRF&lt;br /&gt;
| 0,5-1,1&lt;br /&gt;
| 20&lt;br /&gt;
| 6,3&lt;br /&gt;
| 1,3&lt;br /&gt;
| 21&lt;br /&gt;
! &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,13&lt;br /&gt;
|-&lt;br /&gt;
| SI2302DS&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Vishay&lt;br /&gt;
| 0,65-4,5&lt;br /&gt;
| 20&lt;br /&gt;
| 6&lt;br /&gt;
| 1,25&lt;br /&gt;
| 70&lt;br /&gt;
| 2,5V LL, sehr billig&lt;br /&gt;
| [[Elektronikversender#AliExpress|Ali]]&lt;br /&gt;
| 0,01&lt;br /&gt;
|-&lt;br /&gt;
| IRFP4310Z &lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 2-4&lt;br /&gt;
| 100&lt;br /&gt;
| 120&lt;br /&gt;
| 280&lt;br /&gt;
| 4,8&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,80&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFP450 IRFP450]&lt;br /&gt;
| TO-247&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,0&lt;br /&gt;
| 500&lt;br /&gt;
| 14&lt;br /&gt;
| 190&lt;br /&gt;
| 400&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,20&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF530 IRF530]&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2,9&lt;br /&gt;
| 100&lt;br /&gt;
| 16&lt;br /&gt;
| 94&lt;br /&gt;
| 160&lt;br /&gt;
| LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,44&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRL3103 IRL3103]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 1,0&lt;br /&gt;
| 30&lt;br /&gt;
| 64&lt;br /&gt;
| 94&lt;br /&gt;
| 12&lt;br /&gt;
| 4,5V LL, Qg=33nC (!)&lt;br /&gt;
| [[Elektronikversender#Segor-electronics|Seg]]&lt;br /&gt;
| 0,95&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF730A IRF730A]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,5&lt;br /&gt;
| 400&lt;br /&gt;
| 5,5&lt;br /&gt;
| 74&lt;br /&gt;
| 1000&lt;br /&gt;
| Qg=22nC (!)&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,54&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFP064 IRFP064]&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 70&lt;br /&gt;
| 300&lt;br /&gt;
| 9&lt;br /&gt;
| Qg=190 nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,65&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF3205 IRF3205]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 110&lt;br /&gt;
| 200&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,69&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRL3803 IRL3803]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 1,0&lt;br /&gt;
| 30&lt;br /&gt;
| 140&lt;br /&gt;
| 200&lt;br /&gt;
| 6&lt;br /&gt;
| 4,5V LL, Qg=140nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,96&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF540 IRF540]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 3&lt;br /&gt;
| 100&lt;br /&gt;
| 28&lt;br /&gt;
| 150&lt;br /&gt;
| 77&lt;br /&gt;
| LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,52&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7401 IRF7401]&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 2,7&lt;br /&gt;
| 20&lt;br /&gt;
| 8,7&lt;br /&gt;
| 2,0&lt;br /&gt;
| 22&lt;br /&gt;
| 2,7V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]], [[Elektronikversender#CBoden|CBo]]&lt;br /&gt;
| 0,45&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7403 IRF7403]&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 4,85&lt;br /&gt;
| 30&lt;br /&gt;
| 8,5&lt;br /&gt;
| 2,5&lt;br /&gt;
| 22&lt;br /&gt;
| 4,5V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,42&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7413 IRF7413]&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 3,0&lt;br /&gt;
| 30&lt;br /&gt;
| 13,0&lt;br /&gt;
| 2,5&lt;br /&gt;
| 11&lt;br /&gt;
| 4,5V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,41&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BUZ11 BUZ11]&lt;br /&gt;
| TO-220&lt;br /&gt;
| ST&lt;br /&gt;
| 4,0&lt;br /&gt;
| 50&lt;br /&gt;
| 33,0&lt;br /&gt;
| 90,0&lt;br /&gt;
| 30&lt;br /&gt;
| LIN, SOA-Grenzen herstellerabhängig!&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS83 BSS83]&lt;br /&gt;
| SOT143&lt;br /&gt;
| NXP&lt;br /&gt;
| 2,0&lt;br /&gt;
| 10&lt;br /&gt;
| 0,05&lt;br /&gt;
| 0,23&lt;br /&gt;
| 45000&lt;br /&gt;
| nicht mit BSS83&#039;&#039;&#039;P&#039;&#039;&#039; verwechseln, Substratanschluss herausgeführt&lt;br /&gt;
| [[Elektronikversender#RS_Components|RS]],[[Elektronikversender#TME_.28Transfer_Multisort_Elektronik.29|TME]]&lt;br /&gt;
| 0,10&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/BS170 BS170]&lt;br /&gt;
| TO-92&lt;br /&gt;
&lt;br /&gt;
| gs&lt;br /&gt;
| 2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 0,3&lt;br /&gt;
| 0,83&lt;br /&gt;
| 5000&lt;br /&gt;
| LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,13&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSN20 BSN20]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| gs&lt;br /&gt;
| 1,8&lt;br /&gt;
| 50&lt;br /&gt;
| 0,18&lt;br /&gt;
| 0,35&lt;br /&gt;
| 6000&lt;br /&gt;
| 4,5V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,092&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS138 BSS138]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| div&lt;br /&gt;
| 0,8-1,6&lt;br /&gt;
| 50&lt;br /&gt;
| 0,22&lt;br /&gt;
| 0,36&lt;br /&gt;
| 2000&lt;br /&gt;
| 5V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,06&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSS123 BSS123]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| div&lt;br /&gt;
| 0,8-1,6&lt;br /&gt;
| 100&lt;br /&gt;
| 0,17&lt;br /&gt;
| 0,36&lt;br /&gt;
| 10000 @ 4,5V, &lt;br /&gt;
| 4,5V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,06&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFP2907 IRFP2907]&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 4,0&lt;br /&gt;
| 75&lt;br /&gt;
| 209&lt;br /&gt;
| 470&lt;br /&gt;
| 4,5&lt;br /&gt;
|&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 2,70&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/2N7000 2N7000]&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON&lt;br /&gt;
| 3,0&lt;br /&gt;
| 60&lt;br /&gt;
| 0,2&lt;br /&gt;
| 0,35&lt;br /&gt;
| 5000&lt;br /&gt;
| 4,5V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,13&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BS107 BS107]&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON, Phi&lt;br /&gt;
| 3,0&lt;br /&gt;
| 200&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,35&lt;br /&gt;
| 6400/14000&lt;br /&gt;
| 2,6V LL; LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,18&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BS108 BS108]&lt;br /&gt;
| TO-92&lt;br /&gt;
| ON, Phi&lt;br /&gt;
| 2,0&lt;br /&gt;
| 200&lt;br /&gt;
| 0,25&lt;br /&gt;
| 0,35&lt;br /&gt;
| 8000&lt;br /&gt;
| 2V LL; LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BUK100 BUK100]&lt;br /&gt;
| TO-220&lt;br /&gt;
| Phi&lt;br /&gt;
| 3,0&lt;br /&gt;
| 50&lt;br /&gt;
| 13,5&lt;br /&gt;
| 40&lt;br /&gt;
| 125&lt;br /&gt;
| Überlast + &amp;lt;br&amp;gt;ESD-Schutz&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRL3705N IRL3705N]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 89&lt;br /&gt;
| 170&lt;br /&gt;
| 10&lt;br /&gt;
| 4V LL, Qg=98nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,20&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BUZ72 BUZ72A]&lt;br /&gt;
| TO-220&lt;br /&gt;
| Infineon&lt;br /&gt;
| 4,0&lt;br /&gt;
| 100&lt;br /&gt;
| 9,0&lt;br /&gt;
| 40&lt;br /&gt;
| 250&lt;br /&gt;
| 5V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,45&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLZ34N IRLZ34N]&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2,5&lt;br /&gt;
| 55&lt;br /&gt;
| 30&lt;br /&gt;
| 68&lt;br /&gt;
| 35&lt;br /&gt;
| 4V LL, LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Farnell|Far]],[[Elektronikversender#Conrad|Con]],[[Elektronikversender#CBoden|CBo]] &lt;br /&gt;
| 0,39&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLZ44N IRLZ44N]&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2&lt;br /&gt;
| 55&lt;br /&gt;
| 47&lt;br /&gt;
| 110&lt;br /&gt;
| 22&lt;br /&gt;
| 4V LL, LIN&lt;br /&gt;
| [[Elektronikversender#CBoden|CBo]] &lt;br /&gt;
| 0,49&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLML2502 IRLML2502]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| irf&lt;br /&gt;
| 1,2&lt;br /&gt;
| 20&lt;br /&gt;
| 4,2&lt;br /&gt;
| 1&lt;br /&gt;
| 45&lt;br /&gt;
| 2,5V LL&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] [[Elektronikversender#Reichelt|Rei (neu)]]&lt;br /&gt;
| 0,17&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF1404 IRF1404]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4,0&lt;br /&gt;
| 40&lt;br /&gt;
| 202&lt;br /&gt;
| 333&lt;br /&gt;
| 4&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,10&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRL1004 IRL1004]&lt;br /&gt;
| TO-220&lt;br /&gt;
| irf&lt;br /&gt;
| 2,7&lt;br /&gt;
| 40&lt;br /&gt;
| 130&lt;br /&gt;
| 200&lt;br /&gt;
| 6,5&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,25&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRL530 IRL530]&lt;br /&gt;
| TO220, D2Pack&lt;br /&gt;
| irf&lt;br /&gt;
| 2&lt;br /&gt;
| 100&lt;br /&gt;
| 15,0&lt;br /&gt;
| 88&lt;br /&gt;
| 160&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,57&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF830 IRF830]&lt;br /&gt;
| TO220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,5   &lt;br /&gt;
| 500&lt;br /&gt;
| 5,0&lt;br /&gt;
| 74&lt;br /&gt;
| 1400&lt;br /&gt;
| LIN&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,57&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF840 IRF840]&lt;br /&gt;
| TO220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,0   &lt;br /&gt;
| 500&lt;br /&gt;
| 8,0&lt;br /&gt;
| 125&lt;br /&gt;
| 850&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,57&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FDC645N FDC645N]&lt;br /&gt;
| SuperSOT-6&lt;br /&gt;
| Fairchild&lt;br /&gt;
| 1,5&lt;br /&gt;
| 30&lt;br /&gt;
| 5,5&lt;br /&gt;
| 0,8/1,6&lt;br /&gt;
| 30&lt;br /&gt;
| -&lt;br /&gt;
| [[Elektronikversender#csd-electronics|csd]] (a.A.), Far&lt;br /&gt;
| 0,7&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BSP297 BSP297]&lt;br /&gt;
| SOT-223&lt;br /&gt;
| Siemens/Infineon&lt;br /&gt;
| 0,8-2,4&lt;br /&gt;
| 200&lt;br /&gt;
| 0,65&lt;br /&gt;
| 1,8&lt;br /&gt;
| 6000&lt;br /&gt;
| 200V &amp;lt;math&amp;gt;U_{DS}&amp;lt;/math&amp;gt;, SMD und 4,5VLL, LIN (seltene Kombinaton)&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]], [[Elektronikversender#Schuricht|Schu]], [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
| 0,56&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7455 IRF7455]&lt;br /&gt;
| SO-8&lt;br /&gt;
| irf&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 15&lt;br /&gt;
| 2,5&lt;br /&gt;
| 7,5&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 1,04&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/SI4442DY SI4442DY]&lt;br /&gt;
| SO-8&lt;br /&gt;
| vis&lt;br /&gt;
| 2,5&lt;br /&gt;
| 30&lt;br /&gt;
| 22&lt;br /&gt;
| 2,5&lt;br /&gt;
| 5/4,5V&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 1,64&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLU2905 IRLU2905]&lt;br /&gt;
| TO251, DPack&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 42&lt;br /&gt;
| 110&lt;br /&gt;
| 27&lt;br /&gt;
| 4V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Farnell|Far]],[[Elektronikversender#CBoden|CBo]]&lt;br /&gt;
| 0,54&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFD014 IRFD014]&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,0&lt;br /&gt;
| 60&lt;br /&gt;
| 1,7&lt;br /&gt;
| 1,3&lt;br /&gt;
| 200&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,52&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFD024 IRFD024]&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0-4,0&lt;br /&gt;
| 60&lt;br /&gt;
| 2,5&lt;br /&gt;
| 1,3&lt;br /&gt;
| 100&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,54&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLD024 IRLD024]&lt;br /&gt;
| HEXDIP/DIP4&lt;br /&gt;
| irf&lt;br /&gt;
| 1,0-2,0&lt;br /&gt;
| 60&lt;br /&gt;
| 2,5&lt;br /&gt;
| 1,3&lt;br /&gt;
| 100&lt;br /&gt;
| 4V LL&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,47&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLU3717 IRLU3717]&lt;br /&gt;
| I-Pak&lt;br /&gt;
| irf&lt;br /&gt;
| 2,0&lt;br /&gt;
| 20&lt;br /&gt;
| 120&lt;br /&gt;
| 1,5/89&lt;br /&gt;
| 4&lt;br /&gt;
| 4,5V LL, Qg=21nC, &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]],[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 1,15&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFP3703 IRFP3703]&lt;br /&gt;
| TO-247AC&lt;br /&gt;
| irf&lt;br /&gt;
| 4,0&lt;br /&gt;
| 30&lt;br /&gt;
| 210&lt;br /&gt;
| 230&lt;br /&gt;
| 2,8&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 5,08&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF3710 IRF3710]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4&lt;br /&gt;
| 100&lt;br /&gt;
| 57&lt;br /&gt;
| 200&lt;br /&gt;
| 23&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,83&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLR7843 IRLR7843]&lt;br /&gt;
| D-Pack&lt;br /&gt;
| irf&lt;br /&gt;
| 2,3&lt;br /&gt;
| 30&lt;br /&gt;
| 164&lt;br /&gt;
| 140&lt;br /&gt;
| 3,3&lt;br /&gt;
| 4,5V LL, Qg: 34nC &lt;br /&gt;
|&lt;br /&gt;
| 0,70&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF1010N IRF1010N]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4&lt;br /&gt;
| 55&lt;br /&gt;
| 85&lt;br /&gt;
| 180&lt;br /&gt;
| 11&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,99&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF1010Z IRF1010Z]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 4&lt;br /&gt;
| 55&lt;br /&gt;
| 75&lt;br /&gt;
| 140&lt;br /&gt;
| 7,5&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]], [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,99&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLIZ44N IRLIZ44N]&lt;br /&gt;
| TO-220-Fullpak &lt;br /&gt;
| irf&lt;br /&gt;
| 1,0 - 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 30&lt;br /&gt;
| 45&lt;br /&gt;
| 25&lt;br /&gt;
| 4V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,80&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLU024N IRLU024N]&lt;br /&gt;
| TO-251AA&lt;br /&gt;
| irf&lt;br /&gt;
| 1,0 - 2,0&lt;br /&gt;
| 55&lt;br /&gt;
| 17&lt;br /&gt;
| 45&lt;br /&gt;
| 80&lt;br /&gt;
| 4V LL, Qg=15 nC (!)&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,40&lt;br /&gt;
|-&lt;br /&gt;
| IRFZ48N&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 3&lt;br /&gt;
| 55&lt;br /&gt;
| 64&lt;br /&gt;
| 130&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,60&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mikrocontroller.net/part/IRL2505 IRL2505]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 2,5&lt;br /&gt;
| 55&lt;br /&gt;
| 104&lt;br /&gt;
| &lt;br /&gt;
| 8&lt;br /&gt;
| 4V LL&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 3,99&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mikrocontroller.net/part/IRF7607 IRF7607]&lt;br /&gt;
| Micro8&lt;br /&gt;
| irf&lt;br /&gt;
| 1,2&lt;br /&gt;
| 20&lt;br /&gt;
| 6,5&lt;br /&gt;
| 1,8&lt;br /&gt;
| 30&lt;br /&gt;
| 2,5V LL&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,89&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mikrocontroller.net/part/IRF3708 IRF3708]&lt;br /&gt;
| TO-220AB&lt;br /&gt;
| irf&lt;br /&gt;
| 0,6 - 2&lt;br /&gt;
| 30&lt;br /&gt;
| 62&lt;br /&gt;
| 87&lt;br /&gt;
| 8&lt;br /&gt;
| 2,8V LL&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]],[[Elektronikversender#Conrad|Con]],[[Elektronikversender#CBoden|CBo]]&lt;br /&gt;
| 0,69&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/GF2304 GF2304]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| gs&lt;br /&gt;
| 1,0&lt;br /&gt;
| 30&lt;br /&gt;
| 2,5&lt;br /&gt;
| 1,25&lt;br /&gt;
| 135&lt;br /&gt;
| Qg=3,7nC&lt;br /&gt;
| [[Elektronikversender#Pollin_Electronic|Pol]]&lt;br /&gt;
| 0,05&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRLR8743 IRLR8743]&lt;br /&gt;
| I-Pak, D2Pack&lt;br /&gt;
| IRF&lt;br /&gt;
| 1,9&lt;br /&gt;
| 30&lt;br /&gt;
| 50&lt;br /&gt;
| 68&lt;br /&gt;
| 3,1&lt;br /&gt;
| 4,5V LL, Qg=39nC&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,15&lt;br /&gt;
|-&lt;br /&gt;
| AOC2414&lt;br /&gt;
| MCSP&lt;br /&gt;
| Alpha&amp;amp;Omega&lt;br /&gt;
| 0,52&lt;br /&gt;
| 8&lt;br /&gt;
| 4,5&lt;br /&gt;
| 0,55&lt;br /&gt;
| 19&lt;br /&gt;
| 1,2V LL, Qg=21,5nC&lt;br /&gt;
| Digikey &lt;br /&gt;
|-&lt;br /&gt;
| BSS131&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Infineon&lt;br /&gt;
| 0,8-1,8&lt;br /&gt;
| 240&lt;br /&gt;
| 0,4&lt;br /&gt;
| 0,36&lt;br /&gt;
| 14&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar; a.A. Auf Anfrage, LL Logic Level, LIN Linearbetrieb möglich)&lt;br /&gt;
&lt;br /&gt;
== N-Kanal J-FET==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;fetpaare&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15%;&amp;quot; | Name&lt;br /&gt;
! Gehäuse&lt;br /&gt;
! Her&amp;lt;br&amp;gt;steller&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{GS(co)}&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;U_{DS}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/V&lt;br /&gt;
! &amp;lt;math&amp;gt;I_{D(max)}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;/mA&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Preis&amp;lt;br&amp;gt;/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF245 BF245A]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -2,2&lt;br /&gt;
| 30&lt;br /&gt;
| 6,5&lt;br /&gt;
| &lt;br /&gt;
| 0,15 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF245 BF245B]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -3,8&lt;br /&gt;
| 30&lt;br /&gt;
| 15&lt;br /&gt;
| &lt;br /&gt;
| 0,15 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF245 BF245C]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -7,5&lt;br /&gt;
| 30&lt;br /&gt;
| 25&lt;br /&gt;
| &lt;br /&gt;
| 0,15 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF246 BF246A]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -4&lt;br /&gt;
| 25&lt;br /&gt;
| 80&lt;br /&gt;
| &lt;br /&gt;
| 0,15 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF246 BF246B]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -7&lt;br /&gt;
| 25&lt;br /&gt;
| 140&lt;br /&gt;
| &lt;br /&gt;
| 0,17 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF246 BF246C]&lt;br /&gt;
| TO-92&lt;br /&gt;
| obsolet&lt;br /&gt;
| -12&lt;br /&gt;
| 25&lt;br /&gt;
| 250&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BF511 BF511]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -1,5&lt;br /&gt;
| 20&lt;br /&gt;
| 7&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,36 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BFR30 BFR30]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -4&lt;br /&gt;
| 25&lt;br /&gt;
| 10&lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,29 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BFR31 BFR31]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| diverse&lt;br /&gt;
| -2&lt;br /&gt;
| 25&lt;br /&gt;
| 5&lt;br /&gt;
| [[Elektronikversender#Kessler|Kes]]&lt;br /&gt;
| 0,29 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MMBF4416 MMBF4416]&lt;br /&gt;
| SOT-23&lt;br /&gt;
| Fairchild&lt;br /&gt;
| -5,5&lt;br /&gt;
| 15&lt;br /&gt;
| 5&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,52 €&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== FET-Paare ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;fetpaare&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee;writing-mode:sideways-lr;&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! Hersteller&lt;br /&gt;
! U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! U&amp;lt;sub&amp;gt;DS&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! P/W&lt;br /&gt;
! R&amp;lt;sub&amp;gt;DSon&amp;lt;/sub&amp;gt;/mΩ&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Einzelpreis&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7389 IRF7389]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 3,0&lt;br /&gt;
| 30&lt;br /&gt;
| 7,3/-5,3&lt;br /&gt;
| 2,0&lt;br /&gt;
| 29/58&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,56 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7501 IRF7501]&lt;br /&gt;
| micro8&lt;br /&gt;
| IRF&lt;br /&gt;
| 2,7&lt;br /&gt;
| 20&lt;br /&gt;
| 2,4&lt;br /&gt;
| ?&lt;br /&gt;
| 135 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,64 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7506 IRF7506]&lt;br /&gt;
| micro8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 1,7&lt;br /&gt;
| ?&lt;br /&gt;
| 270 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,56 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7103 IRF7103]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 50&lt;br /&gt;
| 2,3&lt;br /&gt;
| 2&lt;br /&gt;
| 130 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,32 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7104 IRF7104]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 20&lt;br /&gt;
| 2,3&lt;br /&gt;
| 2&lt;br /&gt;
| 250 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,32 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7316 IRF7316]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 4,9&lt;br /&gt;
| ?&lt;br /&gt;
| 58 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
|[[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,49 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRF7313 IRF7313]&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30&lt;br /&gt;
| 6,5&lt;br /&gt;
| ?&lt;br /&gt;
| 46 @4.5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Kessler|Kessler]], [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 0,66 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FDD8424H FDD8424H]&lt;br /&gt;
| Dual DPAK4L&lt;br /&gt;
| Fairchild&lt;br /&gt;
| &lt;br /&gt;
| 40&lt;br /&gt;
| 9/-6,5&lt;br /&gt;
| 3&lt;br /&gt;
| 24/54 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 30/70 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Digi-Key|Digi-Key]] &lt;br /&gt;
| 0,73 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/SUD50NP04-94 SUD50NP04-94]&lt;br /&gt;
| TO252-4L DPAK4L&lt;br /&gt;
| Vishay&lt;br /&gt;
| 2&lt;br /&gt;
| 40 &lt;br /&gt;
| 8&lt;br /&gt;
| 8?&lt;br /&gt;
| 41/53 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 45/72 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Farnell|Farnell]]&lt;br /&gt;
| 0,56 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7309&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| &amp;amp;nbsp;4,5 &amp;lt;br&amp;gt; -4,5&lt;br /&gt;
| &amp;amp;nbsp;30 &amp;lt;br&amp;gt; -30 &lt;br /&gt;
| &amp;amp;nbsp;4 &amp;lt;br&amp;gt; -3&lt;br /&gt;
| 1,4&lt;br /&gt;
| 50/100 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 80/160 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,38 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7307&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| &amp;amp;nbsp;2 &amp;lt;br&amp;gt; -2,5&lt;br /&gt;
| &amp;amp;nbsp;20 &amp;lt;br&amp;gt; -20 &lt;br /&gt;
| &amp;amp;nbsp;5,2 &amp;lt;br&amp;gt; -4,3&lt;br /&gt;
| 2&lt;br /&gt;
| 50/90 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 70/140 @2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,47 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7343&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| &amp;amp;nbsp;3 &amp;lt;br&amp;gt; -3,5&lt;br /&gt;
| &amp;amp;nbsp;55 &amp;lt;br&amp;gt; -55 &lt;br /&gt;
| &amp;amp;nbsp;4,7 &amp;lt;br&amp;gt; -3,4&lt;br /&gt;
| 2&lt;br /&gt;
| 43/95 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 56/150 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,47 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7319&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| &amp;amp;nbsp;3 &amp;lt;br&amp;gt; -3,5&lt;br /&gt;
| &amp;amp;nbsp;30 &amp;lt;br&amp;gt; -30 &lt;br /&gt;
| &amp;amp;nbsp;6,5 &amp;lt;br&amp;gt; -4,9&lt;br /&gt;
| 2&lt;br /&gt;
| 23/42 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 32/76 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| P+N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,50 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7314&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -2,0&lt;br /&gt;
| -20 &lt;br /&gt;
| -5,3&lt;br /&gt;
| 2,0&lt;br /&gt;
| 49 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 82 @-2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,45 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7314&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -2,0&lt;br /&gt;
| -20 &lt;br /&gt;
| -5,3&lt;br /&gt;
| 2,0&lt;br /&gt;
| 49 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 82 @-2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,45 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7304&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -2,5&lt;br /&gt;
| -20&lt;br /&gt;
| -4,3&lt;br /&gt;
| 2,0&lt;br /&gt;
| 90 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 140 @-2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,46 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7306&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -4,5&lt;br /&gt;
| -30&lt;br /&gt;
| -3,6&lt;br /&gt;
| 2,0&lt;br /&gt;
| 100 @-10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 160 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,47 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7342&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -3,5&lt;br /&gt;
| -55&lt;br /&gt;
| -3,4&lt;br /&gt;
| 2,0&lt;br /&gt;
| 95 @-10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 150 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,50 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7328&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -3,5&lt;br /&gt;
| -30&lt;br /&gt;
| -8,0&lt;br /&gt;
| 2,0&lt;br /&gt;
| 17 @-10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 26,8 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,80 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7324&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| -1,5&lt;br /&gt;
| -20&lt;br /&gt;
| -9,0&lt;br /&gt;
| 2,0&lt;br /&gt;
| 18 @-4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 26 @-2,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*P&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,87 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7303&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 30 &lt;br /&gt;
| 4,9&lt;br /&gt;
| 2,0&lt;br /&gt;
| 50 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 80 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,43 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7301&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 2&lt;br /&gt;
| 20 &lt;br /&gt;
| 5,2&lt;br /&gt;
| 2,0&lt;br /&gt;
| 50 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 70 @2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,46 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7341&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 3&lt;br /&gt;
| 55 &lt;br /&gt;
| 4,7&lt;br /&gt;
| 2,0&lt;br /&gt;
| 43 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 56 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,46 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7311&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 2&lt;br /&gt;
| 20 &lt;br /&gt;
| 6,6&lt;br /&gt;
| 2,0&lt;br /&gt;
| 23 @4,5V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt; &amp;lt;br&amp;gt; 30 @2,7V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,60 €&lt;br /&gt;
|-&lt;br /&gt;
| IRF7380&lt;br /&gt;
| SO-8&lt;br /&gt;
| IRF&lt;br /&gt;
| 4,5&lt;br /&gt;
| 80 &lt;br /&gt;
| 3,6&lt;br /&gt;
| 2,0&lt;br /&gt;
| 61 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,57 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IRFI4024H-117P IRFI4024H-117P]&lt;br /&gt;
| TO-220-5&lt;br /&gt;
| IRF&lt;br /&gt;
| 2&lt;br /&gt;
| 55&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 50 @10V&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;&lt;br /&gt;
| 2*N&lt;br /&gt;
| [[Elektronikversender#Reichelt|Reichelt]]&lt;br /&gt;
| 2,10 €&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Click im Kopfbereich sortierbar)&lt;br /&gt;
&lt;br /&gt;
== MOSFET-Treiber ==&lt;br /&gt;
Nahezu alle MOSFET-Treiber haben eine der typischen Gatespannung von Leistungs-MOSFETs angepasste Speisespannung von 10..20 V. In der Regel werden sie mit 12 V betrieben. (Die Spannungsangabe in der Tabelle bezieht sich daher auf die &amp;lt;i&amp;gt;Brückenspeisespannung&amp;lt;/i&amp;gt; und gilt nur für High-Side-Treiber.) Davon unabhängig kann die Schwellspannung für Logikeingänge TTL-kompatibel sein (für Mikrocontroller) oder bei der halben Speisespannung liegen (für konventionelle Schaltungen).&lt;br /&gt;
&lt;br /&gt;
* Detaillierte [[Treiber]]-Dimensionierung&lt;br /&gt;
* Treiber-Typ:&lt;br /&gt;
** Low = Low-Side-Treiber (ohne Potenzialversatzstufe)&lt;br /&gt;
** High = High-Side-Treiber (&amp;lt;i&amp;gt;mit&amp;lt;/i&amp;gt; Potenzialversatzstufe)&lt;br /&gt;
** High + Low = beide Treiber mit &amp;lt;i&amp;gt;getrennten&amp;lt;/i&amp;gt; Logikeingängen&lt;br /&gt;
** Halbbrücke = beide Treiber mit &amp;lt;i&amp;gt;gemeinsamem&amp;lt;/i&amp;gt; Logikeingang und eingebautem Totzeitgenerator&lt;br /&gt;
** Vollbrücke = zwei Halbbrückentreiber&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;fettreiber&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Treiber-Typ&lt;br /&gt;
! Strom&lt;br /&gt;
! Spannung&lt;br /&gt;
! Logikeingang&lt;br /&gt;
! Sockel&lt;br /&gt;
! Lieferant / Datenblatt&lt;br /&gt;
! Einzelpreis&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2101 IR2101]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 130/270mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 2,30 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2104 IR2104]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| I&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt; = 130 mA&amp;lt;br&amp;gt;I&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt; = -270 mA&lt;br /&gt;
| 600V&lt;br /&gt;
| U&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt; ≤ 0,8 V&amp;lt;br&amp;gt;U&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt; ≥ 3 V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&amp;lt;br&amp;gt;[[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,15 €&amp;lt;br&amp;gt;2,00 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2110 IR2110]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 2A&lt;br /&gt;
| 500V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL14/SO16&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&amp;lt;br&amp;gt;[[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,30 €&amp;lt;br&amp;gt;1,55 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2111 IR2111]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 200/430mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 10-20V CMOS Eingang&lt;br /&gt;
| DIL8/SO8, maximale Kriechwege&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,10 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2112 IR2112]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 200/420mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL14/SO16&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,45 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2113 IR2113]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 2A&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL14/SO16&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,85 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2117 IR2117]&lt;br /&gt;
| High&lt;br /&gt;
| 200/420mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 10-20V CMOS Eingang&lt;br /&gt;
| DIL8/SO8, maximale Kriechwege&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 1,20 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2121 IR2121]&lt;br /&gt;
| Low&lt;br /&gt;
| 1A/2A&lt;br /&gt;
| -&lt;br /&gt;
| 2,5V&lt;br /&gt;
| DIL8/SO8, Strombegrenzung&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 2,15 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2125 IR2125]&lt;br /&gt;
| High&lt;br /&gt;
| 1A/2A&lt;br /&gt;
| 500V&lt;br /&gt;
| 2,5V&lt;br /&gt;
| DIL8/SO8, Strombegrenzung, maximale Kriechwege&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 4,20 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2127 IR2127]&lt;br /&gt;
| High&lt;br /&gt;
| 200/420mA&lt;br /&gt;
| ?&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL8/SO8, maximale Kriechwege, Fehlerausgang&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 2,40 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2130 IR2130]&lt;br /&gt;
| 3-Phase Bridge&lt;br /&gt;
| 200/420mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,5V&lt;br /&gt;
| DIL28/SO28&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 2,50 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2151 IR2151]&lt;br /&gt;
| Halbbrücke mit Oszillator&lt;br /&gt;
| 100/210mA&lt;br /&gt;
| 600V&lt;br /&gt;
| ?&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 2,50 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2153 IR2153]&lt;br /&gt;
| Halbbrücke mit Oszillator&lt;br /&gt;
| 100/210mA&lt;br /&gt;
| 600V&lt;br /&gt;
| n/a&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,20 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2155 IR2155]&lt;br /&gt;
| Halbbrücke mit Oszillator&lt;br /&gt;
| 210/420mA&lt;br /&gt;
| 600V&lt;br /&gt;
| n/a&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 3,50 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2181 IR2181]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 1.4A/1.8A&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V/5V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 2,10 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2183 IR2183]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 1.4A/1.8A&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 4,00 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2184 IR2184]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 1.4A/1.8A&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V/5V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]] [[Elektronikversender#Conrad|Con]] &lt;br /&gt;
| 3,20 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/IR2136 IR2136]&lt;br /&gt;
| 3 Phase Bridge&lt;br /&gt;
| 120/250mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIP28/SOIC28,&lt;br /&gt;
| [[Elektronikversender#Conrad|Con]]&lt;br /&gt;
| 1,80 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/ICL7667 ICL7667]&lt;br /&gt;
| 2 x Low&lt;br /&gt;
| ?&lt;br /&gt;
| 4.5-15V, 7Ω&lt;br /&gt;
| 3,3V&lt;br /&gt;
| DIL8/SO8 &lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 2,00 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/HIP4081A HIP4081A]&lt;br /&gt;
| Vollbrücke&lt;br /&gt;
| 2,5A&lt;br /&gt;
| 80V&lt;br /&gt;
| ?&lt;br /&gt;
| DIP20/SOIC20&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 8,00 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/HIP4082 HIP4082]&lt;br /&gt;
| Vollbrücke&lt;br /&gt;
| 1,2A&lt;br /&gt;
| 80V&lt;br /&gt;
| ?&lt;br /&gt;
| DIP16/SOIC16&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]] [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 6,20 €&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/HIP4083 HIP4083]&lt;br /&gt;
| 3 x High&lt;br /&gt;
| 0,3A&lt;br /&gt;
| 80V&lt;br /&gt;
| ?&lt;br /&gt;
| DIP16/SOIC16&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 4,80 €&lt;br /&gt;
&amp;lt;!-- ohne Preis und Lieferant&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/HIP4084 HIP4084]&lt;br /&gt;
| 4 Phase Bridge&lt;br /&gt;
| 0,5A&lt;br /&gt;
| 80V&lt;br /&gt;
| ?&lt;br /&gt;
| DIP28/SOIC28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.mikrocontroller.net/part/HIP4086 HIP4086]&lt;br /&gt;
| 3 Phase Bridge&lt;br /&gt;
| 0.5A&lt;br /&gt;
| 80V&lt;br /&gt;
| ?&lt;br /&gt;
| DIP24/SOIC24&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 8,00 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/TC4451 TC4451/TC4452]&lt;br /&gt;
| Low&lt;br /&gt;
| 12A peak, 2,5A DC&lt;br /&gt;
| ?&lt;br /&gt;
| 4,5-18V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 3,00 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/LM5104 LM5104]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 1,6/1,8A&lt;br /&gt;
| 100V&lt;br /&gt;
| 2,5V&lt;br /&gt;
| SO8/LLP10 &lt;br /&gt;
| [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
| 3,20 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MCP1407 MCP1407-E/P]&lt;br /&gt;
| Low&lt;br /&gt;
| 6A peak, 1,3A DC&lt;br /&gt;
| 4,5-18V&lt;br /&gt;
| 4,5-18V (VDD+0,3V)&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 0,93 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MCP1416 MCP1416]&lt;br /&gt;
| Low&lt;br /&gt;
| 1.5A peak&lt;br /&gt;
| 4.5-18V&lt;br /&gt;
| 3.3V - VDD+0.3V&lt;br /&gt;
| SOT-23-5&lt;br /&gt;
| [[Elektronikversender#TME_.28Transfer_Multisort_Elektronik.29|TME]]&lt;br /&gt;
| 0,76 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MAX626 MAX626]&lt;br /&gt;
| 2 x Low, inverting&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 4,5-18 V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Reichelt|Rei]]&lt;br /&gt;
| 3,40 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NCP5106 NCP5106]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 250/500mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,3-20V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 2,37 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NCP5304 NCP5304]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 250/500mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,3-20V&lt;br /&gt;
| DIL8/SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 2,02 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FAN7380 FAN7380]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 90/180mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,5-25V&lt;br /&gt;
| SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 0,99 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FAN7382 FAN7382]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 350/650mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,9-20V&lt;br /&gt;
| DIL8/SO8/S014&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,25 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FAN7361 FAN7361]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 250/500mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 3,6-25V&lt;br /&gt;
| SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,18 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FAN7362 FAN7362]&lt;br /&gt;
| Halbbrücke&lt;br /&gt;
| 250/500mA&lt;br /&gt;
| 600V&lt;br /&gt;
| 2,9-25V&lt;br /&gt;
| SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,71 €&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/FAN7842 FAN7842]&lt;br /&gt;
| High + Low&lt;br /&gt;
| 350/650mA&lt;br /&gt;
| 200V&lt;br /&gt;
| 2,9-25V&lt;br /&gt;
| SO8&lt;br /&gt;
| [[Elektronikversender#Farnell|Far]]&lt;br /&gt;
| 1,05 €&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
* U&amp;lt;sub&amp;gt;GS(th)&amp;lt;/sub&amp;gt; - minimale Gatespannung, bei welcher der MOSFET zu leiten anfängt (100µA..1mA, nicht genormt). Zur vollständigen Durchschaltung bei maximalem Strom braucht es höhere Spannungen, siehe [https://www.mikrocontroller.net/articles/FET#Gate-Source_Threshold_Voltage Artikel FET].&lt;br /&gt;
* Logic Level - FET schaltet bei niedrigen Gatespannungen von typisch 4,5V (z.&amp;amp;nbsp;B. CMOS Logikpegel) hinreichend durch. Normale MOSFETs brauchen hierfür typisch 10V.&lt;br /&gt;
* U&amp;lt;sub&amp;gt;GS(co)&amp;lt;/sub&amp;gt; - Gate Source Cut Off Spannung, bei welcher der Drainstrom I&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt; eines JFETs praktisch Null ist. Die Messbedingung ist jedoch nicht genormt (0,5nA..200µA).&lt;br /&gt;
* N-Kanal MOSFETs mit niedrigem R&amp;lt;sub&amp;gt;DS,On&amp;lt;/sub&amp;gt; sind technologisch einfacher herzustellen als P-Kanal MOSFETs. Deshalb gibt es bei P-Kanal keine so große Auswahl und oft werden Schaltungen angestrebt, in denen ausschließlich N-Kanal MOSFETs verwendet werden. Es gibt spezielle Treiberbausteine, die über eine Ladungspumpe für entsprechend hohe Gatespannung auch für die High-Side N-Fets sorgen (&amp;quot;Bootstrap Circuits&amp;quot;, siehe Artikel [[Treiber]]).&lt;br /&gt;
* Bei der Dimensionierung ist zu beachten, dass die Stromangabe im allgemeinen für 25°C gilt. Geht man davon aus, dass der MOSFET mit maximal zulässigem Strom betrieben wird und mit passend dimensioniertem [[Kühlkörper]] ausgestattet ist, so beträgt die Sperrschichttemperatur bis zu 150°C, folglich gilt z.&amp;amp;nbsp;B. für den IRF540 nicht mehr 28A, sondern nur noch ca. 12-15A.&lt;br /&gt;
* Restströme sind auch stark temperaturabhängig. Bei höherer Temperatur nehmen die Restströme exponentiell zu. So können bei 100°C durchaus 100 µA zwischen Source und Drain auch im gesperrten Zustand fließen. Bei 25°C ist dieser Reststrom meist bei 1µA spezifiziert. Real sind es meist weniger.&lt;br /&gt;
* Der Gate-Charge-Wert Qg (s. Datenblatt) bestimmt, wie schnell das Gate beim Schalten umgeladen werden kann. Auch wenn MOSFETs stromlos den durchgeschalteten Zustand halten können, braucht man während des Umschaltvorganges einen Strom, der das Gate umlädt (ähnlich wie ein Kondensator). Je höher dieser Strom, um so schneller ist der Umschaltvorgang und um so geringer die Verlustleistung während dieser Phase. Leistungs-MOSFETs können bei höheren Frequenzen (&amp;gt;1KHz) oft nur mit höheren Gateströmen von 0,1A-2A sinnvoll geschaltet werden. Man kann das Gate also nicht direkt an einen Digitalpin anschließen. Man braucht einen [[MOSFET-Übersicht#MOSFET-Treiber | MOSFET-Treiber]]. Manche MOSFETs haben eine sehr geringe Total Gate Charge (z.&amp;amp;nbsp;B. 4-10nC). Diese können in gewissen Grenzen recht gut direkt an digitalen [[Ausgangsstufen Logik-ICs | Logikausgängen]] betrieben werden,  ein praktisches Beispiel findet sich [http://www.mikrocontroller.net/topic/246449#2519459 hier]. Zur Abschätzung kann man sich merken: Wenn man das Gate eines MOSFETs mit einer Eingangskapazität von 1nF (~10nC) in 100ns auf 10V aufladen will, braucht man dazu 100mA.&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [[Elektronikversender]]&lt;br /&gt;
* [[Elektronikversender#Reichelt|Rei]]&amp;lt;nowiki&amp;gt;chelt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#elpro-Darmstadt|el]]&amp;lt;nowiki&amp;gt;pro&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Conrad|Con]]&amp;lt;nowiki&amp;gt;rad&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Kessler|Kes]]&amp;lt;nowiki&amp;gt;sler&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#csd-electronics|csd]]&amp;lt;nowiki&amp;gt;-electronics&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#Farnell|Far]]&amp;lt;nowiki&amp;gt;nell&amp;lt;/nowiki&amp;gt; (nur gewerbliche Kunden oder Studenten)&lt;br /&gt;
* [[Elektronikversender#Schuricht|Schu]]&amp;lt;nowiki&amp;gt;richt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Elektronikversender#RS_Components|RS]]&lt;br /&gt;
* [[Elektronikversender#Spoerle|Spo]]&amp;lt;nowiki&amp;gt;erle&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Herstellerübersicht ==&lt;br /&gt;
* [irf] [http://www.irf.com International Rectifier]&lt;br /&gt;
* [Siliconix] [http://www.vishay.com/company/brands/siliconix/ Vishay Siliconix]&lt;br /&gt;
* [st] [http://www.st.com/web/en/home.html STMicroelectronics]&lt;br /&gt;
&lt;br /&gt;
== IRF MOSFET-Codierung ==&lt;br /&gt;
* IRF: Alle &amp;quot;Standardtransistoren&amp;quot;, also TO-220-Gehäuse&lt;br /&gt;
* IRFB: Hochspannungs-MosFETs&lt;br /&gt;
* IRFD: MosFETs im Dip-4-Gehäuse&lt;br /&gt;
* IRFI: MosFETs im isolierten TO-220-Gehäuse&lt;br /&gt;
* IRFP: MosFETs im TO-247AC-Gehäuse&lt;br /&gt;
* IRFR: MosFETs im D-Pak&lt;br /&gt;
* IRFU: MosFETs im I-Pak&lt;br /&gt;
* IRFZ: Also die die ich kenne liegen alle so bei 50-60V mit relativ niedrigem Rds(on), also so für mittlere Leistungen&lt;br /&gt;
* IRG:  Afaik sind das IGBTs&lt;br /&gt;
* IRL:  Logic-Level MosFETs&lt;br /&gt;
* IRLD: Logic-Level MosFETs im Dip-4 Gehäuse&lt;br /&gt;
* IRLI: Logic-Level MosFETs im isolierten TO-220-Gehäuse&lt;br /&gt;
* IRLR: Logic-Level MosFETs im D-Pak&lt;br /&gt;
* IRLU: Logic-Level MosFETs im I-Pak&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[FET]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[H-Brücken Übersicht]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/280480#2960070 Forumsbeitrag]: Clevere MOSFET-Treiber mit kleinsten Trafos&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/283585#3004839 Forumsbeitrag]: Galvanisch getrennte Ansteuerung eines MOSFETs mittels Übertrager und 100% Tastverhältnis&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.sprut.de/electronic/switch/nkanal/nkanal.html N-Kanal MOSFET leicht erklärt bei sprut.de]&lt;br /&gt;
* [http://www.sprut.de/electronic/switch/pkanal/pkanal.html P-Kanal MOSFET leicht erklärt bei sprut.de]&lt;br /&gt;
* [http://elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ElKo]&lt;br /&gt;
* [http://elektronik-kompendium.de/public/schaerer/battoff.htm Abschaltverzögerung beim ElKo]&lt;br /&gt;
* [http://elektronik-kompendium.de/sites/bau/0207011.htm FET beim ElKo]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Mosfet MOSFET bei Wikipedia]&lt;br /&gt;
* [https://assets.nexperia.com/documents/technical-note/TN00008.pdf Power MOSFET frequently asked questions and answers (TN00008 von nexperia)]&lt;br /&gt;
&amp;lt;!-- * [http://www.irf.com/product-info/auto/autogdic.html IR21xx Familienvergleich] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e5341b25f1 Infineon]&lt;br /&gt;
* [http://www.nxp.com/#/ps/ps=%5Bi%3D48014%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D48014%5D NXP standard Mosfets]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/parametrics.do?id=809&amp;amp;lctn=home ONsemi]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/3-3-1@tcatid~7 Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.irf.com/product-info/hexfet/ IRF]&lt;br /&gt;
* [http://www.vishay.com/mosfets/ Vishay]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Liste mit Bauteilen]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8051_Timer_0/1&amp;diff=105026</id>
		<title>8051 Timer 0/1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8051_Timer_0/1&amp;diff=105026"/>
		<updated>2022-02-21T19:11:24Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Timer im 8-Bit Modus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Timer 0/1 bei 8051-Controllern==&lt;br /&gt;
===Einleitung===&lt;br /&gt;
Die Timer 0 und 1 sind bei jedem 8051-Kompatiblen vorhanden, bei allen gleich, und sie unterscheiden sich nur gering (Mode 3). Der Timer 2 ist erst ab 8052 (aber auch neuere Derivate wie z.B. AT89C2015 und AT89C4015 haben teilweise keinen Timer 2) enthalten und kann abweichende Register und Funktionen haben.&lt;br /&gt;
Die Timer 0/1 sind Aufwärtszähler. Bei Zählerüberlauf wird ein Flag gesetzt (TF0 bzw. TF1), das aber nicht unbedigt ausgewertet werden muss (z.B. bei Nutzung als Baudratengenerator). Die Timer laufen nach Überlauf einfach weiter. Der Zählerstand kann jederzeit gelesen und auch geändert werden. Beim 16-Bit Mode muss der Zählerstand aus 2 Bytes TH0:TL0 gebildet werden. Im 8-Bit Mode erfolgt ein automatischer Reload aus dem TH-Register in das TL-Register.&lt;br /&gt;
Die Quelle der Timer ist umschaltbar zwischen Oszillator/12 (Maschinentakte) und externem Eingang. Dies geschieht mit dem Bit C/T im TMOD-Register. C/T auf 0 bedeutet Timer-Betrieb (bekannte Frequenz wird gezählt -&amp;gt; Zeit), C/T auf 1 bedeutet Counter-Betrieb (externe Ereignisse werden gezählt -&amp;gt; z.B. Abfüllen von Werkstücken, Besucherzähler etc.)&lt;br /&gt;
Die Timer müssen gestartet werden. Dazu muss das TR0 (bzw. TR1) Bit gesetzt werden. Sie können jederzeit angehalten und wieder gestartet werden. Der Zählerstand bleibt gespeichert. Mit gesetztem Gate-Bit läuft der Timer nur dann, wenn zusätzlich der Gate-Eingang auf 1 liegt. Damit können z.B: Impulslägen gemessen werden. Praktischerweise ist dieser Eingang auch gleichzeitig ein Interrupt-Eingang, so dass man die fallende Flanke (Puls zu Ende, Timer steht, Ergebnis kann gelesen werden) per Interrupt auswerten kann.&lt;br /&gt;
&lt;br /&gt;
===Betriebsarten===&lt;br /&gt;
Das Einstellen der Betriebsart erfolgt in einem Register (TMOD) für beide Timer! Die unteren 4 Bit gelten für Timer 0, die oberen für Timer 1. Die Bedeutung ist für beide gleich (ausser Mode 3).&amp;lt;br&amp;gt;&lt;br /&gt;
Das TMOD-Register ist nicht Bitadressierbar und sollte daher mit UND/ODER-Maskierung verändert werden. &#039;Harte&#039; Schreibzugriffe konfigurieren beide Timer gleichzeitig.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;TMOD-Register&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bit7 || Bit6 || Bit5 || Bit4 || Bit3 || Bit2 || Bit1 || Bit0&lt;br /&gt;
|-&lt;br /&gt;
|  G   || C/T  ||  M1  ||  M0  ||  G   || C/T  ||  M1  ||  M0  &lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Timer Betriebsarten&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! M1 || M0 || Betriebsart&lt;br /&gt;
|-&lt;br /&gt;
|  0 ||  0 || Mode 0: 13-Bit Timer/Counter (!!)&lt;br /&gt;
|-&lt;br /&gt;
|  0 ||  1 || Mode 1: 16-Bit Timer/Counter&lt;br /&gt;
|-&lt;br /&gt;
|  1 ||  0 || Mode 2: 8-Bit Timer/Counter mit Auto-Reload&lt;br /&gt;
|-&lt;br /&gt;
|  1 ||  1 || Mode 3: 2x 8-Bit Timer/Counter (nur Timer0, wenn Timer1 Baudrate erzeugt)&lt;br /&gt;
|}&lt;br /&gt;
Erklärung:&amp;lt;br&amp;gt;&lt;br /&gt;
Mode 0 existiert noch aus Kompatibilität zum 8048 und gehört daher ins Museum. Trotzdem schaltet man den Mode leicht unbeabsichtigt ein, wenn man TMOD falsch konfiguriert.&amp;lt;br&amp;gt;&lt;br /&gt;
Mode 1 konfiguriert einen 16-Bit Timer/Counter, der Zählerstand ist auf 2 Register aufgeteilt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mode 2 konfiguriert einen 8-Bit Timer/Counter mit Auto-Reload, gezählt wird im Register TL0 bzw. TL1, der Reload erfolgt bei Überlauf aus TH0 bzw. TH1. &amp;lt;br&amp;gt;&lt;br /&gt;
Mode 3: hier wird der Timer 0 in 2 8-Bit Timer/Counter aufgeteilt. Überläufe von TL0 sezten TF0, Überläufe von TH0 setzen TF1 (nur für Timer 0, Timer 1 macht dann z.B. Baudrate. Nur bei CPUs ohne Timer 2 oder Baudratengenerator interessant -&amp;gt; Museum!!)&amp;lt;br&amp;gt;&lt;br /&gt;
Es bleiben also effektiv nur die beiden Betriebsarten 1 und 2 übrig.&lt;br /&gt;
==== Timer oder Counter ====&lt;br /&gt;
Mit den Bits C/T wird zwischen Timer-Betrieb und Counter-Betrieb umgeschaltet. Als Timer (C/T = 0) zählt die Baugruppe Maschinenzyklen, daher entspricht der Zählerstand einer Zeit. Als Counter (C/T = 1) wird ein Signal von einem externen Zähleingang (P3.4 für Timer 0 und P3.5 für Timer 1) gezählt. &lt;br /&gt;
==== Gate-Betrieb ====&lt;br /&gt;
Wenn das Bit 0 ist, läuft der entsprechende Timer, wenn das zugehörige Timer-Run-Flag gesetzt ist (TR0 bzw. TR1). Wenn das Bit 1 ist muss &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; noch der Gate-Eingang auf 1 sein. Dies ist P3.2 für Timer 0 bzw. P3.3 für Timer 1. Damit kann man einfach Pulsdauern ausmessen oder auch Betriebsstunden (mit Hilfszählern für die Überläufe).&lt;br /&gt;
==== Timer-Kontroll-Register ====&lt;br /&gt;
Die Überlauf-Flags und die Run-Bits der beiden Timer befinden sich im Register TCON. Dort sind zusätzlich noch je 2 Bits für die Konfiguration der beiden externen Interrupts untergebracht (der reinste Gemischtwarenladen...)&amp;lt;br&amp;gt;&lt;br /&gt;
Dies ist nicht tragisch, weil das Register Bitadressierbar ist. Um einen Timer zu starten schreibt man also einfach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;TR0 = 1;   // Timer 0 starten&lt;br /&gt;
TR1 = 1;   // Timer 1 starten&lt;br /&gt;
bzw. in Assembler&lt;br /&gt;
setb TR0   ; Timer 0 starten&lt;br /&gt;
setb TR1   ; Timer 1 starten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Beim Überlauf (im 8-Bit Mode nach 2^8 = 256 Maschinenzyklen, im 16-Bit Mode nach 2^16 = 65536 Maschinenzyklen) wird das Überlauf-Flag TF0 bzw. TF1 gesetzt. Damit erkennt man, dass der Timer überglaufen ist. Bei der Bearbeitung muss man das Flag zur Bestätigung löschen, im Interrupt-Betrieb werden die Flags automatisch gelöscht.&lt;br /&gt;
&lt;br /&gt;
===Schnelleinstieg für Ungeduldige===&lt;br /&gt;
Von den Timern beim 8051 nimmst Du am Anfang nur Timer0/1 im 16-Bit Mode.&lt;br /&gt;
=&amp;gt; TMOD = 0x11; setzt beide Timer in den Mode 1. Nur wenn du serielle &lt;br /&gt;
Schnittstelle verwendest, brauchst du evtl. den Timer 1 für die &lt;br /&gt;
Baudrate.&lt;br /&gt;
Wenn Du keinen Startwert und keinen Reload-Wert setzt, dann läuft der &lt;br /&gt;
Timer 65536 Maschinenzyklen (also bei 12MHz ohne X2-Mode 65,5ms). Bei &lt;br /&gt;
jedem Timerüberlauf musst du das Timer-Flag wieder löschen (entfällt im &lt;br /&gt;
Interrupt-Betrieb, aber zunächst erstmal ohne) und dann kann man etwas tun.&amp;lt;br&amp;gt;&lt;br /&gt;
====Grundgerüst====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main (void)&lt;br /&gt;
{&lt;br /&gt;
   // Initialisierung&lt;br /&gt;
   TMOD = 0x11;       // setzt beide Timer in den 16-Bit Mode&lt;br /&gt;
                      // für andere Modi musst du doch noch oben lesen&lt;br /&gt;
   TR0 = 1;           // Timer 0 läuft jetzt, mit jedem Maschinenzyklus&lt;br /&gt;
                      // wird jetzt TH0:TL0 um 1 hochgezählt&lt;br /&gt;
&lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
   // in der Endlosschleife&lt;br /&gt;
      if (TF0 == 1)   // Flag wird beim Überlauf auf 1 gesetzt&lt;br /&gt;
      {   &lt;br /&gt;
         TF0 = 0;     // Flag erstmal löschen, der Timer zählt bereits munter weiter&lt;br /&gt;
         Tu_Was( );   // für was wolltest Du die Zeit nochmal nutzen??&lt;br /&gt;
      }&lt;br /&gt;
      Weitere_Aktionen( );&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Für den Timer 1 änderst/ergänzt Du TR0 -&amp;gt; TR1, TF0 -&amp;gt; TF1.&amp;lt;br&amp;gt;&lt;br /&gt;
Was soll jetzt mit dem Timer gesteuert werden? Lassen wir zunächst mal die LED an P2.0 blinken. Statt Tu_Was(); kommt jetzt also P2_0 = ~P2_0; hin. Wie groß ist jetzt die Blinkfrequenz? Der Timer läuft im 16-Bit Mode. Also ist die Zeit zwischen 2 Überlaufen 2^16 Maschinenzyklen. Der dauert bei den meisten 8051-Controllern 12 Oszillatortakte. Mit einem 12MHz Oszillator kommt man also auf genau 1µs pro Maschinenzyklus und damit auf 65536µs zwischen 2 Überläufen.&amp;lt;br&amp;gt;&lt;br /&gt;
Doch zurück zur LED. Die ist jetzt also für 65,5ms an und danach für 65,5ms aus. Die Periodendauer beträgt hier also die &#039;&#039;&#039;doppelte&#039;&#039;&#039; Timerzeit, die Frequenz ergibt sich also zu&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f = \frac 1 T = \frac 1 {2 \cdot Timerzeit}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Hier also ein symmetrisches Rechtecksignal mit einer Periodendauer von 131,072ms und einer Frequenz von 7,63Hz.&lt;br /&gt;
&lt;br /&gt;
====Variable Timerzeit====&lt;br /&gt;
Auf Dauer ist das Geblinke aber langweilig... Also müssen die Zeiten verändert werden.&amp;lt;br&amp;gt;Länger geht beim 8051 nur mit einem Hilfszähler oder mit Veränderung der Quarzfrequenz (der ATMega und andere Controller haben hier ja einen Vorteiler). Für kürzere Zeiten kann nur der &#039;&#039;&#039;Startwert&#039;&#039;&#039; verändert werden, weil der Überlauf immer nach dem Zählerstand 65535=0xFFFF stattfindet. Wenn man also bei 15536 beginnt zu zählen sind es nur noch 50000 Maschinenzyklen bis zum Überlauf. Dieser Startwert muss nun auf 2 8-Bit Zählregister THx und TLx aufgeteilt werden. Dafür gibt es verschiedene Möglichkeiten von der Berechnung im Kopf, Taschenrechner, Tabellenkalkulation etc...&amp;lt;br&amp;gt;&lt;br /&gt;
Der (meiner Meinung nach) eleganteste Weg ist aber, den Compiler die Berechnung erledigen zu lassen (wozu hat man denn einen PC). Es muss also die Differenz zwischen Maximalwert 65536 und gewünschter Dauer (hier 50000) gebildet und aufgeteilt werden. Dazu schreibt man einfach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;// Beispiel für Timer 0, für Timer 1 TH1 und TL1 einsetzen&lt;br /&gt;
TH0 = (65536 - 50000)/256;  // gibt das High-Byte von 15536 =&amp;gt; 0x3C&lt;br /&gt;
TL0 = (65536 - 50000)%256;  // gibt das Low-Byte von 15536 =&amp;gt; 0xB0&lt;br /&gt;
oder in Assembler:&lt;br /&gt;
mov TH0, #HIGH(65536-50000) ; ausprobieren, ob der eigene Assembler&lt;br /&gt;
mov TL0, #LOW(65536-50000)  ; dies unterstützt!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Durch diese Schreibweise sieht man sofort die erzeugte Timerzeit und die Umrechnung erfolgt durch den Compiler (es wird also auf dem Controller keine Berechnung mehr durchgeführt). Etwas anders ist es, wenn keine Konstanten sondern Variablen dastehen. Dann sollte man etwas anders schreiben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;unsigned short Timerzeit, Reloadwert;&lt;br /&gt;
Timerzeit = irgendeine_Berechnung( );&lt;br /&gt;
Reloadwert = 65536 - Timerzeit;&lt;br /&gt;
TH0 = Reloadwert / 256;&lt;br /&gt;
TL0 = Reloadwert % 256;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Auf den ersten Blick etwas umständlich, aber so erkennt der Compiler, dass nur eine Aufteilung in Low- und High-Byte gewünscht ist und weist einfach die Register zu statt Division und Modulo zu berechnen. Bei der Programmierung in Assembler muss man hier 16-Bit Arithmetik berechnen, für Anfänger hört hier der Spass auf (=&amp;gt; erstmal bei konstanten Zeiten bleiben).&lt;br /&gt;
&lt;br /&gt;
====Längere Wartezeiten erzeugen====&lt;br /&gt;
&#039;&#039;(zum größten Teil aus meinen Beiträgen hier übernommen: http://www.mikrocontroller.net/topic/264647#2752818 )&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu zählst du eine Variable hoch. Nimm mal &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;unsigned int Ticks;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Bei jedem Überlauf wird Ticks erhöht und wenn die benötigte Anzahl &lt;br /&gt;
(=Zeit in s / 65,5ms) erreicht ist, machst Du was und setzt Ticks wieder &lt;br /&gt;
auf 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void main (void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer-Initialisierung&lt;br /&gt;
  TMOD = 0x11;&lt;br /&gt;
  //TH0 = (65536 - Benoetigte_Zeit)/256;  // für Startwert oder Reload &lt;br /&gt;
  //TL0 = (65536 - Benoetigte_Zeit)%256;  // für Startwert oder Reload &lt;br /&gt;
  TR0 = 1;    // Timer 0 starten  - TR1 für Timer 1&lt;br /&gt;
&lt;br /&gt;
  while(1)  // Endlosschleife&lt;br /&gt;
  {&lt;br /&gt;
     if (TF0 == 1) // Timer 0 ist überglaufen&lt;br /&gt;
     {  Ticks++;   // sonst braucht man erstmal nix.&lt;br /&gt;
        TF0 = 0;   // Flag löschen&lt;br /&gt;
     }&lt;br /&gt;
     if (Ticks == 0)&lt;br /&gt;
     {  Schalte_Ein( ); //einschalten -&amp;gt; wird mehrfach ausgeführt &lt;br /&gt;
                        // oder du fügst ein Merker-Flag ein&lt;br /&gt;
     }&lt;br /&gt;
     if (Ticks == Ausschaltzeit)&lt;br /&gt;
     {  Schalte_Aus( ); // ausschalten -&amp;gt; wird nur einmal ausgeführt &lt;br /&gt;
        Ticks = 0;      // wenn Ticks gelöscht wird&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit kannst Du zunächst einen Vorgang realisieren. Wenn Du die Ticks &lt;br /&gt;
einfach weiterlaufen lässt, dann kann man auch sowas machen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (Taster1 == 1) &lt;br /&gt;
{  Ausschaltzeit1 = Ticks + Dauer1; //zur aktuellen Zeit die Dauer addieren&lt;br /&gt;
   Einschalten(1);&lt;br /&gt;
}&lt;br /&gt;
if (Ticks == Ausschaltzeit1)&lt;br /&gt;
{  Ausschalten(1);&lt;br /&gt;
}&lt;br /&gt;
if (Taster2 == 1) &lt;br /&gt;
{  Ausschaltzeit2 = Ticks + Dauer2; //zur aktuellen Zeit die Dauer addieren&lt;br /&gt;
   Einschalten(2);&lt;br /&gt;
}&lt;br /&gt;
if (Ticks == Ausschaltzeit2)&lt;br /&gt;
{  Ausschalten(2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das funktioniert mit (fast) beliebig vielen Signalen und es ist auch kein Problem, wenn es einen Überlauf gibt. Wenn Ticks z.B. auf 65000 steht und du willst eine Dauer von 60 Sekunden (= 60000ms/65,536ms = 915 Ticks), dann ergibt die Addition für die Ausschaltzeit 379 (gleicher Datentyp für alle Schaltzeiten!).&lt;br /&gt;
&lt;br /&gt;
====kurze Zeiten erzeugen====&lt;br /&gt;
Die Timer zählen nach dem Überlauf sofort ab 0x0000 weiter. Also muss man wieder einen Startwert (Reload) laden, so dass der Timer nach einer kürzeren Zeit überläuft. Die Formeln im Quelltext kann man problemlos mit Konstanten füllen, die Division und Modulo wird dabei nicht wirklich berechnet, sondern der Compiler fügt die Ergebniswerte in den Code ein. (anders sieht es für variable Zeiten aus, dazu später mehr) Für einen Grundtakt von 1ms schreibt man also einfach nach jedem Überlauf wieder in die Zählregister:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;TH0 = (65536 - 1000)/256;  // 1ms = 1000MZ, davon das High-Byte in TH0&lt;br /&gt;
TL0 = (65536 - 1000)%256;  // das Low-Byte in TL0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Da der 8051 bei den Timern 0 und 1 keine getrennten Zähl- und Reload-Register hat, muss man diesen Wert nach jedem Überlauf möglichst schnell wieder in die Register schreiben (daher nimmt man da dann meist Interrupts).&amp;lt;br&amp;gt;&lt;br /&gt;
Programmausschnitt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;while(1)  // Endlosschleife&lt;br /&gt;
{&lt;br /&gt;
     if (TF0 == 1) // Timer 0 ist überglaufen&lt;br /&gt;
     {  TH0 = (65536 - 1000)/256;  // 1ms = 1000MZ, Hih-Byte&lt;br /&gt;
        TL0 = (65536 - 1000)%256;  // Low-Byte in TL0&lt;br /&gt;
        TF0 = 0;   // Flag löschen&lt;br /&gt;
        Ticks++;   // sonst braucht man erstmal nix.&lt;br /&gt;
     }&lt;br /&gt;
     // Rest des Programms&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Bei einer Millisekunde läuft die Variable Ticks bereits nach 65536ms, also etwa einer Minute über. Wenn man längere Zeiten benötigt, dann entweder die Ticks alle 10, 20 oder 50ms einstellen oder (in C ja kein echtes Problem) unsigned long Ticks; verwenden. Damit kannst Du in ms-Auflösung Zeiten bis 1193 Stunden erzeugen, bevor der Zähler überläuft... Braucht aber natürlich mehr Speicher (auch für die Schaltzeiten!). Ohne Interrupts kann es aber passieren, dass die Bearbeitung des restlichen Programms länger als die Timer-Zeit dauert. Dann werden die Zeiten sehr ungenau. Also erstmal nicht wundern...&lt;br /&gt;
&lt;br /&gt;
====Reload mit variablen Zeiten====&lt;br /&gt;
Für variable Zeiten (z.B. PWM für Modellbau-Servo mit 1-2ms Impuls und 20ms Periodendauer) darf man die (16Bit) Variablen nicht einfach in die obige Zeile einsetzen. Dabei wird sonst die Division und die Modulo-Operation wirklich ausgeführt (die sich ergebenden Zeiten sind dann für die Tonne...). Hier muss man (am besten eine Phase vorher, wenn der Timer gerade übergelaufen war) die Variable berechnen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;while(1)  // Endlosschleife&lt;br /&gt;
{&lt;br /&gt;
     if (TF0 == 1) // Timer 0 ist überglaufen&lt;br /&gt;
     {  TH0 = (65536 - Pulszeit)/256;  // Hih-Byte&lt;br /&gt;
        TL0 = (65536 - Pulszeit)%256;  // Low-Byte in TL0&lt;br /&gt;
        TF0 = 0;   // Flag löschen&lt;br /&gt;
        Ticks++;   // sonst braucht man erstmal nix.&lt;br /&gt;
        Pulszeit = 1000 + 4 * Dip_Schalter; // ergibt 1-2ms&lt;br /&gt;
     }&lt;br /&gt;
     // Rest des Programms&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Timer-Interrupt ohne Schrecken===&lt;br /&gt;
Die Ungenauigkeit wird mit dem Interrupt beim Timer-Reload vermieden. Sobald der Timer bei aktiviertem Interrupt überläuft, springt der Prozessor in die Interrupt-Service-Routine und führt den dortigen Code aus. Danach geht es an der alten Stelle im Hauptprogramm weiter. (der sollte daher möglichst kurz sein)&lt;br /&gt;
Interrupts aktiviert man erstmal einzeln für jede Quelle, danach noch den Hauptschalter EA.&amp;lt;br&amp;gt;&lt;br /&gt;
Zum Thema [[Interrupts]] gibt es ein extra Kapitel.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;TMOD = 0x11;&lt;br /&gt;
TH0 = (65536 - 1000)/256;  // für Startwert &lt;br /&gt;
TL0 = (65536 - 1000)%256;  // für Startwert &lt;br /&gt;
TR0 = 1;    // Timer 0 starten  - TR1 für Timer 1&lt;br /&gt;
ET0 = 1;    // Interrupt für Timer 0 aktivieren&lt;br /&gt;
EA  = 1;    // Globalen Interrupt aktivieren -- ab jetzt geht&#039;s rund&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Interrupt-Service-Routine ersetzt die if(TF0)-Abfrage aus dem Hauptprogramm. Das ist kein Hexenwerk, es kommt nur ein Schlüsselwort hinter den Funktionsnamen und eine Nummer, die die Quelle angibt. (gilt für den Compiler RC51 aus RIDE)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;void ISR_Timer0 (void) interrupt 1&lt;br /&gt;
{&lt;br /&gt;
   TH0 = (65536 - 1000)/256;  // Reload&lt;br /&gt;
   TL0 = (65536 - 1000)%256;  // Reload&lt;br /&gt;
   // TF0 = 0;   // Flag löschen geht jetzt automatisch! Der reine Luxus!&lt;br /&gt;
   Ticks++;   // sonst braucht man erstmal nix.&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Ticks muss jetzt als globale Variable deklariert werden, damit sowohl &lt;br /&gt;
die ISR als auch main() darauf zugreifen können. Erbsenzähler rechnen natürlich noch aus, wieviele µs es bis zum Relaod dauert und korrigieren damit den Reload-Wert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;// wenn es z.B. 6us bis zum Sprung in die ISR dauert:&lt;br /&gt;
   TH0 = (65536 - 1000 + 6)/256;  // korrigiert um 6us&lt;br /&gt;
   TL0 = (65536 - 1000 + 6)%256;  // korrigiert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Es ist aber nicht immer möglich, exakt auf 1µs genau zu arbeiten (ein &lt;br /&gt;
laufender ASM-Befehl kann nicht unterbrochen werden und dauert 1, 2 oder &lt;br /&gt;
4 MZ). Aber zuviel überlegungen nutzen eh nichts, weil der Quarztakt ja &lt;br /&gt;
auch nicht exakt ist. (eine Uhr mit Timer-Interrupt läuft aber trotzdem &lt;br /&gt;
mit einer Abweichung von wenigen Sekunden/Woche)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer im 8-Bit Modus===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Counter-Betrieb===&lt;br /&gt;
ToDo.&lt;br /&gt;
===Kritische Betrachtung, Fallstricke===&lt;br /&gt;
Jetzt werden viele &amp;quot;Aber...&amp;quot; rufen. Wenn man genau hinschaut, gibt es natürlich den Fall, dass das Low-Byte übergelaufen ist, bis man das High-Byte geschrieben hat. Ebenso können die Timer-Zeiten daneben liegen, wenn in der Hauptschleife andere zeitaufwändige Aktionen drinstehen. Daher kann man in kritischen Fällen den Timer von dem Reload stoppen und anschliessend wieder starten. In dieser einfachen Einführung habe ich auf solche Details aber für die Übersicht verzichtet...&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Nachricht an den Autor&#039;&#039;&#039; &lt;br /&gt;
[http://www.mikrocontroller.net/user/show/b_spitzer B. Spitzer]&lt;br /&gt;
[[Kategorie:8051]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Optischer_N%C3%A4herungsschalter&amp;diff=105025</id>
		<title>Optischer Näherungsschalter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Optischer_N%C3%A4herungsschalter&amp;diff=105025"/>
		<updated>2022-02-21T14:53:17Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Edgar Brucke (edgar339)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll der Aufbau und die Funktionsweise eines per Mikrocontroller gesteuerten, optischen Reflex-Näherungsschalters erklärt werden.&lt;br /&gt;
&lt;br /&gt;
Dem Artikel ist kein Quellcode angehangen, da er schnell selbst geschrieben werden kann, man ihm kaum für andere Projekte nutzen kann und um den Text universell zu halten.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Funktionsweise ==&lt;br /&gt;
Optische Näherungsschalter senden infrarotes Licht über eine LED aus, welche aufgrund des hohen benötigten Stromes über einen Transistor geschalten werden sollte. Ein Gegenstand, der sich vor dem Näherungssensor  befindet, reflektiert ein Teil des IR-Lichtes auf ein lichtempfindliches Bauteil zurück, welches zum Beispiel ein lichtempfindlicher Widerstand, eine Fotodiode oder ein Fototransistor sein kann.&lt;br /&gt;
Dieses ändert dadurch seinen Widerstand, was per ADC des Mikrocontrollers gemessen werden kann, wenn aus dem lichtempfindlichen Bauteil und einem Festwiderstand ein Spannungsteiler erstellt wird.&lt;br /&gt;
&lt;br /&gt;
Zu Testzwecken eignet sich am besten ein Potentiometer von 1-10kΩ. (Achtung, bei einem 0-10kΩ Poti nie ganz „aufdrehen“, oder 1k Vorwiderstand benutzen!)&lt;br /&gt;
&lt;br /&gt;
Über- oder unterschreitet die Spannung einen festgelegten Schwellwert, je nachdem an welcher Stelle sich der Sensor im Spannungsteiler befindet, wird dies vom Controller erkannt. Er geht dann einer durch das Programm festgelegten Handlung nach, welche eine Zustandsänderung, wie ein Pegelwechsel, an den Portpins, oder das senden eines Signales über einen Datenbus bewirkt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Optischer Näherungssensor.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Programmverlauf ==&lt;br /&gt;
Nach der Initialisierung folgt das Hauptprogramm, das die Messungen, welche in einer Timer-ISR ausgeführt werden, ausgewertet und die Reaktion, die bei Objekterkennung ausgeführt wird, beinhaltet.&lt;br /&gt;
&lt;br /&gt;
Das Programm kann stromsparend oder verzögerungsarm geschrieben werden. Somit kann die Schaltung für Geräte genutzt werden, die über große Zeiträume aktiv sein müssen, wie Handtrockner in öffentlichen Toiletten, oder in Geräten, welche einen hohen Bedienungskomfort bieten sollen.&lt;br /&gt;
&lt;br /&gt;
Die ISR des Timers wird, je nachdem, ob die gesamte Schaltung stromsparend oder verzögerungsarm sein soll, je nach einer großen oder sehr kleinen Zeitspanne ausgeführt. In dieser findet die eigentliche Messung statt. Dazu wird zuerst die IR-LED ausgeschaltet und die Spannung am ADC gemessen, um die derzeitige äußere Beleuchtungsstärke festzustellen, welche das Ergebnis beeinflusst. Nun wir die LED wieder eingeschaltet und erneut gemessen. Die Differenz zwischen dem zweiten und dem ersten Ergebnis ist abhängig davon, wie viel Licht reflektiert wird.&lt;br /&gt;
&lt;br /&gt;
Dabei ist es wichtig, dass die Messungen direkt hintereinander erfolgen, da sich die Lichtverhältnisse, speziell bei der Beleuchtung mit Leuchtstofflampen, schnell verändern und das Ergebnis verfälschen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die stromsparende Variante gewählt wurde, wird die Entscheidung, ob die ein Objekt vor dem Sensor liegt, schon nach einer ISR getroffen. Deshalb sollten in dieser gleich zwei Messungen, wie beschrieben bestehend aus je zwei Einzelmessungen, durchgeführt werden. Der Abstand zwischen den Messungen sollte circa eine Millisekunde betragen, da, wenn die erste Messung durch das Zünden einer Leuchtstofflampe verfälscht wurde, es dann unwahrscheinlich ist, dass die die Zweite auch durch solche verfälscht wird. Es wird nur dann von einem reflektierenden Objekt ausgegangen, wenn beide Messungen Werte über dem Schwellwert erzeugen.&lt;br /&gt;
&lt;br /&gt;
Wenn man will, kann man auch während der ADC Messungen und der Wartezeit zwischen den Messungen, bei der stromsparenden Variante, zurück in das Hauptprogramm springen und warten, bis diese beendigt wurden. Bei dieser zeitunkritischen Anwendung ist dies jedoch nicht nötig. Außerdem kann man die zweite Messung bei der stromsparenden Variante überspringen, wenn bereits die erste kein Ergebnis über dem Schwellwert ergab, wodurch die Durchschnittsleistung weiter sinkt.&lt;br /&gt;
&lt;br /&gt;
== Objekterkennung und Gestensteuerung ==&lt;br /&gt;
Wenn man die verzögerungsarme Variante benutzt, ist es nötig, die Entscheidung, ob die Reaktionshandlung ausgeführt werden soll, nicht nur auf dem Ergebnis einer Messung, sondern auf mehreren Ergebnissen aufzubauen. So kann man zum Beispiel bei jeder Messung mit positivem(über dem Schwellwert liegenden) Ergebnis eine Variable hochzählen. Bei jeder negativen Messung wird diese wieder auf 0 gesetzt und erst wenn ein bestimmter Wert überschritten wird, wird auch von einem Gegenstand vor dem Sensor ausgegangen. Es wäre auch möglich, eine bestimmte Anzahl von Messungen durchführen, und ab einem gewissen Anteil der positiven Messungen von einer Reflexion des IR-Lichtes auszugehen.&lt;br /&gt;
&lt;br /&gt;
Somit lässt sich auch ein Schalter realisieren, der beim ersten Mal Überstreichen mit der Hand ein Licht einschaltet und beim zweiten Mal wieder aus. Auch die Erkennung von langem Halten der Hand über dem Sensor oder überstreichen mit zwei Fingern lässt sich erkennen und je eine andere Reaktion auslösen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Optischer Näherungssensor Steckbrett.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
* https://www.youtube.com/watch?v=O6foupz5dFA&lt;br /&gt;
Die pulsierende IR-LED kann man bei diesem Video sehr gut erkennen.&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Absolute_Beginner&amp;diff=105012</id>
		<title>Absolute Beginner</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Absolute_Beginner&amp;diff=105012"/>
		<updated>2022-02-20T10:24:03Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Versuchsaufbauten &amp;gt;60V (DC) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Grundlagen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
Gestern tat es einen Schlag,&amp;lt;br/&amp;gt;&lt;br /&gt;
wovon ich hier berichten mag.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drosselspulen, Widerstände,&amp;lt;br/&amp;gt;&lt;br /&gt;
alles fällt mir in die Hände.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da bau ich eine Schaltung auf.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ein Kühlblech kommt da auch noch drauf.&amp;lt;br/&amp;gt;&lt;br /&gt;
An Einstellreglern rumgedreht,&amp;lt;br/&amp;gt;&lt;br /&gt;
bis dann plötzlich nichts mehr geht.&amp;lt;br/&amp;gt;&lt;br /&gt;
Elkos hab ich nicht gebraucht,&amp;lt;br/&amp;gt;&lt;br /&gt;
Widerstände abgeraucht.&amp;lt;br/&amp;gt;&lt;br /&gt;
Jetzt ist die Bude voller Qualm,&amp;lt;br/&amp;gt;&lt;br /&gt;
zum Himmel schick ich einen Psalm.&amp;lt;br/&amp;gt;&lt;br /&gt;
Transistoren an den Ohren.&amp;lt;br/&amp;gt;&lt;br /&gt;
Dioden an den Hoden.&amp;lt;br/&amp;gt;&lt;br /&gt;
Kabel am Nabel.&amp;lt;br/&amp;gt;&lt;br /&gt;
Phase an der Nase!&amp;lt;br/&amp;gt;&lt;br /&gt;
Herzkammer flimmert; kann nur noch fluchen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Muß mir ein neues Hobby suchen!&amp;lt;br/&amp;gt;&lt;br /&gt;
MfG Paul&amp;lt;br/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Damit dieses von Paul so plastisch dargestellte Anfängerszenario gar nicht erst eintritt, werden auf dieser Artikelseite von http://www.mikrocontroller.net einige Dinge aufgeführt, die unbedingt notwendig sind, wenn man sich mit Elektronikbasteleien auseinandersetzt. Die Seite richtet sich bewusst an den absoluten Anfänger um so interessierten Leuten den Einstieg in die Welt der Elektronik und damit auch zum Programmieren von Mikrocontrollern möglichst einfach zu gestalten.&lt;br /&gt;
&lt;br /&gt;
Natürlich ist das Programmieren von Mikrocontrollern auch ohne Elektronikkenntnisse machbar, aber die Aussenanbindung eines Mikrocontrollers zu verstehen ist häufig sinnvoll, so z.&amp;amp;nbsp;B. wenn man ein Signal auswerten möchte.&lt;br /&gt;
&lt;br /&gt;
Die Grundlage für diesen Artikel bildet dieser [http://www.mikrocontroller.net/forum/read-1-344257.html#new Thread] aus dem Forum.&lt;br /&gt;
&lt;br /&gt;
==Sicherheit==&lt;br /&gt;
&lt;br /&gt;
Bleibt gesund! Denkt daran, dass nicht nur Strom und  Spannung bei dem neuen interessanten Hobby gefährlich sein können, sondern auch Hitze, Licht (Laser), Schall, Chemikalien (Entwickler, Ätzbäder, Lötrauch) usw. Lieber einmal mehr fragen, als einmal zu wenig. Und vielleicht bewahrt eure Frage euch und den Nächsten vor Schaden!&lt;br /&gt;
&lt;br /&gt;
===Versuchsaufbauten &amp;gt;60V (DC)====&lt;br /&gt;
Tipp aus dem Forum [http://www.mikrocontroller.net/topic/181266#1750311]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Diplomand schrieb:&lt;br /&gt;
&amp;gt; Oder wie geht es auf&#039;er Arbeit zu in Puncto &lt;br /&gt;
&amp;gt; Versuchsaufbauten?&lt;br /&gt;
&lt;br /&gt;
Alles was über 60V (DC) ist muß bei anliegender Spannung&lt;br /&gt;
mindestens unter 1 cm dickes Plexiglas.&lt;br /&gt;
&lt;br /&gt;
Gruß Anja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Literatur==&lt;br /&gt;
Ohne Lektüre (egal ob in Papierform oder im Internet) wird das mit der Elektronik in Eigenregie nix. &lt;br /&gt;
Möchte man sich ernsthaft mit der Materie beschäftigen, so kommt man nicht umhin, sich mit den Grundlagen der Elektronik zu beschäftigen. Während man im Internet viele Schaltungen findet, die einfach nachzubauen sind, bietet sich für das Grundlagenstudium eher ein Buch an. Da gute Elektronikbücher häufig teuer sind, will ich Dir folgenden Tipp geben: Schau einfach mal in die nächste größere Bibliothek. Wenn Dir ein Buch dort gefällt, kannst Du es jederzeit noch kaufen. Wer sich nicht irgendwann mit den Grundlagen beschäftigt, wird nie über das Stadium herauskommen, in dem er Schaltungen aus dem Internet kopiert. Aber unser aller Ziel ist es doch, auch zu verstehen, weshalb hier jetzt genau der rot-rot-schwarze Widerstand rein muss und was er tut...&lt;br /&gt;
*&#039;&#039;&#039;Fachzeitschriften&#039;&#039;&#039; am Kiosk&lt;br /&gt;
*&#039;&#039;&#039;Internet&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;[http://www.elektronik-kompendium.de/ Das Elektronik Kompendium]&#039;&#039;&#039; Ziel von das ELKO ist es die Themen Elektronik, Computertechnik, Kommunikationstechnik und Netzwerktechnik allgemeinverständlich zu erklären und der Allgemeinheit zu präsentieren. Die Zielgruppe sind vor allem Schüler und Auszubildende, die sich mit Elektronik näher beschäftigen müssen oder wollen. Weiterhin sollen alle privat und beruflich an Elektronik interessierte angesprochen werden.&lt;br /&gt;
**&#039;&#039;&#039;http://www.dse-faq.elektronik-kompendium.de/&#039;&#039;&#039; Es gibt zwar von der Startseite des ELKO einen Link zum FAQ, aber es schadet sicher nicht, es hier explizit aufzuführen.&lt;br /&gt;
**&#039;&#039;&#039;http://www.b-kainka.de/&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;http://www.dieelektronikerseite.de/&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;http://www.howstuffworks.com/&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;Datenblatt (Datasheet)&#039;&#039;&#039; zu den meisten Bauteilen, wird vom Hersteller ein Datasheet angeboten. Es ist sinnvoll, dies wenigstens einmal durchzulesen, auch wenn man am Anfang wenig mit den ganzen Fachbegriffen anfangen kann.  &lt;br /&gt;
**Diverse Application Notes der großen Halbleiterhersteller sind auch immer eine gute Informationsquelle und beschäftigen sich teilweise auch mit sehr grundlegenden Problemen&lt;br /&gt;
*&#039;&#039;&#039;Bücher&#039;&#039;&#039;   --- (letzte Änderung: 10.2.2020)&lt;br /&gt;
**&#039;&#039;&#039;[https://www.amazon.de/Art-Electronics-Paul-Horowitz/dp/0521809266/ref=sr_1_1?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;keywords=the+art+of+electronics&amp;amp;qid=1581325802&amp;amp;sr=8-1 The Art of Electronics]&#039;&#039;&#039; Third Edition, von P.Horowitz, W.Hill - ISBN 978-0-521-80926-9 - Bitte nur die englische Version nutzen, da die Übersetzung nicht gut gelungen ist.&lt;br /&gt;
** &#039;&#039;&#039;[http://www.amazon.de/exec/obidos/ASIN/3426037920/qid=1146692611/sr=8-1/ref=sr_8_xs_ap_i1_xgl/302-0461878-1759243 Elektronik ohne Geheimnisse]&#039;&#039;&#039; Von der Anfängerschaltung bis zum Radio, Franzis-Verlag, ISBN 3-426-03792-0&lt;br /&gt;
**&#039;&#039;&#039;[https://www.thalia.de/shop/home/artikeldetails/ID30574703.html Elemente der angewandten Elektronik]&#039;&#039;&#039; von E.Böhmer, D.Ehrhardt, W.Oberschelp, Springer Vieweg, ISBN 978-3-8348-1496-8 &lt;br /&gt;
**&#039;&#039;&#039;[https://www.thalia.de/shop/home/artikeldetails/ID143929448.html Halbleiter-Schaltungstechnik]&#039;&#039;&#039;, von U.Tietze, Ch.Schenk, E.Gamm, Springer Vieweg, ISBN 978-3-662-48553-8 - ältere Auflagen können günstig antiquarisch erworben werden, z.B. bei: [https://www.medimops.de/produkte-C0/?listorder=asc&amp;amp;listorderby=oxvarminprice&amp;amp;searchparam=Halbleiter-Schaltungstechnik Medimops.de]&lt;br /&gt;
**&#039;&#039;&#039;Schaltkreisbastelbuch&#039;&#039;&#039; von H.Jakubaschk und das&lt;br /&gt;
**&#039;&#039;&#039;Radiobastelbuch&#039;&#039;&#039; von K.H. Schubert. Das sind sehr alte DDR-Bücher. Aber die sind für Einsteiger äußerst nahrhaft.&lt;br /&gt;
**&#039;&#039;&#039;Tabellenbuch&#039;&#039;&#039; ein beliebiges Elektronik Tabellenbuch, hier findest Du die  mathematischen Grundlagen als Formelsammlung. Es wird Dich als Nachschlagewerk bis zur Rente begleiten.&lt;br /&gt;
** [http://www.generalatomic.com/teil1/index.html Das Telekosmos-Praktikum (Teil 1)]&lt;br /&gt;
** &#039;&#039;&#039;[http://www.amazon.de/Elektronik-nicht-schwer-Experimente-Gleichstrom/dp/3921608325 Elektronik - gar nicht schwer]&#039;&#039;&#039; Es gibt davon verschiedene Bände. Band 1 ist für den absoluten Einstieg gut, allerdings sind die Schaltungen darin für etwas Fortgeschrittene nicht mehr besonders interesssant. Band 2 hingegen ist sowohl für Einsteiger als auch für Fortgeschrittene empfehlenswert!&lt;br /&gt;
** &#039;&#039;&#039;[http://stefanfrings.de/mikrocontroller_buch2/index.html Einblick in die moderne Elektronik ohne viel Theorie] PDF&lt;br /&gt;
&lt;br /&gt;
==Grundausstattung für das Elektroniklabor==&lt;br /&gt;
In der folgenden Liste werden die wichtigsten Bauteile aufgeführt, die in keinem Elektroniklabor fehlen dürfen. Da es eine Unmenge an Angeboten der einzelnen Bauteile gibt, wird auf der Seite [[Standardbauelemente]] darauf hingewiesen, welche Bauteile sich im Laufe der Zeit als sinnvoll dargestellt haben.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;[[Steckbrett]]&amp;lt;/b&amp;gt; Mit dem Steckbrett (Breadboard) kann man schnell und ohne Lötkolben eine Schaltung zum Testen aufbauen. &lt;br /&gt;
* &amp;lt;b&amp;gt;[[Steckbrücken und Kabel]]&amp;lt;/b&amp;gt; Ein farbcodiertes Steckbrückenset [http://www.ebay.de/sch/items/?_nkw=Steckbr%C3%BCcken+Set] macht das Verkabeln einfacher. Dazu noch ein Sortiment an Kabeln [http://www.ebay.de/sch/items/?_nkw=Jumper+Wires]. Zur Auswahl des richtigen Drahts fürs Steckbrett sind in folgendem Thread nützliche Informationen zu finden: [http://www.mikrocontroller.net/forum/read-1-350462.html#new].&lt;br /&gt;
*&#039;&#039;&#039;Widerstände:&#039;&#039;&#039; 330 Ω, 1 kΩ, 3.3 kΩ, 10 kΩ, 100 kΩ, 1 MΩ (lies: &amp;quot;Ohm&amp;quot;/&amp;quot;Kilo-Ohm&amp;quot;/&amp;quot;Mega-Ohm&amp;quot;). Ob man sich Kohleschicht- oder Metallfilmwiderstände kauft, ist zunächst unerheblich.&lt;br /&gt;
*&#039;&#039;&#039;Potentiometer:&#039;&#039;&#039; 1 kΩ, 10 kΩ, 100 kΩ&lt;br /&gt;
*&#039;&#039;&#039;Elektrolytkondensatoren&#039;&#039;&#039; (&amp;quot;Elkos&amp;quot;): 1 µF, 10 µF, 100 µF, 470 µF, 1000 µF, 2200 µF (lies: &amp;quot;Mikro-Farad&amp;quot;). Eine Spannungsfestigkeit von 25 Volt ist für den Anfang ausreichend.&lt;br /&gt;
*&#039;&#039;&#039;Keramikkondensatoren:&#039;&#039;&#039; 100 nF; 22 pF (letztere für Quarze)&lt;br /&gt;
*&#039;&#039;&#039;Dioden:&#039;&#039;&#039; 1N4148, 1N4007; BAT43 oder BAT85 (Schottky)&lt;br /&gt;
*&#039;&#039;&#039;[[LED]]s&#039;&#039;&#039; verschiedenfarbig, je nach Geschmack. Man sollte zumindest einige Farben haben, um unterschiedliche Betriebszustände u.ä. anzuzeigen.&lt;br /&gt;
*&#039;&#039;&#039;[[Transistor]]en:&#039;&#039;&#039; BC547, BC557 (Dies sind die beiden Standard npn- bzw. pnp-Transistortypen) und  BC327, BC337 (höherer Kollektorstrom, trotzdem Standard)&lt;br /&gt;
*&#039;&#039;&#039;Operationsverstärker (&amp;quot;OPV&amp;quot; oder &amp;quot;OpAmp&amp;quot;):&#039;&#039;&#039; LM324 (der LM741 ist weniger gut geeignet)&lt;br /&gt;
*&#039;&#039;&#039;Universal-Timer-IC:&#039;&#039;&#039; NE555. Wenn man mit 3,3V Mikrocontrollern arbeitet, dann eventuell die nur wenige Cent teureren CMOS-Version wie LM&#039;&#039;&#039;C&#039;&#039;&#039;555, I&#039;&#039;&#039;C&#039;&#039;&#039;M7555, TS555, TM&#039;&#039;&#039;C&#039;&#039;&#039;555, usw. Diese lassen sich mit niedrigeren Betriebsspannungen betreiben (Datenblatt checken!), während der bipolare NE555 etwa mindestens 4,5V benötigt.&lt;br /&gt;
*&#039;&#039;&#039;[[AVR-Tutorial:_Equipment#Spannungsversorgung|Spannungsregler]]:&#039;&#039;&#039; Ein  7805-Festspannungsregler für die Bereitstellung von 5 V ist sinnvoll, wenn man mal eine Schaltung autark betreiben will. Dann benötigt man in den meisten Fällen noch einen geeigneten Trafo mit einem Brückengleichrichter und einem Glättungskondensator oder ein kleines Steckernetzteil als Basisversorgung für den Spannungsregler. Ein regelbares Netzteil mit Anzeige ist ebenfalls einsetzbar, birgt aber eine Gefahr in sich. Einige ICs, darunter Mikrocontroller, haben enge Betriebsgrenzen, in denen sie funktionieren bzw. oberhalb denen sie sterben (siehe unter &#039;&#039;Absolute Maximum Ratings&#039;&#039; im Datenblatt). Irgendwann ist der Stellknopf am Labornetzteil dann doch höhergestellt, als es dem Chip gut tut... &lt;br /&gt;
*&#039;&#039;&#039;Schalter&#039;&#039;&#039; einfache Schiebeschalter (EIN/AUS)&lt;br /&gt;
*&#039;&#039;&#039;Taster: &#039;&#039;&#039; Bedrahtet oder SMD Kurzhubtaster (billiger). Für Verwendung mit einem Mikrocontroller müssen diese softwareseitig [[Entprellung|entprellt]] werden.&lt;br /&gt;
*&#039;&#039;&#039;Lötnägel&#039;&#039;&#039; Sind dazu gedacht, auf Platinen eingelötet zu werden.  Auf Breadboards haben sie nichts verloren, weil sie mit einem Durchmesser von 1 mm dafür zu dick sind.&lt;br /&gt;
* &#039;&#039;&#039;Jumperpins&#039;&#039;&#039;: gibt es als 40polige Leiste, die man mit dem Seitenschneider kürzen kann.&lt;br /&gt;
* &#039;&#039;&#039;Ein Satz Schnellverbinder-Kabel&#039;&#039;&#039; mit Krokodilklemmen an beiden Enden&lt;br /&gt;
*&#039;&#039;&#039;Draht&#039;&#039;&#039;&lt;br /&gt;
** dünne Litze,&lt;br /&gt;
** dünner isolierter Draht (je dünner desto besser), ideal: Wrap-Draht ca. AWG30, leider etwas schwer erhältlich und teuer, (alte 80-polige IDE-Kabel sind meist AWG30)&lt;br /&gt;
** dünner blanker verzinnter Draht (möglichst &amp;lt; 0,5mm, leider etwas schwer erhältlich) oder lötbarer Silberdraht,&lt;br /&gt;
* Ein paar &#039;&#039;&#039;Lochraster-Platinen&#039;&#039;&#039; mit Lötpunkten, falls man doch nicht nur stecken und nachher auseinanderbauen will. &#039;&#039;&#039;Streifenraster-Platinen&#039;&#039;&#039; sparen ein paar Löt- oder Drahtbrücken.&lt;br /&gt;
&lt;br /&gt;
Installationskabel, dicke 230V-Litze oder Klingeldraht sollte man zum Aufbau von Lochraster-Schaltungen nicht verwenden. Leitungen mit größerem Querschnitt kommen nur zum Einsatz, wenn hohe Ströme fließen sollen.&lt;br /&gt;
&lt;br /&gt;
Zur Aufbewahrung der Kleinteile ist ein Kleinteilemagazin oder einige Sortimentkästen sehr zu empfehlen. Man muss sich nicht von vornherein auf spezielle Bauteile festlegen.&lt;br /&gt;
&lt;br /&gt;
Eine weiterreichende Liste von Standard-Bauelementen findet sich [[Standardbauelemente|hier]].&lt;br /&gt;
&lt;br /&gt;
==Werkzeug==&lt;br /&gt;
* Eine eigene &#039;&#039;&#039;Bastelecke&#039;&#039;&#039;, in der ein Aufbau auch mal ein, zwei Wochen [http://www.mikrocontroller.net/topic/15027#104245 liegenbleiben] kann, bis man wieder Lust oder Zeit hat, was daran zu machen. Bau Dir den Schreibtisch vorm PC nicht zu – Du brauchst den Zugang hierher ;-)&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;stabile Unterlage&#039;&#039;&#039;, die nicht leitend ist, z. B. eine Holzplatte. Die nimmt es im Gegensatz zum Wohnzimmertisch nicht übel, wenn der Lötkolben mal umfällt und einen Brandfleck hinterlässt, oder wenn abgeknipste, scharfe Drahtspitzen (Platinenunterseiten!) kratzen. Eine Anti-Statik-Matte (mit angeschlossener Erdung!!) ist auch eine Überlegung wert, sie bewahrt evtl vor unangenehmen Überraschungen und langer Fehlersuche. &lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;Halterung&#039;&#039;&#039; um Dinge fixieren zu können. Anfangs tut&#039;s die [http://www.ebay.de/sch/items/?_nkw=Dritte+Hand dritte Hand]. &lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;kleiner Schraubendreher&#039;&#039;&#039; als Allzweckwerkzeug zum Drücken, Klopfen, Justieren, ICs-aus-dem-Sockel-hebeln, Kabel beim Löten Fixieren.  Ach ja, Schrauben drehen kann man damit auch.&lt;br /&gt;
&lt;br /&gt;
* Eine gute, spitze &#039;&#039;&#039;Pinzette&#039;&#039;&#039; zum Greifen und Richten kleiner Bauteile, Drähte einstecken usw. Außerdem eine Klemmpinzette mit flacher Spitze zum Fixieren von Bauteilen.&lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;Seitenschneider&#039;&#039;&#039;, klein, zum Durchtrennen von Drähten. Opas Kneifzange ist ungeeignet, Omas Handarbeitsschere auch.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;Spitzzange&#039;&#039;&#039;, klein, für alles, wofür die Pinzette nicht kräftig genug ist. &lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;Abisolierzange&#039;&#039;&#039;, Bauform vgl. Wasserrohrzange. Die symmetrischen mit dem Loch vorne sind eher für Starkstromleitungen gedacht.&lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;Skalpell&#039;&#039;&#039; als Allzweckwaffe. Wenn man es einmal hat, will man es nicht mehr missen.&lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;Cuttermesser&#039;&#039;&#039; für alles grobe wofür das Skalpell zu schade ist und wo die Abisolierzange und der Seitenschneider versagt.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;Grundausrüstung zum Löten&#039;&#039;&#039;. Detaillierte Informationen zum Löten findest Du im Artikel [[Löten_(praktisch)]].&lt;br /&gt;
** &#039;&#039;&#039;Lötkolben&#039;&#039;&#039; 30 Watt ungeregelt oder mehr als 30 Watt mit Regelung&lt;br /&gt;
** &#039;&#039;&#039; Lötzinn&#039;&#039;&#039; 1 mm&lt;br /&gt;
** &#039;&#039;&#039;Lötschwamm &#039;&#039;&#039;. Ein gut mit Wasser angefeuchteter Baumwoll-Lumpen (gefaltete &amp;quot;Jute-Tasche&amp;quot;) tut es auch. Destillierte Wasser ist auf Dauer besser als Leitungswasser.&lt;br /&gt;
** Eine &#039;&#039;&#039;Entlötpumpe&#039;&#039;&#039; oder &#039;&#039;&#039;Entlötlitze&#039;&#039;&#039; zum Fehler auszubessern. &lt;br /&gt;
&lt;br /&gt;
* Eine kleine &#039;&#039;&#039;(LED-) Taschenlampe&#039;&#039;&#039; und eine Lupe, um Bauteile wie Dioden oder schwach bedruckte IC&#039;s zu beleuchten und um deren Beschriftung erkennen zu können. Das  Tageslicht kann gelegentlich zu &amp;quot;dunkel&amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;&#039;Crimpzange&#039;&#039;&#039; und die entsprechenden Crimp-Kontakte und Leergehäuse. Macht das Basteln auf Dauer einfacher, da sich Kabel mit passender Länge und passendem Ende (Pin oder Buchse) schnell und ohne Löten herstellen lassen. Ausserdem scheiden irgendwelche Verlängerungen oder Isolierbandkonstruktionen als Fehlerquelle aus. &lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;Netzteil mit Strombegrenzung&#039;&#039;&#039; hilft zu verhindern, dass Dir ständig die Bauteile flöten gehen. Oder Du nimmst deine Schaltungen zunächst mit Batterien oder Akkus in Betrieb, dann kostet es &amp;quot;nur&amp;quot; die Schaltung. Denn bei Batterien/Akkus ist auch darauf zu achten, dass bei einem Kurzschluss sehr hohe Ströme fließen können! Als Strombegrenzung für die Schaltung kann bei kleinen Aufbauten eine 6 V/100 mA Glühlampe in Serie benutzt werden ([http://www.mikrocontroller.net/topic/61119#480376 Forenbeitrag]). Bei einem Kurzschluss heizt sich durch den hohen Strom der Faden auf, die Lampe wird hell, der Widerstand des Fadens nimmt zu, und es können nur die 100 mA zur Schaltung kommen. &lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;[http://de.wikipedia.org/wiki/Multimeter Multimeter]&#039;&#039;&#039; zum Messen von Spannungen, Strömen und Widerständen. Eine Überlegung wert ist der Kauf zweier Multimeter, weil man dann z. B. gleichzeitig Strom und Spannung messen kann. Prüfspitzen in Klemmausführung haben den Vorteil, dass man die Hände frei hat für wichtigere Dinge. [http://de.wikipedia.org/wiki/Digitalmultimeter Digitale Multimeter] sind in der Regel günstiger als die analogen (Beispiel: 4,95 € bei [http://www.pollin.de pollin]). Für den Anfang reicht normalerweise ein günstiges Gerät, später könnte aber dessen mangelnde Genauigkeit doch einigen Frust erzeugen - das ggf gleich ein paar Euro mehr ausgeben. &lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;[[Oszilloskop]]&#039;&#039;&#039; ist zu Beginn noch nicht unbedingt notwendig, schadet aber nicht. Ein &#039;&#039;&#039;[[Logikanalysator]]&#039;&#039;&#039; ist für Digital-Schaltungen auch schon hilfreich und ggf. billiger. Wenn man sich eine Weile mit der Materie beschäftigt, kommt die Wünsche von ganz alleine. Ein kleiner Ratgeber zur Auswahl von Geräten findet sich hier im Wiki. &#039;&#039;Tip:&#039;&#039;Für I2C, SPI und UART reicht bei niedrigen Raten (bis so 16kHz) oft ein PC-Oszilloskop mit einem etwas veränderten Mikrofonkabel. Das Selber-Bauen eines Logikanalysators ist ein interessantes Projekt (siehe [[Logic_Analyzer]]), erreicht aber oft nicht die gewünschten Funktionen und Bandbreite - oder scheitert schon an dem grundlegenden [http://de.wikipedia.org/wiki/Henne-Ei-Problem Henne-Ei Problem].&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* Ein &#039;&#039;&#039;Simulationstool&#039;&#039;&#039; ist nützlich. Mit Simulationsprogrammen kann man sich viel Zeit und Frust ersparen. Man weiß bereits vor dem Aufbau, ob eine Schaltung NICHT funktionieren wird. Der Umkehrschluss (&amp;quot;Das funktioniert dann auch in Echt&amp;quot;) ist leider nicht immer möglich.&lt;br /&gt;
:Viele kommerzielle, aber auch kostenlos erhältliche Simulationsprogramme sind Abkömmlinge eines Programms namens &#039;&#039;&#039;[[SPICE]]&#039;&#039;&#039;. Z.B. enthalten die folgenden Programme nicht ganz zufällig je einen SPICE-Kern für die eigentliche Berechnung. Im Gegensatz zum Original-SPICE bieten sie jedoch den Vorteil einer grafischen Benutzeroberfläche. &lt;br /&gt;
&lt;br /&gt;
**Mit Hilfe von [https://www.tinkercad.com/learn/circuits &#039;&#039;&#039;Tinkercad Circuits&#039;&#039;&#039; ]  kannst Du Schaltungen am Computer planen und sogar ohne Arduino testen. Viel mehr noch könnte man sagen, dass Tinkercad einen kompletten Arduino(Atmega328P) simuliert. Tinkercad besitzt standardmäßig einen Atmega328P womit man im Browser programmiert und ein paar Standard-Bauteile(Liste kann ausgeklappt werden) besitzt.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt; &lt;br /&gt;
***DC-Motoren&lt;br /&gt;
***Servomotoren&lt;br /&gt;
***Widerstände&lt;br /&gt;
***ICs&lt;br /&gt;
***Kondensatoren&lt;br /&gt;
***Spulen&lt;br /&gt;
***Taster/Schalter&lt;br /&gt;
***Potentiometer&lt;br /&gt;
***Lichtsensoren&lt;br /&gt;
***Bewegungs-/Näherungsensoren&lt;br /&gt;
***Gas-Sensoren&lt;br /&gt;
***Zahlenfeld&lt;br /&gt;
***Dipswitches (Mäuseklavier)&lt;br /&gt;
***Dioden&lt;br /&gt;
***LED Ringe&lt;br /&gt;
***Piezo&lt;br /&gt;
***IR Fernbedienung&lt;br /&gt;
***LED- und LCD-Displays&lt;br /&gt;
***Batterien&lt;br /&gt;
***Breadboards&lt;br /&gt;
***Arduino&lt;br /&gt;
***Multimeter&lt;br /&gt;
***Labornetzteil&lt;br /&gt;
***Oscilloscope&lt;br /&gt;
***Integrierte Schaltkreise (ICs)&lt;br /&gt;
***Transistoren&lt;br /&gt;
***Relais&lt;br /&gt;
***W-LAN-Modul &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** Die &#039;&#039;&#039;[http://www.electronicsworkbench.com/ Electronic Workbench]&#039;&#039;&#039; (aktuelle Versionen heißen &#039;&#039;&#039;NI Multisim&#039;&#039;&#039;, nachdem der Hersteller von National Instruments übernommen wurde) ist in einigen Fachbüchern (s. Franzis Verlag) als abgespeckte Version mit einem geringeren Umfang an simulierbaren Bauteilen beigelegt und als [http://digital.ni.com/worldwide/germany.nsf/web/all/23834AA0D635C68586257124004EF1C9#3 Studentenversion günstiger erhältlich].&lt;br /&gt;
** &#039;&#039;&#039;[http://www.linear.com/designtools/software/#Spice SwitcherCAD III/LTspice]&#039;&#039;&#039; wird vom Hersteller Linear Technology kostenlos abgegeben. Eigentlich zur Unterstützung bei der Entwicklung von Anwendungen mit Linear Technology Produkten gedacht, enthält es doch einen kompletten SPICE-Kern.&lt;br /&gt;
** Das früher sehr populäre &#039;&#039;&#039;PSpice&#039;&#039;&#039; (erste PC SPICE Version, von der es eine kostenlose &#039;&#039;Student Edition&#039;&#039; gab) wurde mittlerweile von Cadence übernommen und in die OrCAD-Produktlinie integriert. Dabei ist die Student Edition weggefallen. Es gibt statt dessen eine &#039;&#039;&#039;[http://www.cadence.com/products/orcad/downloads/orcad_demo/index.aspx OrCAD PCB Demo-CD]&#039;&#039;&#039;, auf der auch eine eingeschränkte PSpice-Version enthalten ist.&lt;br /&gt;
** &#039;&#039;&#039;[http://ngspice.sourceforge.net/screens.html ngspice]&#039;&#039;&#039; ist eine mit diversen Erweiterungen versehene Freie-Software Version von SPICE für diverse Unix Systeme (Solaris, Linux, Mac OS X, etc.) und Windows XP. Es enthält eine graphische Ausgabe, jedoch selber keine graphische, sondern nur eine Texteingabe. Es ist Teil von &#039;&#039;&#039;[http://www.geda.seul.org/ gEDA]&#039;&#039;&#039;, einer Sammlung von freien &#039;&#039;Electronic Design Automation&#039;&#039;-Werkzeugen, zu denen auch &#039;&#039;&#039;gschem&#039;&#039;&#039; als Schaltplan-Editor gehört. Was zur nächsten Kategorie führt:  &lt;br /&gt;
** &#039;&#039;&#039;[http://qucs.sourceforge.net QUCS]&#039;&#039;&#039; ist ein gutes Simulationsprogramm, welches sich nicht nur zu Lernzwecken eignet, sondern auch zur Simulation von &amp;quot;echten&amp;quot; Schaltungen (Bauteilkatalog mit Strg-4 abrufen). Nützlich ist die Einbindung der Graphen direkt in den Schaltungseditor, da man so &amp;quot;alles auf einem Blick hat&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;[http://ktechlab.org/ KTechLab]&#039;&#039;&#039; ist eine Echtzeitsimulation von analogen und digitalen Bauelementen in Kombination mit PIC-Mikrocontrollern.&lt;br /&gt;
** &#039;&#039;&#039;[http://www.falstad.com/circuit/ P. Falstads Circuit Simulator]&#039;&#039;&#039; ist ein Java-Applet, das man direkt aus dem Browser heraus ausführen kann. Die Möglichkeiten sind zwar nicht ganz so umfangreich wie bei den anderen genannten Simulatoren, trotzdem lässt sich mit dem Applet schnell und einfach eine Schaltung simulieren (Vorteil: Programm muss nicht erst installiert werden)&lt;br /&gt;
So kann das gesamte Mikrocontrollerprojekt simuliert werden. Aber auch in die Transistor/Operationsverstärker/Logiktechnik kann man sich mit dem Programm gut&lt;br /&gt;
einarbeiten.&lt;br /&gt;
* Ein &#039;&#039;&#039;Schaltplaneditor&#039;&#039;&#039; (&#039;&#039;schematic capturer&#039;&#039;) ist nützlich z.&amp;amp;nbsp;B. &lt;br /&gt;
** &#039;&#039;&#039;[http://www.abacom-online.de/html/splan.html sEdit ]&#039;&#039;&#039; Software für Windows auch als Freewareversion geeignet.&lt;br /&gt;
**&#039;&#039;&#039;[http://www.cadsoft.de/ Eagle von Cadsoft]&#039;&#039;&#039; Der Quasi-Standard für Hobbyanwender. Es ist zwar etwas gewöhnungsbedürftig in der Bedienung, aber wenn  man erstmal dahintergekommen ist, was sich Cadsoft dabei gedacht hat, kann man damit leben. Und mit der Freeware-Version, Light- oder auch Non-Profit-Version kann man schon einiges machen. Früher oder später wirst eh nicht darum herumkommen, auch Platinen zu machen, und dann kannst Du schon auf eine Basis von Schaltplänen zurückgreifen, die Du vorher nur z.&amp;amp;nbsp;B. auf Lochraster aufgebaut hast und brav vorher wenigstens einen Schaltplan davon gezeichnet hast.&lt;br /&gt;
** Die bereits erwähnte &#039;&#039;&#039;[http://www.cadence.com/products/orcad/downloads/orcad_demo/index.aspx OrCAD PCB Demo-CD]&#039;&#039;&#039; enthält eine Demo-Version von &#039;&#039;&#039;OrCADE Capture&#039;&#039;&#039;.&lt;br /&gt;
** Das schon erwähnte &#039;&#039;&#039;[http://www.geda.seul.org/tools/gschem/index.html gschem]&#039;&#039;&#039; aus der gEDA-Sammlung.&lt;br /&gt;
** Die freie Software &#039;&#039;&#039;[http://www.lis.inpg.fr/realise_au_lis/kicad/ KiCad]&#039;&#039;&#039; für Linux und Windows (siehe auch den Artikel [[KiCAD]]).&lt;br /&gt;
:Siehe den Artikel [[Schaltplaneditoren]] für weitere Informationen zu Schaltplaneditoren.&lt;br /&gt;
&lt;br /&gt;
* Ein &#039;&#039;&#039;Layout-Editor&#039;&#039;&#039; ist nützlich, um den Schaltplan dann in eine Vorlage zum Selbstätzen umzusetzen oder die Platine als Datei zum Leiterplattenhersteller zu senden.&lt;br /&gt;
** Das bereits erwähnte &#039;&#039;&#039;[http://www.cadsoft.de/ Eagle von Cadsoft]&#039;&#039;&#039; gilt auch hier als der Standard im Hobbybereich.&lt;br /&gt;
**&#039;&#039;&#039;[http://www.ibfriedrich.com TARGET 3001! ]&#039;&#039;&#039; vom Ing.-Büro Friedrich ist eine komplette Software vom Schaltplan bis zum Layout, inkl. Simulation oder Isolationsfräsen. Die kostenlose [http://www.ibfriedrich.com/download.htm Discover-Version] geht bis 250 Pins. Einen einfachen Einstieg findet man &#039;&#039;&#039;[http://ibfriedrich.dyndns.org/wiki/ibfwikide/index.php?title=Kurzeinführung2 hier]&#039;&#039;&#039;.&lt;br /&gt;
** In der gEDA-Sammlung für Linux findet man &#039;&#039;&#039;[http://www.geda.seul.org/tools/pcb/index.html PCB]&#039;&#039;&#039;, das allerdings noch Ecken und Kanten hat. &lt;br /&gt;
** Das bereits erwähnte &#039;&#039;&#039;[http://www.lis.inpg.fr/realise_au_lis/kicad/ KiCad]&#039;&#039;&#039; ermöglicht ebenfalls die Erstellung von Platinen-Layouts.&lt;br /&gt;
&lt;br /&gt;
* Zum Aufbau auf Platinen mit &#039;&#039;&#039;Lochraster&#039;&#039;&#039; oder &#039;&#039;&#039;Lochstreifen&#039;&#039;&#039; gibt es die Tools&lt;br /&gt;
** [http://www.geocities.com/stripboarddesigner/ Stripboard Designer] (Shareware)&lt;br /&gt;
** [http://veecad.com/ VeeCAD] Stripboard Layout Editor&lt;br /&gt;
** [http://www.abacom-online.de/html/lochmaster.html Lochmaster] (ca. 40€)&lt;br /&gt;
** [http://blackboard.serverpool.org/Home/News.html Blackboard], das kommt [http://www.mikrocontroller.net/topic/open-source-lochraster-layout hier aus dem Forum], ist opensource und kostenlos. Auf [http://www.sebulli.com/BlackBoard/index.html Sebulli] gibt es ein paar ergänzende Bauteil-Libraries.&lt;br /&gt;
** mit einem Zeichenprogramm ([http://www.mikrocontroller.net/topic/112889 Forenbeitrag])&lt;br /&gt;
** Alternativ kann man mit (Kästchen-)Papier und Stift entwerfen...&lt;br /&gt;
&lt;br /&gt;
==Baukästen== &lt;br /&gt;
Elektronikbaukästen bieten die Möglichkeit, das was man gelernt hat, gleich praktisch anzuwenden. Sie beinhalten die notwendigen Bauteile und sind oft didaktisch sinnvoll aufgebaut.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Kosmos XN&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;XN1000&#039;&#039;&#039; Bereits für Kinder geeignet. Prof. Armstrong und der kleine Roboter Robert führen spielend in die Welt der Elektronik ein.&lt;br /&gt;
** &#039;&#039;&#039;XN2000&#039;&#039;&#039; Die Erweiterung. &lt;br /&gt;
** &#039;&#039;&#039;XN3000&#039;&#039;&#039; Nicht mehr auf Kinder, sondern auf Jugendliche ausgerichtet. Relativ anspruchsvoll, aber verständlich.   &lt;br /&gt;
** &#039;&#039;Nachteil:&#039;&#039; relativ teuer&lt;br /&gt;
*&#039;&#039;&#039;Busch-Elektronik-Kästen (Conrad)&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;Nachteil:&#039;&#039; Weil die Bauteile auf kleinen Platten befestigt sind, kann man mit ihnen keine eigenen Schaltungen aufbauen.&lt;br /&gt;
*&#039;&#039;&#039;Polytronic A B C ... (ex. DDR)&#039;&#039;&#039; aber nicht um jeden Preis im Kaufhaus kaufen - also Vorstufe zum Steckbrett&lt;br /&gt;
*&#039;&#039;&#039;Lernpaket Elektronik 2006 (amazon)&#039;&#039;&#039;  Sehr gut geeignet, da echte ungesockelte Bauelemente die überall nachgekauft werden können.&lt;br /&gt;
**&#039;&#039;Nachteil:&#039;&#039; Steckbrett wird schnell &amp;quot;zu klein&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;Lernpaket Elektronik mit ICs (Franzis)&#039;&#039;&#039;  Ausgezeichnetes Lernpaket für Theorie und Praxis: &#039;&#039;&#039;[http://www.franzis.de/elo-das-magazin/literatur-und-software/experimente/lernpaket-elektronik-mit-ics Lernpaket Elektronik mit ICs]&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;Besonders schön:&#039;&#039; Es liegt ein großes Breadboard bei&lt;br /&gt;
**&#039;&#039;Und dazu:&#039;&#039; Es werden nur kommerzielle Bauelemente eingesetzt, alles ist also nachbestellbar, Erweiterungen sind kein Problem.&lt;br /&gt;
*&#039;&#039;&#039;Lernpaket Sensortechnik (Franzis)&#039;&#039;&#039;  Hervorragendes Lernpaket für angewandte Sensorelektronik: &#039;&#039;&#039;[http://www.elo-web.de/elektronik-lernpakete/mechatronik/elektrotechnik-industrielle-elektronik/lernpaket-sensortechnik Lernpaket Sensortechnik]&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;Inhalt:&#039;&#039; Alle gängigen Sensoren, Opto-, Thermo-, Hall-Sensor etc.&lt;br /&gt;
**&#039;&#039;Weiterhin:&#039;&#039; Interessante ICs: LM386, 555, Bargraph-Treiber, LEDs etc. etc.&lt;br /&gt;
*&#039;&#039;&#039;NerdKit&#039;&#039;&#039; Steckbrett, AVR Microcontroller, LCD Screen, Temperatursensor, Piezo-Summer und weitere Bauteile. Interessante Projekte finden sich auf der &#039;&#039;&#039;[http://www.nerdkits.com/ Nerdkits Webseite]&#039;&#039;&#039;. &#039;&#039;Die Dokumentation ist englischsprachig.&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Einsteigerbox Elektronik I:&#039;&#039;&#039; &#039;&#039;&#039;[http://www.ehajo.de/starterkits/einsteigerbox-elektronik-1.html/eHaJo Link: Einsteigerbox von EhaJo]&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;Kleines aber gut durchdachtes Einsteigerpaket&#039;&#039; &lt;br /&gt;
**&#039;&#039;Inklusive hochwertigem Breadboard, Transistoren, Widerständen, Kondensatoren, Batterieclip etc.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sinnvolles Wissen ==&lt;br /&gt;
* Es schadet nicht, wenn man das [http://de.wikipedia.org/wiki/Ohmsches_Gesetz  ohmsche Gesetz] und die [http://de.wikipedia.org/wiki/Kirchhoffsche_Regeln kirchhoffschen Regeln] kennt.&lt;br /&gt;
* [http://www.electronic-weblessons.de Electronic Weblessons] - Multimedial aufbereitetes Basiswissen zum Thema Elektronik in Form von WebLessons von Wis-Con (Multimedia, Sprache Deutsch)&lt;br /&gt;
* http://www.tldp.org/HOWTO/html_single/Coffee/ ;)&lt;br /&gt;
&lt;br /&gt;
== Was tun, wenn es brennt? ==&lt;br /&gt;
&lt;br /&gt;
Hier ist eine Liste der üblichen Anfängerfragen. Bitte überprüfe doch all diese Punkte. Falls Du zu einem der Punkte detaillierte Fragen hast, kannst Du Dich auch an die Experten im Forum wenden. Viel Glück bei der Suche!&lt;br /&gt;
*&#039;&#039;&#039;Anschlüsse vergessen&#039;&#039;&#039; Bevor Du die Schaltung das erste Mal an die Spannungsquelle hängst, überprüfe doch folgendes:&lt;br /&gt;
**&#039;&#039;&#039;VCC&#039;&#039;&#039; und &#039;&#039;&#039;GND&#039;&#039;&#039; Wurden die Bauteile mit der Versorgungsspannung verbunden? In aller Eile vergisst man dies leicht.&lt;br /&gt;
**&#039;&#039;&#039;Abblockkondensatoren&#039;&#039;&#039; Für sichere Funktion die Abblockkondensatoren (oft 100nF) nahe an den Pins anschließen. Sie sollen Störungen abfangen.&lt;br /&gt;
*&#039;&#039;&#039;Bauteile richtig herum eingesetzt?&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Wackelkontakt&#039;&#039;&#039; am Breadboard. Die Steckbretter haben leider häufig die Eigenschaft, dass die Kontakte nicht perfekt sind.&lt;br /&gt;
*&#039;&#039;&#039;korrekte Werte&#039;&#039;&#039; Gelegentlich liest man von Newbies, die etwas von 100µF am Quarz schreiben und sich ernsthaft wundern, weshalb nichts schwingt...&lt;br /&gt;
&lt;br /&gt;
===Probleme beim Mikrocontroller===&lt;br /&gt;
*&#039;&#039;&#039;Quarz schwingt nicht&#039;&#039;&#039;. Ein Anzeichen hierfür ist, wenn die Spannung zwischen XTAL1 und GND nicht ungefähr 1/2  VCC beträgt.&lt;br /&gt;
*&#039;&#039;&#039;Steckkontakte&#039;&#039;&#039; sind nicht ok -  Steckbretter haben manchmal schlechte Kontakte. Aus diesem Grund ist es sinnvoll, Mikrocontroller mit Sockel auf eine Platine zu löten.&lt;br /&gt;
*&#039;&#039;&#039;falsche Kondensatoren&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Bauteil beschädigt&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
* [http://warmcat.com/milksop/prototypes.html Numbnut&#039;s guide to debugging prototypes] (engl.)&lt;br /&gt;
(Seite ist leider nicht mehr online und auch nicht in web.archive.org. Es gibt eine Kopie auf einer chinesischen Seite =&amp;gt; Selbersuchen)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bezugsquellen==&lt;br /&gt;
*&#039;&#039;&#039;http://www.csd-electronics.de&#039;&#039;&#039; Günstiger Anbieter, führt vieles, was man als Einsteiger braucht, dazu oft günstig. Versandkosten 3,85 bis 4,85 €.&lt;br /&gt;
*&#039;&#039;&#039;http://www.reichelt.de&#039;&#039;&#039; Mittel-günstiger Anbieter, führt leider nicht alles, was das Elektronikerherz begehrt. Der Grund hierfür ist, dass er sich hauptsächlich auf Mainstreamprodukte stützt, die einen großen Absatz finden. Nur so ist der günstige Preis möglich. Mindestbestellwert und Versandkosten nach Deutschland und Österreich sind gewichtabhängig, ab 5,60 oder 11,20 €.&lt;br /&gt;
* &#039;&#039;&#039;http://www.pollin.de&#039;&#039;&#039; Diverse Restposten, sehr günstige Preise aber keine große Auswahl an Standardbauteilen.&lt;br /&gt;
* &#039;&#039;&#039;http://www.conrad.de&#039;&#039;&#039; Filialen in vielen Städten, oft relativ hohe Preise - aber nicht immer. Vergleichen lohnt.&lt;br /&gt;
* &#039;&#039;&#039;http://www.ELV.de&#039;&#039;&#039; Versandkosten 6,95 € (inklusive Zustellgebühr)&lt;br /&gt;
* &#039;&#039;&#039;http://www.segor.de&#039;&#039;&#039; Hat manchmal Teile, die man bei Reichelt, Conrad nicht bekommt. Versandkosten 6,00 € (bei Kleinmengen jedoch 10,00 €)&lt;br /&gt;
* &#039;&#039;&#039;http://www.digikey.de&#039;&#039;&#039; Recht hohe Versandkosten dafür aber fast alles erhältlich auch in grossen Mengen. &lt;br /&gt;
* &#039;&#039;&#039;http://www.guloshop.de&#039;&#039;&#039; nur wenige Artikel, aber fast immer der günstigste Anbieter bei AVR-Standard-Mikrocontrollern. Versandkosten 2,40 bis 4,80 €.&lt;br /&gt;
* &#039;&#039;&#039;http://www.batterie24.de/Lithium-Batterien.html&#039;&#039;&#039; Für Schaltungen/Stromversorgung hochwertige Lithium-Batterien von Saft &amp;amp; Ultralife sowie FGS-Bleiakkus zu günstigen Preisen (z.B. 1 x Saft Lithium-Batterie LS14500 3,6V Mignon AA für 4,40 €).&lt;br /&gt;
&lt;br /&gt;
Der Artikel [[Elektronikversender]] zählt viele weitere Versender auf. Doch sollte man darauf achten, dass gerade sogenannte Distributoren in Deutschland normalerweise nicht an Privatleute verkaufen wollen (eine merkwürdige deutsche Spezialität) und mit Privatleuten auch mal sehr ruppig umgehen. Eine Ausnahme machen einige Distributoren für Studenten, da man sich so erhofft, frühzeitig Kontakt zu späteren gewerblichen Kunden zu bekommen. Eine andere Ausnahme sind normale Versender, die sich zusätzlich als Distributoren betätigen.&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Operationsverst%C3%A4rker-Grundschaltungen&amp;diff=105008</id>
		<title>Operationsverstärker-Grundschaltungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Operationsverst%C3%A4rker-Grundschaltungen&amp;diff=105008"/>
		<updated>2022-02-19T18:14:57Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Idealisiertes Modell eines OPV==&lt;br /&gt;
&lt;br /&gt;
[[Bild:Opamp-symbol.png]]&lt;br /&gt;
&lt;br /&gt;
=== Anschlüsse ===&lt;br /&gt;
Ein Operationsverstärker hat zwei Eingänge (+) und (-) und einen Ausgang&lt;br /&gt;
(UA). Außerdem verfügt er über eine positive und eine negative&lt;br /&gt;
Spannungsversorgung (V+) und (V-).&lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgungen ===&lt;br /&gt;
Die Spannungsversorgungen sollen zunächst nicht interessieren. Sie&lt;br /&gt;
werden in Schaltungen oft nicht eingezeichnet. &lt;br /&gt;
In der Praxis ist es jedoch wichtig zu wissen, dass die Ausgangsspannung immer zwischen (V+) und (V-) liegt. Die Ausgangsspannung des OPV kommt schließlich  dadurch zustande, dass der Ausgang über einen Transistor mehr oder weniger hochohmig mit den beiden Versorgungsspannungen verbunden wird.&lt;br /&gt;
&lt;br /&gt;
Wenn man einen OPV also mit +5V versorgt, so kann der OPV im besten Fall am Ausgang +5V erzeugen. Man würde in diesem Fall von einem &amp;quot;Rail-to-Rail&amp;quot; Operationsverstärker sprechen.&lt;br /&gt;
Bei vielen Operationsverstärkern ist die maximal mögliche Ausgangsspannung geringer als die Versorgungsspannung. Ein mit +5V Spannungsversorgung beschalteter OPV kann dann beispielsweise nur +4V Ausgangsspannung erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== Ausgang ===&lt;br /&gt;
Der Ausgang des OPV ist eine ideale Spannungsquelle. Das bedeutet, dass die&lt;br /&gt;
Ausgangsspannung unabhängig davon ist, was ausgangsseitig an den OPV&lt;br /&gt;
angeschlossen wird.&lt;br /&gt;
In der Praxis gilt dieses Modell häufig nur bei &amp;quot;sinnvollen Anwendungen&amp;quot;. So ist beispielsweise der Ausgangsstrom des OPV nach oben begrenzt (typischerweise im mA-Bereich), und manche OPV schwingen sehr leicht, wenn man sie kapazitiv belastet.&lt;br /&gt;
&lt;br /&gt;
=== Eingänge ===&lt;br /&gt;
Die Eingänge eines OPV sind hochohmig, d. h., es handelt sich nur um &amp;quot;Messfühler&amp;quot;, die keinen Strom führen.&lt;br /&gt;
Achtung: Die Eingangsschutzbeschaltung (Dioden von GND und gegen VCC) bei manchen OPVs kann jedoch dazu führen, dass Strom in den Eingang fliesst, wenn dessen Betriebsspannung z.B. abgeschaltet ist.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
Der OPV mißt zu jeder Zeit die Differenz &amp;lt;math&amp;gt;U_D = U(+) - U(-)&amp;lt;/math&amp;gt; der&lt;br /&gt;
Eingangsspannungen.&lt;br /&gt;
&lt;br /&gt;
Ist die Spannung an (+) größer als an (-), so erhöht der OPV die&lt;br /&gt;
Ausgangsspannung.&lt;br /&gt;
Ist die Spannung an (+) niedriger als an (-), so vermindert der OPV die&lt;br /&gt;
Ausgangsspannung.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis dieses Vorgangs wird häufig über die Gleichung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_a = v \cdot U_D&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
beschrieben, wobei &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; eine sehr große Zahl (10^4...10^6) ist. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der beschriebenen Funktionsweise lassen sich alle grundlegenden Schaltungen herleiten.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Betrachtet wird die invertierende Grundschaltung nach Abbildung a) im Abschnitt [[Operationsverstärker-Grundschaltungen#Verstärkergrundschaltungen|Verstärkergrundschaltungen]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-verstaerker-a.png]]&lt;br /&gt;
&lt;br /&gt;
Für die Pfeilrichtungen der Spannungen und Ströme gilt:&lt;br /&gt;
* &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt;: von oben nach unten&lt;br /&gt;
* &amp;lt;math&amp;gt;I_{R3}&amp;lt;/math&amp;gt;: von links nach rechts&lt;br /&gt;
&lt;br /&gt;
Die Spannung am (+)Eingang ist gleich Null. Die Spannung am (-)Eingang wird durch die Spannungsquelle &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; und durch die im OPV befindliche und mit dem Ausgang verbundene Spannungsquelle des OPV manipuliert.&lt;br /&gt;
&lt;br /&gt;
* Ist die Spannung am (-)Eingang negativ, so erhöht der Operationsverstärker die Ausgangsspannung. Dadurch wird durch die Rückführung über den Widerstand auch die Spannung am (-)Eingang positiver. Und zwar so lange, bis die Spannung am (-)Eingang gleich groß ist, wie die Spannung am (+)Eingang, also U(-)=0V.&lt;br /&gt;
* Ist die Spannung am (-)Eingang positiv, so vermindert der Operationsverstärker die Ausgangsspannung. Dadurch wird durch die Rückführung über den Widerstand auch die Spannung am (-)Eingang negativer. Und zwar so lange, bis die Spannung am (-)Eingang gleich groß ist, wie die Spannung am (+)Eingang, also U(-)=0V.&lt;br /&gt;
&lt;br /&gt;
Der Operationsverstärker wird also die Spannungen an (+) und (-) angleichen. Das passiert immer dann, wenn der Ausgang mit dem (-)Eingang verbunden ist. Der Trick in dieser Schaltung besteht darin, dass von der Ausgangsspannung nur ein Teil wieder rückgeführt wird. Die Spannung U_e ist daher höher, als der Teil der benötigt wird, um die Spannungen an den Eingängen aneinander anzugleichen.&lt;br /&gt;
Man nennt das Prinzip &amp;quot;Gegenkopplung&amp;quot;. Auf diese Art und Weise funktionieren alle analogen OPV-Schaltungen.&lt;br /&gt;
&lt;br /&gt;
Da an (+) Massepotential anliegt, wird somit auch (-) daran angeglichen, und so liegt an &amp;lt;math&amp;gt;R_3&amp;lt;/math&amp;gt; die Spannung &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; an. Daher gilt: &lt;br /&gt;
&amp;lt;math&amp;gt;I_{R3}=\frac{U_e}{R_3}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der (-)Eingang hochohmig ist, fließt &amp;lt;math&amp;gt;I_{R3}&amp;lt;/math&amp;gt; über &amp;lt;math&amp;gt;R_4&amp;lt;/math&amp;gt; weiter zum OPV-Ausgang.&lt;br /&gt;
&lt;br /&gt;
Ua ist die Spannung vom Ausgang zur (virtuellen) Masse am (-)Eingang.&lt;br /&gt;
(--&amp;gt; Pfeil einzeichnen und klarmachen, daß es egal ist, ob der Pfeil vom&lt;br /&gt;
Ausgang zur Masse geht oder vom Ausgang &amp;quot;entgegen der Stromrichtung&amp;quot; zur&lt;br /&gt;
virtuellen Masse an (-)!)&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von &amp;lt;math&amp;gt;I_{R3}=\frac{U_e}{R_3}&amp;lt;/math&amp;gt; ergibt sich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_a = -R_4 \cdot I_{R3} = -{{R_4} \over {R_3}} \cdot U_e.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Energie für den Stromtransport über &amp;lt;math&amp;gt;R_4&amp;lt;/math&amp;gt; stammt vom OPV! Sobald die Ladungen ausgehend von der Spannungsquelle &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; die virtuelle Masse an (-) erreicht haben, hat &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; seine gesamte Energie abgegeben.&lt;br /&gt;
&lt;br /&gt;
== Reale OPVs / Kennwerte ==&lt;br /&gt;
Abweichend vom idealen OPV besitzen reale OPVs diverse Einschränkungen und Kennwerte, die sie für verschiedene Einsätze mehr oder weniger prädestinieren.&lt;br /&gt;
&lt;br /&gt;
=== Leerlaufverstärkung ===&lt;br /&gt;
Die Leerlaufverstärkung gibt an, wie stark sich das Ausgangssignal i.A. der Änderung eines Eingangsignals statisch ändert, bzw nach dem Einschwingen erreichen könnte, wenn es nicht durch die Betriebsgrenzen limitiert wäre.&lt;br /&gt;
&lt;br /&gt;
=== Verstärkungs-Bandbreiteprodukt ===&lt;br /&gt;
Das Verstärkungs-Bandbreiteprodukt gibt an, bei welcher Verstärkung welche Bandbreite erreicht werden kann. Durch Rückkopplung kann die Verstärkung eingestellt werden. Bei kleinerer Verstärkung ergibt sich somit eine höhere Bandbreite, wenn das Produkt aus beiden konstant ist. Die Bandbreite bei der Verstärkung eins heißt Transitfrequenz (englisch &amp;quot;Unity Gain Frequency&amp;quot;). Das Verstärkungs-Bandbreiteprodukt ist entscheidend für das Kleinsignalverhalten.&lt;br /&gt;
&lt;br /&gt;
=== Anstiegsgeschwindigkeit ===&lt;br /&gt;
Bestimmend für das Großsignalverhalten ist neben dem Verstärkungs-Bandbreiteprodukt die Anstiegsgeschwindigkeit (slew rate), da bei hohen Ausgangsamplituden die Ausgangskurve eventuell zu steil wird, um richtig wiedergegeben zu werden.&lt;br /&gt;
&lt;br /&gt;
=== Gleichtaktverstärkung ===&lt;br /&gt;
Infolge des inhomogenen Aufbaus der internen Verstärkerstufen werden die beiden Eingangssignale nicht exakt gleich verstärkt, was in einen Gleichanteil und einen Differenzanteil aufgeteilt werden kann. Die nicht erwünschte Gleichtaktverstärkung bzw. ihr Gegenstück, die Gleichtaktunterdrückung (engl. &#039;&#039;common mode rejection ratio, CMRR&#039;&#039;) ist dabei ein Maß für die Qualität des OPVs. Klassische (VFB) OPV haben immer ein mit der Frequenz fallendes (-20 dB/Dekade) CMRR.&lt;br /&gt;
&lt;br /&gt;
=== Ein- und Ausgangsbereich ===&lt;br /&gt;
Wie weiter oben schon angesprochen ist die Ausgangsspannung eines OPVs begrenzt von der Versorgungsspannung und dem internen Aufbau des OPVs. Standard-OPV erreichen meist einen Ausgangsbereich, der bis circa 1-2 V an Versorgungsspannungen heran reicht, während sogenannte Rail-to-Rail (R2R) OPV sehr nah (bei niedriger Last bist auf wenige mV) an die Versorgungsspannungen herankommt. Das ist jedoch mit Abstrichen verbunden, sodass es in der Regel besser ist R2R OPV nur wenn nötig zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Ähnliche Beschränkungen gibt es auch für die Eingänge eines OPVs, hier werden im Wesentlichen drei Arten unterschieden:&lt;br /&gt;
&lt;br /&gt;
* Klassisch: Eingangsspannung darf nur bis wenige Volt an die Versorgung herankommen.&lt;br /&gt;
* Ground-Sensing: Die Eingangsspannung darf bis zur negativen Versorgung heruntergehen, klassische Vertreter sind LM324/LM358.&lt;br /&gt;
* Rail-to-Rail Input/Output (RRIO): R2R OPV, wo sowohl Eingänge als auch Ausgänge bis an die Versorgungsspannungen reichen.&lt;br /&gt;
&lt;br /&gt;
Bei klassischen Operationsverstärkern ist zu beachten, dass manche ein Verhalten namens &#039;&#039;phase reversal&#039;&#039; (Phasenumkehr) zeigen, wenn die Eingangsspannung den zulässigen Bereich überschreitet. Bei der Phasenumkehr dreht sich die Phase in der Eingangsstufe des OPVs um 180° und Rückkopplung wird zur Mitkopplung. Ein bekannter Vertreter dieser Art ist die TL06x/TL07x/TL08x Familie von OPV.&lt;br /&gt;
&lt;br /&gt;
== Verstärkergrundschaltungen ==&lt;br /&gt;
=== Grundbeschaltung mit Berechnung ===&lt;br /&gt;
[[Bild:Op-verstaerker-a.png]] [[Bild:Op-verstaerker-b.png]]&lt;br /&gt;
&lt;br /&gt;
In a) und b) verwenden wir den OPV als Verstärker und nutzen hier die Möglichkeit der Gegenkopplung, um definierte Verstärkungen zu erhalten. Wir gehen wieder davon aus, dass der OPV ein ideales Bauteil ist und daher seine Leerlaufverstärkung unendlich ist. Ebenso betrachten wir den Eingangswiderstand als unendlich.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;a)&#039;&#039;&#039; ist ein invertierender Verstärker mit einem OPV dargestellt. Durch die Widerstände R3 und R4 wird die Verstärkung bestimmt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = \frac{U_a}{U_e} = -\frac{R_4}{R_3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verhältnis der beiden Widerstände bestimmt also die Verstärkung und somit die Ausgangsspannung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = -\frac{R_4}{R_3} \cdot U_e &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder auch&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = V \cdot U_e&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das negative Vorzeichen drückt aus, dass es sich um einen invertierenden Verstärker handelt.&lt;br /&gt;
&lt;br /&gt;
Beim nichtinvertierenden Verstärker &#039;&#039;&#039;b)&#039;&#039;&#039; finden wir auch eine Rückkopplung über R6 zum invertierenden Eingang des OPVs. Die Verstärkung wird durch das Gegenkopplungsnetzwerk R6 und R7 bestimmt. Hier ist:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = 1 + \frac{R_6}{R_7}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Verstärkung von 1 ist sinnvoll, wenn eingangsseitig eine Spannungsquelle mit hohem Innenwiderstand verwendet wird. Für &amp;lt;math&amp;gt;\frac{R_6}{R_7} \to 0&amp;lt;/math&amp;gt; heißt die Schaltung &amp;quot;Spannungsfolger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kleinere Werte als 1 lassen sich nicht realisieren. Die Ausgangsspannung errechnet sich also so:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_e \cdot \left (1 + \frac{R_6}{R_7}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Eine Eingangsspannung von 0,5 V soll auf den Wert 5 V verstärkt werden, es ist also eine Verstärkung V von 10 benötigt. R7 ist mit 10 k&amp;amp;Omega; vorgegeben. Also ist das Verhältnis&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{R_6}{R_7} = V - 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem Wert von 10 k&amp;amp;Omega; für R7 errechnet sich R6 zu&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
R_6 = (V - 1) \cdot R_7&lt;br /&gt;
    = (10 - 1) \cdot 10\,\mathrm{k\Omega}&lt;br /&gt;
    = 90\,\mathrm{k\Omega}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgangsspannung Ua wird also:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_a =   U_e \cdot \left (1 + \frac{R_6}{R_7}\right )&lt;br /&gt;
   = 0{,}5\,\mathrm{V} \cdot \left (1 + \frac{90\,\mathrm{k\Omega}}{10\,\mathrm{k\Omega}}\right)&lt;br /&gt;
   = 5\,\mathrm{V}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nichtinvertierender Verstärker mit Offset ===&lt;br /&gt;
Eine Abwandlung des nichtinvertierenden Verstärkers erlaubt es, einen konstanten Offset vorzugeben. D.h. von der zu verstärkenden Eingangsspannung U(e) wird eine konstante Spannung U(o) abgezogen und die Differenz verstärkt. Auf der Ausgangsspannung U(a) findet sich die Offsetspannung U(o) allerdings wieder.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-verstaerker-offset.png]]&lt;br /&gt;
&lt;br /&gt;
Es gilt:&lt;br /&gt;
&lt;br /&gt;
Offsetspannung: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_o =  U_V \cdot \frac{R_2}{R_1 + R_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
mit U(V) = Versorgungsspannung an R1&lt;br /&gt;
&lt;br /&gt;
Verstärkung:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V = 1 + \frac{R_3}{\frac{R_1 \cdot R_2}{R_1 + R_2}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgangsspannung:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_a = (U_e - U_o) \cdot V + U_o&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorteil dieser Schaltung ist, daß nur die Differenz verstärkt wird. Damit kann eine größere Verstärkung gewählt werden. Zu berücksichtigen ist dabei, daß die Ausgangsspannung U(a) um die Offsetspannung U(o) überlagert ist.&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfolger (Impedanzwandler) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger1.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Abart des nichtinvertierenden Verstärkers stellt der Spannungsfolger dar. Beim nichtinvertierenden Verstärker errechnet sich die Ausgangsspannung aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_e \cdot \left (1 + \frac{R_2}{R_1}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir R2 auf 0Ω (mit R1 &amp;gt; 0) oder R1 auf unendlich (mit R2 &amp;lt; ∞) ändern, erhalten wir daher:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = 1 + \frac{R_2}{R_1} = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Spannungsfolger hat also eine Verstärkung V von 1.&lt;br /&gt;
&lt;br /&gt;
Umgezeichnet sieht die Schaltung so aus: &lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger2.png]]&lt;br /&gt;
&lt;br /&gt;
Was soll das nun? Wir nutzen die Eigenschaft, dass ein idealer OP einen unendlichen Eingangswiderstand und einen Ausgangswiderstand von 0Ω hat. Real sieht das natürlich anders aus: so liegt der Eingangswiderstand Re bei normalen OPs in der Größenordnung von 1MOhm bis &amp;lt;math&amp;gt;10^{15} \Omega&amp;lt;/math&amp;gt;, der Ausgangswiderstand Ra im Bereich 20Ω bis 1kOhm. Deshalb spricht man bei dieser Schaltung von einem Impedanzwandler. Eine solche Schaltung kann also aus einer relativ hochohmigen Spannungsquelle eine niederohmige, durch Folgeschaltungen belastbare Spannungsquelle machen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger3.png|left]]&lt;br /&gt;
&lt;br /&gt;
In dem nebenstehenden Beispiel ist eine einfache Möglichkeit zur Erzeugung einer Referenzspannung gezeigt. Es kommt eine normale Stabilisierungsschaltung mit einer Zenerdiode zur Anwendung, die aber nicht mehr die schlechten Eigenschaften der Standardbeschaltung mit lediglich Widerstand und Zenerdiode  hat. Bei einer Zenerdiode hängt die genaue Spannung davon ab, welcher Strom durch sie fliesst. Dieser Strom (und damit auch die Höhe der Zenerspannung) würde sich aber ändern, wenn ein Verbraucher die Zenerdiode direkt mit seinem Stromfluss belasten würde. Als Folge davon würde die Spannungslage der Zenerdiode je nach Verbraucher leicht schwanken. Durch den Spannungsfolger wird das verhindert, weil der jetzt den vom Verbraucher gezogenen Strom bereitstellt.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger4.png|left]]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Anwendungsmöglichkeit wäre das hochohmige Auskoppeln einer Brückenspannung. Die Brückenschaltung selbst wird durch Folgeschaltungen nicht mehr belastet, alle anderen Eigenschaften bleiben erhalten.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
=== Der Komparator ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-komp-a.png]] [[Bild:Op-komp-b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der einfachsten Beschaltung des Operationsverstärkers erhält man einen Komparator. Es fällt auf, dass kein Gegenkopplungsnetzwerk vorhanden ist. Der OP arbeitet daher mit seiner vollen Leerlaufverstärkung Vo. Dies bedeutet, dass bereits eine kleine Eingangsspannung genügt, um den OP in die Begrenzung zu treiben. Das heißt, die Ausgangsspannung Ua wird annähernd die Betriebsspannung erreichen.&lt;br /&gt;
&lt;br /&gt;
Achtung: nicht jeder OP ist als Komparator verwendbar! Manche haben Schutzdioden zwischen invertierendem und nichtinvertierendem Eingang, die bei einem zu großen Spannungsunterschied das Signal kurzschließen. Ob das bei einem konkreten OP-Typ der Fall ist, findet man im Datenblatt: bei den absolute maximum ratings ist die &amp;quot;Differential Input Voltage&amp;quot; angegeben. Wenn dort nur 1 bis 2 Volt stehen, ist der OP nicht als Komparator einsetzbar.&lt;br /&gt;
Die sichere Alternative ist jedoch, einen speziellen Komparator-IC  zu verwenden. Diese sind im Grunde auch nur OPs, aber für den Komparator-Betrieb optimiert. &lt;br /&gt;
&lt;br /&gt;
Beim Komparator gibt es zwei Möglichkeiten der Beschaltung: die invertierende nach a) und die nichtinvertierende Beschaltung nach b). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Berechnungsbeispiel für Schaltung b)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Angenommen die Leerlaufverstärkung Vo von 40000 und eine Eingangsspannung von 0,1 Volt. Die Betriebsspannungen Vcc und Vee legen wir auf +/- 24 V fest. Damit ergibt sich theoretisch für Ua:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a =  V_0 \cdot U_e = 40000 \cdot 0{,}1\,\mathrm{V} = 4000\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist natürlich ein unrealistischer Wert, da Ua nicht höher sein kann als die Betriebsspannung. Also anders ausgedrückt: Bei welcher Spannung Ue erreicht der OP seine Aussteuerungsgrenze?&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_e = V_{cc} / V_0 = 24\,\mathrm{V} / 40000 = 0{,}6\,\mathrm{mV}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass eine Spannung von 0,6 mV ausreicht um den Komparator in die Begrenzung zu treiben.&lt;br /&gt;
&lt;br /&gt;
Das gleiche gilt auch für den invertierenden Komparator, allerdings wird hier der OP in die negative Begrenzung gebracht.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = V_0 \cdot U_e&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden einfachsten Komparatorschaltungen werden so nur sehr selten verwendet, weil sie keine Hysterese haben. D.h. es gibt nur eine Umschaltschwelle. Dadurch kann der Ausgang schwingen, wenn das Eingangssignal sehr nah an der Umschaltschwelle liegt, weil kleinste Störungen im Signal den Komparator mehrfach schalten lassen (dafür reichen wenige mV!). Ausserdem sind Operationsverstärker als Komparator relativ langsam, das liegt am inneren Aufbau. Echte Komparatoren sind deutlich schneller und sie haben auch kein Problem damit, wenn der Ausgang in die Sättigung geht. Darum beschaltet man einen OPV bzw. Komparator meistens mit Hysterese. Das nennt man dann einen [[Schmitt-Trigger]].&lt;br /&gt;
&lt;br /&gt;
=== Der Addierer (Summierverstärker) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-addierer.png]]&lt;br /&gt;
&lt;br /&gt;
Ein als invertierender Verstärker beschalteter OP lässt sich so beschalten, dass ein Summensignal aus den Eingangsspannungen gebildet wird. Um die Funktion deutlich zu machen, ist eine Betrachtung der einzelnen Ströme nötig.&lt;br /&gt;
&lt;br /&gt;
In einem invertierenden Verstärker wird sich die Ausgangsspannung immer so einstellen, dass der invertierende Eingang Massepotential hat. Die virtuelle Masse (VM) unterscheidet sich von einer &amp;quot;normalen&amp;quot; Masse dadurch, dass das Potential durch einen Regelungsvorgang zustande kommt. &lt;br /&gt;
An der virtuellen Masse (VM) gilt die Knotenpunktregel, wonach die Summe der zufließenden Ströme gleich der Summe der abfließenden Ströme ist.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;I_1 + I_2 = -I_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sofern &amp;lt;math&amp;gt;U_{e1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;U_{e2}&amp;lt;/math&amp;gt; bekannt sind, lässt sich die Gleichung umformen in:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{e1}}{R_1} + \frac{U_{e2}}{R_2} = -\frac{U_a}{R_3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Ua aufgelöst ergibt sich:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = \left (U_{e1} \cdot \frac{R_3}{R_1}\right ) + \left (U_{e2} \cdot \frac{R_3}{R_2}\right ) + ... + \left (U_{en} \cdot \frac{R_3}{R_n}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen Sonderfall gibt es, wenn die Widerstände R1 und R2 gleich sind. Dann gilt&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;R_1 = R_2 = R_x&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
und damit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = \frac{R_3}{R_x} \cdot (U_{e1} + U_{e2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Der Subtrahierer (Differenzverstärker) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-subtrahierer.png]]&lt;br /&gt;
&lt;br /&gt;
Ein Subtrahierer ist die Zusammenschaltung eines invertierenden und eines nichtinvertierenden Verstärkers. Schliessen wir Punkt Ue1 nach Masse kurz und steuern Ue2 an, arbeitet die Schaltung als nichtinvertierender Verstärker. Wird Ue2 nach Masse verbunden und Ue1 angesteuert, verhält sich die Schaltung als invertierender Verstärker (R7 vorerst nicht beachten).&lt;br /&gt;
&lt;br /&gt;
Für den 1. Fall (nichtinvertierender Verstärker) gilt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt; (1 + R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; )&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für den 2. Fall (invertierender Verstärker) gilt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = -U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der dritte Fall ist die Ansteuerung beider Eingänge:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = -U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt;  R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; + U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt;  (1 + R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; )&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung ist gut für eine Erklärung, praktisch aber taugt sie nichts. Denn liegen an den Eingängen gleiche Spannungen an, ist die Ausgangsspannung nicht 0, wie eigentlich zu vermuten wäre. Deshalb ändern wir die Schaltung und fügen R7 ein. Jetzt stellt sich am Punkt + des OPs die Spannung&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;e2+&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;\(R&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt; + R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ein. Wenn wir das berücksichtigen, erhalten wir endlich einen richtigen Subtrahierer:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt;  (1 + R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; ) R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;\(R&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt; + R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;) - R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;  U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies gilt für alle Subtrahierer, obwohl es natürlich auch hier wieder zwei Sonderfälle gibt; nämlich a) wenn alle Gegenkopplungswiderstände gleich sind:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann ist &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt; - U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder b) wenn die Widerstandsverhältnisse gleich sind  :&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann ergibt sich für Ua:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; =  (U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt; ) -  (U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; )&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder noch einfacher:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;U&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; = (U&amp;lt;sub&amp;gt;e2&amp;lt;/sub&amp;gt; -U&amp;lt;sub&amp;gt;e1&amp;lt;/sub&amp;gt;)  R&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;\R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Addierer/Subtrahierer mit unterschiedlichen Faktoren ===&lt;br /&gt;
Legt man nicht den + sondern den - Eingang des Operationsverstärkers als Bezugspunkt zur Masse mit einem Widerstand fest, übernimmt der Vorwiderstand vom - Eingang, R4 die Aufgabe von R5.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-addsub.png]]&lt;br /&gt;
&lt;br /&gt;
Hier die Schaltung die addieren und subtrahieren kann, mit unterschiedlichen Faktoren.&lt;br /&gt;
Sie kann verwendet werden für Aufgaben wie: Gesucht ist eine Schaltung, die aus 0...2.56 V eine Spannung von -10V...10V macht. Für dieses Beispiel wird hier die Dimensionierung durchgeführt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left&amp;quot; &lt;br /&gt;
|&amp;lt;math&amp;gt;U_{e1} = 5\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Einfach festgelegt, muss nur ein positiver Wert sein&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R_6 = 200\,\mathrm{k\Omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Einfach festgelegt, könnte auch 100k oder 500k sein&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;U_{e2i} = 0\,\mathrm{V},\, U_{ai} = -10\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
|gewählter momentaner &#039;&#039;Zustand 1&#039;&#039;, Ue2 = 0V ist günstig für Berechnung, Ua ist die dazupassende Ausgangsspannung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;U_{e2ii} = 2{,}56\,\mathrm{V},\, U_{aii} = 10\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
|gewählter beliebiger &#039;&#039;Zustand 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;U_m = U_{e2}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Gleichgewicht am Eingang&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;I_a + I_b = I_c&amp;lt;/math&amp;gt;&lt;br /&gt;
|In den Eingang fließt &amp;quot;kein&amp;quot; Strom&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{U_a-U_{e2}}{R_6} + \frac{U_{e1}-U_{e2}}{R_4} = \frac{U_{e2}}{R_c}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Gleichung mit den Unbekannten R4 und Rc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{U_{ai}-U_{e2i}}{R_6} + \frac{U_{e1}-U_{e2i}}{R_4} = \frac{U_{e2i}}{R_c}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Variablen für &#039;&#039;Zustand 1&#039;&#039; eingesetzt, bildet 1. Gleichung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{U_{aii}-U_{e2ii}}{R_6} + \frac{U_{e1}-U_{e2ii}}{R_4} = \frac{U_{e2ii}}{R_c}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Variablen für &#039;&#039;Zustand 2&#039;&#039; eingesetzt, bildet 2. Gleichung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R_4=-\frac{R_6\cdot U_{e1}}{U_{ai}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|2 Gleichungen mit 2 Unbekannten, Lösung durch Umformen der 1. Gleichung nach R4 und einsetzen von Ue2i=0 (freundlicherweise fällt die 2. Unbekannte dabei raus)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R_4 = 100\,\mathrm{k\Omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|restliche Werte eingesetzt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R_c=\frac{R_6\cdot U_{e1}\cdot U_{e2ii}}{U_{aii}\cdot U_{e1}-U_{ai}\cdot (U_{e1}-U_{e2ii})-U_{e1}\cdot U_{e2ii}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Ergebnis für R4 in die 2. Gleichung einsetzen und Umformen nach Rc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R_c = 41{,}6\,\mathrm{k\Omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Werte eingesetzt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Instrumenten-Verstärker ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Instrument.png]]&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil des Subtrahierers ist sein geringer Eingangswiderstand. Um den nahezu unendlichen Eingangswiderstand des verwendeten Operationsverstärkers zu erreichen, kann man einfach vor beide Eingänge je einen Impedanzwandler vorschalten.&lt;br /&gt;
Die hier beschriebene Schaltung ist um drei Widerstände erweitert und ermöglicht die Einstellung der Differenz-Verstärkung über nur einen Widerstand, nämlich R2.&lt;br /&gt;
&lt;br /&gt;
Am invertierenden Eingang von IC1A gilt (Knotenregel):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{a1}-U_{e1}}{R_1}-\frac{U_{e1}-U_{e2}}{R_2}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am invertierenden Eingang von IC1C gilt (Knotenregel):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{a2}-U_{e2}}{R_1}+\frac{U_{e1}-U_{e2}}{R_2}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subtrahiert man die beiden Gleichungen voneinander, erhält man:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_{a2}-U_{a1}=(U_{e2}-U_{e1})\cdot\left (1+\frac{2\cdot R_1}{R_2}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Letztere Differenz ist die Eingangsspannung eines normalen Subtrahierers mit der Verstärkung 1.&lt;br /&gt;
&lt;br /&gt;
Also ergibt sich als Ausgangsspannung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a=(U_{e2}-U_{e1}) \cdot \left (1+\frac{2\cdot R_1}{R_2}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Differenzverstärkung beträgt demnach:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V=\left (1+\frac{2\cdot R_1}{R_2} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung: Auswertung von Brückenschaltungen, wie Drucksensoren oder Dehnungsmessstreifen, die durch den Eingangswiderstand der Messschaltung nicht belastet werden dürfen.&amp;lt;br&amp;gt;&lt;br /&gt;
Instrumenten-Verstärker kann man auch fertig kaufen. Im INA102 ist die komplette Schaltung integriert. Für R2 sind 3 verschiedene Werte eingebaut, die bei passender Verschaltung eine Verstärkung von 1, 10, 100 oder 1000 ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Da die Gleichtaktunterdrückung hauptsächlich von der Übereinstimmung der Widerstände abhängt, sind für viele Standardanwendungen, insbesondere solche mit niedriger erforderlicher Bandbreite, integrierte Instrumentenverstärker zu bevorzugen.&lt;br /&gt;
&lt;br /&gt;
=== Der Multiplizierer (Mischer) ===&lt;br /&gt;
&lt;br /&gt;
=== Der Potentialdifferenzverstärker ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Potentialdifferenzverstärker.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Der Potentialdifferenzverstärker ist eine OPV-Schaltung zum gewichteten Addieren und Subtrahieren beliebiger Spannungen.&lt;br /&gt;
&lt;br /&gt;
Falls die Bedingung &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum\frac{R_{0}}{R_{i}}=\sum\frac{R_{0}^{&#039;}}{R_{i}^{&#039;}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
erfüllt ist, vereinfacht sich der Term für die Ausgangsspannung zu folgendem Term:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
U_{a}=\sum\frac{R_{0}^{&#039;}}{R_{i}^{&#039;}}U_{i}^{&#039;}-\sum\frac{R_{0}}{R_{i}}U_{i}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Der Logarithmierer ===&lt;br /&gt;
Logarithmierer werden mit der Kennlinie einer Diode konstruiert, die einen eingeprägten Strom in eine Spannung übersetzt.&lt;br /&gt;
&lt;br /&gt;
= Spannungsversorgung und Beschaltung =&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit einfacher Versorgungsspannung ==&lt;br /&gt;
&lt;br /&gt;
Häufig möchte man eine Wechselspannung wie z.B. ein Audiosignal, das auch negative Spannungen enthält, mit einem Opamp verstärken, hat aber nur eine einfache, in Bezug zu Masse positive Versorgungsspannung zur Verfügung. Dafür bieten sich folgende Schaltungen an, die in der Literatur leider häufig vernachlässigt werden.&lt;br /&gt;
&lt;br /&gt;
Durch die Kondensatoren können die Operationsverstärker in geeigneten Arbeitspunkten betrieben werden, obwohl die Eingangs- und Ausgangsspannungen echte Wechselspannungen sind. Nachteil ist die Hochpasswirkung der Kondensatoren in Verbindung mit den verwendeten Widerständen. Die Grenzfrequenz der Hochpässe muss tief genung gewählt werden, um den gewünschten Frequenzbereich verstärken zu können. Zur Verstärkung von Gleichspannungen (z.B. aus Temperatursensoren) sind diese Schaltungen nicht geeignet. &lt;br /&gt;
&lt;br /&gt;
=== Nichtinvertierender Verstärker ===&lt;br /&gt;
&lt;br /&gt;
[[Bild: Ss_opamp1.png]]&lt;br /&gt;
&lt;br /&gt;
Der positive Eingang wird mit einem Spannungsteiler (R3 und R5) auf die halbe Betriebsspannung gelegt. Dieser Spannung wird dann die zu verstärkende Eingangswechselspannung überlagert. Mit den Kondensatoren am Eingang (C1) und Ausgang (C2) wird der Gleichspannungsanteil abgekoppelt.&lt;br /&gt;
&lt;br /&gt;
Die Verstärkung hat in diesem Beispiel für Wechselspannung den Wert 11 (Formel wie oben), für Gleichspannung aber den Wert 1, da C4 für Gleichspannung einen unendlichen Widerstand darstellt. C3 sollte dorthin führen, wo das Eingangssignal seinen Bezugspunkt hat, also die Abschirmung der Cinch-Buchse, während R5 dorthin führt, von wo der Operationsverstärker seine negative Versorgungsspannung bekommt, falls das nicht die gleichen Potentiale, hier GND, sein sollten.&lt;br /&gt;
&lt;br /&gt;
=== Invertierender Verstärker ===&lt;br /&gt;
&lt;br /&gt;
Das Prinzip funktioniert analog auch für die invertierende Beschaltung:&lt;br /&gt;
&lt;br /&gt;
[[Bild: Ss_opamp2.png]]&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit negativer Hilfsspannung ==&lt;br /&gt;
&lt;br /&gt;
Alternativ lässt sich auch eine negative Hilfsspannung erzeugen. Damit bekommt der Operationsverstärker seine &amp;quot;Plus-Minus&amp;quot;-Versorgung, und er kann Wechselspannungen um das Ground-Potential herum problemlos verstärken.&lt;br /&gt;
&lt;br /&gt;
Die negative Hilfsspannung erzeugt man zweckmässigerweise mit einer Ladungspumpe. Dazu bieten sich zwei Möglichkeiten an:&lt;br /&gt;
&lt;br /&gt;
* einen speziellen IC nach der Art eines ICL 7660&lt;br /&gt;
* eine Rechteckspannung auf einen Spannungsverdoppler geben. Dieser besteht aus 2 Dioden und 2 Kondensatoren. Die Konfiguration sollte natürlich so sein, dass eine negative Hilfsspannung erzeugt wird. Schaltbeispiele gibt&#039;s im Netz. Als Rechteckspannung kann ein unbenutzter PWM-Ausgang dienen, der mit 50% Tastverhältnis läuft.&lt;br /&gt;
&lt;br /&gt;
Ein Ripple auf der negativen Hilfsspannung wird von modernen Operationsverstärkern wirkungsvoll unterdrückt. Die PSRR (power supply rejection ratio) weist oft Werte um 120 dB auf (bei 120 Hz, darüber fällt sie meist mit 20 dB/Dekade).&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://de.wikipedia.org/wiki/Ladungspumpe#Negative_Ausgangsspannungen&lt;br /&gt;
&lt;br /&gt;
= Kaufempfehlung =&lt;br /&gt;
LM358 2 OPs in einem Gehäuse oder &lt;br /&gt;
LM324 4 OPs in einem Gehäuse&lt;br /&gt;
&lt;br /&gt;
MCP6001/6004 CMOS OPs mit Rail to Rail Input und Output, tiefem Stromverbrauch, und geringer Versorgungsspannung&lt;br /&gt;
&lt;br /&gt;
Preis jeweils ca. 0,30€ aus Deutschland oder ca. 2 bis 4 cent aus China (AliExpress, ebay, …).&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Standardbauelemente#Operationsverst.C3.A4rker|Standardbauelemente - Operationsverstärker]].&lt;br /&gt;
&lt;br /&gt;
Wer Audio OpAmps sucht - tangentsoft.net hat mal welche unter die Lupe genommen: [http://www.tangentsoft.net/audio/opamps.html Notes on Audio OpAmps]&lt;br /&gt;
&lt;br /&gt;
= Siehe auch =&lt;br /&gt;
* [[Schmitt-Trigger]]&lt;br /&gt;
* [[Aktiver RC-Bandpass]]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/396747#4567112 Forumsbeitrag]: Pegelanpassung 0 bis 3V auf -15 bis +20V&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/466046?goto=5686087#5686087 Forumsbeitrag]: Strommessung an der Versorgungsspannung, Fehlerbetrachtung und verbesserte Schaltung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/510652?goto=6542833#6542656 Forumsbeitrag]: &amp;quot;bouncing ball&amp;quot; Schaltung gesucht&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/512469#6575560 Forumsbeitrag]: Maximum von zwei 4-20mA Eingängen auf einen 4-20mA Ausgang bilden&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/514936#new Forumsbeitrag]: 1500V Linearverstärker&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/519089#6704061 Forumsbeitrag]: Suche OpAmp RRIO bis 36V out&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/524737?goto=6822386#6820279 Forumsbeitrag]: Sinusgenerator mit HV-Endstufe gesucht&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/532820?goto=6981066#6980991 Forumsbeitrag]: Differenzverstärker für hohe Eingangsspannungen&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
*[http://www.ti.com/ww/en/bobpease/assets/AN-31.pdf AN-31] - National Semiconductor Application Note 31 mit vielen weiteren OP-Schaltungen&lt;br /&gt;
*[https://e2echina.ti.com/cfs-file/__key/telligent-evolution-components-attachments/00-52-01-00-00-04-59-46/OP-amp-for-everyone.pdf Op Amps for Everyone], sehr umfangreiches Dokument zu OPV und deren Anwendung, englisch &amp;lt;!-- ursprünglicher Link ist tot: http://www-s.ti.com/sc/psheets/slod006b/slod006b.pdf, ebenso http://www.foxcomputer.se/Op%20Amps%20For%20Everyone%20SLOD006B.pdf --&amp;gt;&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0209092.htm Operationsverstärker im ElKo]&lt;br /&gt;
*[http://www.inf.fu-berlin.de/lehre/WS00/peg/folien/Peg_v7a.pdf OP Teil 1], [http://www.inf.fu-berlin.de/lehre/WS00/peg/folien/Peg_v7b.pdf OP Teil 2] - OP-Schaltungen (deutsch)&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Operationsverst%C3%A4rker RN-Wissen Operationsverstärker]&lt;br /&gt;
* [http://www.national.com/AU/design/0,4706,268_0_,00.html Online Seminar] von National Semiconductor&lt;br /&gt;
* [http://www.franzis.de/elo-das-magazin/grundlagen-und-ausbildung/operationsverstaerker/der-operationsverstaerker ELO-Online-Magazin, Franzis-Verlag], [http://www.franzis.de/online-shop/elektronik/lernpakete-elektronik/lernpaket-elektronik-mit-ics Lernpaket Elektronik mit ICs] &amp;quot;Elektronische Experimente mit integriertem Schaltkreis&amp;quot;, Kasten mit Steckbrett/Bauelementen (ca. 40EUR), &lt;br /&gt;
* [https://web.archive.org/web/20130828131053/http://elektronikwissen.net/opamp/9-opamp-wissen.html OpAmp Praxis], Praktikertipps + schwingende Operationsverstärker in den Griff bekommen &amp;lt;!-- ursprünglicher Link ist tot --&amp;gt;&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Frequency_multiplier Frequenzvervielfacher]&lt;br /&gt;
* [https://sound-au.com/appnotes/an001.htm Präzisionsgleichrichter], engl.&lt;br /&gt;
* [https://play.google.com/store/apps/details?id=com.wdcreative.elektropro ElektroEasy-App], Berechnung von OPVs&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/operationsverstaerker.htm Grundlagen Operationsverstärker]&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/op_rauschen.htm Rauschverhalten von OpAmps]&lt;br /&gt;
* [https://www.edn.com/class-ab-inverting-amp-uses-two-floating-amplifier-cells/ Class AB inverting amp uses two floating-amplifier cells], HV-Verstärker mit +/-500V Ausgangsspannung&lt;br /&gt;
* [https://www.youtube.com/watch?v=qNeOWJz2oUw#t=21m11s A deeper insight into Differential Amplifiers with high common mode voltage], Youtube-Video&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Aufl%C3%B6sung_und_Genauigkeit&amp;diff=105005</id>
		<title>Auflösung und Genauigkeit</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Aufl%C3%B6sung_und_Genauigkeit&amp;diff=105005"/>
		<updated>2022-02-17T10:45:28Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Eichen, Kalibrieren, Justieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Immer wieder werden die beiden Parameter &#039;&#039;Auflösung&#039;&#039; und &#039;&#039;Genauigkeit&#039;&#039; verwechselt. Oft  werden Meßgeräte oder Sensoren mit einer hohen Auflösung beworben. Wenn man jedoch genauer nachliest, oder manchmal auch genauer nachmißt, stellt man fest, daß zwar viel Auflösung vorhanden ist, aber die Genauigkeit doch eher zu wünschen übrig läßt. Dieser Artikel soll Klarheit schaffen.&lt;br /&gt;
&lt;br /&gt;
== Auflösung ==&lt;br /&gt;
&lt;br /&gt;
Auflösung ist das Vermögen eines Messgerätes (z.&amp;amp;nbsp;B. [[AD-Wandler]]), zwischen zwei geringfügig verschiedenen Messwerten reproduzierbar einen Unterschied zu erkennen. Dabei spielt der absolute Betrag keine Rolle. Es werden nur relative Unterschiede betrachtet. Ein 8 Bit Wandler mit 5V Referenzspannung kann beispielsweise die Eingangsspannung in 20mV Schritten auflösen. Wenn die Eingangsspannungen zwischen zwei Messungen näher als 20 mV zusammen liegen kann der AD-Wandler keinen Unterschied messen (Es sei denn, es liegt zufällig eine Grenze zwischen zwei [[Quantisierung | Quantisierungsstufen]] dazwischen). Mit einem 16 Bit AD-Wandler und 5V Referenzspannung kann man die Eingangsspannung bereits auf 76 &amp;amp;mu;V auflösen, 256 mal besser als mit dem 8-Bit Wandler.&lt;br /&gt;
&lt;br /&gt;
== Genauigkeit ==&lt;br /&gt;
&lt;br /&gt;
Genauigkeit gibt an, wie weit das Messergebnis vom physikalisch absolut wahren Ergebnis abweicht (egal ob digital oder analog). Es werden dabei absolute Meßwerte betrachtet und mit einem genaueren Meßgerät verglichen. Z.B. zeigen zwei Armbanduhren die Zeit mit einer 1 Sekunde Auflösung an (hier wird bewußt die umgangssprachliche Formulierung „auf eine Sekunde genau“ vermieden). Wenn eine davon eine [[Funkuhr]] ist , wird diese immer die absolut richtige Zeit anzeigen, wie sie im Moment physikalisch exakt generiert werden kann. Die Zweite ist eine normale Quarzuhr und wird nach einem Monat vielleicht 10 Sekunden Abweichung anzeigen. Sie ist dann ungenau.&lt;br /&gt;
&lt;br /&gt;
== Eichen, Kalibrieren, Justieren ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Meßgeräte müssen nach der Herstellung vor der Verwendung noch eingestellt werden, um das Maximum an Genauigkeit zu erreichen, welches durch die Schaltung möglich ist. Hierbei spricht man von justieren.&lt;br /&gt;
&lt;br /&gt;
Um jedoch ein Meßgerät justieren zu können, muß der Fehler, die sog. Meßungenauigkeit bekannt sein. Diese kann durch &#039;&#039;Kalibrieren&#039;&#039; oder &#039;&#039;Eichen&#039;&#039; ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Von &#039;&#039;Eichen&#039;&#039; spricht man, wenn die sog. &#039;&#039;Kalibrierung&#039;&#039; durch das Eichamt durchgeführt wird.&lt;br /&gt;
jaman bruder&lt;br /&gt;
&lt;br /&gt;
Zum Eichen oder Kalibrieren benötigt man ein Referenzmaß (bei Waagen z. B. ein &amp;quot;Gewicht&amp;quot; mit genau bekannter Masse). Diese nennt man Eichmaß oder Referenz oder auch nationale Normale. Mit solchen Normalen wird auch im Eichamt ein Meßgerät kalibriert. Das ist sowohl ein technisch sehr aufwendiger als auch amtlich beglaubigter Vorgang und dementsprechend teuer. Das zu eichende Meßgerät wird während einer Messung über den gesamten Meßbereich mit dem Eichmaß verglichen und die Meßunsicherheit des Prüflings ermittelt. Das Eichen ist normalerweise nur für Meßgeräte vorgeschrieben, die für den Handel o.ä. verwendet werden, wie z.&amp;amp;nbsp;B. Waagen, Zapfsäulen, Portowaagen etc.&lt;br /&gt;
&lt;br /&gt;
Normalerweise spricht man aber von &#039;&#039;Kalibrieren&#039;&#039;. Der Vorgang ist physikalisch der gleiche. Dabei gibt es in Deutschland eine sog. Kalibrierpyramide. Dessen oberste Stelle ist die PTB, also die Physikalisch-Technische Bundesanstalt in Braunschweig. Die PTB kalibriert die &amp;quot;Normale&amp;quot; oder Referenzen der einzelnen Kalibrierlaboratorien. Darunter ist der DKD angesiedelt, dieser wiederum kalibriert Meßgeräte und Normale, die für Werkskalibrierungen verwendet werden. Mit den vom DKD kalibrierten Meßgeräten und Normalen werden dann Werkskalibrierungen durchgeführt, wie z.&amp;amp;nbsp;B. die Kalibrierung von Multimetern, Waagen, Messuhren ect. Kalibrieren kann man auch selber, indem man ein genaues Meßgerät mit seiner selbstgebauten Schaltung vergleicht und diese dementsprechend den Fehler bzw. die Abweichung seiner Schaltung ermittelt.&lt;br /&gt;
&lt;br /&gt;
Ist der Fehler zu groß, so muss bzw. kann die Schaltung oder das Meßgerät neu justiert werden, um den Fehler zu minimieren.&lt;br /&gt;
&lt;br /&gt;
== Veranschaulichung ==&lt;br /&gt;
&lt;br /&gt;
[[bild:kennlinien.png|thumb|right|300px|Messkurven]]&lt;br /&gt;
Wenn einem der Unterschied zwischen Genauigkeit und Auflösung langsam klar wird, dann versteht man auch, wie z.&amp;amp;nbsp;B. Multimeter Spannungen mit 40000 Schritten anzeigen (0,0025% = 25ppm Auflösung) aber „nur“ auf 0,1 bis 0,3% Genauigkeit kalibriert sind.&lt;br /&gt;
 &lt;br /&gt;
Nachfolgend sind die prinzipiellen Kennlinien einiger Meßgeräte dargestellt, um den Unterschied zwischen Auflösung und Genauigkeit bildlich darzustellen.  Auf der X-Achse ist dabei der wahre Meßwert dargestellt, die Y-Achse zeigt das Meßergebnis. Die Kennlinien sind bewußt extrem dargestellt um das Prinzip zu veranschaulichen.&lt;br /&gt;
&lt;br /&gt;
* K1 ist die Kennlinie eines idealen Meßgerätes. Es verfügt über eine unendlich hohe Auflösung, hat keinerlei Meßfehler (Genauigkeit) und ist vollkommen linear.&lt;br /&gt;
* K2 ist die Kennlinie eines AD-Wandlers mit hoher Genauigkeit. Die Auflösung ist zwar relativ niedrig (große Treppenstufen der Kennlinie), dafür liegen die Meßergebnisse nah an der idealen Kennlinie (hohe Genauigkeit).&lt;br /&gt;
* K3 ist die Kennlinie eines AD-Wandlers mit geringer Genauigkeit. Die Meßwerte weichen stark von der idealen Kennlinie ab, die hohe Auflösung nützt hier eher wenig.&lt;br /&gt;
* K4 ist ein weiterer Fall einer realen Kennlinie mit nichtlinearem Verlauf, resultierend in geringer Genauigkeit.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Auflösung und Genauigkeit sind zwei verschiedene Parameter. Eine hohe Auflösung bedeutet nicht automatisch eine hohe Genauigkeit und umgekehrt. Bei manchen Messungen braucht man nur eine hohe Auflösung mit geringer Genauigkeit, wenn beispielsweise vergleichende Messungen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/179966#1734002 Was bedeutet Grundgenauigkeit?]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/466046#5686087 zwei Spannungen bei etwa 50 Volt vergleichen ], Fehlerbetrachtung bei Strommessung auf der Versorgungsspannung&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.ptb.de www.ptb.de]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Include-Files_(C)&amp;diff=105001</id>
		<title>Include-Files (C)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Include-Files_(C)&amp;diff=105001"/>
		<updated>2022-02-15T10:54:46Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Verwendung von Include-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Include-Files in C/C++ enthalten typischerweise Informationen, die im Rahmen der Kompilierung verschiedener anderer Quelltexte (mehrfach) benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wer bisher hauptsächlich kleinere (Assembler-) Programme für Mikrocontroller realisiert hat und sich nun langsam an größere Projekte heranwagt und deshalb auf C umsteigt, ist gut beraten, die Möglichkeiten sinnvoll einzusetzen, die Include-Files in C bieten. Dabei gilt es allerdings auch, einige Fallgruben zu vermeiden - mehr dazu in diesem Artikel.&lt;br /&gt;
&lt;br /&gt;
== Verwendung von Include-Files ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der übliche Suffix für Include-Files ist &amp;quot;&amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt;&amp;quot;, manchmal auch &amp;quot;&amp;lt;tt&amp;gt;.hpp&amp;lt;/tt&amp;gt;&amp;quot; (für C++), und die &#039;&#039;Verwendung&#039;&#039; eines Include-Files ist sehr einfach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;quot;xyz.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird der Dateiname in spitze Klammern gesetzt, dann sucht der Präprozessor die Datei nicht im aktuellen Verzeichnis, sondern im Standard-Include-Pfad des Compilers:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;io.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei sind auch relative Verzeichnisangaben erlaubt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/timer.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Welches Problem lösen Include-Files? ==&lt;br /&gt;
&lt;br /&gt;
[[C]] und [[C-Plusplus|C++]] sind insofern sehr einfache Sprachen, als der Compiler sich den Quelltext nur ein einziges mal von oben nach unten durchliest. Insbesondere sieht der Compiler auch nicht nach links oder rechts in andere Dateien und er benutzt auch keine Informationen, die er durch die Compililierung anderer Quellcode Dateien gewonnen hat. All diese Einschränkungen haben nur den einen Zweck, dafür zu sorgen, dass jede Quellcode-Datei immer unabhängig von allen anderen Code-Dateien, die zum selben Projekt gehören, compilierbar ist. So eine Datei nennt man auch eine Übersetzungseinheit, weil sie für sich übersetzbar, also compilierbar, ist.&lt;br /&gt;
&lt;br /&gt;
Allerdings folgen daraus auch ein paar Einschränkungen. Die wichtigste davon ist: &#039;&#039;Man kann nur verwenden, was in dieser Übersetzungseinheit an vorhergehender Stelle deklariert wurde&#039;&#039;&lt;br /&gt;
Die zweit wichtigste davon ist: &#039;&#039;Jede Übersetzungseinheit muss in sich geschlossen sein, also alle benötigten Informationen beinhalten&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Insbesonders letzteres kann in der Praxis zu Problemen führen.&lt;br /&gt;
&lt;br /&gt;
Angenommen ein komplettes Projekt besteht aus 2 Übersetzungseinheiten, &#039;&#039;&#039;a.c&#039;&#039;&#039; und &#039;&#039;&#039;b.c&#039;&#039;&#039;. In &#039;&#039;&#039;b.c&#039;&#039;&#039; sind dabei Funktionen enthalten, die auf einer speziellen Datenstruktur operieren.&lt;br /&gt;
&lt;br /&gt;
b.c&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date,&lt;br /&gt;
               unsigned char Day, unsigned char Month, unsigned int Year )&lt;br /&gt;
{&lt;br /&gt;
  Date-&amp;gt;Year  = Year;&lt;br /&gt;
  Date-&amp;gt;Month = Month;&lt;br /&gt;
  Date-&amp;gt;Day   = Day;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und diese Funktionalität soll in &#039;&#039;&#039;a.c&#039;&#039;&#039; benutzt werden&lt;br /&gt;
&lt;br /&gt;
a.c&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date, unsigned char Day, unsigned char Month, unsigned int Year );&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  struct DateTime myDate;&lt;br /&gt;
&lt;br /&gt;
  InitDate( &amp;amp;myDate, 22, 3, 63 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann fällt sofort auf, dass die Deklaration der Struktur DateTime sowohl in &#039;&#039;&#039;b.c&#039;&#039;&#039; als auch in &#039;&#039;&#039;a.c&#039;&#039;&#039; enthalten ist. Das muss auch so sein! Denn damit der Compiler in &#039;&#039;&#039;a.c&#039;&#039;&#039; die Variable &#039;&#039;myDate&#039;&#039; erzeugen kann, muss er wissen, wieviel Speicherplatz dafür benötigt wird. Und um dies herauszufinden muss er wiederum den Aufbau der Struktur kennen. Auch wenn diese Informationen in &#039;&#039;&#039;b.c&#039;&#039;&#039; enthalten sind, so reicht dies nicht, dann wenn &#039;&#039;&#039;a.c&#039;&#039;&#039; compiliert wird, steht die Information aus &#039;&#039;&#039;b.c&#039;&#039;&#039; nicht zur Verfügung (&#039;&#039;Der Compiler sieht nicht nach links oder rechts&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite muss die Strukturdeklaration aber auch in &#039;&#039;&#039;b.c&#039;&#039;&#039; enthalten sein. Denn wenn in der Funktion &#039;&#039;InitDate&#039;&#039; an die Elemente der Struktur zugewiesen wird, muss der Compiler ebenfalls den Aufbau der Struktur kennen.&lt;br /&gt;
&lt;br /&gt;
Nun ist es aber unschön, unpraktisch und letzten Endes auch fehleranfällig, in zwei Übersetzungseinheiten dieselbe Information zu duplizieren. Es besteht immer die Gefahr, dass bei einer Änderung an der Struktur dieselbe innerhalb eine Übersetzungseinheit vergessen wird, und dann haben verschiedene Programmteile unterschiedliche Vorstellungen davon, wie die Datenstruktur aufgebaut ist. Redundanz ist hier unerwünscht.&lt;br /&gt;
&lt;br /&gt;
Die Lösung aus diesem Dilemma besteht darin, dass dieser gemeinsame Code-Anteil in eine sog. Header-Datei ausgelagert wird und danach in beide Übersetzungseinheiten in Form eines #include wieder hereingezogen wird.&lt;br /&gt;
&lt;br /&gt;
DateTime.h:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date, unsigned char Day, unsigned char Month, unsigned int Year );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b.c:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;DateTime.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date,&lt;br /&gt;
               unsigned char Day, unsigned char Month, unsigned int Year )&lt;br /&gt;
{&lt;br /&gt;
  Date-&amp;gt;Year  = Year;&lt;br /&gt;
  Date-&amp;gt;Month = Month;&lt;br /&gt;
  Date-&amp;gt;Day   = Day;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a.c:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;DateTime.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  struct DateTime myDate;&lt;br /&gt;
&lt;br /&gt;
  InitDate( &amp;amp;myDate, 22, 3, 63 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt gibt es nur noch eine Datei, nämlich &#039;&#039;&#039;DateTime.h&#039;&#039;&#039;, in der die Strukturdeklaration aufgeführt ist. Bei einer Änderung wird auch nur diese eine Datei geändert. Durch die Verwendung dieser Datei in &#039;&#039;&#039;a.c&#039;&#039;&#039; und &#039;&#039;&#039;b.c&#039;&#039;&#039; ist damit sichergestellt, dass die Deklaration immer in beiden Übersetzungseinheiten übereinstimmt. Es muss lediglich dafür gesorgt werden, dass bei einer Änderung in &#039;&#039;&#039;DateTime.h&#039;&#039;&#039; sowohl &#039;&#039;&#039;a.c&#039;&#039;&#039; als auch &#039;&#039;&#039;b.c&#039;&#039;&#039; neu compiliert werden.&lt;br /&gt;
&lt;br /&gt;
== Probleme bei Include-Files ==&lt;br /&gt;
In Include-Files werden mitunter Informationen aus anderen Include-Files benötigt und es ist an der Verwendungsstelle eines Include-Files oft nicht das Wissen über die möglicherweise sehr komplexen Abhängigkeiten vorhanden. Nachfolgend wird ausgehend von einer typischen Problemstellung eine Standardtechnik erläutert, die hilft, das Wissen um Abhängigkeiten an der Verwendungsstelle überflüssig zu machen:&lt;br /&gt;
&lt;br /&gt;
Angenommen, es existieren zwei Datenstrukturen für die es die Typdefinitionen &amp;lt;tt&amp;gt;s1_t&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; gibt, die jeweils in entsprechenden Include-Files hinterlegt sind, also&lt;br /&gt;
&amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition der Datenstruktur s1 */&lt;br /&gt;
struct s1 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s1_t);&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Datei &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt; sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition der Datenstruktur s2 */&lt;br /&gt;
struct s2 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
s2_t *bar();&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine bestimmte Applikation benötigt nun beide Struktur- und Funktions-Definitionen und inkludiert entsprechend beide Dateien, es gibt also eine kompilierbare Datei (z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt;) die wie folgt aussieht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;s1.h&amp;quot;&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
int main(void) {&lt;br /&gt;
    s1_t a;&lt;br /&gt;
    s2_t *b;&lt;br /&gt;
    ...&lt;br /&gt;
    foo(a);&lt;br /&gt;
    b = bar();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So weit, so gut.&lt;br /&gt;
&lt;br /&gt;
Nun kommt es eines Tages zu einer Änderung, die darauf hinausläuft, dass die erste Struktur die zweite als Element enthält. Das heißt die Datei &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; sieht nun wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraufhin wird sich &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt;(!) nicht mehr kompilieren lassen, da bei der Verarbeitung von &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; (noch) nicht bekannt ist, worum es sich um bei &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; handelt. (Es könnte ja auch einfach nur ein Tippfehler sein!). Erinnern sie sich: Der Compiler liest den Quelltext von oben nach unten durch und durch die Reihenfolge der #include sieht er die Strukturdeklaration von s1_t noch bevor s2_t deklaraiert wurde.&lt;br /&gt;
&lt;br /&gt;
Da es in der Praxis einen immensen Pflegeaufwand auslösen kann, wenn Änderungen in Include-Files Änderungen in vielen weiteren Dateien erfordern (dem Wesen nach soll ja eine Include-Dateien eine Information zentral für viele andere Dateien bereitstellen), muss nach einem Ausweg gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Dieser könnte so aussehen, dass man &amp;quot;vorsorglich&amp;quot; die Beschreibung der verwendeten Datenstruktur in &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; inkludiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inkludiert das Hauptprogramm lediglich &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;, wäre nun alles in Ordnung, wenn aber beide Dateien inkludiert werden, beschwert sich der Compiler über die doppelte Definition der Datentypen. (Die doppelte Deklaration von Funktionen ist kein Fehler, wenn sie übereinstimmend erfolgt.)&lt;br /&gt;
&lt;br /&gt;
== Problemlösung mit Makros ==&lt;br /&gt;
Die übliche und - fast - perfekte Lösung des Problems besteht darin, den eigentlichen Inhalt eines Include-Files vor einer zweiten Verarbeitung durch eine &#039;&#039;bedingte Kompilierung&#039;&#039; zu schützen.&lt;br /&gt;
Bei der bedingten Kompilierung handelt es sich ebenfalls um ein Feature des [[C-Präprozessor]]s und es wird hier wie folgt auf die Datei &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt; angewendet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s2 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
s2_t *bar();&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Da das beschriebene Problem in größeren Programmsystemen auch in Bezug auf die andere Struktur auftreten könnte, sollte man die Datei &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; vorsorglich mit einem ähnlichen Schutz ausstatten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der nette Nebeneffekt ist, dass es damit auch keine Rolle spielt, in welcher Reihenfolge beide Dateien in &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt; inkludiert werden.&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung der Regeln ==&lt;br /&gt;
Kochrezeptartig kann man beim Schreiben und Verwenden von Include-Files auch einfach die folgenden Regeln anwenden:&lt;br /&gt;
* Wird die externe Schnittstelle (Datenstrukturen, Funktions-Deklarationen) eines Moduls &#039;&#039;XYZ&#039;&#039; in einem Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; beschrieben, so sollte ein bestimmter Makroname (z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;XYZ_h&amp;lt;/tt&amp;gt;) für die Steuerung der tatsächlichen Verarbeitung des Include-Files reserviert werden.&amp;lt;ref&amp;gt;Die genaue Beziehung zwischen dem Makro-Namen und dem Modul- (oder Struktur-) Namen ist dabei nicht so bedeutend. Die übliche Konvention, solche &amp;quot;Steuer-Makros&amp;quot; mit &amp;quot;&amp;lt;tt&amp;gt;_h&amp;lt;/tt&amp;gt;&amp;quot; oder &amp;quot;&amp;lt;tt&amp;gt;_H&amp;lt;/tt&amp;gt;&amp;quot; zu beenden, soll nur helfen, &amp;quot;zufällige&amp;quot; Kollissionen mit Makros zu vermeiden, die einen anderen Zweck haben.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Der Include-File selbst testet (und definiert anschließend) diesen Makro, um so eine doppelte Verarbeitung zu vermeiden.&lt;br /&gt;
* Wird in einer Kompilierung das Modul &#039;&#039;XYZ&#039;&#039; verwendet (= eine seiner Datenstrukturen oder Funktionen), wird auch der Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; in diese Kompilierung eingeschlossen.&lt;br /&gt;
* Verwenden die externen Schnittstellen (was im Header steht) von Modul &#039;&#039;XYZ&#039;&#039; ein weiteres Modul &#039;&#039;UVW&#039;&#039;, so wird &#039;&#039;&#039;dessen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;uvw.h&amp;lt;/tt&amp;gt; im Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; eingeschlossen.&lt;br /&gt;
* Verwendet ein Modul &#039;&#039;XYZ&#039;&#039; in der Implementierung (c-File) ein weiteres Modul &#039;&#039;UVW&#039;&#039;, so wird &#039;&#039;&#039;dessen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;uvw.h&amp;lt;/tt&amp;gt; nur im Source-File &amp;lt;tt&amp;gt;xyz.c&amp;lt;/tt&amp;gt; eingeschlossen.&lt;br /&gt;
&lt;br /&gt;
Die beschriebenen Regeln funktionieren zufriedenstellend und entlasten vor allem Programm-Code, welcher Include-Files lediglich einschließt, vom Wissen über komplexe Zusammenhänge zwischen einzelnen Modulen. Ferner spielt die Reihenfolge, in der man Include-Files verwendet, keine Rolle und man kann sie beliebig gruppieren und ordnen, so wie es am übersichtlichsten ist. &amp;lt;ref&amp;gt;Eine alphabetische Sortierung ist z.&amp;amp;nbsp;B. hilfreich, um bei einem Kompilierfehler schnell überprüfen zu können, ob vielleicht nur ein bestimmter Include-File vergessen wurde.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gegenseitige Bezugnahme ==&lt;br /&gt;
Eine Ausnahme von der allgemeinen Regel liegt vor, wenn sich zwei Datenstrukturen gegenseitig verwenden (was nur über Zeiger der Fall sein kann).&lt;br /&gt;
Alle wie auch immer gearteten Versuche, diese beiden Strukturdefinitionen und Funktionsprototypen in zwei verschiedene Include-Files aufzuteilen, also z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
s2_t *bar(s1_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
#include &amp;quot;s1.h&amp;quot;&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *yp;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
werden scheitern - mit und ohne dem beschriebenen Schutz vor doppelter Verarbeitung!&lt;br /&gt;
&lt;br /&gt;
Die pragmatische Lösung ist hier, alles in einem &#039;&#039;&#039;gemeinsamen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;s1_s2.h&amp;lt;/tt&amp;gt; zu hinterlegen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_S2_h&lt;br /&gt;
#define S1_S2_h&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *yp;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
s2_t *bar(s1_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das ist insofern sinnvoll, als ein Programm, welches die eine Struktur kennen muss, stets auch die andere benötigt. Die Aufteilung in zwei Include-Files würde also keinen echten Vorteil bringen.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme kann lediglich gemacht werden, wenn auf die jeweils andere Struktur ausschließlich über Zeiger&amp;lt;ref&amp;gt;Bei der Verwendung von C++ gilt das zusätzlich für die Bezugnahme über Referenzen.&amp;lt;/ref&amp;gt; zugegriffen wird, dann sind auch zwei Include-Files möglich, nämlich &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
struct s2; /* Vorausdeklaration */&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
struct s2 *bar(s1_t);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s1; /* Vorausdeklaration */&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *py;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
void bar(struct s1 *);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Anstatt den jeweils anderen Include-File einzuschließen, sind nun die oben gezeigten Vorausdeklarationen vorzumehmen. (Allerdings sind damit die Typdefinitionen &amp;lt;tt&amp;gt;s1_t&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; nicht verfügbar, die Bezugnahme auf die jeweils andere Struktur kann nur über &amp;lt;tt&amp;gt;struct s1&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;struct s2&amp;lt;/tt&amp;gt; erfolgen.)&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit besteht darin, die Vorausdeklaration in der selben Headerdatei vorzunehmen, aber außerhalb des Include-Guards.&lt;br /&gt;
&lt;br /&gt;
Damit wird &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; zu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// struct s1; obsolet&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
struct s2 *bar(s1_t);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *py;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
void bar(struct s1 *);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/80956#676650 sehr ausführliches Forumsthema zur Thematik]&lt;br /&gt;
     &lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Include-Files_(C)&amp;diff=105000</id>
		<title>Include-Files (C)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Include-Files_(C)&amp;diff=105000"/>
		<updated>2022-02-15T10:54:01Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: /* Verwendung von Include-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Include-Files in C/C++ enthalten typischerweise Informationen, die im Rahmen der Kompilierung verschiedener anderer Quelltexte (mehrfach) benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wer bisher hauptsächlich kleinere (Assembler-) Programme für Mikrocontroller realisiert hat und sich nun langsam an größere Projekte heranwagt und deshalb auf C umsteigt, ist gut beraten, die Möglichkeiten sinnvoll einzusetzen, die Include-Files in C bieten. Dabei gilt es allerdings auch, einige Fallgruben zu vermeiden - mehr dazu in diesem Artikel.&lt;br /&gt;
&lt;br /&gt;
== Verwendung von Include-Files ==&lt;br /&gt;
&lt;br /&gt;
ANANIN AMI GALATASARAY.&lt;br /&gt;
&lt;br /&gt;
Der übliche Suffix für Include-Files ist &amp;quot;&amp;lt;tt&amp;gt;.h&amp;lt;/tt&amp;gt;&amp;quot;, manchmal auch &amp;quot;&amp;lt;tt&amp;gt;.hpp&amp;lt;/tt&amp;gt;&amp;quot; (für C++), und die &#039;&#039;Verwendung&#039;&#039; eines Include-Files ist sehr einfach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;quot;xyz.h&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird der Dateiname in spitze Klammern gesetzt, dann sucht der Präprozessor die Datei nicht im aktuellen Verzeichnis, sondern im Standard-Include-Pfad des Compilers:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;io.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei sind auch relative Verzeichnisangaben erlaubt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/timer.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Welches Problem lösen Include-Files? ==&lt;br /&gt;
&lt;br /&gt;
[[C]] und [[C-Plusplus|C++]] sind insofern sehr einfache Sprachen, als der Compiler sich den Quelltext nur ein einziges mal von oben nach unten durchliest. Insbesondere sieht der Compiler auch nicht nach links oder rechts in andere Dateien und er benutzt auch keine Informationen, die er durch die Compililierung anderer Quellcode Dateien gewonnen hat. All diese Einschränkungen haben nur den einen Zweck, dafür zu sorgen, dass jede Quellcode-Datei immer unabhängig von allen anderen Code-Dateien, die zum selben Projekt gehören, compilierbar ist. So eine Datei nennt man auch eine Übersetzungseinheit, weil sie für sich übersetzbar, also compilierbar, ist.&lt;br /&gt;
&lt;br /&gt;
Allerdings folgen daraus auch ein paar Einschränkungen. Die wichtigste davon ist: &#039;&#039;Man kann nur verwenden, was in dieser Übersetzungseinheit an vorhergehender Stelle deklariert wurde&#039;&#039;&lt;br /&gt;
Die zweit wichtigste davon ist: &#039;&#039;Jede Übersetzungseinheit muss in sich geschlossen sein, also alle benötigten Informationen beinhalten&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Insbesonders letzteres kann in der Praxis zu Problemen führen.&lt;br /&gt;
&lt;br /&gt;
Angenommen ein komplettes Projekt besteht aus 2 Übersetzungseinheiten, &#039;&#039;&#039;a.c&#039;&#039;&#039; und &#039;&#039;&#039;b.c&#039;&#039;&#039;. In &#039;&#039;&#039;b.c&#039;&#039;&#039; sind dabei Funktionen enthalten, die auf einer speziellen Datenstruktur operieren.&lt;br /&gt;
&lt;br /&gt;
b.c&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date,&lt;br /&gt;
               unsigned char Day, unsigned char Month, unsigned int Year )&lt;br /&gt;
{&lt;br /&gt;
  Date-&amp;gt;Year  = Year;&lt;br /&gt;
  Date-&amp;gt;Month = Month;&lt;br /&gt;
  Date-&amp;gt;Day   = Day;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und diese Funktionalität soll in &#039;&#039;&#039;a.c&#039;&#039;&#039; benutzt werden&lt;br /&gt;
&lt;br /&gt;
a.c&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date, unsigned char Day, unsigned char Month, unsigned int Year );&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  struct DateTime myDate;&lt;br /&gt;
&lt;br /&gt;
  InitDate( &amp;amp;myDate, 22, 3, 63 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann fällt sofort auf, dass die Deklaration der Struktur DateTime sowohl in &#039;&#039;&#039;b.c&#039;&#039;&#039; als auch in &#039;&#039;&#039;a.c&#039;&#039;&#039; enthalten ist. Das muss auch so sein! Denn damit der Compiler in &#039;&#039;&#039;a.c&#039;&#039;&#039; die Variable &#039;&#039;myDate&#039;&#039; erzeugen kann, muss er wissen, wieviel Speicherplatz dafür benötigt wird. Und um dies herauszufinden muss er wiederum den Aufbau der Struktur kennen. Auch wenn diese Informationen in &#039;&#039;&#039;b.c&#039;&#039;&#039; enthalten sind, so reicht dies nicht, dann wenn &#039;&#039;&#039;a.c&#039;&#039;&#039; compiliert wird, steht die Information aus &#039;&#039;&#039;b.c&#039;&#039;&#039; nicht zur Verfügung (&#039;&#039;Der Compiler sieht nicht nach links oder rechts&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite muss die Strukturdeklaration aber auch in &#039;&#039;&#039;b.c&#039;&#039;&#039; enthalten sein. Denn wenn in der Funktion &#039;&#039;InitDate&#039;&#039; an die Elemente der Struktur zugewiesen wird, muss der Compiler ebenfalls den Aufbau der Struktur kennen.&lt;br /&gt;
&lt;br /&gt;
Nun ist es aber unschön, unpraktisch und letzten Endes auch fehleranfällig, in zwei Übersetzungseinheiten dieselbe Information zu duplizieren. Es besteht immer die Gefahr, dass bei einer Änderung an der Struktur dieselbe innerhalb eine Übersetzungseinheit vergessen wird, und dann haben verschiedene Programmteile unterschiedliche Vorstellungen davon, wie die Datenstruktur aufgebaut ist. Redundanz ist hier unerwünscht.&lt;br /&gt;
&lt;br /&gt;
Die Lösung aus diesem Dilemma besteht darin, dass dieser gemeinsame Code-Anteil in eine sog. Header-Datei ausgelagert wird und danach in beide Übersetzungseinheiten in Form eines #include wieder hereingezogen wird.&lt;br /&gt;
&lt;br /&gt;
DateTime.h:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct DateTime {&lt;br /&gt;
  unsigned int  Year;&lt;br /&gt;
  unsigned char Month;&lt;br /&gt;
  unsigned char Day;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date, unsigned char Day, unsigned char Month, unsigned int Year );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b.c:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;DateTime.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void InitDate( struct DateTime* Date,&lt;br /&gt;
               unsigned char Day, unsigned char Month, unsigned int Year )&lt;br /&gt;
{&lt;br /&gt;
  Date-&amp;gt;Year  = Year;&lt;br /&gt;
  Date-&amp;gt;Month = Month;&lt;br /&gt;
  Date-&amp;gt;Day   = Day;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a.c:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;DateTime.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  struct DateTime myDate;&lt;br /&gt;
&lt;br /&gt;
  InitDate( &amp;amp;myDate, 22, 3, 63 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt gibt es nur noch eine Datei, nämlich &#039;&#039;&#039;DateTime.h&#039;&#039;&#039;, in der die Strukturdeklaration aufgeführt ist. Bei einer Änderung wird auch nur diese eine Datei geändert. Durch die Verwendung dieser Datei in &#039;&#039;&#039;a.c&#039;&#039;&#039; und &#039;&#039;&#039;b.c&#039;&#039;&#039; ist damit sichergestellt, dass die Deklaration immer in beiden Übersetzungseinheiten übereinstimmt. Es muss lediglich dafür gesorgt werden, dass bei einer Änderung in &#039;&#039;&#039;DateTime.h&#039;&#039;&#039; sowohl &#039;&#039;&#039;a.c&#039;&#039;&#039; als auch &#039;&#039;&#039;b.c&#039;&#039;&#039; neu compiliert werden.&lt;br /&gt;
&lt;br /&gt;
== Probleme bei Include-Files ==&lt;br /&gt;
In Include-Files werden mitunter Informationen aus anderen Include-Files benötigt und es ist an der Verwendungsstelle eines Include-Files oft nicht das Wissen über die möglicherweise sehr komplexen Abhängigkeiten vorhanden. Nachfolgend wird ausgehend von einer typischen Problemstellung eine Standardtechnik erläutert, die hilft, das Wissen um Abhängigkeiten an der Verwendungsstelle überflüssig zu machen:&lt;br /&gt;
&lt;br /&gt;
Angenommen, es existieren zwei Datenstrukturen für die es die Typdefinitionen &amp;lt;tt&amp;gt;s1_t&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; gibt, die jeweils in entsprechenden Include-Files hinterlegt sind, also&lt;br /&gt;
&amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition der Datenstruktur s1 */&lt;br /&gt;
struct s1 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s1_t);&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Datei &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt; sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition der Datenstruktur s2 */&lt;br /&gt;
struct s2 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
s2_t *bar();&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine bestimmte Applikation benötigt nun beide Struktur- und Funktions-Definitionen und inkludiert entsprechend beide Dateien, es gibt also eine kompilierbare Datei (z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt;) die wie folgt aussieht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;s1.h&amp;quot;&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
int main(void) {&lt;br /&gt;
    s1_t a;&lt;br /&gt;
    s2_t *b;&lt;br /&gt;
    ...&lt;br /&gt;
    foo(a);&lt;br /&gt;
    b = bar();&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So weit, so gut.&lt;br /&gt;
&lt;br /&gt;
Nun kommt es eines Tages zu einer Änderung, die darauf hinausläuft, dass die erste Struktur die zweite als Element enthält. Das heißt die Datei &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; sieht nun wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraufhin wird sich &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt;(!) nicht mehr kompilieren lassen, da bei der Verarbeitung von &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; (noch) nicht bekannt ist, worum es sich um bei &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; handelt. (Es könnte ja auch einfach nur ein Tippfehler sein!). Erinnern sie sich: Der Compiler liest den Quelltext von oben nach unten durch und durch die Reihenfolge der #include sieht er die Strukturdeklaration von s1_t noch bevor s2_t deklaraiert wurde.&lt;br /&gt;
&lt;br /&gt;
Da es in der Praxis einen immensen Pflegeaufwand auslösen kann, wenn Änderungen in Include-Files Änderungen in vielen weiteren Dateien erfordern (dem Wesen nach soll ja eine Include-Dateien eine Information zentral für viele andere Dateien bereitstellen), muss nach einem Ausweg gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Dieser könnte so aussehen, dass man &amp;quot;vorsorglich&amp;quot; die Beschreibung der verwendeten Datenstruktur in &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; inkludiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inkludiert das Hauptprogramm lediglich &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;, wäre nun alles in Ordnung, wenn aber beide Dateien inkludiert werden, beschwert sich der Compiler über die doppelte Definition der Datentypen. (Die doppelte Deklaration von Funktionen ist kein Fehler, wenn sie übereinstimmend erfolgt.)&lt;br /&gt;
&lt;br /&gt;
== Problemlösung mit Makros ==&lt;br /&gt;
Die übliche und - fast - perfekte Lösung des Problems besteht darin, den eigentlichen Inhalt eines Include-Files vor einer zweiten Verarbeitung durch eine &#039;&#039;bedingte Kompilierung&#039;&#039; zu schützen.&lt;br /&gt;
Bei der bedingten Kompilierung handelt es sich ebenfalls um ein Feature des [[C-Präprozessor]]s und es wird hier wie folgt auf die Datei &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt; angewendet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s2 {&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
s2_t *bar();&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Da das beschriebene Problem in größeren Programmsystemen auch in Bezug auf die andere Struktur auftreten könnte, sollte man die Datei &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; vorsorglich mit einem ähnlichen Schutz ausstatten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    s2_t x;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
/* Funktions-Deklarationen */&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der nette Nebeneffekt ist, dass es damit auch keine Rolle spielt, in welcher Reihenfolge beide Dateien in &amp;lt;tt&amp;gt;main.c&amp;lt;/tt&amp;gt; inkludiert werden.&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung der Regeln ==&lt;br /&gt;
Kochrezeptartig kann man beim Schreiben und Verwenden von Include-Files auch einfach die folgenden Regeln anwenden:&lt;br /&gt;
* Wird die externe Schnittstelle (Datenstrukturen, Funktions-Deklarationen) eines Moduls &#039;&#039;XYZ&#039;&#039; in einem Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; beschrieben, so sollte ein bestimmter Makroname (z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;XYZ_h&amp;lt;/tt&amp;gt;) für die Steuerung der tatsächlichen Verarbeitung des Include-Files reserviert werden.&amp;lt;ref&amp;gt;Die genaue Beziehung zwischen dem Makro-Namen und dem Modul- (oder Struktur-) Namen ist dabei nicht so bedeutend. Die übliche Konvention, solche &amp;quot;Steuer-Makros&amp;quot; mit &amp;quot;&amp;lt;tt&amp;gt;_h&amp;lt;/tt&amp;gt;&amp;quot; oder &amp;quot;&amp;lt;tt&amp;gt;_H&amp;lt;/tt&amp;gt;&amp;quot; zu beenden, soll nur helfen, &amp;quot;zufällige&amp;quot; Kollissionen mit Makros zu vermeiden, die einen anderen Zweck haben.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Der Include-File selbst testet (und definiert anschließend) diesen Makro, um so eine doppelte Verarbeitung zu vermeiden.&lt;br /&gt;
* Wird in einer Kompilierung das Modul &#039;&#039;XYZ&#039;&#039; verwendet (= eine seiner Datenstrukturen oder Funktionen), wird auch der Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; in diese Kompilierung eingeschlossen.&lt;br /&gt;
* Verwenden die externen Schnittstellen (was im Header steht) von Modul &#039;&#039;XYZ&#039;&#039; ein weiteres Modul &#039;&#039;UVW&#039;&#039;, so wird &#039;&#039;&#039;dessen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;uvw.h&amp;lt;/tt&amp;gt; im Include-File &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; eingeschlossen.&lt;br /&gt;
* Verwendet ein Modul &#039;&#039;XYZ&#039;&#039; in der Implementierung (c-File) ein weiteres Modul &#039;&#039;UVW&#039;&#039;, so wird &#039;&#039;&#039;dessen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;uvw.h&amp;lt;/tt&amp;gt; nur im Source-File &amp;lt;tt&amp;gt;xyz.c&amp;lt;/tt&amp;gt; eingeschlossen.&lt;br /&gt;
&lt;br /&gt;
Die beschriebenen Regeln funktionieren zufriedenstellend und entlasten vor allem Programm-Code, welcher Include-Files lediglich einschließt, vom Wissen über komplexe Zusammenhänge zwischen einzelnen Modulen. Ferner spielt die Reihenfolge, in der man Include-Files verwendet, keine Rolle und man kann sie beliebig gruppieren und ordnen, so wie es am übersichtlichsten ist. &amp;lt;ref&amp;gt;Eine alphabetische Sortierung ist z.&amp;amp;nbsp;B. hilfreich, um bei einem Kompilierfehler schnell überprüfen zu können, ob vielleicht nur ein bestimmter Include-File vergessen wurde.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gegenseitige Bezugnahme ==&lt;br /&gt;
Eine Ausnahme von der allgemeinen Regel liegt vor, wenn sich zwei Datenstrukturen gegenseitig verwenden (was nur über Zeiger der Fall sein kann).&lt;br /&gt;
Alle wie auch immer gearteten Versuche, diese beiden Strukturdefinitionen und Funktionsprototypen in zwei verschiedene Include-Files aufzuteilen, also z.&amp;amp;nbsp;B. &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
#include &amp;quot;s2.h&amp;quot;&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
s2_t *bar(s1_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
#include &amp;quot;s1.h&amp;quot;&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *yp;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
werden scheitern - mit und ohne dem beschriebenen Schutz vor doppelter Verarbeitung!&lt;br /&gt;
&lt;br /&gt;
Die pragmatische Lösung ist hier, alles in einem &#039;&#039;&#039;gemeinsamen&#039;&#039;&#039; Include-File &amp;lt;tt&amp;gt;s1_s2.h&amp;lt;/tt&amp;gt; zu hinterlegen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_S2_h&lt;br /&gt;
#define S1_S2_h&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *yp;&lt;br /&gt;
    ....&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
void foo(s2_t);&lt;br /&gt;
s2_t *bar(s1_t);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das ist insofern sinnvoll, als ein Programm, welches die eine Struktur kennen muss, stets auch die andere benötigt. Die Aufteilung in zwei Include-Files würde also keinen echten Vorteil bringen.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme kann lediglich gemacht werden, wenn auf die jeweils andere Struktur ausschließlich über Zeiger&amp;lt;ref&amp;gt;Bei der Verwendung von C++ gilt das zusätzlich für die Bezugnahme über Referenzen.&amp;lt;/ref&amp;gt; zugegriffen wird, dann sind auch zwei Include-Files möglich, nämlich &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
struct s2; /* Vorausdeklaration */&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
...&lt;br /&gt;
struct s2 *bar(s1_t);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s1; /* Vorausdeklaration */&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *py;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
...&lt;br /&gt;
void bar(struct s1 *);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Anstatt den jeweils anderen Include-File einzuschließen, sind nun die oben gezeigten Vorausdeklarationen vorzumehmen. (Allerdings sind damit die Typdefinitionen &amp;lt;tt&amp;gt;s1_t&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;s2_t&amp;lt;/tt&amp;gt; nicht verfügbar, die Bezugnahme auf die jeweils andere Struktur kann nur über &amp;lt;tt&amp;gt;struct s1&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;struct s2&amp;lt;/tt&amp;gt; erfolgen.)&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit besteht darin, die Vorausdeklaration in der selben Headerdatei vorzunehmen, aber außerhalb des Include-Guards.&lt;br /&gt;
&lt;br /&gt;
Damit wird &amp;lt;tt&amp;gt;s1.h&amp;lt;/tt&amp;gt; zu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// struct s1; obsolet&lt;br /&gt;
typedef struct s1 s1_t;&lt;br /&gt;
#ifndef S1_h&lt;br /&gt;
#define S1_h&lt;br /&gt;
struct s1 {&lt;br /&gt;
    struct s2 *px;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
struct s2 *bar(s1_t);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und &amp;lt;tt&amp;gt;s2.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct s2 s2_t;&lt;br /&gt;
#ifndef S2_h&lt;br /&gt;
#define S2_h&lt;br /&gt;
struct s2 {&lt;br /&gt;
    struct s1 *py;&lt;br /&gt;
    ...&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
void bar(struct s1 *);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/80956#676650 sehr ausführliches Forumsthema zur Thematik]&lt;br /&gt;
     &lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vervielfachung_der_Frequenz_mittels_Multiplikation&amp;diff=104996</id>
		<title>Vervielfachung der Frequenz mittels Multiplikation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vervielfachung_der_Frequenz_mittels_Multiplikation&amp;diff=104996"/>
		<updated>2022-02-14T13:44:44Z</updated>

		<summary type="html">&lt;p&gt;172.26.6.136: Schreibfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [[Benutzer:engineer|J.S.]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dies ist ein Konzept eines einfachen mathematischen Frequenzvervielfachers mittels Multiplikation:&lt;br /&gt;
&lt;br /&gt;
Für den Fall perfekter Sinuswellen, welche symmetrisch zur X-Achse liegen oder deren Mittelwert bekannt und konstant ist, können die ganzzahligen Oberwellen durch eine simple Multiplikation mit der Grundwelle erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip besteht darin, eine durch die Multiplikation entstehende Verschiebung infolge eines offsets wieder zu eliminieren. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Beispiel&amp;quot; widths=&amp;quot;300&amp;quot; perrow=2&amp;gt;&lt;br /&gt;
Datei:Frequenzvervielfachung-durch-multiplikation.gif | Mathematische Darstellung in Excel für X2 und X3&lt;br /&gt;
Datei:Chipscope-screen-wave-multiplier.gif | Mehrere Verdopplungen in Xilinx FPGA (25MHz * 256)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass die Welle tatsächlich zur X-Achse symmetrisch und offsetfrei ist. In den Fällen, in denen das nicht der Fall ist, muss die Welle nachgesteuert oder vorgefiltert werden. In Echtzeit kann das mit einem Tiefpass geschehen.&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
* Soundgenerator&lt;br /&gt;
* Waveform Generator&lt;br /&gt;
* Klangsynthese&lt;br /&gt;
* Messinstrumente&lt;br /&gt;
* Oberwellendetektor&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Signalgeneratoren]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>172.26.6.136</name></author>
	</entry>
</feed>