<?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=Lkmiller</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=Lkmiller"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Lkmiller"/>
	<updated>2026-04-24T07:57:50Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=107871</id>
		<title>Benutzer:Lkmiller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=107871"/>
		<updated>2026-01-26T08:10:37Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier gibts einen Teil meiner Erkenntnisse zum Thema VHDL und FPGA:&lt;br /&gt;
[http://www.lothar-miller.de www.lothar-miller.de]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=107870</id>
		<title>Benutzer:Lkmiller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=107870"/>
		<updated>2026-01-26T08:10:10Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier gibts einen Teil meiner Erkenntnisse zum Thema VHDL und FPGA:&lt;br /&gt;
[http://www.lothar-miller.de www.lothar-miller.de]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Testdatei.xlsx|mini]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Testdatei.xlsx&amp;diff=107869</id>
		<title>Datei:Testdatei.xlsx</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Testdatei.xlsx&amp;diff=107869"/>
		<updated>2026-01-26T08:09:10Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test Excel-Datei&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini-Jakobsleiter&amp;diff=106607</id>
		<title>Mini-Jakobsleiter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini-Jakobsleiter&amp;diff=106607"/>
		<updated>2024-02-05T10:28:32Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Sicherheitshinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:High voltage warning.svg|100px]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;Achtung, hier wird mit lebensgefährlicher Netzspannung gearbeitet. Dieses Projekt ist nur für Personen geeignet, die mit den notwendigen Sicherheitsvorkehrungen vertraut sind.&#039;&#039;&#039;&lt;br /&gt;
|[[Bild:High voltage warning.svg|100px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Bild:Jakobsleiter in Aktion.jpg|thumb|Jakobsleiter in Aktion (Aufbau entspricht nicht exakt den Angaben)]]&lt;br /&gt;
&lt;br /&gt;
Schlagen irgendwo Funken über, so erregt man die Aufmerksamkeit aller Anwesenden und Jeder versteht: Hier fließt Strom! Besonders faszinierend sind die kletternden Lichtbögen der sogenannten &#039;&#039;&#039;Jakobsleiter&#039;&#039;&#039;, doch selbst Hochspannung zu erzeugen trauen sich die Wenigsten zu. Dabei macht es gar nicht so viel Aufwand, sobald der richtige Weg bekannt ist. Grundstein dieses Projekts bildete das Datenblatt für den Zündtrafo ZS&amp;amp;nbsp;1052 auf Conrad.de. Das Ergebnis ist ein Mini-Jakobsleiter im Lochrasteraufbau.&lt;br /&gt;
&lt;br /&gt;
== Funktionsprinzip ==&lt;br /&gt;
&lt;br /&gt;
=== Hochspannung erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Der Brückengleichrichter mit dem Elko erzeugt eine Gleichspannung in Höhe von ca. 325V. Der Widerstand (≈560&amp;amp;nbsp;k&amp;amp;Omega;) parallel zum Elko entlädt diesen nach dem Ausschalten des Hochspannungsgenerators zügig. Bei offenem Schalter lädt sich der Schwingkreiskondensator über den Widerstand auf und bei geschlossenem Schalter bildet der Kondensator mit der Induktivität des Trafos einen Parallelschwingkreis und transformiert die Netzspannung zu etwa 11&amp;amp;nbsp;kV Hochspannung. Der Ladewiderstand hängt an 325V und hat keinen Einfluss auf den Schwingkreis.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hochspannungsschwingkreis.svg]]&lt;br /&gt;
&lt;br /&gt;
Dass der Ladewiderstand mit dem Kondensator direkt gegen Masse geschaltet wird, vereinfacht den Aufbau erheblich, so ist kein Wechselschalter von Nöten. Dafür darf der Schalter nur kurz geschlossen werden. Da Elektronik zum Einsatz kommt, ist das aber kein nennenswertes Problem. &lt;br /&gt;
&lt;br /&gt;
Die Resonanz spielt für die Funktion keine Rolle und stellt nur einen Nebeneffekt dar. Der Kondensator bietet zwei wesentliche Vorteile: er wird mit einer definierten Energiemenge aufgeladen und liefert eine definierte Spannung. Dadurch haben Kurzschlüsse, dazu zählen auch Lichtbögen, keine gravierenden Auswirkungen auf den Trafo. Der Trafo übersetzt die Kondensatorspannung gemäß seines Übersetzungsverhältnisses auf die Sekundärseite.&lt;br /&gt;
&lt;br /&gt;
Eine genauen Berechnung der Bauteile im voraus ist nicht möglich, denn für Jakobsleitern gibt es keine spezielle Theorie. Die Ausgangsbasis bildet der Zündtrafo, dessen Datenblatt legt einen Kondensator mit Kapazität 47 nF fest. Ein Oszillogramm zeigt, dass bis zum Abklingen der Resonanz etwa 100 µs vergehen. Solange sollte also der Schalter mindestens geschlossen bleiben, aber auch nicht länger um den Ladewiderstand zu schonen. Die Ladespannung für den Kondensator wird dort mit 300 Volt angegeben, also im Bereich des Gleichrichtwerts der Netzspannung. Somit war klar, woraus die Spannungsversorgung erzeugt wird.&lt;br /&gt;
&lt;br /&gt;
Nun kommt der wesentliche Praxiswert: eine Kondensatorladung enthält eine definierte Energiemenge. Daher kommt es bei der Leistungsbemessung nur noch auf die Schaltfrequenz an. Die minimale Ladezeit, Schalter offen, für den Kondensator beträgt 3*&amp;amp;nbsp;&amp;amp;tau;, sprich 3 *Ladewiderstand*Schwingkreiskondensator. Anfangs war dies ein 22&amp;amp;nbsp;k&amp;amp;Omega;/1&amp;amp;nbsp;W Widerstand. Ein kleiner Funke sprang über, es reichte aber nicht für eine Jakobsleiter und so kamen 22&amp;amp;nbsp;k&amp;amp;Omega; Parallel dazu, womit die Ladezeit sank. Jetzt zeigte der Aufbau seine volle Pracht.&lt;br /&gt;
&lt;br /&gt;
Der Geruch verriet allerdings, die Widerstände wurden zu heiß, denn beim Materialeinkauf wurde großzügig mit einem Tastverhältnis von 1:100 gerechnet und erst bei der Praxiserprobung auf 1:10 reduziert, wodurch wesentlich mehr Ladezyklen pro Zeit erfolgten mit wesentlich höhere Verlusten am Widerstand. Daher sei hier das Parallelschalten von drei bis vier 33&amp;amp;nbsp;k&amp;amp;Omega;/1&amp;amp;nbsp;W Widerständen  empfohlen (genaue Berechnungen stehen noch aus). Insgesamt ergibt sich damit eine Ladezeit von 1&amp;amp;nbsp;ms und eine Schwingzeit von 100&amp;amp;nbsp;µs.&lt;br /&gt;
&lt;br /&gt;
Statt eines richtigen Schalters befindet sich in der Schaltung ein MOSFET (z.&amp;amp;nbsp;B. BUZ91A) der für 300 Volt ausgelegt ist. Eine Zeitgeberelektronik steuert die Gatespannung, siehe nächster Abschnitt.&lt;br /&gt;
&lt;br /&gt;
Die Experimentierfreude soll jedem selbst überlassen bleiben in Form weiterer Tuningmaßnahmen durch mehr Widerstände und in Folge geringer Ladezeit nach dem Prinzip mehr Leistung = mehr Spaß. Eine Halbierung sollte noch drin sein, die Verlustleistung steigt aber mit der Schaltfrequenz weiter und der Wert der einzelnen Widerstände sollte auf 39&amp;amp;nbsp;k&amp;amp;Omega; oder 39&amp;amp;nbsp;k&amp;amp;Omega; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Statt eines Trafos können sekundärseitig auch zwei in Serie geschaltet werden und die Spannung verdoppelt sich. Mehrere geht nicht, da ansonsten die Potentialdifferenz zur Primärseite zu hoch wird und der Trafo durchschlägt.&lt;br /&gt;
&lt;br /&gt;
=== Zeitgeber NE555 ===&lt;br /&gt;
&lt;br /&gt;
Als Zeitgeber kommt der allseits-bekannte NE555 als astabiler Multivibrator zum Einsatz. Der obere Teil bildet die Spannungsversorgung mit 78xx in Standardschaltung.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hochspannung ne555.svg]]&lt;br /&gt;
&lt;br /&gt;
Zur Spannungsversorgung muss nichts weiter erklärt werden.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung an Output dient als Inverter da die Multivibratorschaltung lange Pulse mit kurzen Pausen erzeugt, der MOSFET genau umgekehrt lange aus und kurz ein sein soll. Der Arbeitswiderstand beträgt 470&amp;amp;nbsp;&amp;amp;Omega; der Basisvorwiderstand 10&amp;amp;nbsp;k&amp;amp;Omega;. Der Kondensator parallel beträgt 500 pF und soll die Basis-Emitter-Kapazität füllen, damit der Transistor schneller durchschaltet. Keine Ahnung, ob das überhaupt notwendig ist, aber wer will schon sein Oszi mit Hochspannungsmessungen zerstören? Der Bipolar-Transistor ist ein BC557B also pnp. Signal-Masse ist mit der Source vom MOSFET verbunden der Inverter-Ausgang mit Gate.&lt;br /&gt;
&lt;br /&gt;
Der Kern des Multivibrators besteht aus zwei Widerständen und einem Kondensator. Die Puls und Pausenzeit ergibt sich grob nach folgender Formel:&lt;br /&gt;
:&amp;lt;math&amp;gt;t = 0{,}7 \cdot R \cdot C&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;R = \frac {t}{0{,}7 \cdot C} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kapazität beträgt 100 nF. Bei 1 ms Pausenzeit beträgt der Widerstand an Versorgungsspannung 14 k&amp;amp;Omega; und der zum Disch-Eingang 1,4 k&amp;amp;Omega;. Letztenlich zum Einsatz kam die Paarung 10 k&amp;amp;Omega;/1 k&amp;amp;Omega;.&lt;br /&gt;
&lt;br /&gt;
=== Jakobsleiter ===&lt;br /&gt;
&lt;br /&gt;
Aufgrund der geringen Leistung wird die Jakobsleiter nicht überdimensional groß. Als Leiter genügt der für den Lochrasteraufbau übliche Silberdraht. Das untere Ende muss einen sanften Übergang zu den Versorgungsleitungen bilden, ein scharfer Knick führt zu Verzerrungen im elektrischen Feld und der Lichtbogen kommt nicht vom Fleck. Damit der Lichtbogen genug beschleunigt, so dass er auch am oberen Ende abreißt, muss er genug Anlauf bekommen. Die Jakobsleiter darf dabei nicht zu weit auseinander gehen, da sonst kein Speed zustande kommt. Ein leichtes Öffnen ist trotzdem wichtig, denn es hat sich gezeigt, dass ansonsten der Lichtbogen gerne zu weit oben zündet. Die Abriss sollte nicht zu lange sein, sonst tritt wieder der Effekt des einschlafenden Lichtbogens auf, aber auch nicht zu schroff, denn ein Knick bewirkt Zündungen an der falschen Stelle. Nicht nur aus ästhetischen Gründen ist daher das obere Ende bei manchen Aufbauten gekringelt. Einfache gebogene Konstruktionen funktionieren auch.&lt;br /&gt;
&lt;br /&gt;
Insgesamt ist die Konstruktion der Jakobsleiter der fieseligste Teil des Aufbau. Bevor die Funken dauerhaft steigen und nicht ständig einschlafen braucht es eine gewisse Probier- und Lernphase.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Jakobsleiter.svg]]&lt;br /&gt;
&lt;br /&gt;
=== Inbetriebnahme ===&lt;br /&gt;
&lt;br /&gt;
Für das Lochraster-Layout sei hier kein Plan vorgegeben und kann sich jeder selbst zusammenreimen. &lt;br /&gt;
&lt;br /&gt;
Hochspannungsteil aufbauen und Gate, Drain und Source mit Lötbrücke kurzschließen. Wenn alles in Ordnung ist leuchtet die LED permanent. Lötbrücke zwischen Drain und Gate auftrennen dann darf die LED nicht mehr leuchten. Ansonsten ist der MOSFET defekt.&lt;br /&gt;
&lt;br /&gt;
Nun den Schaltungsteil für den Zeitgeber aufbauen, aber noch nicht mit dem MOSFET verbinden. Leuchtet die LED der Versorgungsspannung ist alles in Ordnung. Jetzt Zeitgeber und MOSFET verbinden und Lötbrücke auftrennen. Der Luftspalt zwischen der Jakobsleiter sollte anfangs eher klein sein. Nach dem einstecken leuchten beide LEDs und Funken schlagen über, die Schaltung ist Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Bei der Fehlersuche helfen zusätzliche LEDs etwa mit Vorwiderstand Parallel zum Arbeitswiderstand des Inverters oder am Output vom NE555.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung ist mit der Netzspannung verbunden vor dem Berühren der Schaltung immer Netzstecker ziehen, da Kabelschalter meist nur ein-polig Trennen.&lt;br /&gt;
&lt;br /&gt;
==Material==&lt;br /&gt;
* Schraubklemme RM 5,0 zum Netzkabel anschließen&lt;br /&gt;
* Sicherung&lt;br /&gt;
* Lochrasterplatine ca. 10cm x 10cm&lt;br /&gt;
* Netzkabel (Vorsicht: Kabelschalter trennen meist nur einpolig)&lt;br /&gt;
* 4x M3 Schraube 25mm und Mutter als Füßchen&lt;br /&gt;
&lt;br /&gt;
=== Hochspannungsteil ===&lt;br /&gt;
&lt;br /&gt;
* 5x 33 kOhm 1W Metallschichtwiderstände zum Kondensatoraufladen&lt;br /&gt;
* LED mit 10mA Nennstrom in Reihe zu einem der Ladewiderstände als Funktionsanzeige&lt;br /&gt;
* [[FET]] (BUZ90, BUZ91, IRF730 o.ä)&lt;br /&gt;
* Zündspule (ZS 1052, Conrad/Voelkner) und passenden Kondensator mit 47 nF/X2 für Schwingkreis&lt;br /&gt;
* Brückengleichrichter (B250C800 o.ä.)&lt;br /&gt;
* Siebkondensator ≈ 4,7µF/350V&lt;br /&gt;
* Entladewiderstand mit ≈ 560 k&amp;amp;Omega; für den Siebkondensator &lt;br /&gt;
&lt;br /&gt;
=== Taktgenerator ===&lt;br /&gt;
* NE555&lt;br /&gt;
* Brückengleichrichter (B250C800 o.ä.)&lt;br /&gt;
* Siebkondensator ≈ 100 µF&lt;br /&gt;
* LED mit passendem Vorwiderstand als Betriebsanzeige&lt;br /&gt;
* Stabi LM7812&lt;br /&gt;
* Kondensator 0.1µF für Stabi-Ausgang&lt;br /&gt;
* Trafo 12V/30 mA o.ä.&lt;br /&gt;
* Zeitgeber-Kondensator 0.1 µF &lt;br /&gt;
* Zeitgeber-Widerstände 1k&amp;amp;Omega; + 10k&amp;amp;Omega;&lt;br /&gt;
* BC557B als Inverter für NE555 Ausgang&lt;br /&gt;
* Boostkondensator für BC557B 500 pF&lt;br /&gt;
* 10 k&amp;amp;Omega; Basisvorwiderstand für BC557B&lt;br /&gt;
* 560 &amp;amp;Omega; Arbeitswiderstand  für BC557B&lt;br /&gt;
&lt;br /&gt;
== Sicherheitshinweise ==&lt;br /&gt;
&lt;br /&gt;
* Trotz Trafo hängt die gesamte Schaltung an Netzpotential.&lt;br /&gt;
* Nach dem Ausstecken noch 10 Sekunden warten bis die Kondensatoren sicher entladen sind.&lt;br /&gt;
* Kabelschalter trennen nicht immer allpolig, also lieber den Stecker ziehen.&lt;br /&gt;
* Um den Hochspannungsanschluss herum die überflüssigen Lötaugen entfernen, sonst verkürzt sich die Funkenstrecke zur Primärseite.&lt;br /&gt;
* Vor der Erstinbetriebnahme den Hochspannungsbereich mit Spiritus gründlich von Lötfett befreien&lt;br /&gt;
* Beim Lochrasteraufbau ist darauf zu achten, dass genügen Abstand zwischen Primär und Hochspannungsseite eingehalten wird.&lt;br /&gt;
* Für Schäden durch Hochspannung ist jeder selbst verantwortlich&lt;br /&gt;
* Beim Betrieb kann durch die hohen Temperaturen der Stickstoff aus der Luft zu giftigen Stickoxiden verbrannt sowie der Luftsauerstoff zu Ozon umgeformt werden, welches die Atemwege reizt. Allerdings ist das bei solch kleinen Leistungen relativ unbedenklich.&lt;br /&gt;
* Beim Betrieb wird durch den Lichtbogen unsichtbare UV(C) Strahlung abgegeben. Allerdings ist das bei solch kleinen Leistungen relativ unbedenklich.&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
* Zeilentrafo aus dem Fernseher&lt;br /&gt;
* Kfz-Zündspule vom Schrottplatz&lt;br /&gt;
* Hochspannungskaskade&lt;br /&gt;
* Zwei Mikrowellentrafos (MOT) für ca. 4 kV, vom Schrott&lt;br /&gt;
* Neon Sign Transformer (NST), bei Ebay&lt;br /&gt;
* Messwandler für Hochspannungsmessung (Potential-Transformer), wenn man sowas hat&lt;br /&gt;
* Elektor-Projekt Jakobsleiter (03/2006), für Leute mit Geld&lt;br /&gt;
* (Netzteil einer Kaltkathodenröhre (CCFL), meist aber zu schwach)&lt;br /&gt;
* Labornetzgerät für Hochspannung, für Leute mit ganz viel Geld&lt;br /&gt;
* &amp;quot;100kV&amp;quot; Trafo aus China für ~3€&lt;br /&gt;
&lt;br /&gt;
Zündkabel, Anodenkabel, und Laborleitungen haben eine hohe Isolationsspannung, so kann Spannung sicher transportiert werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.hcrs.at/TVLINE.HTM Hochspannung erzeugen mit Zeilentrafo]&lt;br /&gt;
* [http://geocities.com/CapeCanaveral/Lab/5322/hv2.html Snock&#039;s High Voltage Page]&lt;br /&gt;
;Videos&lt;br /&gt;
* &#039;&#039;&#039;[http://de.youtube.com/watch?v=DhWgCMReGKk&amp;amp;feature=channel_page Dieses Projekt in Aktion]&#039;&#039;&#039;&lt;br /&gt;
* [http://de.youtube.com/watch?v=GNbvg9jfDr8&amp;amp;feature=related Jakobsleiter mit NST]&lt;br /&gt;
* [http://de.youtube.com/watch?v=CUxbIuxqQl8&amp;amp;feature=related CD mit Hochspannungsbehandlung]&lt;br /&gt;
* [http://de.youtube.com/watch?v=CRLCW6alEwc&amp;amp;feature=related Hochspannungslabor]&lt;br /&gt;
* [http://de.youtube.com/watch?v=aAYGNcA34UI&amp;amp;feature=related Zeilentrafo im Einsatz]&lt;br /&gt;
* [http://www.andreas-kilchenmann.ag.vu/jakobsleiter.html Mikrowellentrafo]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Uv-6YgbDoyI High Voltage Jacob&#039;s ladder with Gabriel electrode]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini-Jakobsleiter&amp;diff=106606</id>
		<title>Mini-Jakobsleiter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini-Jakobsleiter&amp;diff=106606"/>
		<updated>2024-02-05T10:28:10Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Sicherheitshinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:High voltage warning.svg|100px]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;Achtung, hier wird mit lebensgefährlicher Netzspannung gearbeitet. Dieses Projekt ist nur für Personen geeignet, die mit den notwendigen Sicherheitsvorkehrungen vertraut sind.&#039;&#039;&#039;&lt;br /&gt;
|[[Bild:High voltage warning.svg|100px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Bild:Jakobsleiter in Aktion.jpg|thumb|Jakobsleiter in Aktion (Aufbau entspricht nicht exakt den Angaben)]]&lt;br /&gt;
&lt;br /&gt;
Schlagen irgendwo Funken über, so erregt man die Aufmerksamkeit aller Anwesenden und Jeder versteht: Hier fließt Strom! Besonders faszinierend sind die kletternden Lichtbögen der sogenannten &#039;&#039;&#039;Jakobsleiter&#039;&#039;&#039;, doch selbst Hochspannung zu erzeugen trauen sich die Wenigsten zu. Dabei macht es gar nicht so viel Aufwand, sobald der richtige Weg bekannt ist. Grundstein dieses Projekts bildete das Datenblatt für den Zündtrafo ZS&amp;amp;nbsp;1052 auf Conrad.de. Das Ergebnis ist ein Mini-Jakobsleiter im Lochrasteraufbau.&lt;br /&gt;
&lt;br /&gt;
== Funktionsprinzip ==&lt;br /&gt;
&lt;br /&gt;
=== Hochspannung erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Der Brückengleichrichter mit dem Elko erzeugt eine Gleichspannung in Höhe von ca. 325V. Der Widerstand (≈560&amp;amp;nbsp;k&amp;amp;Omega;) parallel zum Elko entlädt diesen nach dem Ausschalten des Hochspannungsgenerators zügig. Bei offenem Schalter lädt sich der Schwingkreiskondensator über den Widerstand auf und bei geschlossenem Schalter bildet der Kondensator mit der Induktivität des Trafos einen Parallelschwingkreis und transformiert die Netzspannung zu etwa 11&amp;amp;nbsp;kV Hochspannung. Der Ladewiderstand hängt an 325V und hat keinen Einfluss auf den Schwingkreis.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hochspannungsschwingkreis.svg]]&lt;br /&gt;
&lt;br /&gt;
Dass der Ladewiderstand mit dem Kondensator direkt gegen Masse geschaltet wird, vereinfacht den Aufbau erheblich, so ist kein Wechselschalter von Nöten. Dafür darf der Schalter nur kurz geschlossen werden. Da Elektronik zum Einsatz kommt, ist das aber kein nennenswertes Problem. &lt;br /&gt;
&lt;br /&gt;
Die Resonanz spielt für die Funktion keine Rolle und stellt nur einen Nebeneffekt dar. Der Kondensator bietet zwei wesentliche Vorteile: er wird mit einer definierten Energiemenge aufgeladen und liefert eine definierte Spannung. Dadurch haben Kurzschlüsse, dazu zählen auch Lichtbögen, keine gravierenden Auswirkungen auf den Trafo. Der Trafo übersetzt die Kondensatorspannung gemäß seines Übersetzungsverhältnisses auf die Sekundärseite.&lt;br /&gt;
&lt;br /&gt;
Eine genauen Berechnung der Bauteile im voraus ist nicht möglich, denn für Jakobsleitern gibt es keine spezielle Theorie. Die Ausgangsbasis bildet der Zündtrafo, dessen Datenblatt legt einen Kondensator mit Kapazität 47 nF fest. Ein Oszillogramm zeigt, dass bis zum Abklingen der Resonanz etwa 100 µs vergehen. Solange sollte also der Schalter mindestens geschlossen bleiben, aber auch nicht länger um den Ladewiderstand zu schonen. Die Ladespannung für den Kondensator wird dort mit 300 Volt angegeben, also im Bereich des Gleichrichtwerts der Netzspannung. Somit war klar, woraus die Spannungsversorgung erzeugt wird.&lt;br /&gt;
&lt;br /&gt;
Nun kommt der wesentliche Praxiswert: eine Kondensatorladung enthält eine definierte Energiemenge. Daher kommt es bei der Leistungsbemessung nur noch auf die Schaltfrequenz an. Die minimale Ladezeit, Schalter offen, für den Kondensator beträgt 3*&amp;amp;nbsp;&amp;amp;tau;, sprich 3 *Ladewiderstand*Schwingkreiskondensator. Anfangs war dies ein 22&amp;amp;nbsp;k&amp;amp;Omega;/1&amp;amp;nbsp;W Widerstand. Ein kleiner Funke sprang über, es reichte aber nicht für eine Jakobsleiter und so kamen 22&amp;amp;nbsp;k&amp;amp;Omega; Parallel dazu, womit die Ladezeit sank. Jetzt zeigte der Aufbau seine volle Pracht.&lt;br /&gt;
&lt;br /&gt;
Der Geruch verriet allerdings, die Widerstände wurden zu heiß, denn beim Materialeinkauf wurde großzügig mit einem Tastverhältnis von 1:100 gerechnet und erst bei der Praxiserprobung auf 1:10 reduziert, wodurch wesentlich mehr Ladezyklen pro Zeit erfolgten mit wesentlich höhere Verlusten am Widerstand. Daher sei hier das Parallelschalten von drei bis vier 33&amp;amp;nbsp;k&amp;amp;Omega;/1&amp;amp;nbsp;W Widerständen  empfohlen (genaue Berechnungen stehen noch aus). Insgesamt ergibt sich damit eine Ladezeit von 1&amp;amp;nbsp;ms und eine Schwingzeit von 100&amp;amp;nbsp;µs.&lt;br /&gt;
&lt;br /&gt;
Statt eines richtigen Schalters befindet sich in der Schaltung ein MOSFET (z.&amp;amp;nbsp;B. BUZ91A) der für 300 Volt ausgelegt ist. Eine Zeitgeberelektronik steuert die Gatespannung, siehe nächster Abschnitt.&lt;br /&gt;
&lt;br /&gt;
Die Experimentierfreude soll jedem selbst überlassen bleiben in Form weiterer Tuningmaßnahmen durch mehr Widerstände und in Folge geringer Ladezeit nach dem Prinzip mehr Leistung = mehr Spaß. Eine Halbierung sollte noch drin sein, die Verlustleistung steigt aber mit der Schaltfrequenz weiter und der Wert der einzelnen Widerstände sollte auf 39&amp;amp;nbsp;k&amp;amp;Omega; oder 39&amp;amp;nbsp;k&amp;amp;Omega; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Statt eines Trafos können sekundärseitig auch zwei in Serie geschaltet werden und die Spannung verdoppelt sich. Mehrere geht nicht, da ansonsten die Potentialdifferenz zur Primärseite zu hoch wird und der Trafo durchschlägt.&lt;br /&gt;
&lt;br /&gt;
=== Zeitgeber NE555 ===&lt;br /&gt;
&lt;br /&gt;
Als Zeitgeber kommt der allseits-bekannte NE555 als astabiler Multivibrator zum Einsatz. Der obere Teil bildet die Spannungsversorgung mit 78xx in Standardschaltung.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hochspannung ne555.svg]]&lt;br /&gt;
&lt;br /&gt;
Zur Spannungsversorgung muss nichts weiter erklärt werden.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung an Output dient als Inverter da die Multivibratorschaltung lange Pulse mit kurzen Pausen erzeugt, der MOSFET genau umgekehrt lange aus und kurz ein sein soll. Der Arbeitswiderstand beträgt 470&amp;amp;nbsp;&amp;amp;Omega; der Basisvorwiderstand 10&amp;amp;nbsp;k&amp;amp;Omega;. Der Kondensator parallel beträgt 500 pF und soll die Basis-Emitter-Kapazität füllen, damit der Transistor schneller durchschaltet. Keine Ahnung, ob das überhaupt notwendig ist, aber wer will schon sein Oszi mit Hochspannungsmessungen zerstören? Der Bipolar-Transistor ist ein BC557B also pnp. Signal-Masse ist mit der Source vom MOSFET verbunden der Inverter-Ausgang mit Gate.&lt;br /&gt;
&lt;br /&gt;
Der Kern des Multivibrators besteht aus zwei Widerständen und einem Kondensator. Die Puls und Pausenzeit ergibt sich grob nach folgender Formel:&lt;br /&gt;
:&amp;lt;math&amp;gt;t = 0{,}7 \cdot R \cdot C&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;R = \frac {t}{0{,}7 \cdot C} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kapazität beträgt 100 nF. Bei 1 ms Pausenzeit beträgt der Widerstand an Versorgungsspannung 14 k&amp;amp;Omega; und der zum Disch-Eingang 1,4 k&amp;amp;Omega;. Letztenlich zum Einsatz kam die Paarung 10 k&amp;amp;Omega;/1 k&amp;amp;Omega;.&lt;br /&gt;
&lt;br /&gt;
=== Jakobsleiter ===&lt;br /&gt;
&lt;br /&gt;
Aufgrund der geringen Leistung wird die Jakobsleiter nicht überdimensional groß. Als Leiter genügt der für den Lochrasteraufbau übliche Silberdraht. Das untere Ende muss einen sanften Übergang zu den Versorgungsleitungen bilden, ein scharfer Knick führt zu Verzerrungen im elektrischen Feld und der Lichtbogen kommt nicht vom Fleck. Damit der Lichtbogen genug beschleunigt, so dass er auch am oberen Ende abreißt, muss er genug Anlauf bekommen. Die Jakobsleiter darf dabei nicht zu weit auseinander gehen, da sonst kein Speed zustande kommt. Ein leichtes Öffnen ist trotzdem wichtig, denn es hat sich gezeigt, dass ansonsten der Lichtbogen gerne zu weit oben zündet. Die Abriss sollte nicht zu lange sein, sonst tritt wieder der Effekt des einschlafenden Lichtbogens auf, aber auch nicht zu schroff, denn ein Knick bewirkt Zündungen an der falschen Stelle. Nicht nur aus ästhetischen Gründen ist daher das obere Ende bei manchen Aufbauten gekringelt. Einfache gebogene Konstruktionen funktionieren auch.&lt;br /&gt;
&lt;br /&gt;
Insgesamt ist die Konstruktion der Jakobsleiter der fieseligste Teil des Aufbau. Bevor die Funken dauerhaft steigen und nicht ständig einschlafen braucht es eine gewisse Probier- und Lernphase.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Jakobsleiter.svg]]&lt;br /&gt;
&lt;br /&gt;
=== Inbetriebnahme ===&lt;br /&gt;
&lt;br /&gt;
Für das Lochraster-Layout sei hier kein Plan vorgegeben und kann sich jeder selbst zusammenreimen. &lt;br /&gt;
&lt;br /&gt;
Hochspannungsteil aufbauen und Gate, Drain und Source mit Lötbrücke kurzschließen. Wenn alles in Ordnung ist leuchtet die LED permanent. Lötbrücke zwischen Drain und Gate auftrennen dann darf die LED nicht mehr leuchten. Ansonsten ist der MOSFET defekt.&lt;br /&gt;
&lt;br /&gt;
Nun den Schaltungsteil für den Zeitgeber aufbauen, aber noch nicht mit dem MOSFET verbinden. Leuchtet die LED der Versorgungsspannung ist alles in Ordnung. Jetzt Zeitgeber und MOSFET verbinden und Lötbrücke auftrennen. Der Luftspalt zwischen der Jakobsleiter sollte anfangs eher klein sein. Nach dem einstecken leuchten beide LEDs und Funken schlagen über, die Schaltung ist Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Bei der Fehlersuche helfen zusätzliche LEDs etwa mit Vorwiderstand Parallel zum Arbeitswiderstand des Inverters oder am Output vom NE555.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung ist mit der Netzspannung verbunden vor dem Berühren der Schaltung immer Netzstecker ziehen, da Kabelschalter meist nur ein-polig Trennen.&lt;br /&gt;
&lt;br /&gt;
==Material==&lt;br /&gt;
* Schraubklemme RM 5,0 zum Netzkabel anschließen&lt;br /&gt;
* Sicherung&lt;br /&gt;
* Lochrasterplatine ca. 10cm x 10cm&lt;br /&gt;
* Netzkabel (Vorsicht: Kabelschalter trennen meist nur einpolig)&lt;br /&gt;
* 4x M3 Schraube 25mm und Mutter als Füßchen&lt;br /&gt;
&lt;br /&gt;
=== Hochspannungsteil ===&lt;br /&gt;
&lt;br /&gt;
* 5x 33 kOhm 1W Metallschichtwiderstände zum Kondensatoraufladen&lt;br /&gt;
* LED mit 10mA Nennstrom in Reihe zu einem der Ladewiderstände als Funktionsanzeige&lt;br /&gt;
* [[FET]] (BUZ90, BUZ91, IRF730 o.ä)&lt;br /&gt;
* Zündspule (ZS 1052, Conrad/Voelkner) und passenden Kondensator mit 47 nF/X2 für Schwingkreis&lt;br /&gt;
* Brückengleichrichter (B250C800 o.ä.)&lt;br /&gt;
* Siebkondensator ≈ 4,7µF/350V&lt;br /&gt;
* Entladewiderstand mit ≈ 560 k&amp;amp;Omega; für den Siebkondensator &lt;br /&gt;
&lt;br /&gt;
=== Taktgenerator ===&lt;br /&gt;
* NE555&lt;br /&gt;
* Brückengleichrichter (B250C800 o.ä.)&lt;br /&gt;
* Siebkondensator ≈ 100 µF&lt;br /&gt;
* LED mit passendem Vorwiderstand als Betriebsanzeige&lt;br /&gt;
* Stabi LM7812&lt;br /&gt;
* Kondensator 0.1µF für Stabi-Ausgang&lt;br /&gt;
* Trafo 12V/30 mA o.ä.&lt;br /&gt;
* Zeitgeber-Kondensator 0.1 µF &lt;br /&gt;
* Zeitgeber-Widerstände 1k&amp;amp;Omega; + 10k&amp;amp;Omega;&lt;br /&gt;
* BC557B als Inverter für NE555 Ausgang&lt;br /&gt;
* Boostkondensator für BC557B 500 pF&lt;br /&gt;
* 10 k&amp;amp;Omega; Basisvorwiderstand für BC557B&lt;br /&gt;
* 560 &amp;amp;Omega; Arbeitswiderstand  für BC557B&lt;br /&gt;
&lt;br /&gt;
== Sicherheitshinweise ==&lt;br /&gt;
&lt;br /&gt;
* Trotz Trafo hängt die gesamte Schaltung an Netzpotential.&lt;br /&gt;
* Nach dem Ausstecken noch 10 Sekunden warten bis die Kondensatoren sicher entladen sind.&lt;br /&gt;
* Kabelschalter trennen nicht immer allpolig, also lieber den Stecker ziehen.&lt;br /&gt;
* Um den Hochspannungsanschluss herum die überflüssigen Lötaugen entfernen, sonst verkürzt sich die Funkenstrecke zur Primärseite.&lt;br /&gt;
* Vor der Erstinbetriebnahme den Hochspannungsbereich mit Spiritus gründlich von Lötfett befreien&lt;br /&gt;
* Beim Lochrasteraufbau ist darauf zu achten, dass genügen Abstand zwischen Primär und Hochspannungsseite eingehalten wird.&lt;br /&gt;
* Für Schäden durch Hochspannung ist jeder selbst verantwortlich&lt;br /&gt;
* Beim Betrieb kann durch die hohen Temperaturen der Stickstoff aus der Luft zu giftigen Stickoxiden verbrannt sowie der Luftsauerstoff zu Ozon umgeformt werden, welches die Atemwege reizt. Allerdings ist das bei solch kleinen Leistungen relativ unbedenklich.&lt;br /&gt;
* Beim Betrieb wird unsichtbare UV(C) Strahlung abgegeben. Allerdings ist das bei solch kleinen Leistungen relativ unbedenklich.&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
* Zeilentrafo aus dem Fernseher&lt;br /&gt;
* Kfz-Zündspule vom Schrottplatz&lt;br /&gt;
* Hochspannungskaskade&lt;br /&gt;
* Zwei Mikrowellentrafos (MOT) für ca. 4 kV, vom Schrott&lt;br /&gt;
* Neon Sign Transformer (NST), bei Ebay&lt;br /&gt;
* Messwandler für Hochspannungsmessung (Potential-Transformer), wenn man sowas hat&lt;br /&gt;
* Elektor-Projekt Jakobsleiter (03/2006), für Leute mit Geld&lt;br /&gt;
* (Netzteil einer Kaltkathodenröhre (CCFL), meist aber zu schwach)&lt;br /&gt;
* Labornetzgerät für Hochspannung, für Leute mit ganz viel Geld&lt;br /&gt;
* &amp;quot;100kV&amp;quot; Trafo aus China für ~3€&lt;br /&gt;
&lt;br /&gt;
Zündkabel, Anodenkabel, und Laborleitungen haben eine hohe Isolationsspannung, so kann Spannung sicher transportiert werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.hcrs.at/TVLINE.HTM Hochspannung erzeugen mit Zeilentrafo]&lt;br /&gt;
* [http://geocities.com/CapeCanaveral/Lab/5322/hv2.html Snock&#039;s High Voltage Page]&lt;br /&gt;
;Videos&lt;br /&gt;
* &#039;&#039;&#039;[http://de.youtube.com/watch?v=DhWgCMReGKk&amp;amp;feature=channel_page Dieses Projekt in Aktion]&#039;&#039;&#039;&lt;br /&gt;
* [http://de.youtube.com/watch?v=GNbvg9jfDr8&amp;amp;feature=related Jakobsleiter mit NST]&lt;br /&gt;
* [http://de.youtube.com/watch?v=CUxbIuxqQl8&amp;amp;feature=related CD mit Hochspannungsbehandlung]&lt;br /&gt;
* [http://de.youtube.com/watch?v=CRLCW6alEwc&amp;amp;feature=related Hochspannungslabor]&lt;br /&gt;
* [http://de.youtube.com/watch?v=aAYGNcA34UI&amp;amp;feature=related Zeilentrafo im Einsatz]&lt;br /&gt;
* [http://www.andreas-kilchenmann.ag.vu/jakobsleiter.html Mikrowellentrafo]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Uv-6YgbDoyI High Voltage Jacob&#039;s ladder with Gabriel electrode]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Basiswiderstand&amp;diff=105927</id>
		<title>Basiswiderstand</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Basiswiderstand&amp;diff=105927"/>
		<updated>2023-03-05T08:03:10Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Änderungen von Aviatorhh (Diskussion) wurden auf die letzte Version von Emitterfolger zurückgesetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Artikel wird die Berechnung eines &#039;&#039;&#039;Basiswiderstandes&#039;&#039;&#039;, manchmal auch Basisvorwiderstand genannt, für die Verwendung eines Transistors &#039;&#039;&#039;als Schalter&#039;&#039;&#039; beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen &amp;amp; Transistorauswahl ==&lt;br /&gt;
&lt;br /&gt;
Ein häufiger Einsatzzweck von Transistoren als Schalter liegt insbesondere im Bereich der Mikrocontrollertechnik. Hierbei wird der Transistor, ein NPN-Typ, meist in [http://de.wikipedia.org/wiki/Emitterschaltung Emitterschaltung] betrieben. Beim Betrieb als Schalter möchte man dann, dass die Kollektor-Emitter-Strecke des Transistors entweder so gut wie möglich sperrt (&amp;quot;Schalter&amp;quot; offen) oder so gut wie möglich leitet (&amp;quot;Schalter&amp;quot; geschlossen), und dabei weder der Transistor noch der Mikrocontroller Schaden nehmen sollen.&lt;br /&gt;
&lt;br /&gt;
Zwei Werte sind hier besonders interessant: Der Kollektorstrom, das ist der Strom, der durch die zu schaltende Last (z.&amp;amp;nbsp;B. LED) fließt, sowie der Basisstrom, der Strom durch die Basis fließend, mit dem der Transistor in Emitterschaltung geschaltet wird.&lt;br /&gt;
&lt;br /&gt;
Der Transistor sollte normalerweise für mindestens den doppelten Wert des auftretenden Kollektorstroms geeignet sein. So mag im Datenblatt vom BC547 ein zulässiger Kollektorstrom von 100&amp;amp;nbsp;mA stehen, praktisch hat jedoch jenseits von ungefähr 50&amp;amp;nbsp;mA ein kräftigerer Typ wie etwa BC635 deutlich bessere Parameter.&lt;br /&gt;
&lt;br /&gt;
Das Sperren des Transistors ist der einfachere der zwei Fälle. In Emitterschaltung sperrt der Transistor so gut es geht (es fließt immer ein sehr kleiner, vernachlässigbarer Kollektorreststrom), wenn der Basisstrom so nah wie möglich bei 0&amp;amp;nbsp;A ist. Das ist er, wenn die an Basis und Emitter anliegende Spannung 0&amp;amp;nbsp;V ist. Also zum Beispiel dann, wenn der Ausgang eines Mikrocontrollers, der die Basis steuert, die Basis auf low legt, also auf Masse.&lt;br /&gt;
&lt;br /&gt;
Um den Transistor durchzuschalten, muss er mit einem Basisstrom angesteuert werden. Man begrenzt den Basisstrom durch einen Widerstand, den Basiswiderstand. Der Widerstand darf weder zu groß, noch zu klein sein. Ist er zu groß, schaltet der Transistor nicht voll durch und es entsteht zuviel Verlustleistung am Transistor, wodurch er zerstört werden kann. Ist er zu klein, saugt er zuviel Basistrom aus dem Ausgang des Mikrocontrollers, der dann ggf. überlastet wird.&lt;br /&gt;
&lt;br /&gt;
Um den Transistor möglichst gut durchzuschalten, kann man ihn in einem Bereich steuern, der &#039;&#039;Sättigung&#039;&#039; genannt wird. In dem Bereich bewirkt eine weitere Erhöhung des Eingangssignals keine weitere nennenswerte Änderung des Ausgangssignals. Technisch ist dabei die Kollektor-Emitter-Spannung minimal und kleiner als die Basis-Emitter-Spannung. Die Basis-Kollektor-Diodenstrecke des Transistors wird dabei leitend (Diode wird in Vorwärtsrichtung betrieben).&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil des Sättigungsbetriebes ist, dass der Transistor nur relativ langsam aus diesem Zustand herauskommt, wenn man ihn wieder sperren möchte. Dies ist für Hochfrequenz-Signale problematisch. Beim Schalten eines Relais&#039;, Motors oder einer LED stellt sich dieses Problem jedoch überhaupt nicht, da &amp;quot;langsam&amp;quot; für diese Anwendungen immer noch mehr als schnell genug ist.&lt;br /&gt;
&lt;br /&gt;
Für die Berechnung des Basiswiderstandes benötigt man die Stromverstärkung des Transistors. Diese sinkt beim Sättigungsbetrieb und ist häufig nur versteckt aus den Datenblättern herauszulesen. Meist sind die in Tabellen angegebenen Stromverstärkungen nicht die für die Sättigung. Statt dessen findet man den benötigten Wert mit etwas Glück in den Diagrammen. Alternativ kann man ihn aus den Werten für die Nicht-Sättigung abschätzen.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist noch zu sagen, dass die Berechnungen nicht mit hoher Genauigkeit durchgeführt werden müssen. Transistoreigenschaften streuen sehr stark pro Exemplar, und um auf der sicheren Seite zu sein, sollte man lieber mal mit etwas mehr (z.&amp;amp;nbsp;B. 10&amp;amp;nbsp;%) Basisstrom (entspricht kleinerem Basiswiderstand) arbeiten, als die Berechnung ergibt.&lt;br /&gt;
&lt;br /&gt;
== Berechnung ==&lt;br /&gt;
&lt;br /&gt;
[[bild:t_a_s.png]]&lt;br /&gt;
&lt;br /&gt;
* Datenblatt des Transistors besorgen, wenn möglich vom Hersteller des verwendeten Transistors. Kennt oder erkennt man den Hersteller nicht, muss man sich mit einem Datenblatt eines beliebigen Herstellers begnügen.&lt;br /&gt;
* Datenblatt lesen!&lt;br /&gt;
* Benötigt wird die Stromverstärkung in Sättigung (engl. &#039;&#039;DC current gain&#039;&#039;)&lt;br /&gt;
** Im Datenblatt nach einer expliziten Angabe dieses Wertes suchen. Mit etwas Glück findet man ihn in den Diagrammen. Die in Tabellen angegebenen Stromverstärkungen beziehen sich normalerweise nicht auf die Sättigung, wenn dies nicht explizit dabei steht (zum Beispiel &amp;lt;math&amp;gt;{h_{FE}}_{SAT}&amp;lt;/math&amp;gt; oder ähnliches (&#039;&#039;saturation&#039;&#039; = Sättigung).&lt;br /&gt;
** Findet man keine Angabe zur Verstärkung in Sättigung, dann im Datenblatt die &#039;&#039;&#039;minimale&#039;&#039;&#039; Stromverstärkung des Transistors nachschlagen. (Zeichen: &amp;lt;math&amp;gt;h_{FE}&amp;lt;/math&amp;gt;; Beschreibung: &#039;&#039;DC Current Gain&#039;&#039;; wenn mehrere Werte angegeben sind, den für den niedrigsten Kollektorstrom wählen). Drandenken: Je höher der Kollektor-Strom, um so geringer wird die Stromverstärkung. Diesen Wert zur Abschätzung des Wertes in Sättigung durch 2 bis 10 teilen. Bei Kleinsignaltransistoren kann man meist ersatzweise mit einer Stromverstärkung von 20…50 rechnen, bei Leistungstransistoren eher mit 10. Bei Darlington-Transistoren multiplizieren sich die Stromverstärkungsfaktoren beider Transistoren, hier kann man folglich bei Kleinleistungstransistoren von 400…2500 ausgehen.&lt;br /&gt;
* Den Strom &amp;lt;math&amp;gt;I_c&amp;lt;/math&amp;gt;, den der Verbraucher benötigt, durch &amp;lt;math&amp;gt;h_{FE}&amp;lt;/math&amp;gt; teilen, um den Basisstrom &amp;lt;math&amp;gt;I_b&amp;lt;/math&amp;gt; zu erhalten. &amp;lt;math&amp;gt;I_b = \frac{I_c}{h_{FE}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Durch Anwendung des Ohmschen Gesetzes erhält man den Basiswiderstand &amp;lt;math&amp;gt;R_b = \frac{U_E-0{,}7\,\mathrm{V}}{I_b}&amp;lt;/math&amp;gt;.&amp;lt;br /&amp;gt;Es wird &amp;lt;math&amp;gt;U_E-0{,}7\,\mathrm{V}&amp;lt;/math&amp;gt; verwendet, da von der Steuerspannung etwa &amp;lt;math&amp;gt;0{,}7\,\mathrm{V}&amp;lt;/math&amp;gt; an der Basis-Emitter Strecke des Transistors abfallen. Statt &amp;lt;math&amp;gt;0{,}7\,\mathrm{V}&amp;lt;/math&amp;gt; kann man auch den Wert aus dem Datenblatt nehmen, sollte er im Datenblatt angegeben sein. Bei Darlington-Transistoren sollte mit einem Abfall von &amp;lt;math&amp;gt;1{,}4\,\mathrm{V}&amp;lt;/math&amp;gt; gerechnet werden, wenn sich im Datenblatt nichts anderes findet.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Beispiel 1 ===&lt;br /&gt;
*Transistor: BC328&lt;br /&gt;
*Der Verbraucher benötigt einen Strom von maximal &amp;lt;math&amp;gt;I_c = 100 \mathrm{mA}&amp;lt;/math&amp;gt;. &lt;br /&gt;
*&amp;lt;math&amp;gt;h_{FE}&amp;lt;/math&amp;gt; ist 100 (Datenblatt), gerechnet wird jedoch mit einer abgeschätzten Stromverstärkung in Sättigung von &amp;lt;math&amp;gt;\frac{h_{FE}}{3.3} = 30&amp;lt;/math&amp;gt; (Erfahrungswert oder nachgemessen).&lt;br /&gt;
*Daraus folgt: &amp;lt;math&amp;gt;I_b=\frac{100 \mathrm{mA}}{30} = 3,3 \mathrm{mA}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Der Mikrocontroller sei vom Typ ATmega oder ATtiny und liefert bei einer Versorgungsspannung von 5V abzüglich 10% Toleranz mindestens 4,5 Volt bei 3,3mA. Weiter fallen 0,7 V an der BE-Strecke ab, also bleiben ca. 3,8 V.&lt;br /&gt;
*&#039;&#039;&#039;Rb&#039;&#039;&#039; = &amp;lt;math&amp;gt;\frac{3,8\,\mathrm{V}}{3,3\,\mathrm{mA}} = 1150\,\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
*Man wird hier also einen Basiswiderstand von &amp;lt;math&amp;gt;1 \mathrm{k}\Omega&amp;lt;/math&amp;gt; wählen. &lt;br /&gt;
:&#039;&#039;&#039;Merke&#039;&#039;&#039;: Bei dieser Berechnung abrunden, damit ein sicheres Schaltverhalten auch bei Exemplarstreuungen des Transistors gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel Transistor BC547B (von NXP) mit max. 40 mA Last ===&lt;br /&gt;
&lt;br /&gt;
NXP Datenblatt: http://www.nxp.com/documents/data_sheet/BC847_BC547_SER.pdf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_{FE}&amp;lt;/math&amp;gt; ist minimal 100 (Datenblatt) bei 2&amp;amp;nbsp;mA Kollektorstrom. Ein Blick ins Kennlinienfeld verrät, dass &amp;lt;math&amp;gt;h_{FE}&amp;lt;/math&amp;gt; auch bei 40&amp;amp;nbsp;mA Kollektorstrom noch in diesem Bereich liegt. Aber, etwas versteckt bei den Daten und der Kennlinie zu &amp;lt;math&amp;gt;V_{CEsat}&amp;lt;/math&amp;gt; (der Kollektor-Emitter-Sättigungsspannung) findet man, dass &amp;lt;math&amp;gt;\frac{I_C}{I_B} = 20&amp;lt;/math&amp;gt; bei Sättigung ist, und das ist der gewünschte Zustand. Also rechnet man mit einer Stromverstärkung in Sättigung von 20.&lt;br /&gt;
&lt;br /&gt;
Daraus folgt: &amp;lt;math&amp;gt;I_b=\frac{40\,\mathrm{mA}}{20} = 2\,\mathrm{mA}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller sei vom Typ ATmega oder ATtiny und liefert bei einer Versorgungsspannung von 5&amp;amp;nbsp;V abzüglich 10&amp;amp;nbsp;% Toleranz mindestens 4,5&amp;amp;nbsp;Volt bei 2&amp;amp;nbsp;mA. Etwa 0,78&amp;amp;nbsp;V fallen an der BE-Strecke ab (Datenblatt des BC547B, aus Kennlinie geschätzt), also bleiben ca. 3,75&amp;amp;nbsp;V.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Rb&#039;&#039; = &amp;lt;math&amp;gt;\frac{3,75\,\mathrm{V}}{2\,\mathrm{mA}} = 1875\,\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man wird hier also einen Basiswiderstand von &amp;lt; 1,8 kΩ, beispielsweise 1,5 kΩ wählen.&lt;br /&gt;
&lt;br /&gt;
== Ältere Mikrocontroller ==&lt;br /&gt;
&lt;br /&gt;
Mikrocontroller aus älteren Baureihen können oft nur wenig Strom liefern, viel weniger als beispielsweise die [[AVR]]s. So können etliche [[8051]]-Varianten nur einen Basistrom von 50 µA liefern, da diese über [[Ausgangsstufen Logik-ICs | Open Collector]] Ausgänge verfügen. Die oben gezeigte Schaltung ist dann ungeeignet, besser ist die folgende Schaltung. Doch Vorsicht, dabei ist der Transistor durchgesteuert, wenn der Mikrocontroller sich im Reset befindet!&lt;br /&gt;
&lt;br /&gt;
[[bild:t_a_s_oc.png]]&lt;br /&gt;
&lt;br /&gt;
== Offene Basis bei Reset ==&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Thema ist eine offene Basis: Ist ein Mikrocontroller im Reset, sind die Ausgänge meist hochohmig. Folglich hängt die Basis des Transistors, der nur über einen Basiswiderstand mit einem Portpin verbunden ist, hochohmig in der Luft. Das ist bei bipolaren Niedervolt-Transistoren zwar oft kein Problem, starke Störeinstrahlungen können jedoch bewirken, dass der Transistor mindestens teilweise leitet. Man vermeidet so etwas, in dem man die Basis definiert gegen Masse abschließt. Dies erfolgt mit einem zusätzlichen Widerstand zwischen Basis und Masse, meist im Bereich zwischen 50K-1M. Je größer der Widerstand, um so empfindlicher ist die Schaltung gegen elektromagnetische Umwelteinflüsse. Je niedriger dieser Widerstand, um so mehr Strom verbraucht die Schaltung im durchgesteuerten Zustand. In unkritischen Umgebungen hat sich ein Wert von 1M bewährt, im Automobilbereich verwendet man hingegen besser 100 K. &lt;br /&gt;
&lt;br /&gt;
Bei der Berechnung des Basiswiderstandes muss man natürlich den Strom, der durch diesen Abschlußwiderstand fließt (&amp;lt;math&amp;gt;\mathrm{I}=\frac{\mathrm{U_{BE}}}{\mathrm{{R}}}&amp;lt;/math&amp;gt;), berücksichtigen. Denn dieser wird ja nicht in der Basis wirksam. Der Basiswiderstand ist also entsprechend niedriger auszulegen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Transi2.gif]]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-374719.html#new Diskussion im Forum]&lt;br /&gt;
* Artikel [[Transistor]] mit weiteren Tipps&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Gerber-Tools&amp;diff=105336</id>
		<title>Gerber-Tools</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Gerber-Tools&amp;diff=105336"/>
		<updated>2022-08-03T11:47:42Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Gerber Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gerber-Tools sind Programme, die es erlauben die von fast allen [[Schaltplaneditoren|Platinenlayoutprogrammen]] erzeugbaren Gerberfiles zu betrachten, zu überprüfen und eventuell sogar zu manipulieren. Das beginnt mit Tools, die es erlauben die Platinen zu drehen und miteinander zu verbinden bzw. mehrere identische zu größeren Panelen (sog. Nutzen) zusammenzufügen, um sie rationeller fertigen zu können. Es hört auf mit Programmen die in der Lage sind, Leiterbahnen und Bohrlöcher zu verschieben und zu ändern. Es ist guter Stil, seine eigene Arbeit mit einem Gerber-Viewer zu überprüfen, der &#039;&#039;&#039;nicht&#039;&#039;&#039; zum System des Platinenlayoutprogrammes gehört, mit der man die Platinendaten erzeugt hat, allein um systematische Fehler zu minimieren.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
&lt;br /&gt;
Gerber-Daten stellen alle Daten dar, die zur Fertigung einer Leiterplatte benötigt werden. Und eben auch nicht mehr. Also keine Informationen über Netze, Schaltpläne oder Details über Bauteile. Daher erlauben sie es, auch solche Informationen gegenüber dem Fertiger einer Leiterplatte geheim zu halten, im Gegensatz zur Herausgabe von Platinendaten (CAD-Boarddateien) direkt aus dem Programm. Ferner ist das Format robust und kompakt. Es enthält alle Angaben, die zur Steuerung eines Photoplotters zur Erstellung von Filmen für die Leiterplattenbelichtung benötigt werden. Es ist eng mit dem &amp;quot;G-Code&amp;quot; für CNC-Drehbänke und Fräsmaschinen verwandt, beschränkt sich aber auf eine zweidimensionale (xy) Darstellung. Gerber hat sich als weit verbreitetes Austauschformat für Leiterplattendaten etabliert; mittlerweile enthält so gut wie jedes Programm zur Platinenentwicklung eine Exportmöglichkeit für Gerber, und so gut wie alle Firmen, die Leiterplatten herstellen, können diese Daten einlesen und verwerten.&lt;br /&gt;
&lt;br /&gt;
== Historisches ==&lt;br /&gt;
&lt;br /&gt;
Mancher komplizierterer Sachverhalt lässt sich nur richtig und gut über die Geschichte dahinter erklären, und so auch verstehen und besser behalten. Darum hier etwas zur Geschichte von Gerber.&lt;br /&gt;
&lt;br /&gt;
Das heute gebräuchliche Format RS-274X (X für &amp;quot;extended&amp;quot;) hat einen Vorgänger RS-274D. Wobei RS274D tatsächlich ein Standard zur Steuerung von CNC-Maschinen war, von dem dann für die optischen Verfahren in der Platinenherstellung nur eine Teilmenge verwendet wurde. Der Hauptunterschied zwischen dem RS-274D und RS-274X ist, dass das alte RS-274D keine Informationen über die verwendeten Blenden enthält. Zu einer Gerber-Datei gehörte also immer noch eine Blendendatei. Beim RS-274X ist diese Information (und andere, z.B. die über das Zahlenformat) in der Gerber-Datei selber integriert. Für neue Entwicklung sollte &#039;&#039;&#039;kein&#039;&#039;&#039; altes RS-274D mehr verwendet werden. Auch das neuere RS-274X ist mittlerweile veraltet, und durch [https://www.mikrocontroller.net/articles/Gerber-Tools#Aktuell:_Gerber_Version_2 Gerber Version 2 (X2)] ersetzt worden, welches nun bevorzugt verwendet werden sollte.&lt;br /&gt;
&lt;br /&gt;
Da früher Photoplotter für den Blendenwechsel drehbare Blendenrevolver hatten, die entweder 6 oder 12 verschiedene Blenden aufnehmen konnten, war die Anzahl der verwendeten Blenden in einem Design beschränkt, wollte man nicht zuviele zeitraubende und teure manuelle Blendenwechsel vornehmen. Das Problem bestand bei späteren Vektorplottern nicht mehr in dieser Form, da diese die Blenden in gewissen Bereichen frei emulieren konnten. Heutige Plotter arbeiten komplett anders, so das die Daten auch anders aufbereitet werden müssen. Das Format der Gerber-Dateien hat sich als praktisches Austauschformat allerdings erhalten, auch wenn es jetzt nur noch so darstellt, &#039;&#039;&#039;als ob&#039;&#039;&#039; die Daten einen Photoplotter steuern würde. &lt;br /&gt;
&lt;br /&gt;
Entwickelt wurde das Gerber-Dateiformat von Gerber-Scientific. Später pflegte Barco und jetzt Ucamco die Spezifikationen dieses Formates. &lt;br /&gt;
&lt;br /&gt;
Auch heute ist das Gerber-Format noch nicht komplett, weil durch den technischen Fortschritt immer neue Möglichkeiten entstehen, über die das jeweilige aktuelle Gerber-Format keine Angaben enthalten kann. Es enthält z.B. keine Angaben über den Lagenaufbau. Solche Informationen müssen dem Fertiger daher in begleitenden Texten oder Zeichnungen übergeben werden.  Um diese Problem anzugehen, veröffentlicht Ucamco einen [http://www.ucamco.com/downloads Vorschlag (und weiter: Extending the Gerber Format with Attributes)] der das Gerber-Dateiformat um Attribute erweitert. Ucamco hat dazu eingeladen, zu diesem Vorschlag Kommentare und Verbesserungsvorschläge einzureichen, bevor er formell in die Gerber-Spezifikationen Eingang erhielt. Mittlerweile ist er als Gerber Version 2 umgesetzt.&lt;br /&gt;
&lt;br /&gt;
== Aktuell: Gerber Version 2 (X2) ==&lt;br /&gt;
Ganz aktuell im Herbst 2014 hat Ucamco &amp;quot;Gerber Version 2&amp;quot; vorgestellt, das aber sehr ähnlich und voll abwärtskompatibel zu RS-274X sein will. Dazu findet sich deutsche [https://www.ucamco.com/files/downloads/file/131/the_gerber_file_format_version_2_faq_de.pdf?ffadb605ad51e2ab5d87820700d9d26c FAQ] sowie das englische [https://www.ucamco.com/files/downloads/file/125/the_gerber_file_format_version_2_faq.pdf?01eb5acfbf71e38d1d90eb632fe2c30b Original].  Die Gerber Spezifikation befindet sich hier auf der Ucamco [http://www.ucamco.com/en/guest/downloads Downloadseite]. Daszu gibt es ein [http://www.ucamco.com/gerber/intro Video] sowie eine [http://www.mikrocontroller.net/topic/352281#3920473 Diskussion].&lt;br /&gt;
&lt;br /&gt;
== Details der Formate ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wikipedia hat eine Beschreibung des [http://de.wikipedia.org/wiki/Gerber-Format Gerber-Formates]. Die Spezifikation und weitere Informationen findet sich [http://www.ucamco.com/downloads hier als &amp;quot;The Gerber File Format Specification&amp;quot;]. Eine [http://www.artwork.com/gerber/274x/rs274x.htm weitere Erläuterung] hat Steve DiBartolomeo geschrieben. Zu den Gerberdaten im weiteren Sinne zählen auch sog. &amp;quot;Drillfiles&amp;quot;, welche die Ansteuerdaten für die CNC-Platinenbohrmaschinen enthalten. Sie sind den Gerberfiles meist sehr ähnlich, auch wenn sie anderslautende Befehle haben. Weit verbreitet für diesen Zweck sind unter anderem Bohrautomaten der Firma Excellon, und so hat das Excellon-Dateiformat eine recht weite Verbreitung gefunden. Eine Beschreibung des Excellon-Dateiformates findet sich auf der Homepage von [http://www.excellon.com/manuals/program.htm Excellon]. Bohrdaten können aber auch im Gerberformat dargestellt werden. Sie bilden dann ein eigenes Gerberfile. Im Allgemeinen sollten aus praktischen Gründen immer mehrere Bohrdateien pro Platine verwendet werden: Eine Datei für durchkontaktierte (mit Innenverkupferung, &amp;quot;Via&amp;quot; genannt) und eine für nicht durchkontaktierte Bohrungen. Der Hintergrund ist, dass die Bohrungen für durchkontaktierte und nicht durchkontaktierte Bohrungen in zwei unterschiedlichen Arbeitsschritten erfolgen müssen. Bei Multilayerplatinen kann es für manche Lagen weitere Drillfiles geben, je nachdem es sich um &amp;quot;blind&amp;quot; oder &amp;quot;buried&amp;quot; Vias handelt, für die naturgemäß Bohrungen nicht in allen Lagen vorhanden sind. Fräsungen (für Platinenumrisse und Aussparungen) haben ein eigenes Gerberlayer, in denen die zu fräsenden Konturen eingezeichnet sind. Da Bohrungen ab 2 mm Durchmesser gefräst werden können und ab 4 mm Durchmesser gefräst werden sollten, besteht eventuell ein Entscheidungsfreiraum, um bestimmte Fräsungen besser als Bohrungen in ein Drillfile aufzunehmen oder bestimmte Bohrungen als Fräsungen in die Fräslage aufzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur des Formates ===&lt;br /&gt;
&lt;br /&gt;
Jede Kupferlage, aber auch Lötpasten- und Kleberschablone, Lötstopplack, Beschriftung etc. hat seine eigene Gerberdatei. Wenn vorhanden, getrennt nach Vorder- und Rückseite. Die Datei beginnt mit einem Header, im dem Allgemeines, wie das Einheitensystem (Inch oder mm), die Zahlendarstellung (Nullen unterdrückt, Stellen vor und nach dem Dezimaltrenner), und ob eine Lage gespiegelt oder positiv/negativ dargestellt wird. Eine Lötstoppmaske zum Beispiel enthält meist die gleichen Pads wie die korrespondierende Kupferlage, allerdings etwas größer. Die Darstellung erfolgt aber im Gegensatz zur Kupferlage, wo die Pads &amp;quot;Inseln&amp;quot; sind, negativ, was &amp;quot;Löcher&amp;quot; in der die ganze Platine bedeckenden Lötstoppschicht bedeutet. Es folgt eine Blendentabelle. Hierbei wird eine Anzahl von Blenden in Form und Größe definiert. Daran anschliessend Zeilen mit X- und Y-Koordinaten, die entweder mit geschlossener (nur Positionswechsel) oder offener Blende (&amp;quot;Draw&amp;quot;, es wird ein &amp;quot;Strich&amp;quot; gezogen, die Blendenanweisung definiert seine Breite), angefahren werden. Es gibt auch Positionen, die mit geschlossener Blende angefahren werden, und wo am Zielort die Blende kurz geöffnet wird (&amp;quot;Blinks&amp;quot; oder &amp;quot;Flashes&amp;quot;). Diese werden verwendet, um speziell Pads darzustellen. Die Form und Größe der Blende bestimmt hierbei die Form und Größe des erzeugten Pads. Leiterbahnstücke gleicher Form werden nicht als Blink, sondern als Draw mit gleichem Anfangs und Endpunkt (&amp;quot;Null-Länge&amp;quot;) dargestellt. Diese konsequente Trennung von Pads als Blink und Leiterbahnen als Draw ermöglicht es, leichter Änderungen an den Pads vornehmen zu können, in dem man dem Pad eine andere Blendendefinition zuweist. Das gilt auch für mit dem Pad im Zusamenhang zusehenden Blinks für Lötstoppmasken und besonders Pasten- und Klebstoffmasken, die oft vom Bestücker für seinen individuellen Herstellungsprozess angepasst werden müssen. Das Gerberformat enthält auch Anweisungsmöglichkeiten für Skalierung, Makros, Polygone, Drehungen, Kreise u. Kreissegmente, Kommentare etc. Große Flächen werden entweder durch einen Flächenbefehl als Polygon definiert, oder aber durch viele Striche emuliert (&amp;quot;stroke fill&amp;quot;). Die Dateiendung ist nicht einheitlich. Üblich ist es, alle Gerber Dateien mit .gbr, .ger oder .gerber enden zu lassen, und den speziellen Zweck im Dateinahmen unterzubringen (Beispiel: &amp;quot;PlatineProjektname-CopperTop.gbr&amp;quot;), oder aber spezielle Endungen für die jeweilige Gerberlage entsprechend ihrer Verwendung zu benutzen. Ein spezielles System existiert hierbei nicht, jedes Programm handhabt diese auf seine Weise. Eine sehr alte Tradition aus DOS-Zeiten (vermutlich Orcad) ist aber:&lt;br /&gt;
*.BOT  Kupferflaechen Loetseite&lt;br /&gt;
*.drl  Bohrfile (&amp;quot;Drill Rack&amp;quot;, Bohrerliste)&lt;br /&gt;
*.drd  Excellon-Bohrdaten (es müssen aber zwei Bohrdatenlisten existieren. Einmal für durchkontaktierte und einmal für nicht durckontaktierte Bohrungen, weil die Löcher dafür in unterschiedlichen Bearbeitungsstufen gebohrt werden müssen)&lt;br /&gt;
*.dri  Bohrinfo (Statistik über Bohrungen, Bohrerliste)&lt;br /&gt;
*.mnt  Pick and Place Bauteilseite (nur SMD)&lt;br /&gt;
*.mnb  Pick and Place Loetseite (nur SMD, bei Bauteilen auf beiden Seiten)&lt;br /&gt;
*.SMB  Loetstoppmaske Loetseite (Solder Mask Bottom)&lt;br /&gt;
*.SMT  Loetstoppmaske Bestueckungsseite (Solder Mask Top)&lt;br /&gt;
*.SST  Bestueckungsplan Bauteilseite (Silk Screen Top)&lt;br /&gt;
*.SSB  Bestückungsplan Loetseite (Silk Screen Bottom)&lt;br /&gt;
*.TOP  Kupferflaechen Bestueckungsseite&lt;br /&gt;
*.CRT  Lötpastenmaske Bestueckungsseite (Cream Top)&lt;br /&gt;
*.CRB  Lötpastenmaske Lötseite (Cream Bottom)&lt;br /&gt;
*.GLT  Klebermaske Bestueckungsseite (Glue Top)&lt;br /&gt;
*.GLB  Klebermaske Loetseite (Glue Bottom)&lt;br /&gt;
*.KOT  Keepout Bestueckungsseite &lt;br /&gt;
*.KOB  Keepout Loetseite&lt;br /&gt;
*.OUT  Outline&lt;br /&gt;
&lt;br /&gt;
andere Endungen:&lt;br /&gt;
*.NCD  Drillfile&lt;br /&gt;
*.TOL  Toolfile&lt;br /&gt;
*.TC   Drillcounter&lt;br /&gt;
&lt;br /&gt;
Vorschläge für alternative Dateiendungssysteme finden sich im einschlägigen [http://de.wikipedia.org/wiki/Gerber-Format Wikipedia Artikel].&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
*Wenn man Gerber- und Drillfiles erstellt, verwenden man am besten für beide ein einheitliches Zahlenformat, sofern das Layoutprogramm dazu eine Wahl lässt. Richten Sie sich dabei in erster Linie an den Bohrdaten aus, da diese der Dreh und Angelpunkt der Toleranzen sind.&lt;br /&gt;
*Den Nullpunkt der Koordinaten legt man dabei idealerweise nach unten links, falls das Layoutprogram dazu eine Wahl lässt.&lt;br /&gt;
*Man sollte nach Möglichkeit nur noch Gerber RS-274X (&amp;quot;Extended Gerber&amp;quot;) oder besser noch &#039;&#039;&#039;[https://www.mikrocontroller.net/articles/Gerber-Tools#Aktuell:_Gerber_Version_2_.28X2.29 Gerber Version 2 (X2)]&#039;&#039;&#039; verwenden.   &lt;br /&gt;
*Als standardmäßige Formateinstellung für Gerberdaten empfielt sich dabei 3.3 metrisch. Hintergrund: Die IPC Spezifikation empfiehlt, die höchste Auflösung zu verwenden.&lt;br /&gt;
*Man verwendet nach Möglichkeit kein &amp;quot;Stroke fill&amp;quot; für Kupferflächen, sondern einen Polygon-Befehl. Leider lässt das nicht jedes Programm zu. Eine Begründung für die Vermeidung findet sich hier unter [https://www.ucamco.com/en/guest/downloads &amp;quot;Painting considered harmful&amp;quot;].&lt;br /&gt;
* Für Pads gilt ähnliches in noch verschärfterer Form: Pads sollten nach möglichkeit immer &amp;quot;Blinks&amp;quot; sein. Allerdings ist das bei exotischren Padformen nicht so ohne weiteres möglich.&lt;br /&gt;
* Alle Lagen &amp;quot;in normaler&amp;quot; Ansicht ausgeben. D.h. so, wie man sie sehen würde, wenn man mit einem Röntgenblick von der Bauteilseite durch die Platine schauen würde. Schriften auf der Unterseite die im fertigen Objekt normal lesbar sein sollen, erscheinen dabei gespiegelt, aber die Lagen selber sollten im allgemeinen nicht gespiegelt sein. Der Grund dafür ist [https://www.mikrocontroller.net/topic/377526?goto=new#4293772 hier] diskutiert.&lt;br /&gt;
* Eine Platinenbeschreibung in einem allgemein lesbaren Format (z.B. PDF oder TXT, &#039;&#039;&#039;nicht&#039;&#039;&#039; die obskuren Formate irgendwelcher Textverarbeitungssysteme) dabeilegen. Ausser Informationen über Lagenaufbau und Abmessungen sollte diese Beschreibung eine Liste aller Gerber- und Bohrfiles enthalten, mit einer &#039;&#039;&#039;expliziten Nennung&#039;&#039;&#039; der Lage, für die sie gedacht sind. Das gilt besonders für Innenlagen, die nicht nur einfach durchnummeriert sein sollten, sondern es sollte &#039;&#039;&#039;explizit&#039;&#039;&#039; angegeben werden, in welcher Position sich die &amp;quot;Nummer&amp;quot; zur Ober- oder Unterseite befindet. Bei einem vierlagigen Aufbau ist es sonst nicht eindeutig klar, das &amp;quot;Layer 1&amp;quot; die Lage direkt unter der Oberseitenlage ist.&lt;br /&gt;
* Kupferlagen sollten nicht komplett negativ sein, auch wenn sie negative Teile enthalten. Aber Lötstoppmaske, Lotpastenmaske und Klebstoffmaske schon.&lt;br /&gt;
* Die Lagen sollten keinen Versatz gegeneinander haben.&lt;br /&gt;
* Es sollte eine Konturlage existieren, die alle (Aussen-) Konturen der Platine enthält.&lt;br /&gt;
* Für durchkontaktierte und nicht durchkontaktierte Bohrungen sollten separate Bohrfiles existieren. Diese sind dann aber im [http://en.wikipedia.org/wiki/Excellon_format Excellon-Format] und nicht Gerber. Bei Multilayer Aufbauten sind für jeden separaten Bohrvorgang separate Borfiles nötig (Achtung bei blind und buried Vias). Ist, wegen irgendeiner Besonderheit der speziellen Platine, ein sonst üblicher Bohrvorgang nicht vorhanden, so sollte das auch &#039;&#039;&#039;explizit&#039;&#039;&#039; im begleitenden Text vermerkt werden.&lt;br /&gt;
* Ein konkreter Fall mit Fragen zur Erstellung von Gerberdaten (aus Target, gilt aber allgemein) findet sich [http://www.mikrocontroller.net/topic/319625#new hier].&lt;br /&gt;
&lt;br /&gt;
== Alternativen zu Gerber ==&lt;br /&gt;
&lt;br /&gt;
Viele Leiterplattenhersteller aktzeptieren auch die direkten Entwicklungsdaten für die meisten weitverbreiteten Leiterplattenlayout Programme. Insbesondere gilt das für Eagle, Kicad, Target, Altium und Orcad. Es empfielt sich darum, den gewünschten Leiterplattenhersteller nach den Formaten, die er verarbeiten kann, zu fragen. Allerdings gibt man in diesem Falle wesentlich mehr Daten heraus, als für eine Produktion nötig ist. Insofern kann das als Sicherheitsrisiko gesehen werden, was aber für Amateure eher nebensächlich sein dürfte.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres, wesentlich schwerwiegenderes, Risiko liegt aber darin, das die CAD-Systemdaten wesentlich interpretierfähiger als die Gerberdaten sind, was zu fatalen Missverständnissen führen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Produktion müssen die Daten aber auf jeden Fall vom Leiterplattenhersteller speziell für seine Anlagen aufbereitet werden. Darum, und um eine Kompatibilität mit den Daten anderer CAD-Systeme zu erhalten, werden die Daten dann im allgemeinen doch in das Gerberformat umgewandelt, da Gerber als Austauschformat den kleinsten gemeinsamen Nenner darstellt. Weil Gerber für den Austausch am weitesten verbreitet ist, haben die Leiterplattenhersteller darin auch oft die meiste Erfahrung und meiste Übung und oft feststehende Vorgehensweisen im Sinne der Qualitätssicherung.&lt;br /&gt;
&lt;br /&gt;
Daher ist es angeraten, seine Daten im Gerberformat bei den Leiterplattenherstellern einzureichen.&lt;br /&gt;
&lt;br /&gt;
Eine Diskussion zum Thema &amp;quot;CAD-Dateien statt Gerber&amp;quot; findet sich [http://www.mikrocontroller.net/topic/319065#new hier im Forum].&lt;br /&gt;
&lt;br /&gt;
Als direktes alternatives Dateiformat zu Gerber wäre ODB++ zu nennen, welches aber proprietär von Valor ist. Eine Diskussion zum Thema &amp;quot;ODB++ statt Gerber&amp;quot; findet sich [http://www.mikrocontroller.net/topic/320716#new hier im Forum]. Desweiteren entwickelte [http://www.ipc.org/de/default.aspx der IPC] mit [http://ipc-2581.com/ IPC-2581] ein XML basiertes Format, das sich bisher aber kaum verbreiten konnte. Es gibt wohl neuere Ansätze, IPC-2581 und Gerber aneinander anzugleichen. Auch dazu veröffentlichte Ucamco einen [http://www.ucamco.com/downloads Vorschlag (Und weiter: IPC-2581 meets the Gerber File Format)] der das Gerber-Dateiformat um Angaben z.b. zum Lagenaufbau erweitert.&lt;br /&gt;
&lt;br /&gt;
Ein [http://www.ilfa.de/Publikationen Plädoyer für Gerber (unter &amp;quot;Datenformate: Gerber&amp;quot;)] hält auch A.Wiemers.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich zählt das Gerberformat zu den Vektorgrafikformaten. Daher ist hypothetisch auch z.B. [http://de.wikipedia.org/wiki/SVG das SVG-Format] geeignet, um Platinendaten zu transportieren und zu manipulieren. Allerdings ist das bisher nicht üblich, und u.U. riskant, weil eine identische Darstellung in verschiedenen Programmen aufgrund der Komplexität von SVG nicht immer gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
== Gerber Tools == &lt;br /&gt;
* [https://gerber.ucamco.com Reference Gerber Viewer]: Ucamco, Inhaber der IP-Rechte für das Gerber-Dateiformat, bietet eine einfach zu bedienende Referenz für X1- und X2-Gerber-Dateien, als praktische Ergänzung zur  [https://www.ucamco.com/en/file-formats/gerber/downloads schriftlichen Spezifikation]. Es gibt Unterstützung für Bohrdateien im NC- oder Excellon-Format und für Gerber X2-Attribute. Es ist außerdem ein einfaches Tool zur Überprüfung der PCB-Fertigungsdaten. Da der Reference Gerber Viewer ein Cloud-basierter Online-Webdienst ist,  muss zwar keine Software heruntergeladen und installiert werden, aber die Gerberdateien müssen natürlich hochgeladen werden. &lt;br /&gt;
&lt;br /&gt;
* [http://www.GerberLogix.com GerberLogix]: Einfach zu bedienender Extended Gerber Viewer. Weitere Formate sind Excellon 1/2. Highlight ist die Automatische Bemaßung von Leiterbahnen. Für Hobbyisten Kostenlos.&lt;br /&gt;
&lt;br /&gt;
* [http://www.PCB-Investigator.com PCB-Investigator]: Umfangreiche Funktionalität zum vergleichen verschiedenster Leiterplatten Daten. Wandelt alle Daten auch in 3D um. ODB++, IPC 2581, GenCAD und Gerber Daten. &lt;br /&gt;
&lt;br /&gt;
* [http://ruggedcircuits.com/gerbmerge/ Gerbmerge] (z.Zt. - 03.2018 - Error 404 File not found): Ein unter Python geschriebenes Tool, mit denen einzelne Platinen zu größeren Nutzen zusammengefügt werden können. Seit 2008 GNU GPL. Author: Andrew Sterian et al. Von Gerbmerge gibt es mehrere Forks/Versionen für unterschiedliche Zwecke (zoll/metrisch ec.) Mittlerweile gibt es auch eine Python 3 Version. Es handelt sich um ein Kommandozeilentool. Eine Kurzbeschreibung der Bedienung und ein Verweis auf die unterschiedlichen Versionen findet sich [https://www.mikrocontroller.net/topic/184080#4226884 hier]. Die Dokumentation zum (originalen) Gerbmerge ist [http://www.gedasymbols.org/user/stefan_tauner/tools/gerbmerge/doc/ hier] zu finden:  Die Python 3 Version findet sich [https://github.com/digistump/gerbmerge3 hier]. &lt;br /&gt;
&lt;br /&gt;
* [http://www.graphicode.com/GC-Prevue_Gerber_Viewer gc-preview]: Ein Programm, um Gerberdaten ansehen und drucken zu können. Leider keine Freeware mehr.&lt;br /&gt;
&lt;br /&gt;
* Die Firma Graphicode bietet auch noch andere, im allgemeinen kostenpflichtige Software an, mit der diverse Plotter- und Platinenformate, u.a. auch Gerberdaten, ineinander überführt werden können, wie z.B. [http://www.graphicode.com/products/cam GC-CAM-Edit].&lt;br /&gt;
&lt;br /&gt;
* [http://www.softwarecompanions.com/gerbview.html GerbView (1)]: Ein Programm, das in der Lage ist, verschiedene Platinen- und Plotterformate, darunter eben auch Gerberdaten, zu sichten, ineinander zu convertieren, zu markieren und zu drucken. 30 Tage Testversion. &lt;br /&gt;
&lt;br /&gt;
* [http://iut-tice.ujf-grenoble.fr/kicad/ GerbView (2)]: Ebenfalls unter dem Namen GerbView existiert ein anderer Gerberviewer als Bestandteil von [[KiCAD]]. Dieser erlaubt das Betrachten der Gerberfiles und den Export als Platine in PCBnew, welches ebenfals Bestandteil von KiCAD ist. Unter KiCAD/PCBnew kann diese Platine dann manipuliert, verändert und wieder als Gerberfile exportiert werden. Allerdings können so nur Gerber-RS274X Daten eingelesen und exportiert werden. Blinks werden aber beim Reimport als Durchkontaktierung dargestellt. Insgesammt ist dieses Feature ziemlich &amp;quot;buggy&amp;quot; und unperfekt. Letzteres ist aber aus grundsätzlichen Erwägungen heraus auch schwer zu ändern. Siehe [http://www.mikrocontroller.net/topic/263576#2739329 Forumsbeitrag].&lt;br /&gt;
&lt;br /&gt;
* [http://gerbv.gpleda.org/index.html Gerbv]: Ebenfalls ein Open Source Gerberviewer. Er gehört zum gEDA Projekt. Funktioniert hervorragend und hat viele Features. Verarbeitet RS-274-X und Excellon-Bohrdaten, jedoch kein RS-274 (Standard-Gerber). Dieser Gerberviewer ermöglicht auch das Löschen einzelner Strukturen und das Umskalieren, Verschieben, Spiegeln und Drehen der gesamten Gerberdatei. Gespeichert wird nur Extended Gerber. Im aktuellen Quellcode (git-Version, 2016-09-22; noch nicht als Release verfügbar) gibt es Möglichkeiten zur &#039;&#039;Panelization&#039;&#039;, indem man mehrere eingelesene Lagen beim Export miteinander vereinigen kann; zusammen mit den bereits genannten Drehungen oder Verschiebungen (die sich auch auf mehrere ausgewählte Lagen eines Teil-Layouts gleichzeitig anwenden lassen) kann man sich auf diese Weise seinen eigenen Nutzen zusammenstellen. Zur Bedienung des Programms siehe den [https://www.mikrocontroller.net/topic/184080#5363888 Forumsbeitrag] von Jörg Wunsch.  In den Repositories der Linux Distributionen und des gEDA-Projektes findet sich leider meist eine ältere Version. Der Sourcecode einer aktuelleren Version findet sich z.B. [https://sourceforge.net/projects/gerbv/ hier] bei  Sourceforge.&lt;br /&gt;
&lt;br /&gt;
* [http://www.pentalogix.com ViewMate]: ist eine professionelle CAM-Software, die als Viewer kostenlos abgegeben wird. Die Funktionen zum Ändern und Speichern sind gesperrt, aber zum Überprüfen der Ausgabedaten hervorragend geeignet (auch Bohrdaten). Dies kostenlose Version läuft auch recht gut unter wine (Debian squeeze). &lt;br /&gt;
&lt;br /&gt;
* [http://www.mentor.com/products/pcb-system-design/downloads/odb-viewer VUV]: ODB++ Viewer, der von der Firma Valor, jetzt von Mentor übernommen, kostenlos abgegeben wird.&lt;br /&gt;
&lt;br /&gt;
* [http://www.cenon.info/ Cenon]: Cenon ist eine Open Source Software um speziell Vektorgrafiken zu betrachten, zu manipulieren und zu konvertieren. Das Gerberformat ist grundsätzlich als Vektorgrafikformat anzusehen. Cenon kann auch Standard und Extended Gerber einlesen, und als Extended Gerber wieder abspeichern. Es können einzelne Strukturen in Gerber selektiert, kopiert, gelöscht, verschoben, gedreht und eingefügt werden. Ebenso können Mehrfachnutzen erstellt werden. Es kann auch in oder aus anderen Vektorformaten wie PDF, PS, HPGL, DXF konvertiert werden. Die Bedienung des Programmes ist manchmal sehr pfiffig, aber leider meistens sehr gewöhnungsbedürftig. Es ist z.B. unbedingt darauf zu achten, das die Dateien adäquate Endungen haben, als Gerber lässt Cenon nur .ger und .gerber zu. Bei der Zusammenarbeit mit anderen Programmen ist es daher leider oft nötig, die Dateien ständig umzubenennen. Unter Debian Squeeze existiert ein Cenon Package. Leider müssen z.Z. (17. Nov. 2011) nach der Installation noch die GNUstep Librarys manuell von /usr/lib/GNUstep/Library nach /usr/lib/GNUstep/Cenon oder /usr/local/lib/GNUstep/Cenon kopiert werden. Es ist dringend anzuraten, die  [http://www.cenon.info/frameLoad_de.html?support_faq_de.html Cenon FAQ] und das [http://www.vhf-group.com/vhf-interservice/download/doc/Cenon_de.pdf Cenon Handbuch] zu lesen.&lt;br /&gt;
&lt;br /&gt;
* [[Media:PyGerberAnalyse_B5_13Jun2013.zip]] Absolut primitives Programm zur Gerber-Daten Analyse. Test-Status. Geschrieben in Python3. Kann Gerber247d und Gerber247x einlesen und teilweise analysieren und die Analyse als Datei abspeichern, aber keine Makros darin. Kann auch Drill Files einlesen. Kann Gerber- oder Drill-Files in rudimentärer Form anzeigen (z.B. OHNE Aperturen, kein Maßstab, ist somit für fast nichts zu gebrauchen). Das Programm besteht aus den drei Teilen PyGerbAnalyse_B5_13Jun2013.py, ClassDefBasicAnalysisResults_13Jun2013.py und ClassDefGerberLayer_13Jun2013.py. Gestartet wird nur PyGerbAnalyse_B5_13Jun2013.py, die anderen beiden Python Files enthalten Klassendefinitionen. Steht unter GNU-GPL. Autor Bernd Wiebus. KEINE GARANTIE! Testberichte, Hinweise, Informationen und Anregungen sowie dringend benötigte Testdateien mit normalen und exotischen, auch älteren, Gerberformaten von unterschiedlichen Layoutprogrammen bitte an bernd.wiebus@gmx.de senden. DANKE im Voraus dazu! Es ist eine Python3 Version des unter dem BASIC-Dialekt Gambas2 geschriebenen ebenso primitiven Viewers, der unter [[Media:GerbAnalyse_RevA6.zip]] zu bekommen ist. Python3 ist unter Linux bei den meisten Distributionen als Packet installierbar. Windows User könnten vieleicht Möglichkeiten in dieser [http://www.mikrocontroller.net/topic/280970#new Diskussion] finden.&lt;br /&gt;
&lt;br /&gt;
* [http://www.gerber-viewer.com/ gerber-viewer.com]: Für die schnelle Kontrolle von Gerberdaten eignet sich auch ein online Viewer. Einfach Zip-Archiv oder Gerberdaten auswählen, uploaden und online begutachten. Datensicherheit beachten! Gerberdaten werden dabei herausgegeben!&lt;br /&gt;
&lt;br /&gt;
* [http://www.pcb-viewer.de/ pcb-viewer.de]: Zum Betrachten von Gerber- (im .zip) und Eagle-Dateien (.brd), weiteres siehe [https://www.mikrocontroller.net/topic/452032 Forumsbeitrag].&lt;br /&gt;
&lt;br /&gt;
* [http://www.numericalinnovations.com/collections/fab-3000-gerber-cam?gclid=CLj1-_GW6LsCFclQ3godr3sASQ FAB 3000 V7]: Ein Gerberviewer und Editor von Numerical Innovations. Es existiert auch eine Trial Version.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/aitjcize/QCamber QCamber] Relativ neue Software, über die noch wenig bekannt ist.&lt;br /&gt;
&lt;br /&gt;
* [http://flatcam.org/ FlatCAM] Diese Software erstellt aus Gerberdaten und Bohrdaten G-Code für Bohrmaschinen oder für Fräser um den Platinenumriss (mit Haltestegen) freizufräsen, oder auch zum &amp;quot;Konturfräsen&amp;quot;. Beim &amp;quot;Konturfräsen&amp;quot; wird eine Leiterplatte nicht geätzt, sondern gefräst. Naturgemäß geht letzteres nur sinnvoll für Einzelstücke oder Kleinserien, und auch nur für relativ grobe Layouts. Desweiteren kann auf diesem Wege auch G-Code zum Fräsen bzw. Gravieren von Frontplatten o.ä. erzeugt werden, wenn man die Strukturen in einem Layoutprogramm passend anlegt, als Gerberdaten exportiert und dann mit dieser Software bearbeitet. Siehe [http://www.mikrocontroller.net/topic/338193#3717135 Forumsbeitrag 1] und [https://www.mikrocontroller.net/topic/369261 Forumsbeitrag 2].&lt;br /&gt;
&lt;br /&gt;
* [http://reprap.org/wiki/PCB_Milling#Visolate Visolate] erstellt aus Gerberdaten G-Code für Fräsmaschinen nach dem sog. Voronoi-Verfahren. Dabei werden nicht die Umrisse jeder Leiterbahn gefräst, sondern eine einzelne Isolierbahn zwischen jeweils zwei Leiterbahnen. Das spart natürlich erheblich Bearbeitungszeit und reduziert den Werkzeugverschleiss, ist aber auch für Hochstromanwendungen interessant, bei denen die Leiterbahnen so breit wie möglich sein sollen. Ein weiterer Vorteil des Verfahrens ist, dass Fräsbahnen immer in einem stumpfen Winkel aufeinander stossen, so dass an den Übergängen keine Grate entstehen. [https://github.com/Traumflug/Visolate Visolate ist Open Source], Java-Binaries im Ordner releases/.&lt;br /&gt;
&lt;br /&gt;
* [http://www.zofzpcb.com ZofzPCB] Ein Gerber Viewer. Kann u.A. Gerber Daten in 3D Rendern. Freeware. Läuft aber z.Z. (Oktober 2014) nur unter Windows. Siehe: [http://www.mikrocontroller.net/topic/346675#new Forumsbeitrag]&lt;br /&gt;
&lt;br /&gt;
* [http://www.viewplot.com/ ViewPlot] Viewer (kostenlos), Editor (kostenpflichtig); Version 1.5 hat bessere/mehr Features als 2.0, bspw. einen DRC-Check (Abstandstest).  Läuft auch im Wine.  Funktioniert nicht, wenn %MOIN*% und %MOMM*% in einer Datei gemischt auftreten, was nach älteren Versionen der RS-274-X-Spec zulässig war, nach der aktuellen jedoch nicht mehr.&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/450655#new Nadelbettadapter Skript] Ein Tool, welches per Python Skripting Daten für einen Nadelbettadapter erzeugt. Es geht dabei von Gerberdaten aus, die dann über den KiCad internen Gerberviewer in KiCad PCBnew importiert werden.&lt;br /&gt;
&lt;br /&gt;
*[https://imagetogerber.wordpress.com/ imagetogerber], Onlineconverter von Bilddaten in Gerber&lt;br /&gt;
&lt;br /&gt;
== Siehe auch == &lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/293100#new Forumsbeitrag]: Gerber Daten: wie erkenne ich, ob Bohrung metallisiert ist?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/311780#new Forumsbeitrag]: Gerberdatei für Lötstoppmaske&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/311426#new Forumsbeitrag]: Ein Klassiker - Gerberdaten und Blendendatei - RS274D vs. RS274X&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/310333#new Forumsbeitrag]: Kicad: Bohrdatei&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/309923#new Forumsbeitrag]: Gerbv Layoutkontrolle fehlerhafte Anzeige/ Ergebnisse?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/309765#new Forumsbeitrag]: Bohrdatei für fertige Leiterplatte&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/303326#new Forumsbeitrag]: gerber Preview gcprevue welche Version empfehlenswert?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/298632#new Forumsbeitrag]: Gerber Daten für Board Cutout (Altium)&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/307967#new Forumsbeitrag]: Kann mir wer Eagle zu Gerber exportieren&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/291090#new Forumsbeitrag]: Altium exportiert nicht korrekt in Gerber&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/262726#new Forumsbeitrag]: Gerber Daten (formate und Dateiendungen)&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/255449#new Forumsbeitrag]: Eagle CAM-Job / Itead Studio - Fehler in Gerber Dateien?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/255129#new Forumsbeitrag]: Layout (Gerber) in Nutzen umwandeln - suche Tool&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/241858#new Forumsbeitrag]: EAGLE: Genauigkeit für Gerber-Dateien einstellen - wo? wie?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/319065#new Forumsbeitrag]: CAD-Daten oder Gerberdaten herausgeben?&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/320716#new Forumsbeitrag]: Diskussion über ODB++ als Alternative zu Gerber.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Schaltplaneditoren]]&lt;br /&gt;
[[Category:Platinen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Monoflop&amp;diff=85916</id>
		<title>Monoflop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Monoflop&amp;diff=85916"/>
		<updated>2014-11-25T06:53:59Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Dead Links aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
Auf Deutsch monostabiler Multivibrator genannt. Dabei handelt es sich um eine Schaltung, welche nur einen stabilen Zustand besitzt. Der andere Zustand dauert nur eine bestimmte Zeit an. Damit ist es möglich, aus einem kurzen Impuls einen Impuls definierter Länge zu machen. Die Pulslänge ist über Bauteile am Monoflop einstellbar (meist eine RC-Kombination).&lt;br /&gt;
&lt;br /&gt;
Nach einem Startimpuls wird der Ausgang für eine definierte Zeit auf HIGH gesetzt. Nach Ablauf dieser Zeit fällt der Ausgang automatisch auf Low zurück. Das ist ein normales Monoflop. Allerdings gibt es auch welche, bei denen man den Puls verlängern kann, indem man einen neuen Triggerimpuls generiert. Dann startet die Pulszeit neu, ohne dass der Ausgang zwischendurch auf LOW fällt. Im Englischen heissen diese &#039;&#039;retriggerable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Pulsüberwachung ===&lt;br /&gt;
&lt;br /&gt;
Ein Monoflop kann genutzt werden, um ein Taktsignal zu überwachen. Das ist z.&amp;amp;nbsp;B. bei [[LED-Matrix | Multiplexschaltungen von LEDs]] von Vorteil, um einen Ausfall der Ansteuerung zu erkennen, wodurch sonst die LEDs zerstört würden.&lt;br /&gt;
&lt;br /&gt;
Wird nun die Pulszeit ein klein wenig länger gewählt als die Periodendauer des zu überwachenden Signals, wird das Monoflop ständig auf HIGH gehalten (dazu muss es natürlich ein &#039;&#039;retriggerable&#039;&#039; sein). Ist die Periodendauer des zu überwachenden Signals zu gross bzw. das Signal fehlt völlig, dann geht der Ausgang auf LOW und zeigt damit den Fehler an.&lt;br /&gt;
&lt;br /&gt;
=== Frequenz-Spannungswandler ===&lt;br /&gt;
&lt;br /&gt;
Viele Sensoren liefern ein frequenzmoduliertes, digitales Signal. Dies kann einfach und sicher über längere Strecken übertragen werden. Zur Auswertung muss es jedoch gemessen werden. Soll kein Mikrokontroller verwendet werden und nur eine analoge Auswertung erfolgen, kann dies mit einem Frequenz-Spannungswandler erfolgen.&lt;br /&gt;
&lt;br /&gt;
Dazu dimensioniert man ein Monoflop dermaßen, dass bei der höchsten Frequenz (=kleinste Periodendauer) die Pulsbreite des Monoflops ca. 90..95% der Periodendauer des Sensorsignals wird. Wird nun die Frequenz des Sensorsignals kleiner, vergrößert sich die Periodendauer des Signals, die Dauer des HIGH-Pulses bleibt aber gleich. Damit sinkt der Mittelwert des Signals. Über einen Tiefpass kann dieser gefiltert und anschließend angezeigt/gemessen werden. Das ist eine Anwendung von [[PWM]] als [[DA-Wandler]].&lt;br /&gt;
&lt;br /&gt;
== Bauteile ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.fairchildsemi.com/datasheets/LM/LM555.pdf NE555, alte bipolare Version]&lt;br /&gt;
* [http://focus.ti.com/docs/prod/folders/print/tlc555.html TLC555, Low Power CMOS Version]&lt;br /&gt;
* [http://www.nxp.com/documents/data_sheet/74HC_HCT123.pdf 74HC123, Dual retriggerable Monoflop, komplementärer Ausgang]&lt;br /&gt;
* [http://www.nxp.com/documents/data_sheet/74HC_HCT4538.pdf 74HC4538, Dual retriggerable Monoflop mit besseren Eigenschaften als 74HC123]&lt;br /&gt;
* [https://www.fairchildsemi.com/datasheets/CD/CD4538BC.pdf CD4538, klassische CMOS-Version davon, höherer Betriebsspannungsbereich]&lt;br /&gt;
* [http://www.zen22142.zen.co.uk/Circuits/Timing/24hour.htm 24 Hour Timer(engl.)], digitaler Langzeittimer bis 24h&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=81439</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=81439"/>
		<updated>2014-02-09T07:54:59Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Link erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [http://www.arm.com/products/processors/cortex-m/index.php ARM Cortex-M0/M3/M4] CPU. Diese Architektur ist speziell für den Einsatz in Microcontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es sieben STM32-Familien:&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1588.jsp STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1169.jsp STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1575 STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1605.jsp STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1521.jsp STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1295 STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1581 STM32W]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/internet/mcu/class/1734.jsp Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0 / Cortex-M3 / Cortex-M4F Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
*  4KB ... 256KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 4KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 20 ... 216 Pins als TSSOP, QFN, LQFP und BGA&lt;br /&gt;
* Derzeit sind über &#039;&#039;&#039;250&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle prefetch-hardware bis 120/168 MHz eine Geschwindigkeit erzielen soll, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet.&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für 8x40 Punkte (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei STM32F429 / STM32F439&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 140 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 2x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* RNG - Random Number Generator (STM32F2/4xx)&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr . . .&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation: ==&lt;br /&gt;
Die Dokumentation der STM32 ist zwar umfangreicher und komplexer z.B. die der [[AVR]], enthält aber dennoch alle nötigen Informationen. Sie teilt sich auf in mehrere Dokumente.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164486 STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00191185.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html ARMv7M Architecture Reference Manual] beschreibt detailliert den Prozessorkern, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
Der GCC (in seinen verschiedenen Binärdistributionen) ist der einzige ARM Compiler der [http://de.wikipedia.org/wiki/C%2B%2B11 C++11] unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [http://gnuarmeclipse.livius.net/blog/ GNU ARM Plug-in] (Bei Verwendung vom GCC-ARM-Embedded als Toolchain &amp;quot;Sourcery G++ Lite&amp;quot; auswählen, dieser sieht für eclipse gleich aus) (Linux, Windows)&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Turtelizer2 oder andere JTAG Programmieradapter&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows)&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDE&#039;s ====&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition]&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0 / F1 / F4 Hilfreiche Infos gibt es im [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE die mit dem Segger J-LINK funktioniert.&lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter GDB Debugger, Jlink/ST-Link, System view (Peripherie Register anzeigen) beim Debuggen, Project Wizzard&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/products/itag winIDEAiTag] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag Adapter.&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.atollic.com Atollic] (Lite Version (bis V2.3.0) ohne Code-Limit, auf GCC basierend. Die neueste Version ab V3 hat fast keine Beschränkungen mehr außer jetzt einen Code-Limit von 32kB. Außerdem werden jetzt die meisten ARM Familien unterstützt. )&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend)&lt;br /&gt;
* [http://www.code-red-tech.com Code Red] (GCC basierend)&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
[[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.pdf Ubuntu, eclipse, Code Sourcery, OpenOCD] ([http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.odt Das Gleiche im bearbeitbaren ODT-Format])&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html NonComercial] J-LINK-EDU für ca. 60,- zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), Keil, ...&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro]&lt;br /&gt;
* [http://www.st.com/internet/evalboard/product/219866.jsp ST-LINK], [http://www.st.com/internet/evalboard/product/251168.jsp ST-LINK/V2]&lt;br /&gt;
* Jedes STM32 Discovery board hat einen ST-Link für Programmierung/Debugging per SWD on-board, welcher auch für eigene STM32 Target Hardware benutzt werden kann (ca. 12,- bis 19,-€, je nach Typ).&lt;br /&gt;
* [http://www.raisonance.com/~rlink-debugger-programmer__microcontrollers__tool~tool__T018:4cn9ziz4bnx6.html Raisonance RLink]&lt;br /&gt;
* [http://www.amontec.com Amontec]&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] Personal Edition für ca. 60,- zu haben, läuft mit ADS, SDT, IAR, Vision und RVDS &lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50.- bei Amazon zu bestellen, oder als Eigenbau version (offenes Design) läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-Poligen Stecker, den man direkt auf die Demo-Boards, die auch einen 20-Poligen [[JTAG]]-Anschluss haben, einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen seperaten JTAG-Stecker, aber zumindest für das STM32F4 Discovery kann man sich leicht einen Adapter Pinheader-&amp;gt;JTAG Stecker selber bauen.&lt;br /&gt;
&lt;br /&gt;
Andere [[JTAG]] Adapter wie z.B. der ULink von Keil funktionieren nur mit dem Keil Compiler.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/colinkEx.htm unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.oocdlink.com/ OOCDLink]&lt;br /&gt;
* [https://github.com/texane/stlink Stlink]&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
* [http://capitanio.org/mlink/ Linux Demo Code für die Discovery&#039;s ST-Link Programmierung]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes.&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Bonnes&#039; Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Bonnes&#039; STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Austattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen . Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Ausser F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 1000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet ,man auch im Bootloader, unabhängig von dem wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootlaoder:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://code.google.com/p/stm32flash/ Open source flash program for the STM32 ARM processors using the ST serial bootloader (for Linux)]&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [http://www.hitex.com/fileadmin/pdf/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20.&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglich effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISR&#039;s, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokummentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird ([http://www.mikrocontroller.net/topic/312393#new Siehe Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assemblisiert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und dem GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE (Farnell Programm für Private)] &lt;br /&gt;
* [http://www.sander-electronic.de/be00069.html Sander]&lt;br /&gt;
* [http://www.tme.eu/de/katalog/index.phtml#cleanParameters%3D1%26search%3DSTM32F10%26bf_szukaj%3D+ TME] &lt;br /&gt;
* [http://teske-electronics.de/index.php?cPath=3_9_53 Teske electronics]&lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, Mouser, Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
&lt;br /&gt;
* [http://shop.embedded-projects.net/index.php?module=artikel&amp;amp;action=gruppe&amp;amp;id=14 Im Shop von Embedded Projects]&lt;br /&gt;
* [http://www.watterott.com/de/Boards-Kits/ARM/ARM-Cortex-M3 Cortex M3 bei Watterott]&lt;br /&gt;
* [http://www.raisonance.com/~primer-starter-kits__microcontrollers__tool~tool__T018:4enfvamuxbtp.html Primer und Primer2 von Raisonance]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.propox.com/products/t_174.html Propox, Header-Boards für 103R und 103V sowie Trägerplatine dafür]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://olimex.com/dev/index.html STM32 bei Olimex]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [http://www.de.rs-online.com/web/p/products/7458434/ STM32Discovery bei RS-Components] 12,65 € +MwSt.&lt;br /&gt;
* [http://www.segor.de/#Q=STM32 VL DISCOVERY] STM32 Discovery bei Segor&lt;br /&gt;
* [http://www.watterott.com/de/STM32F4Discovery STM32F4DISCOVERY] STM32F4 Cortex M4 Controller mit JTAG-Debugger auf der Platine bei Watterott für 16,66EUR.&lt;br /&gt;
* [http://www.conrad.de/ce/de/product/443910/ STM32F4 Discovery Kit bei Conrad] 17,11 €&lt;br /&gt;
* [http://www.mcu-raisonance.com/~open4-development-platform__microcontrollers__tool~tool__T018:g65gu6ghg2n.html/ Open 4 oder auch genannt Evo-Primer]&lt;br /&gt;
* [http://www.wayengineer.com/index.php?main_page=index&amp;amp;cPath=50_66&amp;amp;page=1&amp;amp;sort=3a WayEngineer]&lt;br /&gt;
* [http://thinkembedded.ch/ST-STMicroelectronics:::24.html Im Thinkembedded Shop] in der Schweiz / DiscoveryF4, div. ETT und Olimex Boarde ab 20,18 CHF / 16,15 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://shop.myavr.de/ARM-Produktlinie/STM32F4-Discovery.htm?sp=article.sp.php&amp;amp;artID=200072 Im myAVR Shop] DiscoveryF4 mit möglichem Zubehör 16,45 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://www.keil.com/boards/cortexm.asp Keil/ARM Demoboards]&lt;br /&gt;
* [http://www.phytec.de Phytec]&lt;br /&gt;
* [http://shop.myavr.de/index.php?sp=artlist_kat.sp.php&amp;amp;katID=37 verschiedene ARM Produkte und Erweiterungen bei myAVR]&lt;br /&gt;
* [http://re.reworld.eu/de/produkte/s64dil-405/index.htm S64DIL-405 STM32Fxxx ARM Cortex M3 Mikrocontrollermodul mit USB-Schnittstelle, Steckbretttauglich] (Leerplatine eignet sich auch für STM32F1xx Prozessoren.)&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/173753 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* [[STM32 CooCox Installation]]&lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/AllItems.aspx Forum auf der ST Homepage] &lt;br /&gt;
* [http://www.stm32circle.com/hom/index.php STM32 Community] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://www.ebv.com/fileadmin/products/Press_Print/Brochures/Product_Brochures/EBV_Cortex%20Collection_V2.pdf Übersicht der Cortex Prozessoren und deren Hersteller (nicht nur ST, von EBV)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/258652 Tutorial]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net STM32F4 Quellcode-Librarys und CooCox-Projekte in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=79861</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=79861"/>
		<updated>2013-12-03T09:26:25Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Zeilenumbruch eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problembeschreibung ==&lt;br /&gt;
Mechanische [[Schalter]] wie [[Drehgeber]] neigen beim Ein- und Ausschalten zum sogenannten &#039;&#039;&#039;Prellen&#039;&#039;&#039;, d.h sie schalten schnell mehrfach aus und ein, verursacht durch mechanische Vibrationen des Schaltkontaktes, sofern sie nicht dagegen geschützt sind. Vereinfacht dargestellt, sieht eine von einem Schalter oder Taster geschaltete Spannung beim Schalten wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Entprellen.png]]&lt;br /&gt;
&lt;br /&gt;
Für die Vermeidung bzw. Auswertung dieses unsauberen Signals gibt es verschiedene Ansätze:&lt;br /&gt;
&lt;br /&gt;
== Hardwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
===Prellfreie Schalter===&lt;br /&gt;
&lt;br /&gt;
Für Spezialanwendungen hält die elektromechanische Industrie verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach Aussen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen.&lt;br /&gt;
&lt;br /&gt;
Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt.&lt;br /&gt;
&lt;br /&gt;
===Wechselschalter===&lt;br /&gt;
&lt;br /&gt;
Für die Entprellung von Wechselschaltern (engl. Double Throw Switch) kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up Widerstände benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:NAND_debouncer.png|thumb|left|350px|&#039;&#039;&#039;Taster entprellen mit NAND-RS-Flipflop&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen &amp;quot;Schalter berührt Kontakt&amp;quot; und &amp;quot;Schalter ist frei in der Luft&amp;quot;. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100kOhm verwendet werden.&lt;br /&gt;
&lt;br /&gt;
====Wechselschalter ohne Flip-Flop====&lt;br /&gt;
&lt;br /&gt;
Wenn man mal gerade kein Flip-Flop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:WechselEntprellC.PNG|thumb|left|350px|&#039;&#039;&#039;Wechsler entprellen mit Kondensator&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Funktionsweise:&lt;br /&gt;
Beim Umschalten wird der Kondensator immer sofort umgeladen.&lt;br /&gt;
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das halten des Pegels.&lt;br /&gt;
&lt;br /&gt;
Dimensionierung:&lt;br /&gt;
Ist der entprellte Taster an ein IC Angeschlossen, ist der &#039;&#039;Input Leakage Current&#039;&#039; der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel sind 1µA typisch.&lt;br /&gt;
Es gilt:&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{dU}{dt} = \frac{I}{C}&amp;lt;/math&amp;gt;&lt;br /&gt;
Da eine Prellung ca. 10ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5V fallen soll kommt man auf folgende Kapazität:&lt;br /&gt;
:&amp;lt;math&amp;gt; C = \frac{I \cdot dt}{dU} = \frac{1\mu A \cdot 10ms}{0,5V} = 20nF &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1µs bis 1ms scheint sinnvoll. Also 500 Ohm bis 500kOhm sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500kOhm der Pinstrom störend wird.&lt;br /&gt;
&lt;br /&gt;
===Einfacher Taster===&lt;br /&gt;
&lt;br /&gt;
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um einfache Taster (engl. Single Throw Switch) zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über den Kondensator nicht von einen Pegel auf den anderen springen kann.&lt;br /&gt;
&lt;br /&gt;
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellen1a.png|thumb|350px| Entstehender Spannungsverlauf]]&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; und R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; auf V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt; auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für den Übergang LOW-&amp;gt;HIGH und HIGH-&amp;gt;LOW stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass der Inverter &#039;&#039;&#039;unbedingt&#039;&#039;&#039; einer mit [[Schmitt-Trigger]] Eingängen sein muss, weil bei Standard-Logikeingängen im Bereich von üblicherweise 0,8V - 2,0V der Ausgang nicht definiert ist. Als Inverter kann zum Beispiel der 74HC14 oder der CD40106 (pinkompatibel) eingesetzt werden. Alternativ kann auch ein CD4093 eingesetzt werden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf HIGH gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über den Kondensator beim Entladen berechnet sich nach:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot e^{\frac{-t}{R_2 C_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der Ausgang des Inverters stabil ist, muss die Spannung über den Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über den Kondensator.&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t)\!\ = U_{th}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Umstellen der Formel ergibt sich nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;R_2=\frac{-t}{C_1 \cdot ln\left(\frac{U_{th}}{U_0} \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Taster prellt üblicherweise etwa 10ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20ms angenommen werden. U_0 ist die Betriebsspannung also Vcc. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0V. Nimmt man für den Kondensator 1µF und beträgt die  Betriebsspannung 5V, ergibt sich für den Widerstand ein Wert von etwa 22kOhm.&lt;br /&gt;
&lt;br /&gt;
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot \left( 1-e^{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit U_th=U_C ergibt das Umstellen nach (R_1+R_2):&lt;br /&gt;
:&amp;lt;math&amp;gt;R_1+R_2 = \frac{-t}{C_1 \cdot ln\left(1-\frac{U_{th}}{U_0} \right)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für R_1+R_2 ein Wert von 32kOhm. Somit ergibt sich für R_1 ein Wert von etwa 10kOhm.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Beim 74LS14 von Hitachi z.&amp;amp;nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass U_{th} beim Entladen die untere Schwelle und U_{th} beim Laden die obere Schwelle einnimmt.&lt;br /&gt;
&lt;br /&gt;
== Softwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger, als die Benutzung eines teuren Schalters. Daher werden heute z.B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.B. Timer) benötigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Flankenerkennung ===&lt;br /&gt;
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:&lt;br /&gt;
&lt;br /&gt;
* 1. war nicht gedrückt und ist nicht gedrückt&lt;br /&gt;
* 2. war nicht gedrückt und ist gedrückt (steigende Flanke)&lt;br /&gt;
* 3. war gedrückt und ist immer noch gedrückt&lt;br /&gt;
* 4. war gedrückt und ist nicht mehr gedrückt (fallende Flanke)&lt;br /&gt;
&lt;br /&gt;
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als Active-Low angeschlossen, um die internen Pull-Ups zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Diese Routine gibt für den Zustand &amp;quot;steigende Flanke&amp;quot; den Wert &amp;quot;1&amp;quot; zurück, sonst &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define TASTERPORT PINC&lt;br /&gt;
#define TASTERBIT PINC1&lt;br /&gt;
&lt;br /&gt;
char taster(void)&lt;br /&gt;
{&lt;br /&gt;
    static unsigned char zustand;&lt;br /&gt;
    char rw = 0;&lt;br /&gt;
&lt;br /&gt;
    if(zustand == 0 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gedrueckt (steigende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 1;&lt;br /&gt;
        rw = 1;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 1 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gehalten&lt;br /&gt;
    {&lt;br /&gt;
         zustand = 2;&lt;br /&gt;
         rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 2 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird losgelassen (fallende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 3;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 3 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster losgelassen&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 0;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return rw;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warteschleifen-Verfahren ===&lt;br /&gt;
&lt;br /&gt;
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt - und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst  möglicherweise Fehlimpulse gezählt- oder andererseits echte Schaltvorgänge übersprungen werden. Dies muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.&lt;br /&gt;
&lt;br /&gt;
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200ms wartet, also brach liegt. Bei zeitkritische Anwendungen sollte man ein anderes Verfahren nutzen (z.&amp;amp;nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).&lt;br /&gt;
&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;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#warning &amp;quot;F_CPU war noch nicht definiert, wird nun mit 3686400 definiert&amp;quot;&lt;br /&gt;
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;     /* bei alter avr-libc: #include &amp;lt;avr/delay.h&amp;gt; */      &lt;br /&gt;
&lt;br /&gt;
/* Einfache Funktion zum Entprellen eines Tasters */&lt;br /&gt;
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)&lt;br /&gt;
{&lt;br /&gt;
    if ( !(*port &amp;amp; (1 &amp;lt;&amp;lt; pin)) )&lt;br /&gt;
    {&lt;br /&gt;
        /* Pin wurde auf Masse gezogen, 100ms warten   */&lt;br /&gt;
        _delay_ms(50);   // Maximalwert des Parameters an _delay_ms &lt;br /&gt;
        _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc&lt;br /&gt;
        if ( *port &amp;amp; (1 &amp;lt;&amp;lt; pin) )&lt;br /&gt;
        {&lt;br /&gt;
            /* Anwender Zeit zum Loslassen des Tasters geben */&lt;br /&gt;
            _delay_ms(50);&lt;br /&gt;
            _delay_ms(50); &lt;br /&gt;
            return 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    DDRB &amp;amp;= ~( 1 &amp;lt;&amp;lt; PB0 );        /* PIN PB0 auf Eingang Taster)  */&lt;br /&gt;
    PORTB |= ( 1 &amp;lt;&amp;lt; PB0 );        /* Pullup-Widerstand aktivieren */&lt;br /&gt;
    ...&lt;br /&gt;
    if (debounce(&amp;amp;PINB, PB0))&lt;br /&gt;
    {&lt;br /&gt;
        /* Falls Taster an PIN PB0 gedrueckt     */&lt;br /&gt;
        /* LED an Port PD7 an- bzw. ausschalten: */&lt;br /&gt;
        PORTD = PORTD ^ ( 1 &amp;lt;&amp;lt; PD7 );&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obige Routine hat leider mehrere Nachteile:&lt;br /&gt;
* sie detektiert nur das Loslassen (unergonomisch)&lt;br /&gt;
* sie verzögert die Mainloop immer um 100ms bei gedrückter Taste&lt;br /&gt;
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.&lt;br /&gt;
&lt;br /&gt;
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread&lt;br /&gt;
[http://www.mikrocontroller.net/topic/164194#new Entprellung für Anfänger]&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;DEBOUNCE&#039;&#039; Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25 ms, kann aber vom Anwender überschrieben werden. Vgl.  [http://avrhelp.mcselec.com/bascom-avr.html?DEBOUNCE BASCOM Online-Manual zu DEBOUNCE].&lt;br /&gt;
&lt;br /&gt;
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register_als_Parameter_und_Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.&lt;br /&gt;
&lt;br /&gt;
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====&lt;br /&gt;
&lt;br /&gt;
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1-3ms (mindestens 8*150µs = 1ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8 Mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster anzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void entprellung( volatile uint8_t *port, uint8_t maske ) {&lt;br /&gt;
  uint8_t   port_puffer;&lt;br /&gt;
  uint8_t   entprellungs_puffer;&lt;br /&gt;
&lt;br /&gt;
  for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {&lt;br /&gt;
    entprellungs_puffer&amp;lt;&amp;lt;=1;&lt;br /&gt;
    port_puffer = *port;&lt;br /&gt;
    _delay_us(150);&lt;br /&gt;
    if( (*port &amp;amp; maske) == (port_puffer &amp;amp; maske) )&lt;br /&gt;
      entprellungs_puffer |= 0x01;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // Bugfix 20100414&lt;br /&gt;
  // http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass&lt;br /&gt;
  entprellung( &amp;amp;PINB, (1&amp;lt;&amp;lt;PINB2) ); // ggf. Prellen abwarten &lt;br /&gt;
  if( PINB &amp;amp; (1&amp;lt;&amp;lt;PINB2) )           // dann stabilen Wert einlesen&lt;br /&gt;
  {&lt;br /&gt;
    // mach was&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    // mach was anderes&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.&lt;br /&gt;
&lt;br /&gt;
==== Debounce-Makro von Peter Dannegger ====&lt;br /&gt;
&lt;br /&gt;
Peter Dannegger hat in [http://www.mikrocontroller.net/topic/164194#1566921 &amp;quot;Entprellen für Anfänger&amp;quot;] folgende vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit &#039;&#039;active low&#039;&#039; geschalteten Tastern, kann aber einfach für  &#039;&#039;active high&#039;&#039; geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Not so powerful Debouncing Example              */&lt;br /&gt;
/*                      No Interrupt needed                             */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
// Target: ATtiny13&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#define F_CPU 9.6e6&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define debounce( port, pin )                                         \&lt;br /&gt;
({                                                                    \&lt;br /&gt;
  static uint8_t flag = 0;     /* new variable on every macro usage */  \&lt;br /&gt;
  uint8_t i = 0;                                                      \&lt;br /&gt;
                                                                      \&lt;br /&gt;
  if( flag ){                  /* check for key release: */           \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( !(port &amp;amp; 1&amp;lt;&amp;lt;pin) ){  /* ... until key pressed or ... */     \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms released */     \&lt;br /&gt;
        flag = 0;              /* clear press flag */                 \&lt;br /&gt;
        i = 0;                 /* 0 = key release debounced */        \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }else{                       /* else check for key press: */        \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( (port &amp;amp; 1&amp;lt;&amp;lt;pin) ){   /* ... until key released or ... */    \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms pressed */      \&lt;br /&gt;
        flag = 1;              /* set press flag */                   \&lt;br /&gt;
        i = 1;                 /* 1 = key press debounced */          \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }                                                                   \&lt;br /&gt;
  i;                           /* return value of Macro */            \&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Testapplication&lt;br /&gt;
 */&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB0);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB0;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB1);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB1;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce( PINB, PB1 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce( PINB, PB0 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable &#039;&#039;flag&#039;&#039; auswerten [http://www.mikrocontroller.net/topic/195914#1918727]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hilfsfunktion&lt;br /&gt;
uint8_t debounce_C1( void )&lt;br /&gt;
{&lt;br /&gt;
  return debounce(PINC, PC1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Beispielanwendung&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  DDRC  &amp;amp;= ~(1&amp;lt;&amp;lt;PC1);&lt;br /&gt;
  PORTC |=   1&amp;lt;&amp;lt;PC1; // Pullup für Taster&lt;br /&gt;
&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer-Verfahren (nach Peter Dannegger) ===&lt;br /&gt;
&lt;br /&gt;
==== Grundroutine (AVR Assembler) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-20435.html#new Forum] &lt;br /&gt;
&lt;br /&gt;
Vorteile&lt;br /&gt;
* besonders kurzer Code&lt;br /&gt;
* schnell&lt;br /&gt;
&lt;br /&gt;
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also&lt;br /&gt;
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&amp;amp;nbsp;B. nur eine Taste verarbeiten, d.h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.&lt;br /&gt;
&lt;br /&gt;
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen&lt;br /&gt;
kurz. Der entprellte Tastenzustand ist im Register &#039;&#039;key_state&#039;&#039;. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von &#039;&#039;Taste offen&#039;&#039; zu&lt;br /&gt;
&#039;&#039;Taste gedrückt&#039;&#039; erkannt und im Register &#039;&#039;key_press&#039;&#039; abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.h. man kann das auch so z.&amp;amp;nbsp;B. in einem GAL22V10 realisieren.&lt;br /&gt;
&lt;br /&gt;
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen&lt;br /&gt;
Kombinationen der 3 Signale dargestellt.&lt;br /&gt;
&lt;br /&gt;
Beispielcode für AVR (Assembler):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.nolist&lt;br /&gt;
.include &amp;quot;c:\avr\inc\1200def.inc&amp;quot;&lt;br /&gt;
.list&lt;br /&gt;
.def  save_sreg         = r0&lt;br /&gt;
.def  iwr0              = r1&lt;br /&gt;
.def  iwr1              = r2&lt;br /&gt;
&lt;br /&gt;
.def  key_old           = r3&lt;br /&gt;
.def  key_state         = r4&lt;br /&gt;
.def  key_press         = r5&lt;br /&gt;
&lt;br /&gt;
.def  leds              = r16&lt;br /&gt;
.def  wr0               = r17&lt;br /&gt;
&lt;br /&gt;
.equ  key_port          = pind&lt;br /&gt;
.equ  led_port          = portb&lt;br /&gt;
&lt;br /&gt;
      rjmp   init&lt;br /&gt;
.org OVF0addr		;timer interrupt 24ms&lt;br /&gt;
      in     save_sreg, SREG&lt;br /&gt;
get8key:                               ;/old      state     iwr1      iwr0&lt;br /&gt;
      mov    iwr0, key_old             ;00110011  10101010            00110011&lt;br /&gt;
      in     key_old, key_port         ;11110000&lt;br /&gt;
      eor    iwr0, key_old             ;                              11000011&lt;br /&gt;
      com    key_old                   ;00001111&lt;br /&gt;
      mov    iwr1, key_state           ;                    10101010&lt;br /&gt;
      or     key_state, iwr0           ;          11101011&lt;br /&gt;
      and    iwr0, key_old             ;                              00000011&lt;br /&gt;
      eor    key_state, iwr0           ;          11101000&lt;br /&gt;
      and    iwr1, iwr0                ;                    00000010&lt;br /&gt;
      or     key_press, iwr1           ;store key press detect&lt;br /&gt;
;&lt;br /&gt;
;			insert other timer functions here&lt;br /&gt;
;&lt;br /&gt;
      out    SREG, save_sreg&lt;br /&gt;
      reti&lt;br /&gt;
;-------------------------------------------------------------------------&lt;br /&gt;
init:&lt;br /&gt;
      ldi    wr0, 0xFF&lt;br /&gt;
      out    ddrb, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;CS02 | 1&amp;lt;&amp;lt;CS00    ;divide by 1024 * 256&lt;br /&gt;
      out    TCCR0, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;TOIE0             ;enable timer interrupt&lt;br /&gt;
      out    TIMSK, wr0&lt;br /&gt;
&lt;br /&gt;
      clr    key_old&lt;br /&gt;
      clr    key_state&lt;br /&gt;
      clr    key_press&lt;br /&gt;
      ldi    leds, 0xFF&lt;br /&gt;
main: cli&lt;br /&gt;
      eor    leds, key_press           ;toggle LEDs&lt;br /&gt;
      clr    key_press                 ;clear, if key press action done&lt;br /&gt;
      sei&lt;br /&gt;
      out    led_port, leds&lt;br /&gt;
      rjmp   main&lt;br /&gt;
;-------------------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komfortroutine (C für AVR) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-310276.html Forum]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung&#039;&#039;&#039; Wenn statt active-low (Ruhezustand High) active-high (Ruhezustand Low) verwendet wird muss eine Zeile geändert werden siehe:&lt;br /&gt;
[http://www.mikrocontroller.net/forum/read-4-310276.html gesamter Beitrag im Forum], &lt;br /&gt;
[http://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag], ([http://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss *nicht* geändert werden, da hier die Polarität gar keinen Einfluß hat).&lt;br /&gt;
&lt;br /&gt;
Funktionsprinzip wie oben plus zusätzliche Features:  &lt;br /&gt;
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken&lt;br /&gt;
* Wiederholfunktion, z.&amp;amp;nbsp;B. für die Eingabe von Werten&lt;br /&gt;
&lt;br /&gt;
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc&amp;amp;cs_p=svn://mikrocontroller.net/mp3dec/trunk&amp;amp;cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Debouncing 8 Keys                               */&lt;br /&gt;
/*                      Sampling 4 Times                                */&lt;br /&gt;
/*                      With Repeat Function                            */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                      danni@specs.de                                  */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&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;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#define F_CPU           1000000                   // processor clock frequency&lt;br /&gt;
#warning kein F_CPU definiert&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#define KEY_DDR         DDRB&lt;br /&gt;
#define KEY_PORT        PORTB&lt;br /&gt;
#define KEY_PIN         PINB&lt;br /&gt;
#define KEY0            0&lt;br /&gt;
#define KEY1            1&lt;br /&gt;
#define KEY2            2&lt;br /&gt;
#define ALL_KEYS        (1&amp;lt;&amp;lt;KEY0 | 1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)&lt;br /&gt;
 &lt;br /&gt;
#define REPEAT_MASK     (1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)       // repeat: key1, key2&lt;br /&gt;
#define REPEAT_START    50                        // after 500ms&lt;br /&gt;
#define REPEAT_NEXT     20                        // every 200ms&lt;br /&gt;
&lt;br /&gt;
#define LED_DDR         DDRA&lt;br /&gt;
#define LED_PORT        PORTA&lt;br /&gt;
#define LED0            0&lt;br /&gt;
#define LED1            1&lt;br /&gt;
#define LED2            2&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_state;                                // debounced and inverted key state:&lt;br /&gt;
                                                  // bit = 1: key pressed&lt;br /&gt;
volatile uint8_t key_press;                                // key press detect&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_rpt;                                  // key long press and repeat&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
ISR( TIMER0_OVF_vect )                            // every 10ms&lt;br /&gt;
{&lt;br /&gt;
  static uint8_t ct0, ct1, rpt;&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
 &lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
 &lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
 &lt;br /&gt;
  if( (key_state &amp;amp; REPEAT_MASK) == 0 )            // check repeat function&lt;br /&gt;
     rpt = REPEAT_START;                          // start delay&lt;br /&gt;
  if( --rpt == 0 ){&lt;br /&gt;
    rpt = REPEAT_NEXT;                            // repeat delay&lt;br /&gt;
    key_rpt |= key_state &amp;amp; REPEAT_MASK;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed. Each pressed key is reported&lt;br /&gt;
// only once&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_press( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_press;                          // read key(s)&lt;br /&gt;
  key_press ^= key_mask;                          // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed long enough such that the&lt;br /&gt;
// key repeat functionality kicks in. After a small setup delay&lt;br /&gt;
// the key is reported being pressed in subsequent calls&lt;br /&gt;
// to this function. This simulates the user repeatedly&lt;br /&gt;
// pressing and releasing the key.&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_rpt( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_rpt;                            // read key(s)&lt;br /&gt;
  key_rpt ^= key_mask;                            // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key is pressed right now&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_state( uint8_t key_mask )&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  key_mask &amp;amp;= key_state;&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_short( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read key state and key press atomic !&lt;br /&gt;
  return get_key_press( ~key_state &amp;amp; key_mask );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_long( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  return get_key_press( get_key_rpt( key_mask ));&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  LED_PORT = 0xFF;&lt;br /&gt;
  LED_DDR = 0xFF;                     &lt;br /&gt;
&lt;br /&gt;
  // Configure debouncing routines&lt;br /&gt;
  KEY_DDR &amp;amp;= ~ALL_KEYS;                // configure key port for input&lt;br /&gt;
  KEY_PORT |= ALL_KEYS;                // and turn on pull up resistors&lt;br /&gt;
&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS02)|(1&amp;lt;&amp;lt;CS00);         // divide by 1024&lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
  TIMSK |= 1&amp;lt;&amp;lt;TOIE0;                   // enable timer interrupt&lt;br /&gt;
&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1){&lt;br /&gt;
    if( get_key_short( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED1;&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_long( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED2;&lt;br /&gt;
 &lt;br /&gt;
    // single press and repeat&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 )){&lt;br /&gt;
      uint8_t i = LED_PORT;&lt;br /&gt;
 &lt;br /&gt;
      i = (i &amp;amp; 0x07) | ((i &amp;lt;&amp;lt; 1) &amp;amp; 0xF0);&lt;br /&gt;
      if( i &amp;lt; 0xF0 )&lt;br /&gt;
        i |= 0x08;&lt;br /&gt;
      LED_PORT = i;      &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// single press and repeat&lt;br /&gt;
if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 ))&lt;br /&gt;
    LED_PORT ^=0x08;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Funktionsweise =====&lt;br /&gt;
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen ct0 und ct1 aufgebaut werden&lt;br /&gt;
&lt;br /&gt;
[[Bild:VertCount.png|framed|center|&#039;&#039;&#039;8 vertikale Zähler in 2 8-Bit Variablen&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
wobei jeweils ein Bit in ct0 mit dem gleichwertigen Bit in ct1 zusammengenommen einen 2-Bit-Zähler bildet.&lt;br /&gt;
Der Code der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
i enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (keystate) verändert hat, ein 1 Bit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Anweisungen erniedrigen den 2-Bit Zähler ct0/ct1 für jedes Bit um 1, welches in i gesetzt ist. Liegt an der entsprechenden Stelle in i ein 0 Bit vor (keine Änderung des Zustands), so wird der Zähler ct0/ct1 für dieses Bit auf 1 gesetzt.&lt;br /&gt;
Der Grundzustand des Zählers ist als ct0 == 1 und ct1 == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR Aufruf, bei dem die Taste im Vergleich zu keystate als verändert erkannt wurde&lt;br /&gt;
&lt;br /&gt;
   ct1   ct0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
     1    0   // 2&lt;br /&gt;
     0    1   // 1&lt;br /&gt;
     0    0   // 0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in i bleibt nur dort ein 1-Bit erhalten, wo sowohl in ct1 als auch in ct0 ein 1 Bit vorgefunden wird, der betreffenede Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit i wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in i ein 1 Bit hinterlässt. Im Endergebnis bedeutet dass, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1 Bit an der betreffenden Stelle in i führt, aber auch nur dann, wenn in i an dieser Bitposition ebenfalls ein 1 Bit war (welches wiederrum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4 mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle ist i daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in key_state registriert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und wenn sich in key_state das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als &#039;Taste wurde niedergedrückt&#039; gewertet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein &#039;paralles If&#039; gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist&lt;br /&gt;
    // und setze Bit 0 in key_press, wenn das der Fall ist&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 0 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 1&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 1 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 2&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 2 );&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.&lt;br /&gt;
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.&lt;br /&gt;
&lt;br /&gt;
===== Reduziert auf lediglich 1 Taste =====&lt;br /&gt;
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.&lt;br /&gt;
&lt;br /&gt;
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?&lt;br /&gt;
&lt;br /&gt;
Hier ist die &#039;Langform&#039; des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In key_state wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in key_press entsprechend vermerkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t key_state;&lt;br /&gt;
uint8_t key_counter;&lt;br /&gt;
volatile uint8_t key_press;&lt;br /&gt;
&lt;br /&gt;
ISR( ... Overflow ... )&lt;br /&gt;
{&lt;br /&gt;
  uint8_t input = KEY_PIN &amp;amp; ( 1 &amp;lt;&amp;lt; KEY0 );&lt;br /&gt;
&lt;br /&gt;
  if( input != key_state ) {&lt;br /&gt;
    key_counter--;&lt;br /&gt;
    if( key_counter == 0xFF ) {&lt;br /&gt;
      key_counter = 3;&lt;br /&gt;
      key_state = input;&lt;br /&gt;
      if( input )&lt;br /&gt;
        key_press = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    key_counter = 3;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t get_key_press()&lt;br /&gt;
{&lt;br /&gt;
  uint8_t result;&lt;br /&gt;
&lt;br /&gt;
  cli();&lt;br /&gt;
  result = key_press;&lt;br /&gt;
  key_press = FALSE;&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn zb. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine 2.te Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.&lt;br /&gt;
&lt;br /&gt;
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente sqrt() Funktion zu schreiben, wie die, die sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion sqrt() nicht verwenden, sondern müssten sich statt dessen selbst eine Wurzel-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Selbstsättigender Filter (nach Jürgen Schuhmacher) ===&lt;br /&gt;
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitttrigger wie in Hardware nachgebildet werden, indem ein abstrakter IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift Y(t) = k Y(t-1) + Input wird ein einfaches Filter erzeugt, dass dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt - Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellung mit IIR-Filter.gif]]&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Signal des Tasters idealerweise um den Faktor 10-20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmittriggerfunktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.B. Überschreiten einer 55% Grenze und eine 0 bei Unterschreitung der 45%-Grenze ausgeben wird. Im Zwischenbereich wird der alte Wert gehalten.&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Mittelwertfilter (nach Lothar Miller) ===&lt;br /&gt;
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten FlipFlops. Man schiebt das Eingangssignal in eine FlipFlop-Kette und schaltet oberhalb der Mitte um:&lt;br /&gt;
&lt;br /&gt;
SignalInput -&amp;gt; FF1 -&amp;gt; FF2 -&amp;gt; FF3 -&amp;gt; FF4 -&amp;gt; FF5 -&amp;gt; FF6 -&amp;gt; FF7 -&amp;gt; FF8&lt;br /&gt;
&lt;br /&gt;
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1&amp;lt;br /&amp;gt;&lt;br /&gt;
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR bz. ein AND Gatter nötig ist.&lt;br /&gt;
&lt;br /&gt;
== Gegenüberstellung der Verfahren ==&lt;br /&gt;
* HW - &amp;quot;entprellte Schalter&amp;quot;: Sehr teuer, grosse Bauform, verschleissbelastet, geringe Haltbarkeit&lt;br /&gt;
* HW - &amp;quot;Umschalter&amp;quot; : benötigt aufwändigeren Schalter, benötigt Elektronik&lt;br /&gt;
* HW - &amp;quot;Umschalter ohne FF&amp;quot; : benötigt aufwändigeren Schalter und kleiner Kondensator&lt;br /&gt;
* HW - &amp;quot;Kondensatorentprellung&amp;quot; : benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht&lt;br /&gt;
&lt;br /&gt;
* SW - Flankenverfahren:&lt;br /&gt;
* SW - Warteschleife: Durch die Warteschleifen eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch&lt;br /&gt;
* SW - Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der &#039;Verbrauch&#039; eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.&lt;br /&gt;
* SW - Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung&lt;br /&gt;
* SW - Filter 2: sehr geringer Platzbedarf, gute Wirkung&lt;br /&gt;
&lt;br /&gt;
== Links zum Thema ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/design/analog/4324067/Contact-debouncing-algorithm-emulates-Schmitt-trigger Contact-debouncing algorithm (Artikel)],  [http://www.edn.com/file/13370-70705di.pdf als PDF]&lt;br /&gt;
* [[AVR-Tutorial: Tasten]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#.28Tasten-.29Entprellung|AVR-GCC-Tutorial Tastenentprellung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-20435.html Beitrag im Forum, AVR Assembler]&lt;br /&gt;
* [http://www.ganssle.com/debouncing.pdf A guide to debouncing (engl.), praktische Erläuterungen zum Entprellen in Soft- und Hardware]&lt;br /&gt;
* [http://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=79860</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=79860"/>
		<updated>2013-12-03T09:23:45Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Erläuterung zur Implementierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problembeschreibung ==&lt;br /&gt;
Mechanische [[Schalter]] wie [[Drehgeber]] neigen beim Ein- und Ausschalten zum sogenannten &#039;&#039;&#039;Prellen&#039;&#039;&#039;, d.h sie schalten schnell mehrfach aus und ein, verursacht durch mechanische Vibrationen des Schaltkontaktes, sofern sie nicht dagegen geschützt sind. Vereinfacht dargestellt, sieht eine von einem Schalter oder Taster geschaltete Spannung beim Schalten wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Entprellen.png]]&lt;br /&gt;
&lt;br /&gt;
Für die Vermeidung bzw. Auswertung dieses unsauberen Signals gibt es verschiedene Ansätze:&lt;br /&gt;
&lt;br /&gt;
== Hardwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
===Prellfreie Schalter===&lt;br /&gt;
&lt;br /&gt;
Für Spezialanwendungen hält die elektromechanische Industrie verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach Aussen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen.&lt;br /&gt;
&lt;br /&gt;
Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt.&lt;br /&gt;
&lt;br /&gt;
===Wechselschalter===&lt;br /&gt;
&lt;br /&gt;
Für die Entprellung von Wechselschaltern (engl. Double Throw Switch) kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up Widerstände benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:NAND_debouncer.png|thumb|left|350px|&#039;&#039;&#039;Taster entprellen mit NAND-RS-Flipflop&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen &amp;quot;Schalter berührt Kontakt&amp;quot; und &amp;quot;Schalter ist frei in der Luft&amp;quot;. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100kOhm verwendet werden.&lt;br /&gt;
&lt;br /&gt;
====Wechselschalter ohne Flip-Flop====&lt;br /&gt;
&lt;br /&gt;
Wenn man mal gerade kein Flip-Flop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:WechselEntprellC.PNG|thumb|left|350px|&#039;&#039;&#039;Wechsler entprellen mit Kondensator&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Funktionsweise:&lt;br /&gt;
Beim Umschalten wird der Kondensator immer sofort umgeladen.&lt;br /&gt;
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das halten des Pegels.&lt;br /&gt;
&lt;br /&gt;
Dimensionierung:&lt;br /&gt;
Ist der entprellte Taster an ein IC Angeschlossen, ist der &#039;&#039;Input Leakage Current&#039;&#039; der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel sind 1µA typisch.&lt;br /&gt;
Es gilt:&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{dU}{dt} = \frac{I}{C}&amp;lt;/math&amp;gt;&lt;br /&gt;
Da eine Prellung ca. 10ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5V fallen soll kommt man auf folgende Kapazität:&lt;br /&gt;
:&amp;lt;math&amp;gt; C = \frac{I \cdot dt}{dU} = \frac{1\mu A \cdot 10ms}{0,5V} = 20nF &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1µs bis 1ms scheint sinnvoll. Also 500 Ohm bis 500kOhm sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500kOhm der Pinstrom störend wird.&lt;br /&gt;
&lt;br /&gt;
===Einfacher Taster===&lt;br /&gt;
&lt;br /&gt;
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um einfache Taster (engl. Single Throw Switch) zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über den Kondensator nicht von einen Pegel auf den anderen springen kann.&lt;br /&gt;
&lt;br /&gt;
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellen1a.png|thumb|350px| Entstehender Spannungsverlauf]]&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; und R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; auf V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt; auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für den Übergang LOW-&amp;gt;HIGH und HIGH-&amp;gt;LOW stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass der Inverter &#039;&#039;&#039;unbedingt&#039;&#039;&#039; einer mit [[Schmitt-Trigger]] Eingängen sein muss, weil bei Standard-Logikeingängen im Bereich von üblicherweise 0,8V - 2,0V der Ausgang nicht definiert ist. Als Inverter kann zum Beispiel der 74HC14 oder der CD40106 (pinkompatibel) eingesetzt werden. Alternativ kann auch ein CD4093 eingesetzt werden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf HIGH gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über den Kondensator beim Entladen berechnet sich nach:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot e^{\frac{-t}{R_2 C_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der Ausgang des Inverters stabil ist, muss die Spannung über den Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über den Kondensator.&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t)\!\ = U_{th}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Umstellen der Formel ergibt sich nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;R_2=\frac{-t}{C_1 \cdot ln\left(\frac{U_{th}}{U_0} \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Taster prellt üblicherweise etwa 10ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20ms angenommen werden. U_0 ist die Betriebsspannung also Vcc. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0V. Nimmt man für den Kondensator 1µF und beträgt die  Betriebsspannung 5V, ergibt sich für den Widerstand ein Wert von etwa 22kOhm.&lt;br /&gt;
&lt;br /&gt;
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:&lt;br /&gt;
:&amp;lt;math&amp;gt;U_C(t) = U_0 \cdot \left( 1-e^{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit U_th=U_C ergibt das Umstellen nach (R_1+R_2):&lt;br /&gt;
:&amp;lt;math&amp;gt;R_1+R_2 = \frac{-t}{C_1 \cdot ln\left(1-\frac{U_{th}}{U_0} \right)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für R_1+R_2 ein Wert von 32kOhm. Somit ergibt sich für R_1 ein Wert von etwa 10kOhm.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Beim 74LS14 von Hitachi z.&amp;amp;nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass U_{th} beim Entladen die untere Schwelle und U_{th} beim Laden die obere Schwelle einnimmt.&lt;br /&gt;
&lt;br /&gt;
== Softwareentprellung ==&lt;br /&gt;
&lt;br /&gt;
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger, als die Benutzung eines teuren Schalters. Daher werden heute z.B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.B. Timer) benötigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Flankenerkennung ===&lt;br /&gt;
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:&lt;br /&gt;
&lt;br /&gt;
* 1. war nicht gedrückt und ist nicht gedrückt&lt;br /&gt;
* 2. war nicht gedrückt und ist gedrückt (steigende Flanke)&lt;br /&gt;
* 3. war gedrückt und ist immer noch gedrückt&lt;br /&gt;
* 4. war gedrückt und ist nicht mehr gedrückt (fallende Flanke)&lt;br /&gt;
&lt;br /&gt;
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als Active-Low angeschlossen, um die internen Pull-Ups zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Diese Routine gibt für den Zustand &amp;quot;steigende Flanke&amp;quot; den Wert &amp;quot;1&amp;quot; zurück, sonst &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define TASTERPORT PINC&lt;br /&gt;
#define TASTERBIT PINC1&lt;br /&gt;
&lt;br /&gt;
char taster(void)&lt;br /&gt;
{&lt;br /&gt;
    static unsigned char zustand;&lt;br /&gt;
    char rw = 0;&lt;br /&gt;
&lt;br /&gt;
    if(zustand == 0 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gedrueckt (steigende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 1;&lt;br /&gt;
        rw = 1;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 1 &amp;amp;&amp;amp; !(TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird gehalten&lt;br /&gt;
    {&lt;br /&gt;
         zustand = 2;&lt;br /&gt;
         rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 2 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster wird losgelassen (fallende Flanke)&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 3;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
    else if (zustand == 3 &amp;amp;&amp;amp; (TASTERPORT &amp;amp; (1&amp;lt;&amp;lt;TASTERBIT)))   //Taster losgelassen&lt;br /&gt;
    {&lt;br /&gt;
        zustand = 0;&lt;br /&gt;
        rw = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return rw;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warteschleifen-Verfahren ===&lt;br /&gt;
&lt;br /&gt;
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt - und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst  möglicherweise Fehlimpulse gezählt- oder andererseits echte Schaltvorgänge übersprungen werden. Dies muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.&lt;br /&gt;
&lt;br /&gt;
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200ms wartet, also brach liegt. Bei zeitkritische Anwendungen sollte man ein anderes Verfahren nutzen (z.&amp;amp;nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).&lt;br /&gt;
&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;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#warning &amp;quot;F_CPU war noch nicht definiert, wird nun mit 3686400 definiert&amp;quot;&lt;br /&gt;
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;     /* bei alter avr-libc: #include &amp;lt;avr/delay.h&amp;gt; */      &lt;br /&gt;
&lt;br /&gt;
/* Einfache Funktion zum Entprellen eines Tasters */&lt;br /&gt;
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)&lt;br /&gt;
{&lt;br /&gt;
    if ( !(*port &amp;amp; (1 &amp;lt;&amp;lt; pin)) )&lt;br /&gt;
    {&lt;br /&gt;
        /* Pin wurde auf Masse gezogen, 100ms warten   */&lt;br /&gt;
        _delay_ms(50);   // Maximalwert des Parameters an _delay_ms &lt;br /&gt;
        _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc&lt;br /&gt;
        if ( *port &amp;amp; (1 &amp;lt;&amp;lt; pin) )&lt;br /&gt;
        {&lt;br /&gt;
            /* Anwender Zeit zum Loslassen des Tasters geben */&lt;br /&gt;
            _delay_ms(50);&lt;br /&gt;
            _delay_ms(50); &lt;br /&gt;
            return 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    DDRB &amp;amp;= ~( 1 &amp;lt;&amp;lt; PB0 );        /* PIN PB0 auf Eingang Taster)  */&lt;br /&gt;
    PORTB |= ( 1 &amp;lt;&amp;lt; PB0 );        /* Pullup-Widerstand aktivieren */&lt;br /&gt;
    ...&lt;br /&gt;
    if (debounce(&amp;amp;PINB, PB0))&lt;br /&gt;
    {&lt;br /&gt;
        /* Falls Taster an PIN PB0 gedrueckt     */&lt;br /&gt;
        /* LED an Port PD7 an- bzw. ausschalten: */&lt;br /&gt;
        PORTD = PORTD ^ ( 1 &amp;lt;&amp;lt; PD7 );&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obige Routine hat leider mehrere Nachteile:&lt;br /&gt;
* sie detektiert nur das Loslassen (unergonomisch)&lt;br /&gt;
* sie verzögert die Mainloop immer um 100ms bei gedrückter Taste&lt;br /&gt;
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.&lt;br /&gt;
&lt;br /&gt;
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread&lt;br /&gt;
[http://www.mikrocontroller.net/topic/164194#new Entprellung für Anfänger]&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;DEBOUNCE&#039;&#039; Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25 ms, kann aber vom Anwender überschrieben werden. Vgl.  [http://avrhelp.mcselec.com/bascom-avr.html?DEBOUNCE BASCOM Online-Manual zu DEBOUNCE].&lt;br /&gt;
&lt;br /&gt;
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register_als_Parameter_und_Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.&lt;br /&gt;
&lt;br /&gt;
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====&lt;br /&gt;
&lt;br /&gt;
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1-3ms (mindestens 8*150µs = 1ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8 Mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster anzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void entprellung( volatile uint8_t *port, uint8_t maske ) {&lt;br /&gt;
  uint8_t   port_puffer;&lt;br /&gt;
  uint8_t   entprellungs_puffer;&lt;br /&gt;
&lt;br /&gt;
  for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {&lt;br /&gt;
    entprellungs_puffer&amp;lt;&amp;lt;=1;&lt;br /&gt;
    port_puffer = *port;&lt;br /&gt;
    _delay_us(150);&lt;br /&gt;
    if( (*port &amp;amp; maske) == (port_puffer &amp;amp; maske) )&lt;br /&gt;
      entprellungs_puffer |= 0x01;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // Bugfix 20100414&lt;br /&gt;
  // http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass&lt;br /&gt;
  entprellung( &amp;amp;PINB, (1&amp;lt;&amp;lt;PINB2) ); // ggf. Prellen abwarten &lt;br /&gt;
  if( PINB &amp;amp; (1&amp;lt;&amp;lt;PINB2) )           // dann stabilen Wert einlesen&lt;br /&gt;
  {&lt;br /&gt;
    // mach was&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    // mach was anderes&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.&lt;br /&gt;
&lt;br /&gt;
==== Debounce-Makro von Peter Dannegger ====&lt;br /&gt;
&lt;br /&gt;
Peter Dannegger hat in [http://www.mikrocontroller.net/topic/164194#1566921 &amp;quot;Entprellen für Anfänger&amp;quot;] folgende vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit &#039;&#039;active low&#039;&#039; geschalteten Tastern, kann aber einfach für  &#039;&#039;active high&#039;&#039; geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Not so powerful Debouncing Example              */&lt;br /&gt;
/*                      No Interrupt needed                             */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
// Target: ATtiny13&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#define F_CPU 9.6e6&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define debounce( port, pin )                                         \&lt;br /&gt;
({                                                                    \&lt;br /&gt;
  static uint8_t flag = 0;     /* new variable on every macro usage */  \&lt;br /&gt;
  uint8_t i = 0;                                                      \&lt;br /&gt;
                                                                      \&lt;br /&gt;
  if( flag ){                  /* check for key release: */           \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( !(port &amp;amp; 1&amp;lt;&amp;lt;pin) ){  /* ... until key pressed or ... */     \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms released */     \&lt;br /&gt;
        flag = 0;              /* clear press flag */                 \&lt;br /&gt;
        i = 0;                 /* 0 = key release debounced */        \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }else{                       /* else check for key press: */        \&lt;br /&gt;
    for(;;){                   /* loop ... */                         \&lt;br /&gt;
      if( (port &amp;amp; 1&amp;lt;&amp;lt;pin) ){   /* ... until key released or ... */    \&lt;br /&gt;
        i = 0;                 /* 0 = bounce */                       \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
      _delay_us( 98 );         /* * 256 = 25ms */                     \&lt;br /&gt;
      if( --i == 0 ){          /* ... until key &amp;gt;25ms pressed */      \&lt;br /&gt;
        flag = 1;              /* set press flag */                   \&lt;br /&gt;
        i = 1;                 /* 1 = key press debounced */          \&lt;br /&gt;
        break;                                                        \&lt;br /&gt;
      }                                                               \&lt;br /&gt;
    }                                                                 \&lt;br /&gt;
  }                                                                   \&lt;br /&gt;
  i;                           /* return value of Macro */            \&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
   Testapplication&lt;br /&gt;
 */&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB0);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB0;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  &amp;amp;= ~(1&amp;lt;&amp;lt;PB1);&lt;br /&gt;
  PORTB |=   1&amp;lt;&amp;lt;PB1;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce( PINB, PB1 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce( PINB, PB0 ) )&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable &#039;&#039;flag&#039;&#039; auswerten [http://www.mikrocontroller.net/topic/195914#1918727]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hilfsfunktion&lt;br /&gt;
uint8_t debounce_C1( void )&lt;br /&gt;
{&lt;br /&gt;
  return debounce(PINC, PC1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Beispielanwendung&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
  DDRB  |=   1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  DDRC  &amp;amp;= ~(1&amp;lt;&amp;lt;PC1);&lt;br /&gt;
  PORTC |=   1&amp;lt;&amp;lt;PC1; // Pullup für Taster&lt;br /&gt;
&lt;br /&gt;
  for(;;){&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB2;&lt;br /&gt;
    if( debounce_C1() )  // nicht: debounce(PINC, PC1)&lt;br /&gt;
      PORTB ^= 1&amp;lt;&amp;lt;PB3;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer-Verfahren (nach Peter Dannegger) ===&lt;br /&gt;
&lt;br /&gt;
==== Grundroutine (AVR Assembler) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-20435.html#new Forum] &lt;br /&gt;
&lt;br /&gt;
Vorteile&lt;br /&gt;
* besonders kurzer Code&lt;br /&gt;
* schnell&lt;br /&gt;
&lt;br /&gt;
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also&lt;br /&gt;
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&amp;amp;nbsp;B. nur eine Taste verarbeiten, d.h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.&lt;br /&gt;
&lt;br /&gt;
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen&lt;br /&gt;
kurz. Der entprellte Tastenzustand ist im Register &#039;&#039;key_state&#039;&#039;. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von &#039;&#039;Taste offen&#039;&#039; zu&lt;br /&gt;
&#039;&#039;Taste gedrückt&#039;&#039; erkannt und im Register &#039;&#039;key_press&#039;&#039; abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.h. man kann das auch so z.&amp;amp;nbsp;B. in einem GAL22V10 realisieren.&lt;br /&gt;
&lt;br /&gt;
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen&lt;br /&gt;
Kombinationen der 3 Signale dargestellt.&lt;br /&gt;
&lt;br /&gt;
Beispielcode für AVR (Assembler):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.nolist&lt;br /&gt;
.include &amp;quot;c:\avr\inc\1200def.inc&amp;quot;&lt;br /&gt;
.list&lt;br /&gt;
.def  save_sreg         = r0&lt;br /&gt;
.def  iwr0              = r1&lt;br /&gt;
.def  iwr1              = r2&lt;br /&gt;
&lt;br /&gt;
.def  key_old           = r3&lt;br /&gt;
.def  key_state         = r4&lt;br /&gt;
.def  key_press         = r5&lt;br /&gt;
&lt;br /&gt;
.def  leds              = r16&lt;br /&gt;
.def  wr0               = r17&lt;br /&gt;
&lt;br /&gt;
.equ  key_port          = pind&lt;br /&gt;
.equ  led_port          = portb&lt;br /&gt;
&lt;br /&gt;
      rjmp   init&lt;br /&gt;
.org OVF0addr		;timer interrupt 24ms&lt;br /&gt;
      in     save_sreg, SREG&lt;br /&gt;
get8key:                               ;/old      state     iwr1      iwr0&lt;br /&gt;
      mov    iwr0, key_old             ;00110011  10101010            00110011&lt;br /&gt;
      in     key_old, key_port         ;11110000&lt;br /&gt;
      eor    iwr0, key_old             ;                              11000011&lt;br /&gt;
      com    key_old                   ;00001111&lt;br /&gt;
      mov    iwr1, key_state           ;                    10101010&lt;br /&gt;
      or     key_state, iwr0           ;          11101011&lt;br /&gt;
      and    iwr0, key_old             ;                              00000011&lt;br /&gt;
      eor    key_state, iwr0           ;          11101000&lt;br /&gt;
      and    iwr1, iwr0                ;                    00000010&lt;br /&gt;
      or     key_press, iwr1           ;store key press detect&lt;br /&gt;
;&lt;br /&gt;
;			insert other timer functions here&lt;br /&gt;
;&lt;br /&gt;
      out    SREG, save_sreg&lt;br /&gt;
      reti&lt;br /&gt;
;-------------------------------------------------------------------------&lt;br /&gt;
init:&lt;br /&gt;
      ldi    wr0, 0xFF&lt;br /&gt;
      out    ddrb, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;CS02 | 1&amp;lt;&amp;lt;CS00    ;divide by 1024 * 256&lt;br /&gt;
      out    TCCR0, wr0&lt;br /&gt;
      ldi    wr0, 1&amp;lt;&amp;lt;TOIE0             ;enable timer interrupt&lt;br /&gt;
      out    TIMSK, wr0&lt;br /&gt;
&lt;br /&gt;
      clr    key_old&lt;br /&gt;
      clr    key_state&lt;br /&gt;
      clr    key_press&lt;br /&gt;
      ldi    leds, 0xFF&lt;br /&gt;
main: cli&lt;br /&gt;
      eor    leds, key_press           ;toggle LEDs&lt;br /&gt;
      clr    key_press                 ;clear, if key press action done&lt;br /&gt;
      sei&lt;br /&gt;
      out    led_port, leds&lt;br /&gt;
      rjmp   main&lt;br /&gt;
;-------------------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komfortroutine (C für AVR) ====&lt;br /&gt;
&lt;br /&gt;
Siehe dazu: [http://www.mikrocontroller.net/forum/read-4-310276.html Forum]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung&#039;&#039;&#039; Wenn statt active-low (Ruhezustand High) active-high (Ruhezustand Low) verwendet wird muss eine Zeile geändert werden siehe:&lt;br /&gt;
[http://www.mikrocontroller.net/forum/read-4-310276.html gesamter Beitrag im Forum], &lt;br /&gt;
[http://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag], ([http://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss *nicht* geändert werden, da hier die Polarität gar keinen Einfluß hat).&lt;br /&gt;
&lt;br /&gt;
Funktionsprinzip wie oben plus zusätzliche Features:  &lt;br /&gt;
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken&lt;br /&gt;
* Wiederholfunktion, z.&amp;amp;nbsp;B. für die Eingabe von Werten&lt;br /&gt;
&lt;br /&gt;
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc&amp;amp;cs_p=svn://mikrocontroller.net/mp3dec/trunk&amp;amp;cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/************************************************************************/&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*                      Debouncing 8 Keys                               */&lt;br /&gt;
/*                      Sampling 4 Times                                */&lt;br /&gt;
/*                      With Repeat Function                            */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/*              Author: Peter Dannegger                                 */&lt;br /&gt;
/*                      danni@specs.de                                  */&lt;br /&gt;
/*                                                                      */&lt;br /&gt;
/************************************************************************/&lt;br /&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;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#define F_CPU           1000000                   // processor clock frequency&lt;br /&gt;
#warning kein F_CPU definiert&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#define KEY_DDR         DDRB&lt;br /&gt;
#define KEY_PORT        PORTB&lt;br /&gt;
#define KEY_PIN         PINB&lt;br /&gt;
#define KEY0            0&lt;br /&gt;
#define KEY1            1&lt;br /&gt;
#define KEY2            2&lt;br /&gt;
#define ALL_KEYS        (1&amp;lt;&amp;lt;KEY0 | 1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)&lt;br /&gt;
 &lt;br /&gt;
#define REPEAT_MASK     (1&amp;lt;&amp;lt;KEY1 | 1&amp;lt;&amp;lt;KEY2)       // repeat: key1, key2&lt;br /&gt;
#define REPEAT_START    50                        // after 500ms&lt;br /&gt;
#define REPEAT_NEXT     20                        // every 200ms&lt;br /&gt;
&lt;br /&gt;
#define LED_DDR         DDRA&lt;br /&gt;
#define LED_PORT        PORTA&lt;br /&gt;
#define LED0            0&lt;br /&gt;
#define LED1            1&lt;br /&gt;
#define LED2            2&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_state;                                // debounced and inverted key state:&lt;br /&gt;
                                                  // bit = 1: key pressed&lt;br /&gt;
volatile uint8_t key_press;                                // key press detect&lt;br /&gt;
 &lt;br /&gt;
volatile uint8_t key_rpt;                                  // key long press and repeat&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
ISR( TIMER0_OVF_vect )                            // every 10ms&lt;br /&gt;
{&lt;br /&gt;
  static uint8_t ct0, ct1, rpt;&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
 &lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
 &lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
 &lt;br /&gt;
  if( (key_state &amp;amp; REPEAT_MASK) == 0 )            // check repeat function&lt;br /&gt;
     rpt = REPEAT_START;                          // start delay&lt;br /&gt;
  if( --rpt == 0 ){&lt;br /&gt;
    rpt = REPEAT_NEXT;                            // repeat delay&lt;br /&gt;
    key_rpt |= key_state &amp;amp; REPEAT_MASK;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed. Each pressed key is reported&lt;br /&gt;
// only once&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_press( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_press;                          // read key(s)&lt;br /&gt;
  key_press ^= key_mask;                          // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key has been pressed long enough such that the&lt;br /&gt;
// key repeat functionality kicks in. After a small setup delay&lt;br /&gt;
// the key is reported being pressed in subsequent calls&lt;br /&gt;
// to this function. This simulates the user repeatedly&lt;br /&gt;
// pressing and releasing the key.&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_rpt( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read and clear atomic !&lt;br /&gt;
  key_mask &amp;amp;= key_rpt;                            // read key(s)&lt;br /&gt;
  key_rpt ^= key_mask;                            // clear key(s)&lt;br /&gt;
  sei();&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// check if a key is pressed right now&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_state( uint8_t key_mask )&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  key_mask &amp;amp;= key_state;&lt;br /&gt;
  return key_mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_short( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  cli();                                          // read key state and key press atomic !&lt;br /&gt;
  return get_key_press( ~key_state &amp;amp; key_mask );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
///////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
uint8_t get_key_long( uint8_t key_mask )&lt;br /&gt;
{&lt;br /&gt;
  return get_key_press( get_key_rpt( key_mask ));&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  LED_PORT = 0xFF;&lt;br /&gt;
  LED_DDR = 0xFF;                     &lt;br /&gt;
&lt;br /&gt;
  // Configure debouncing routines&lt;br /&gt;
  KEY_DDR &amp;amp;= ~ALL_KEYS;                // configure key port for input&lt;br /&gt;
  KEY_PORT |= ALL_KEYS;                // and turn on pull up resistors&lt;br /&gt;
&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS02)|(1&amp;lt;&amp;lt;CS00);         // divide by 1024&lt;br /&gt;
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms&lt;br /&gt;
  TIMSK |= 1&amp;lt;&amp;lt;TOIE0;                   // enable timer interrupt&lt;br /&gt;
&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1){&lt;br /&gt;
    if( get_key_short( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED1;&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_long( 1&amp;lt;&amp;lt;KEY1 ))&lt;br /&gt;
      LED_PORT ^= 1&amp;lt;&amp;lt;LED2;&lt;br /&gt;
 &lt;br /&gt;
    // single press and repeat&lt;br /&gt;
 &lt;br /&gt;
    if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 )){&lt;br /&gt;
      uint8_t i = LED_PORT;&lt;br /&gt;
 &lt;br /&gt;
      i = (i &amp;amp; 0x07) | ((i &amp;lt;&amp;lt; 1) &amp;amp; 0xF0);&lt;br /&gt;
      if( i &amp;lt; 0xF0 )&lt;br /&gt;
        i |= 0x08;&lt;br /&gt;
      LED_PORT = i;      &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// single press and repeat&lt;br /&gt;
if( get_key_press( 1&amp;lt;&amp;lt;KEY2 ) || get_key_rpt( 1&amp;lt;&amp;lt;KEY2 ))&lt;br /&gt;
    LED_PORT ^=0x08;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Funktionsweise =====&lt;br /&gt;
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen ct0 und ct1 aufgebaut werden&lt;br /&gt;
&lt;br /&gt;
[[Bild:VertCount.png|framed|center|&#039;&#039;&#039;8 vertikale Zähler in 2 8-Bit Variablen&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
wobei jeweils ein Bit in ct0 mit dem gleichwertigen Bit in ct1 zusammengenommen einen 2-Bit-Zähler bildet.&lt;br /&gt;
Der Code der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
i enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (keystate) verändert hat, ein 1 Bit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  ct0 = ~( ct0 &amp;amp; i );                             // reset or count ct0&lt;br /&gt;
  ct1 = ct0 ^ (ct1 &amp;amp; i);                          // reset or count ct1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Anweisungen erniedrigen den 2-Bit Zähler ct0/ct1 für jedes Bit um 1, welches in i gesetzt ist. Liegt an der entsprechenden Stelle in i ein 0 Bit vor (keine Änderung des Zustands), so wird der Zähler ct0/ct1 für dieses Bit auf 1 gesetzt.&lt;br /&gt;
Der Grundzustand des Zählers ist als ct0 == 1 und ct1 == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR Aufruf, bei dem die Taste im Vergleich zu keystate als verändert erkannt wurde&lt;br /&gt;
&lt;br /&gt;
   ct1   ct0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
     1    0   // 2&lt;br /&gt;
     0    1   // 1&lt;br /&gt;
     0    0   // 0&lt;br /&gt;
     1    1   // 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in i bleibt nur dort ein 1-Bit erhalten, wo sowohl in ct1 als auch in ct0 ein 1 Bit vorgefunden wird, der betreffenede Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit i wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in i ein 1 Bit hinterlässt. Im Endergebnis bedeutet dass, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1 Bit an der betreffenden Stelle in i führt, aber auch nur dann, wenn in i an dieser Bitposition ebenfalls ein 1 Bit war (welches wiederrum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4 mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle ist i daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in key_state registriert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und wenn sich in key_state das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als &#039;Taste wurde niedergedrückt&#039; gewertet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein &#039;paralles If&#039; gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist&lt;br /&gt;
    // und setze Bit 0 in key_press, wenn das der Fall ist&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 0 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 0 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 1&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 1 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 1 );&lt;br /&gt;
&lt;br /&gt;
    // Bit 2&lt;br /&gt;
    if( ( key_state &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) ) &amp;amp;&amp;amp;&lt;br /&gt;
        ( i &amp;amp; ( 1 &amp;lt;&amp;lt; 2 ) )&lt;br /&gt;
       key_press |= ( 1 &amp;lt;&amp;lt; 2 );&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.&lt;br /&gt;
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.&lt;br /&gt;
&lt;br /&gt;
===== Reduziert auf lediglich 1 Taste =====&lt;br /&gt;
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.&lt;br /&gt;
&lt;br /&gt;
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?&lt;br /&gt;
&lt;br /&gt;
Hier ist die &#039;Langform&#039; des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In key_state wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in key_press entsprechend vermerkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t key_state;&lt;br /&gt;
uint8_t key_counter;&lt;br /&gt;
volatile uint8_t key_press;&lt;br /&gt;
&lt;br /&gt;
ISR( ... Overflow ... )&lt;br /&gt;
{&lt;br /&gt;
  uint8_t input = KEY_PIN &amp;amp; ( 1 &amp;lt;&amp;lt; KEY0 );&lt;br /&gt;
&lt;br /&gt;
  if( input != key_state ) {&lt;br /&gt;
    key_counter--;&lt;br /&gt;
    if( key_counter == 0xFF ) {&lt;br /&gt;
      key_counter = 3;&lt;br /&gt;
      key_state = input;&lt;br /&gt;
      if( input )&lt;br /&gt;
        key_press = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    key_counter = 3;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t get_key_press()&lt;br /&gt;
{&lt;br /&gt;
  uint8_t result;&lt;br /&gt;
&lt;br /&gt;
  cli();&lt;br /&gt;
  result = key_press;&lt;br /&gt;
  key_press = FALSE;&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn zb. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine 2.te Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.&lt;br /&gt;
&lt;br /&gt;
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente sqrt() Funktion zu schreiben, wie die, die sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion sqrt() nicht verwenden, sondern müssten sich statt dessen selbst eine Wurzel-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Selbstsättigender Filter (nach Jürgen Schuhmacher) ===&lt;br /&gt;
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitttrigger wie in Hardware nachgebildet werden, indem ein abstrakter IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift Y(t) = k Y(t-1) + Input wird ein einfaches Filter erzeugt, dass dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt - Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Entprellung mit IIR-Filter.gif]]&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Signal des Tasters idealerweise um den Faktor 10-20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmittriggerfunktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.B. Überschreiten einer 55% Grenze und eine 0 bei Unterschreitung der 45%-Grenze ausgeben wird. Im Zwischenbereich wird der alte Wert gehalten.&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Mittelwertfilter (nach Lothar Miller) ===&lt;br /&gt;
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten FlipFlops. Man schiebt das Eingangssignal in eine FlipFlop-Kette und schaltet oberhalb der Mitte um:&lt;br /&gt;
&lt;br /&gt;
SignalInput -&amp;gt; FF1 -&amp;gt; FF2 -&amp;gt; FF3 -&amp;gt; FF4 -&amp;gt; FF5 -&amp;gt; FF6 -&amp;gt; FF7 -&amp;gt; FF8&lt;br /&gt;
&lt;br /&gt;
Wenn (Summe der FFs) =8 dann SignalOutput =1&lt;br /&gt;
Wenn (Summe der FFs) =0 dann SignalOutput =0&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR bz. ein AND Gatter nötig ist.&lt;br /&gt;
&lt;br /&gt;
== Gegenüberstellung der Verfahren ==&lt;br /&gt;
* HW - &amp;quot;entprellte Schalter&amp;quot;: Sehr teuer, grosse Bauform, verschleissbelastet, geringe Haltbarkeit&lt;br /&gt;
* HW - &amp;quot;Umschalter&amp;quot; : benötigt aufwändigeren Schalter, benötigt Elektronik&lt;br /&gt;
* HW - &amp;quot;Umschalter ohne FF&amp;quot; : benötigt aufwändigeren Schalter und kleiner Kondensator&lt;br /&gt;
* HW - &amp;quot;Kondensatorentprellung&amp;quot; : benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht&lt;br /&gt;
&lt;br /&gt;
* SW - Flankenverfahren:&lt;br /&gt;
* SW - Warteschleife: Durch die Warteschleifen eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch&lt;br /&gt;
* SW - Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der &#039;Verbrauch&#039; eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.&lt;br /&gt;
* SW - Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung&lt;br /&gt;
* SW - Filter 2: sehr geringer Platzbedarf, gute Wirkung&lt;br /&gt;
&lt;br /&gt;
== Links zum Thema ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/design/analog/4324067/Contact-debouncing-algorithm-emulates-Schmitt-trigger Contact-debouncing algorithm (Artikel)],  [http://www.edn.com/file/13370-70705di.pdf als PDF]&lt;br /&gt;
* [[AVR-Tutorial: Tasten]]&lt;br /&gt;
* [[AVR-GCC-Tutorial#.28Tasten-.29Entprellung|AVR-GCC-Tutorial Tastenentprellung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-20435.html Beitrag im Forum, AVR Assembler]&lt;br /&gt;
* [http://www.ganssle.com/debouncing.pdf A guide to debouncing (engl.), praktische Erläuterungen zum Entprellen in Soft- und Hardware]&lt;br /&gt;
* [http://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Lokale_Elektroniklieferanten&amp;diff=79635</id>
		<title>Lokale Elektroniklieferanten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Lokale_Elektroniklieferanten&amp;diff=79635"/>
		<updated>2013-11-19T07:16:38Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Link für Muekra Ulm korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Einleitung=&lt;br /&gt;
Diese Liste enthält &#039;&#039;&#039;Ladengeschäfte&#039;&#039;&#039;, bei denen man als Privatkunde lokal, vor Ort, elektronische Bauteile erhalten kann. Keine Flohmärkte, einmalige Veranstaltungen oder Geschäfte, die nur an gewerbliche Kunden verkaufen.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Falls die Darstellungsart nicht gefällt oder Rubriken fehlen, so bitte nicht hier ändern, sondern das Template anpassen: [[Vorlage:ElektronikLieferant]]&amp;lt;br&amp;gt;&lt;br /&gt;
So soll das Template ausgefüllt werden:&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=hier Firmenname eintragen&lt;br /&gt;
|Straße=Straßenname, z.&amp;amp;nbsp;B. Musterstraße 123&lt;br /&gt;
|PLZ=PLZ, z.&amp;amp;nbsp;B. 12345&lt;br /&gt;
|Ort=Ort, z.&amp;amp;nbsp;B. München&lt;br /&gt;
|Telefon=Telnr., z.&amp;amp;nbsp;B. 012345/12341234&lt;br /&gt;
|Fax=Faxnr., z.&amp;amp;nbsp;B. 012345/12345234&lt;br /&gt;
|Öffnungszeiten=Öffnungszeiten eintragen&amp;lt;br&amp;gt;Neue Zeile mit &amp;quot;br&amp;quot; abgetrennt&lt;br /&gt;
|Weblink=http://www.mikrocontroller.net Link ohne umschliessende eckige Klammern&lt;br /&gt;
|Email=Emailadresse, z.&amp;amp;nbsp;B. xxx@yyy.de&lt;br /&gt;
|Bemerkung=ggf. Bemerkung, ansonsten Rubrik/Feld/Variable leer lassen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Deutschland=&lt;br /&gt;
==Baden-Württemberg==&lt;br /&gt;
===Aalen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Wilhelm-Zapf-Str. 9&lt;br /&gt;
|PLZ=73430&lt;br /&gt;
|Ort=Aalen&lt;br /&gt;
|Telefon=07361/610820&lt;br /&gt;
|Fax=07361/610821&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 13.00 Uhr, 14.00 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Aalen&lt;br /&gt;
|Email=info@muekra.de&lt;br /&gt;
|Bemerkung=Keine SMD-Teile&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Esslingen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Bahnhofstr. 23&lt;br /&gt;
|PLZ=73728&lt;br /&gt;
|Ort=Esslingen&lt;br /&gt;
|Telefon=0711/355676&lt;br /&gt;
|Fax=0711/3108656&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 13.00 Uhr, 14.30 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Esslingen&lt;br /&gt;
|Email=info@muekra.de&lt;br /&gt;
|Bemerkung=Keine Mikrocontroller, keine SMD-Teile (ausser einige wenige Transistoren)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Göppingen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Geislinger Str. 2&lt;br /&gt;
|PLZ=73033&lt;br /&gt;
|Ort=Göppingen&lt;br /&gt;
|Telefon=07161/9641718&lt;br /&gt;
|Fax=07161/9641730&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 12.30 Uhr, 14.00 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Goeppingen&lt;br /&gt;
|Email=info@muekra.de&lt;br /&gt;
|Bemerkung=Keine Mikrocontroller, keine SMD-Teile (ausser einige wenige Transistoren). Es besteht die Möglichkeit die Bauteile die nicht im Sortiment vorhanden sind zu bestellen. Dies ist sehr günstig und passiert in 2-3 Werktagen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Heilbronn===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Krauss Elektronik GmbH&lt;br /&gt;
|Straße=Turmstraße 20&lt;br /&gt;
|PLZ=74072 &lt;br /&gt;
|Ort=Heilbronn&lt;br /&gt;
|Telefon=07131/68191&lt;br /&gt;
|Fax=07131/68192&lt;br /&gt;
|Öffnungszeiten=Mo.-Mi.+Fr. 9.00 - 18.00 Uhr&amp;lt;br&amp;gt;Do. 9.00 - 19.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.krauss-elektronik.de/&lt;br /&gt;
|Email=info@krauss-elektronik.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
===Freiburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Omega electronic GmbH&lt;br /&gt;
|Straße=Eschholzstr. 58-60&lt;br /&gt;
|PLZ=79115&lt;br /&gt;
|Ort=Freiburg&lt;br /&gt;
|Telefon=0761/76776-0&lt;br /&gt;
|Fax=0761/76776-55&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa.: 10:00 - 19:30&lt;br /&gt;
|Weblink=http://www.omega-electronic.de&lt;br /&gt;
|Email=info@omega-electronic.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
===Karlsbad===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=IT-WNS, Thomas Heldt&lt;br /&gt;
|Straße=Schulstr. 13&lt;br /&gt;
|PLZ=76307&lt;br /&gt;
|Ort=Karlsbad - Mutschelbach&lt;br /&gt;
|Telefon=07202/936083&lt;br /&gt;
|Fax=07202/936085&lt;br /&gt;
|Öffnungszeiten=Nach Vereinbahrung (Email-Kontakt)&lt;br /&gt;
|Weblink=http://www.it-wns.de&lt;br /&gt;
|Email=info@it-wns.de&lt;br /&gt;
|Bemerkung=Bestellungen im Onlineshop können wahlweise auch direkt abgeholt werden&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Karlsruhe===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Fritz-Erler-Straße 24&lt;br /&gt;
|PLZ=76133&lt;br /&gt;
|Ort=Karlsruhe&lt;br /&gt;
|Telefon=0721/374270&lt;br /&gt;
|Fax=0721/9379171&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 13.00 Uhr, 14.30 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/filiale_karlsruhe.html&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Werner Bremer Elektrotechnik &amp;amp; Einzelhandel&lt;br /&gt;
|Straße=Zähringerstraße 55a&lt;br /&gt;
|PLZ=76133&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Ort=Karlsruhe&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Bemerkung=Vielleicht geschlossen?? keine Website. Versand?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Ludwigsburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Mayer Elektronik&lt;br /&gt;
|Straße=Stuttgarter Str. 32&lt;br /&gt;
|PLZ=71638&lt;br /&gt;
|Ort=Ludwigsburg&lt;br /&gt;
|Telefon=07141 920 711&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 09.00-12.30 und 14.30-18.00 Uhr, Mittwoch nachmittags geschlossen, Sa. 09.00-12:30 Uhr&lt;br /&gt;
|Weblink=http://www.Mayer-Elektronik.de&lt;br /&gt;
|Email=info@Mayer-Elektronik.de&lt;br /&gt;
|Bemerkung= Spezialisiert auf Antennentechnik, Sat-Anlagen. Verschiedene Kleinteile erhältlich&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Mannheim===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Morchfeldstr. 37-39&lt;br /&gt;
|PLZ=68199&lt;br /&gt;
|Ort=Mannheim - Neckarau&lt;br /&gt;
|Telefon=0180 6 564445 (20 Cent/Verbindung aus dem Festnetz, max. 60 Cent/Verbindung aus dem Mobilfunknetz)&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00-20.00 Uhr, Sa. 10.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de/ce/de/ChainstoreInfo.html?detail&amp;amp;chainstorecode=CS_DE_MA&lt;br /&gt;
|Email=filiale.mannheim@conrad.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Offenburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Günther Wultschner (Elektronikladen)&lt;br /&gt;
|Straße=Luisenstraße 16&lt;br /&gt;
|PLZ=77654&lt;br /&gt;
|Ort=Offenburg&lt;br /&gt;
|Telefon=0781 43270‎&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 19:00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 16.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Pforzheim===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Westliche Karl-Friedrich-Str. 73 &lt;br /&gt;
|PLZ=75172 &lt;br /&gt;
|Ort=Pforzheim&lt;br /&gt;
|Telefon=07231 313952&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 12:30 Uhr; 14.00 Uhr - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Pforzheim&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Reutlingen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Federnseestr. 4 &lt;br /&gt;
|PLZ=72764&lt;br /&gt;
|Ort=Reutlingen&lt;br /&gt;
|Telefon=07121/370748&lt;br /&gt;
|Fax=07121/370741&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.30 - 13.00 Uhr, 14.00 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.30 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/filiale_reutlingen.html&lt;br /&gt;
|Email=info@muekra.de&lt;br /&gt;
|Bemerkung=Keine SMD-Teile&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Schwäbisch Gmünd===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Kalter Markt 12&lt;br /&gt;
|PLZ=73525&lt;br /&gt;
|Ort=Schwäbisch Gmünd&lt;br /&gt;
|Telefon=07171/64352&lt;br /&gt;
|Fax=07171/405684&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 12.30 Uhr, 14.00 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.30 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Schwaebisch_Gmuend&lt;br /&gt;
|Email=info@muekra.de&lt;br /&gt;
|Bemerkung=Keine SMD-Teile&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Stuttgart===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Dräger Electronic &amp;amp; Audio GmbH&lt;br /&gt;
|Straße=Hauptstätter Strasse 55&lt;br /&gt;
|PLZ=70178&lt;br /&gt;
|Ort=Stuttgart&lt;br /&gt;
|Telefon=+49 711 601818-46&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag  10:00 - 19:00 Uhr Samstag 10:00 - 16:00 Uhr&lt;br /&gt;
|Weblink=http://www.dea-gmbh.de&lt;br /&gt;
|Email=info@draeger-electronic.de&lt;br /&gt;
|Bemerkung= Audio, Hifi, Tontechnik, Kabel, schon lange keine Bauelemente mehr!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Kronenstraße 7, Altes Postquartier&lt;br /&gt;
|PLZ=70173&lt;br /&gt;
|Ort=Stuttgart&lt;br /&gt;
|Telefon=0180 5 564445 (14 Cent/Min. aus dem Festnetz, max. 42 Cent/Min. aus dem Mobilfunknetz)&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 10.00-20.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de/ce/de/ChainstoreInfo.html?detail&amp;amp;chainstorecode=CS_DE_S&lt;br /&gt;
|Email=filiale.stuttgart@conrad.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Ulm===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=AW-Elektronik&lt;br /&gt;
|Straße=Im Brühl 9&lt;br /&gt;
|PLZ=89194&lt;br /&gt;
|Ort=Ulm/Schnürpflingen&lt;br /&gt;
|Dienstleistungen=Entwicklung Hard &amp;amp; Software; Leiterplattenbestückung SMD und THD; Leiterplattenlayout und Routing&lt;br /&gt;
|Weblink=http://www.aw-elektronik.de&lt;br /&gt;
|Email=info@aw-elektronik.de&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Bemerkung=Nach Absprache können lagernde Bauteile gekauft werden. Am Lager sind SMD-Bauteile wie z.B. AVR, Widerstände, Kondensatoren, LEDs; Die LEDs sind als WarmWeiß 3500K (1800mcd), Kaltweis 7000K (2850mcd), Rot (1500mcd) und Blau (350mcd) und UV vorhanden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Neutorstr. 20&lt;br /&gt;
|PLZ=89073&lt;br /&gt;
|Ort=Ulm&lt;br /&gt;
|Telefon=0731/64494&lt;br /&gt;
|Fax=0731/6028676&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/Filiale_Ulm.html&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Keine SMD-Teile&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Villingen-Schwenningen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Buchmann Elektronik&lt;br /&gt;
|Straße=Wasenstraße 51&lt;br /&gt;
|PLZ=78054&lt;br /&gt;
|Ort=Villingen-Schwenningen&lt;br /&gt;
|Telefon=07720/1308&lt;br /&gt;
|Fax=07720/1360&lt;br /&gt;
|Öffnungszeiten=Montag bis Freitag 09.00 - 12.30 &amp;amp; 14.00 - 19.00 Uhr; Mittwoch Nachmittag geschlossen; Samstag geschlossen&lt;br /&gt;
|Weblink=http://www.buchmann-elektronik.de&lt;br /&gt;
|Email=buchmann-elektronik@t-online.de&lt;br /&gt;
|Bemerkung=keine SMD.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=SchiBe Elektronik&lt;br /&gt;
|Straße=Mühlenstr. 9&lt;br /&gt;
|PLZ=78050&lt;br /&gt;
|Ort=Villingen-Schwenningen&lt;br /&gt;
|Telefon=07721/8879880&lt;br /&gt;
|Fax=07721/88798820&lt;br /&gt;
|Öffnungszeiten=Mo-Fr.; Zeiten leider unbekannt&lt;br /&gt;
|Weblink=http://www.schibe.de&lt;br /&gt;
|Email=info@SchiBe.de&lt;br /&gt;
|Bemerkung=Bestellt auf Anfrage ohne Versandkosten bei Conrad mit Selbstabholung dort.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Bayern==&lt;br /&gt;
===Ansbach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Mehl Electronic&lt;br /&gt;
|Straße=Schaitbergerstr. 1&lt;br /&gt;
|PLZ=91522&lt;br /&gt;
|Ort=Ansbach&lt;br /&gt;
|Telefon=0981/977166&lt;br /&gt;
|Fax=0981/977167&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 09:00 - 18:00 Uhr&amp;lt;br&amp;gt;Samtag 10:00 - 13:00 Uhr &lt;br /&gt;
|Weblink=http://www.electronic-mehl.de&lt;br /&gt;
|Email=service@electronic-mehl.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Aschaffenburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=VS Elektronik OHG&lt;br /&gt;
|Straße= Magnolienweg 3&lt;br /&gt;
|PLZ= 63739&lt;br /&gt;
|Ort=Aschaffenburg &lt;br /&gt;
|Telefon=06021-30460&lt;br /&gt;
|Fax=06021-304626&lt;br /&gt;
|Öffnungszeiten= Montag - Freitag: 09:00 - 18:00 Uhr&amp;lt;br&amp;gt;Samstag: 09:00 - 13:00 Uhr&lt;br /&gt;
|Weblink=http://www.vs-electronic.de&lt;br /&gt;
|Email=info@vs-electronic.de&lt;br /&gt;
|Bemerkung= führt Vellemann Bausätze, PCs, Telekommunikation und Bauteile&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Augsburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=rf-elektronik&lt;br /&gt;
|Straße= Karlstraße 2, Eingang über Obstmarkt&lt;br /&gt;
|PLZ=86150&lt;br /&gt;
|Ort=Augsburg &lt;br /&gt;
|Telefon=0821 39830&lt;br /&gt;
|Fax=0821 518727﻿&lt;br /&gt;
|Öffnungszeiten= Montag - Freitag: 10:00 - 18:00 Uhr&amp;lt;br&amp;gt;Samstag: 10:00 - 13:00 Uhr&lt;br /&gt;
|Weblink=http://www.rf-elektronik.de&lt;br /&gt;
|Email=info@rf-elektronik.de&lt;br /&gt;
|Bemerkung=Bauelemente, Satellitentechnik+Zubehör, Halbleitertechnik, Satellitenanlagenbau, Akkus, im Laden befindet sich als nettes Schmankerl auch ein winziges, technisches Bücher-Antiquariat&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Bamberg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Box&lt;br /&gt;
|Straße=Untere Königstraße 29&lt;br /&gt;
|PLZ=96052&lt;br /&gt;
|Ort=Bamberg&lt;br /&gt;
|Telefon=0951 28500&lt;br /&gt;
|Öffnungszeiten= Montag - Freitag: 9:00 - 13:00 Uhr, 14:00 - 18:00 Uhr&amp;lt;br&amp;gt;Samstag: 9:00 - 13:00 Uhr  &lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
‎ &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Erlangen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schoffer Radio-Fernseh-Elektronik&lt;br /&gt;
|Straße=Beethovenstraße 2&lt;br /&gt;
|PLZ=91052&lt;br /&gt;
|Ort=Erlangen‎&lt;br /&gt;
|Telefon=09131 25288‎&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Feller-electronic&lt;br /&gt;
|Straße=Marquardsenstraße 21&lt;br /&gt;
|PLZ=91054 &lt;br /&gt;
|Ort=Erlangen‎&lt;br /&gt;
|Telefon=09131 27595&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 9.00 - 13.00, 14.00-18.00 Uhr. Sa 9.00 - 14.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Fürth===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=B+D Electronic GmbH&lt;br /&gt;
|Straße=Königstr. 107 (gegenüber Citycenter und neben Feuerwehr)&lt;br /&gt;
|PLZ=90762 &lt;br /&gt;
|Ort=Fürth&lt;br /&gt;
|Telefon=0911 - 77 30 40&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Fr:   10.00 - 12.30 &amp;amp; 14.00 - 18.00&amp;lt;br&amp;gt;Sa:        10.00 - 13.00&lt;br /&gt;
|Weblink=http://www.bdelectronic.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= keine Microkontoller&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Holzheim===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=RH Electronic Eva Spaeth&lt;br /&gt;
|Straße=Ostertalstraße 15&lt;br /&gt;
|PLZ=86684&lt;br /&gt;
|Ort=Holzheim&lt;br /&gt;
|Telefon=08276 / 58800&lt;br /&gt;
|Fax=08276 / 58802&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://rhelectronic.tradoria.de/&lt;br /&gt;
|Email=eva@peterscable.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Kaufbeuren ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Jantsch-Elektronik GmbH&lt;br /&gt;
|Straße=Porschestraße  26&lt;br /&gt;
|PLZ=87600&lt;br /&gt;
|Ort=Kaufbeuren&lt;br /&gt;
|Telefon=0 83 41 / 95 33-0&lt;br /&gt;
|Fax=0 83 41 / 37 00&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 9:00-12:30 / 13:30-18:00&amp;lt;br/&amp;gt;&lt;br /&gt;
Sa 9:00-13:00 Uhr&lt;br /&gt;
|Weblink= http://www.j-e.de&lt;br /&gt;
|Email=info@j-e.de&lt;br /&gt;
|Bemerkung=führt auch gebrauchte Messgeräte&lt;br /&gt;
}}&lt;br /&gt;
=== Kiefersfelden (bei Rosenheim) ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=db-electronic, Jutta Richter&lt;br /&gt;
|Straße=Dorfstr. 30&lt;br /&gt;
|PLZ=83088&lt;br /&gt;
|Ort=Kiefersfelden&lt;br /&gt;
|Telefon=0 80 33 / 86 80&lt;br /&gt;
|Fax=0 80 33 / 76 19&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 9:00-18:00&amp;lt;br/&amp;gt;&lt;br /&gt;
Sa 10:00-12:00 Uhr&lt;br /&gt;
|Weblink= http://www.db-electronic.de&lt;br /&gt;
|Email=info@db-electronic.de&lt;br /&gt;
|Bemerkung=Verkauft neben aktiven, passiven und mechanischen Bauteilen, Werkzeug, technische Sprays, Messgeräte, Kleingeräte, LED-Artikel, Kabel, Akkus, Batterien und Computerzubehör&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Landshut===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Der Elektronik Landen&lt;br /&gt;
|Straße=Innere Münchener Straße 16&lt;br /&gt;
|PLZ=84036&lt;br /&gt;
|Ort=Landshut&lt;br /&gt;
|Öffnungszeiten=Mo - Fr 8:00 - 12:00, 14:00 - 18:00; Sa 8:00 - 12:00&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= kleiner, aber feiner Laden. Verkauft eher nur Analogtechnik, Röhren, und recht selten gewordene Sachen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Rauschhuber Electronic&lt;br /&gt;
|Straße=Gaußstraße 2&lt;br /&gt;
|PLZ=84030&lt;br /&gt;
|Ort=Landshut&lt;br /&gt;
|Öffnungszeiten=Mo - Fr 8:00 - 17:00&lt;br /&gt;
|Weblink=http://rauschhuber.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= Kleiner Laden neben MediaMarkt. Verkauft Verbrauchsmaterial, wie Zinn und Lötsauglitze, Aktive und Passive Bauelemente und Werkzeug, wie Lötkolben, Seitenschneider, Schraubenderher u.n.v.m.K..&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Leiblfing (bei Straubing)===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Hans Entner Funkelektronik&lt;br /&gt;
|Straße=Landshuter Straße 1 &lt;br /&gt;
|PLZ=94339&lt;br /&gt;
|Ort=Leiblfing&lt;br /&gt;
|Telefon=(0 94 27) 90 20 86&lt;br /&gt;
|Fax=09427 - 902087&lt;br /&gt;
|Öffnungszeiten= leider nicht bekannt&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=Entner-DF9RJ@t-online.de&lt;br /&gt;
|Bemerkung= Kleiner Laden und sehr netter Inhaber. Einige Geräte und Zubehör. Viele HF-Stecker (v.a. SMA, BNC, N und PL(UHF)) und Koax-Kabel. Bietet auch Reparaturen an.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===München===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Tal 29&lt;br /&gt;
|PLZ=80331 &lt;br /&gt;
|Ort=München&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Fr:   9:00 - 20:00&amp;lt;br&amp;gt;Sa:        9:00 - 20:00&lt;br /&gt;
|Weblink=http://www.conrad.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Hanauer Straße 91 (gegenüber OEZ)&lt;br /&gt;
|PLZ=80993 &lt;br /&gt;
|Ort=München - Moosach&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Fr:   9:30 - 20:00&amp;lt;br&amp;gt;Sa:        9:00 - 20:00&lt;br /&gt;
|Weblink=http://www.conrad.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Bürklin&lt;br /&gt;
|Straße=Grünwalder Weg 30&lt;br /&gt;
|PLZ=82041 &lt;br /&gt;
|Ort=Oberhaching&lt;br /&gt;
|Telefon=(089) 55 875-0&lt;br /&gt;
|Fax=(089) 55 875-421&lt;br /&gt;
|Öffnungszeiten=Mo - Do:   9:00 - 16:30&amp;lt;br&amp;gt;Fr:        9:00 - 13:00&lt;br /&gt;
|Weblink=http://buerklin.de/&lt;br /&gt;
|Email=info@buerklin.de&lt;br /&gt;
|Bemerkung= Achtung neuer Standort nicht mehr Schillerstraße !!!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Strixner &amp;amp; Holzinger&lt;br /&gt;
|Straße=Schillerstraße 25-29&lt;br /&gt;
|PLZ=80336 &lt;br /&gt;
|Ort=München&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Fr:   9:30 - 18:00&lt;br /&gt;
|Weblink=http://sh-halbleiter.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Nürnberg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Fürther Straße 212&lt;br /&gt;
|PLZ=90429&lt;br /&gt;
|Ort=Nürnberg&lt;br /&gt;
|Telefon=0180 5 564445&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Fr:   9:30 - 20:00&amp;lt;br&amp;gt;Sa: 9.30 - 18:00&lt;br /&gt;
|Weblink=http://www.conrad.de/&lt;br /&gt;
|Email=filiale.nuernberg@conrad.de&lt;br /&gt;
|Bemerkung=Gegenüber ehemaligem Quelle-Stammhaus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Rauch Elektronik&lt;br /&gt;
|Straße=Ehemannstraße 7&lt;br /&gt;
|PLZ=90478&lt;br /&gt;
|Ort=Nürnberg&lt;br /&gt;
|Telefon=0911469224&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Regensburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Langobardenstraße 2&lt;br /&gt;
|PLZ=93053&lt;br /&gt;
|Ort=Regensburg&lt;br /&gt;
|Telefon=0180 5 564445&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo - Sa:   9:30 - 20:00&lt;br /&gt;
|Weblink=http://www.conrad.de/&lt;br /&gt;
|Email=filiale.regensburg@conrad.de&lt;br /&gt;
|Bemerkung=Im Fachmarktzentrum Bajuwarenstraße&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Schweinfurt===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Spath Elektronische Bauteile&lt;br /&gt;
|Straße=Cramerstr. 9&lt;br /&gt;
|PLZ=97421&lt;br /&gt;
|Ort=Schweinfurt&lt;br /&gt;
|Telefon=09721/25186&lt;br /&gt;
|Fax=09721/22999&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Straubing===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Röhrner Electronic&lt;br /&gt;
|Straße=Innere Passauer Str. 12&lt;br /&gt;
|PLZ=94315&lt;br /&gt;
|Ort=Straubing&lt;br /&gt;
|Telefon=09421/12573&lt;br /&gt;
|Fax=09421/22207&lt;br /&gt;
|Öffnungszeiten=Mo - Do:   9:00 - 18:00&amp;lt;br&amp;gt;Sa:        10:00 - 13:00&lt;br /&gt;
|Weblink=http://www.roehrner-electronic.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Netter Elektronikladen mit vielen Halbleitern neben dem üppigen Standardsortiment&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Pförring===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Pollin&lt;br /&gt;
|Straße=Max-Pollin-Straße 1&lt;br /&gt;
|PLZ=85104&lt;br /&gt;
|Ort=Pförring&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9 - 19 Uhr&amp;lt;br&amp;gt;Sa. 9 - 16 Uhr &lt;br /&gt;
|Weblink=http://www.pollin.de/shop/static/ecenter.htm&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=nähe Ingolstadt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Berlin==&lt;br /&gt;
===Charlottenburg-Wilmersdorf===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Segor-electronics&lt;br /&gt;
|Straße=Kaiserin-Augusta-Allee 94&lt;br /&gt;
|PLZ=10589&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=030 4399843&lt;br /&gt;
|Fax=030 4399855&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00-13.30 Uhr und 14:30-18:00 Uhr, Sa. 10.00-13.00 Uhr&lt;br /&gt;
|Weblink=http://www.segor.de&lt;br /&gt;
|Email=sales@segor.de&lt;br /&gt;
|Bemerkung=Sehr gut sortiertes und vielseitiges Sortiment, preiswert, hochwertig.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Kreuzberg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Hasenheide 14-15&lt;br /&gt;
|PLZ=10967&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00-20.00 Uhr, Sa. 10.00-18.00 Uhr &lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Friedrichshain===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=TinkerSoup&lt;br /&gt;
|Straße=Frankfurter Allee 53&lt;br /&gt;
|PLZ=10247&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=03077903156&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.tinkersoup.de&lt;br /&gt;
|Email=info@tinkersoup.de&lt;br /&gt;
|Bemerkung=Ist ein reiner Onlineshop eigentlich, bieten aber Selbstabholung nach Absprache an, eingetragene Adresse ist wohl für Selbstabholer&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Prenzlauer Berg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=SLY electronic&lt;br /&gt;
|Straße=Erich-Weinert-Straße 139-141&lt;br /&gt;
|PLZ=10409&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=030 428492-0&lt;br /&gt;
|Fax=030 428492-29&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00-20.00 Uhr, Sa. 10.00-16.00 Uhr&lt;br /&gt;
|Weblink=http://www.sly.de&lt;br /&gt;
|Email=mail@sly.de&lt;br /&gt;
|Bemerkung=Sehr begrenztes Angebot, Internetseite nicht aussagekräftig (was den Bestand angeht) und nicht gerade günstig.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Schöneberg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Kleiststraße 30-31&lt;br /&gt;
|PLZ=10787&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 10.00-20.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Atzert Radio&lt;br /&gt;
|Straße=Kleiststraße 32-33&lt;br /&gt;
|PLZ=10787&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=030/212984-0 &lt;br /&gt;
|Fax=030/212984-11&lt;br /&gt;
|Öffnungszeiten=Montag-Samstag 10:00-19.00 Uhr&lt;br /&gt;
|Weblink=http://www.atzert-radio.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Steglitz===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Schloßstraße 34-36&lt;br /&gt;
|PLZ=12163&lt;br /&gt;
|Ort=Berlin&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Do. 10.00-20.00 Uhr, Fr.-Sa. 10.00-22.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Brandenburg==&lt;br /&gt;
&lt;br /&gt;
===Cottbus===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Klauck Electronic-Shop&lt;br /&gt;
|Straße=Karl-Liebknecht-Str. 53a&lt;br /&gt;
|PLZ=03046&lt;br /&gt;
|Ort=Cottbus&lt;br /&gt;
|Telefon=0355 / 797044&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=reichlich eigene Parkplätze im Hof&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=electronic Shop cottbus&lt;br /&gt;
|Straße=Schweriner Str. 2&lt;br /&gt;
|PLZ=03046&lt;br /&gt;
|Ort=Cottbus&lt;br /&gt;
|Telefon=0355 / 2890585&lt;br /&gt;
|Fax=0355 / 539545&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr.  09.00 - 12.00 Uhr, 14.00 - 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.eshop-cb.de/eshop/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=der Shop ist sehr jung, daher ist das Team noch etwas unerfahren, macht dies aber durch Freundlichkeit wett&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Frankfurt (Oder)===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Service Landrock&lt;br /&gt;
|Straße=Karl-Ritter-Platz 8-9&lt;br /&gt;
|PLZ=15230&lt;br /&gt;
|Ort=Frankfurt (Oder) &lt;br /&gt;
|Telefon=0335 / 6802029&lt;br /&gt;
|Fax=0335 / 684171&lt;br /&gt;
|Öffnungszeiten=Mo-Fr. 10-18 Uhr&lt;br /&gt;
|Weblink=http://www.landrock-elektronik.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Jürgen (Chef) ist superfreundlich, habe jahrelang dort eingekauft.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Bremen==&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Borgwardstr. 2&lt;br /&gt;
|PLZ=28279&lt;br /&gt;
|Ort=Bremen &lt;br /&gt;
|Telefon=01 80 / 55 64 44 5&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schuricht Distrelec GmbH&lt;br /&gt;
|Straße=Rehland 8&lt;br /&gt;
|PLZ=28832&lt;br /&gt;
|Ort=Achim &lt;br /&gt;
|Telefon= 04 20 2 / 97 47-97&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=https://www.distrelec.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= Nur telefonische Bestellung. Wenn man bei der Bestellung explizit sagt dass man die Sachen in Achim abholen möchte, dann klappt dies auch... meistens...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Hamburg==&lt;br /&gt;
=== Hammerbrook ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Radio Kölsch&lt;br /&gt;
|Straße=Kreuzbrook 14&lt;br /&gt;
|PLZ=20537&lt;br /&gt;
|Ort=Hamburg &lt;br /&gt;
|Telefon=040 / 653 00 81&lt;br /&gt;
|Fax=040 / 653 00 80&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 10:00 - 19:00 Uhr, Samstag 10:00 - 16:00 Uhr&lt;br /&gt;
|Weblink=http://www.shop-koelsch24.com/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Hoheluft Ost===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Statronic&lt;br /&gt;
|Straße=Eppendorfer Weg 244&lt;br /&gt;
|PLZ=20251&lt;br /&gt;
|Ort=Hamburg &lt;br /&gt;
|Telefon=040 / 422 33 22&lt;br /&gt;
|Fax=040 / 422 33 25&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.statronic.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Wandsbek===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Wandsbeker Zollstr. 67-69&lt;br /&gt;
|PLZ=22041&lt;br /&gt;
|Ort=Hamburg&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 09.30-20.00 Uhr, Sa. 09.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Altona===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Hahnenkamp 1&lt;br /&gt;
|PLZ=22765 &lt;br /&gt;
|Ort=Hamburg&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 10.00-20.00 Uhr &lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Hessen==&lt;br /&gt;
===Darmstadt===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Zimmermann Electronic GmbH&lt;br /&gt;
|Straße=Kasinostr. 2&lt;br /&gt;
|PLZ=64293 &lt;br /&gt;
|Ort=Darmstadt&lt;br /&gt;
|Telefon=06151 - 66 69 - 240&lt;br /&gt;
|Fax=06151 - 66 69 - 290&lt;br /&gt;
|Öffnungszeiten=Mo.- Fr. 9:00 - 19:00 Uhr&amp;lt;br&amp;gt;Sa. 9:00 - 14:00 Uhr&lt;br /&gt;
|Weblink=http://www.zeg-shop.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=EBG Electronic Business GmbH&lt;br /&gt;
|Straße=Bismarckstr. 61&lt;br /&gt;
|PLZ=64293 &lt;br /&gt;
|Ort=Darmstadt&lt;br /&gt;
|Telefon=06151 / 82 91 - 0&lt;br /&gt;
|Fax=06151 / 82 91 - 20&lt;br /&gt;
|Öffnungszeiten=Montag-Freitag: 9:00 bis 19:00 Uhr&amp;lt;br&amp;gt;Samstag:        9:00 bis 14:00 Uhr&lt;br /&gt;
|Weblink=http://www.ebg-darmstadt.de&lt;br /&gt;
|Email=info@ebg-darmstadt.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Frankfurt/Main===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Zeil 58 + 64 (Konstabler Wache)&lt;br /&gt;
|PLZ=60313 &lt;br /&gt;
|Ort=Frankfurt&lt;br /&gt;
|Telefon=0180 5 564445&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Mi. 10.00-20.00 Uhr&amp;lt;br&amp;gt;Do.-Sa. 10.00-21.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Gießen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Hartel und Sanchez GbR (geschlossen)&lt;br /&gt;
|Straße=Waldweide 14&lt;br /&gt;
|PLZ=35398&lt;br /&gt;
|Ort=Gießen&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=0641/9203777&lt;br /&gt;
|Öffnungszeiten=geschlossen&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= [http://www.mikrocontroller.net/topic/209488#2074882]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Hanau===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=MP Elektronik Vertriebs GmbH&lt;br /&gt;
|Straße=Hospitalstr. 13&lt;br /&gt;
|PLZ=63450 &lt;br /&gt;
|Ort=Hanau&lt;br /&gt;
|Telefon=06181/253077&lt;br /&gt;
|Fax=06181/921450 &lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Kassel===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Geddert-Elektronik&lt;br /&gt;
|Straße=Holländische Straße 31&lt;br /&gt;
|PLZ=34127&lt;br /&gt;
|Ort=Kassel&lt;br /&gt;
|Telefon=0561 / 897177&lt;br /&gt;
|Fax=0561 / 84329&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=UK-Elektronik&lt;br /&gt;
|Straße=Königstor 52&lt;br /&gt;
|PLZ=34117&lt;br /&gt;
|Ort=Kassel&lt;br /&gt;
|Telefon=0561 / 771074&lt;br /&gt;
|Fax=0561 / 778373&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 9:30 bis 18:00 Uhr, Samstag 9:30 bis 13:00 Uhr&lt;br /&gt;
|Weblink=http://www.uk-elektronik.com/&lt;br /&gt;
|Email=info@UK-Elektronik.com&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schuro Elektronik GmbH&lt;br /&gt;
|Straße=Friedrich-Ebert-Straße 3&lt;br /&gt;
|PLZ=34117&lt;br /&gt;
|Ort=Kassel&lt;br /&gt;
|Telefon=0561 / 16415&lt;br /&gt;
|Fax=0561 / 770318&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=NT-Elektronik Toprakci Nihat Elektronik&lt;br /&gt;
|Straße=Wolfsschlucht 10&lt;br /&gt;
|PLZ=34117&lt;br /&gt;
|Ort=Kassel&lt;br /&gt;
|Telefon=0561 / 2020858&lt;br /&gt;
|Fax=0561 / 2020857&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 10:00 – 19:00 Uhr, Samstag 10:00 – 16:00 Uhr&lt;br /&gt;
|Weblink=http://www.nt-elektronik.de/&lt;br /&gt;
|Email=NT-Elektronik@hotmail.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Offenbach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=rail- electronic GmbH&lt;br /&gt;
|Straße=Waldemar- Klein- Platz 1&lt;br /&gt;
|PLZ=63071&lt;br /&gt;
|Ort=Offenbach&lt;br /&gt;
|Telefon=069 / 88 20 72&lt;br /&gt;
|Fax=069 / 88 31 14&lt;br /&gt;
|Öffnungszeiten=Mo - Fr 10h - 19h&amp;lt;br&amp;gt;Sa 10h - 16h&lt;br /&gt;
|Weblink=http://www.rail-electronic.de&lt;br /&gt;
|Email=info@rail-electronic.de&lt;br /&gt;
|Bemerkung=Computer- Hardware/ Software/ Service/ Kabel/ Stecker/ Adapter/ ... Unser Ladengeschäft befindet sich direkt im Stadion in der unteren Ladenzeile, Sie können gleich davor parken&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Wetzlar===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Electronic-Shop Lutz Hoffmann&lt;br /&gt;
|Straße=Silhöfertorstr. 3&lt;br /&gt;
|PLZ=35578&lt;br /&gt;
|Ort=Wetzlar&lt;br /&gt;
|Telefon=06441 / 94627&lt;br /&gt;
|Fax=06441 / 946271&lt;br /&gt;
|Öffnungszeiten=Mo. - Sa. 9.00 - 13.00 Uhr&amp;lt;br&amp;gt;Mo. - Fr. 14.00 - 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.funk-shop.de/&lt;br /&gt;
|Email=mail@funk-shop.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Wöllstadt===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=ELW Elektronik Handels GMBH&lt;br /&gt;
|Straße=Am Kalkofen 10&lt;br /&gt;
|PLZ=61206&lt;br /&gt;
|Ort=Wöllstadt&lt;br /&gt;
|Telefon=06034-4411&lt;br /&gt;
|Fax=06034-5739&lt;br /&gt;
|Öffnungszeiten=Mo. - Fr. 08.30 - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 08.30 - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.elw-elektronik.com/&lt;br /&gt;
|Email=elw-gmbh@t-online.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Mecklenburg-Vorpommern==&lt;br /&gt;
===Rostock===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=A-Z City-Stores&lt;br /&gt;
|Straße=Doberaner-Hof&lt;br /&gt;
|PLZ=&lt;br /&gt;
|Ort=Rostock&lt;br /&gt;
|Telefon=0381-4031171&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    9.30 – 19.30 Uhr&amp;lt;br&amp;gt;Sa.   9.30 – 16.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=geringes Angebot&amp;lt;br&amp;gt;recht teuer&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Niedersachsen==&lt;br /&gt;
===Braunschweig===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic GmbH&lt;br /&gt;
|Straße=Sudetenstr. 4&lt;br /&gt;
|PLZ=38114&lt;br /&gt;
|Ort=Braunschweig&lt;br /&gt;
|Telefon=0180 5 564445&lt;br /&gt;
|Fax=???&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 09.30-19.00 Uhr, Sa. 09.00-18.00 Uhr (Abweichend in der Vorweihnachtszeit!)&lt;br /&gt;
|Weblink=http://www.filialen.conrad.de/&lt;br /&gt;
|Email=filiale.braunschweig@conrad.de&lt;br /&gt;
|Bemerkung= Die Resterampe hinter dem Hauptgebäude gibt es nicht mehr. Dorthin wurde die Modellbau-Abteilung ausgelagert.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=ETT - Electronic Toys Trading GmbH&lt;br /&gt;
|Straße=Kreuzstraße 65&lt;br /&gt;
|PLZ=38118&lt;br /&gt;
|Ort=Braunschweig&lt;br /&gt;
|Telefon=0531-58 11 00&lt;br /&gt;
|Fax=0531-58 11 030&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.ett-online.de/&lt;br /&gt;
|Email=bestell@ett-online.de&lt;br /&gt;
|Bemerkung= Online-Katalog unter http://www.megakick-stores.de/. Zu Atzert-Elektronik mutiert.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Bauteile Vertrieb - Dipl.-Ing. Jörg Bassenberg&lt;br /&gt;
|Straße=Nußbergstraße 9&lt;br /&gt;
|PLZ=38102&lt;br /&gt;
|Ort=Braunschweig&lt;br /&gt;
|Telefon=0531-79 17 07&lt;br /&gt;
|Fax=0531-7 60 22&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.bassenberg.de/&lt;br /&gt;
|Email=info@bassenberg.de&lt;br /&gt;
|Bemerkung= Kleines Ladengeschäft, hauptsächlich ältere Bauteile vorrätig.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Buxtehude===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Sell-Elektronik&lt;br /&gt;
|Straße=Brillenburgsweg 31A&lt;br /&gt;
|PLZ=21614&lt;br /&gt;
|Ort=Buxtehude&lt;br /&gt;
|Telefon=04161-88305&lt;br /&gt;
|Fax=-&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10:00-12:00 Uhr &amp;amp; 15:00-18:30 Uhr, Sa. 10:00-13:00 Uhr &lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Ladengeschäft. Riesen Sortiment an passiven, aktiven und mechanischen Bauteilen. Gute Beratung und faire Preise. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Göttingen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Göttinger Elektronik Center&lt;br /&gt;
|Straße=Groner-Tor-Straße 8&lt;br /&gt;
|PLZ=37073&lt;br /&gt;
|Ort=Göttingen&lt;br /&gt;
|Telefon=0551-487988&lt;br /&gt;
|Fax=0551-487987&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10:00-13:00 Uhr &amp;amp; 15:00-18:00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Hannover===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic GmbH&lt;br /&gt;
|Straße=Goseriede 3&lt;br /&gt;
|PLZ=30159&lt;br /&gt;
|Ort=Hannover&lt;br /&gt;
|Telefon= 0180 5 564445&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 09.00-20.00 Uhr&lt;br /&gt;
|Weblink=http://www.filialen.conrad.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Radio Menzel-Electronic&lt;br /&gt;
|Straße=Fössestraße 6&lt;br /&gt;
|PLZ=30451&lt;br /&gt;
|Ort=Hannover&lt;br /&gt;
|Telefon= 0511 442607&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo-Fr: 10:00-13:30, 14:30-18:00  Sa: 10:00-13:30&lt;br /&gt;
|Weblink=www.menzel-electronic.de &lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Zloch-Elektronik&lt;br /&gt;
|Straße=Calenberger Str. 33 &lt;br /&gt;
|PLZ=30169&lt;br /&gt;
|Ort=Hannover&lt;br /&gt;
|Telefon=0511 15575 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo-Fr: ? Sa: ?&lt;br /&gt;
|Weblink=keine&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= Zloch Elektronik ist einer der ältesten Läden dieser Art in Hannover. Man bekommt dort auch Bauteile, die selten sind (Restbestände alter Zeiten). Anfahrt mit öffentlichen Verkehrsmitteln: Haltestelle Humboldtstraße oder Haltestelle Waterloo. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Lüneburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Beusch Elektronik&lt;br /&gt;
|Straße=Reichenbachstr. 8&lt;br /&gt;
|PLZ=21335 &lt;br /&gt;
|Ort=Lüneburg&lt;br /&gt;
|Telefon=04131 33311&lt;br /&gt;
|Fax=?&lt;br /&gt;
|Öffnungszeiten=Mo und Sa geschlossen, Di - Fr 10:00-13:00, 14:00-18:00&lt;br /&gt;
|Bemerkung=Gibt&#039;s nicht mehr! :-(&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Oldenburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=ebc Utz Kohl GmbH &lt;br /&gt;
|Straße=Alexanderstraße 31&lt;br /&gt;
|Telefon=0441 82114&lt;br /&gt;
|Fax=0441 85801&lt;br /&gt;
|Weblink=www.e-b-c-elektronik.de&lt;br /&gt;
|Email=kontakt@e-b-c-elektronik.de&lt;br /&gt;
|PLZ=26121&lt;br /&gt;
|Ort=Oldenburg&lt;br /&gt;
|Öffnungszeiten=Mo. - Fr. 9:00 - 12:30 und 13:30 - 18:00 Uhr, Sa. 9:00 - 13:00 Uhr&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Osnabrück===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Heinicke-electronic&lt;br /&gt;
|Straße=Meller Str. 43 &lt;br /&gt;
|PLZ=49084&lt;br /&gt;
|Ort=Osnabrück&lt;br /&gt;
|Telefon=0541 587666&lt;br /&gt;
|Fax=0541 586614 &lt;br /&gt;
|Öffnungszeiten=Mo-Fr. 9:30-13:00Uhr und 14:30-18:00Uhr Sa. 9:30-13:00Uhr&lt;br /&gt;
|Weblink=http://www.heinicke-electronic.de/&lt;br /&gt;
|Email=sales@heinicke-electronic.de&lt;br /&gt;
|Bemerkung=Haben auch einen PC Shop nebenan.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Wilhelmshaven===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Reichelt Elektronik&lt;br /&gt;
|Straße=Elektronikring 1 &lt;br /&gt;
|PLZ=26452&lt;br /&gt;
|Ort=Sande&lt;br /&gt;
|Telefon=04422-955 333&lt;br /&gt;
|Fax=04422-955 111 &lt;br /&gt;
|Öffnungszeiten=Montag - Donnerstag: 9:00 - 17:00 Uhr; Freitag: 9:00 - 15:30 Uhr&lt;br /&gt;
|Weblink=http://www.reichelt.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Nordrhein-Westfalen==&lt;br /&gt;
===Aachen===&lt;br /&gt;
Übernommen aus [http://aachen.wikia.com/wiki/Elektronik-Teile http://aachen.wikia.com/wiki/Elektronik-Teile]. Die Liste dort ist größer.&lt;br /&gt;
* TH-Elektronic, Karlsgraben 47, 52062 Aachen, Tel: 404593, Fax: 404594, http://www.th-electronic.de/ Öffnungszeiten Mo-Fr 9-19:30 Sa 9-16 Uhr&lt;br /&gt;
* AG Elektronik Witte &amp;amp; von der Heide, Hirschgraben 9-11, 52062 Aachen, Tel.: 0241-25226. (Sehr freundlich und großes Sortiment, Werktags geöffnet bis 18.30 (genauere Zeiten folgen noch))&lt;br /&gt;
* Helmut Singer Elektronik, Feldchen 16-24, D-52070 Aachen. http://www.singer-elektronik.de/ (Gebrauchte Messgeräte)&lt;br /&gt;
* Zilles Elektronik GmbH, Bauelemente für die Elektronik, Würselener Str. 8, 52080 Aachen (Aachen-Haaren), Tel: 0241-162745&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nähere Umgebung:&#039;&#039;&#039;&lt;br /&gt;
* Fleu Elektronik, Kantgasse 26, 52477 Alsdorf, Tel. 02404/22240, ubestätigt: Öffnungszeiten Mo - Fr. von 09 - 12 und 15 - 19 Uhr.&lt;br /&gt;
* Zilles Elektronik GmbH, Bauelemente für die Elektronik, Aachener Str. 415, 41069 Mönchengladbach, Tel: 02161-176005&lt;br /&gt;
&lt;br /&gt;
===Bielefeld===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=alpha electronic Ing. A. Berger GmbH&lt;br /&gt;
|Straße=Oldentruper Str. 104&lt;br /&gt;
|PLZ=33604&lt;br /&gt;
|Ort=Bielefeld&lt;br /&gt;
|Telefon=0521-324333&lt;br /&gt;
|Fax=0521-320435&lt;br /&gt;
|Öffnungszeiten=Mo. – Sa.    9.00 – 13.00 Uhr&amp;lt;br&amp;gt;Mo. – Fr.   14.00 – 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.alphaelectronic.de/&lt;br /&gt;
|Email=info@alphaelectronic.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Fuchs und Lützow Elekronik - Handelsges. mbH&lt;br /&gt;
|Straße=Heeper Str. 184&lt;br /&gt;
|PLZ=33607&lt;br /&gt;
|Ort=Bielefeld&lt;br /&gt;
|Telefon=0521-5576555&lt;br /&gt;
|Fax=0521-5576557&lt;br /&gt;
|Öffnungszeiten=Mo. – Sa.    9.00 – 13.00 Uhr&amp;lt;br&amp;gt;Mo. – Fr.   14.00 – 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.electronicfuchs.com/&lt;br /&gt;
|Email=info@electronicfuchs.com&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Bochum===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schmitt Elektronik&lt;br /&gt;
|Straße=Dorstener Straße 18-20&lt;br /&gt;
|PLZ=44787&lt;br /&gt;
|Ort=Bochum&lt;br /&gt;
|Telefon=0234 9620130 &lt;br /&gt;
|Fax=0234 9629132 &lt;br /&gt;
|Öffnungszeiten=Mo - Fr 09:00 - 18:00, Sa 09:00 - 14:00&lt;br /&gt;
|Weblink=http://www.elektronik-wunderland.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Alteingesessener laden, hat viel seltenes zeug aus den 70-90ern, sortiment an modernen bauteilen wie AVR eher gering. Sehr zu empfehlen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Bonn===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Karlstraße 3&lt;br /&gt;
|PLZ=53115&lt;br /&gt;
|Ort=Bonn&lt;br /&gt;
|Telefon=0180 5 564445&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 10.00-20.00 Uhr &lt;br /&gt;
|Weblink=http://www.filialen.conrad.de/rubriken/filialen.php?filiale=28&lt;br /&gt;
|Email=filiale.bonn@conrad.de  &lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=CSD-Electronics&lt;br /&gt;
|Straße=Bunsenstraße 3&lt;br /&gt;
|PLZ=53121&lt;br /&gt;
|Ort=Bonn&lt;br /&gt;
|Telefon=0228 85041574&lt;br /&gt;
|Fax=0228 85041600&lt;br /&gt;
|Öffnungszeiten=offiziell derzeit nur nach Vereinbarung&lt;br /&gt;
|Weblink=http://www.csd-electronics.de/200/cgi-bin/shop.dll?AnbieterID=2&lt;br /&gt;
|Email=support@csd-electronics.de&lt;br /&gt;
|Bemerkung=Artikel können online bestellt und im Laden abgeholt werden&lt;br /&gt;
}}&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=P &amp;amp; M Elektronik Bonn GmbH&lt;br /&gt;
|Straße=Budapester Straße 6&lt;br /&gt;
|PLZ=53111&lt;br /&gt;
|Ort=Bonn&lt;br /&gt;
|Telefon=0228-656005&lt;br /&gt;
|Fax=0228-656336&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 09:00 – 19:00 Uhr&amp;lt;br&amp;gt;Sa 10:00 – 16:00 Uhr&lt;br /&gt;
|Weblink=http://www.pm-elektronik-bonn.de/&lt;br /&gt;
|Email=pm-elektronikbonn@web.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Dortmund===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Westenhellweg 95-101&lt;br /&gt;
|PLZ=44137&lt;br /&gt;
|Ort=Dortmund&lt;br /&gt;
|Telefon=01805-564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    10.00 – 20.00 Uhr&amp;lt;br&amp;gt;Sa.  9.30 – 20.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=direkt in der Innenstadt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=SR-Tronic&lt;br /&gt;
|Straße=Beratgerstr. 28&lt;br /&gt;
|PLZ=44149&lt;br /&gt;
|Ort=Dortmund&lt;br /&gt;
|Telefon=0231-33671-0&lt;br /&gt;
|Fax=0231-33671-25&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    10.00 – 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.sr-tronic.de&lt;br /&gt;
|Email=info@sr-tronic.de&lt;br /&gt;
|Bemerkung=Ist zwar ein Versandhandel, Abholung ist aber möglich, extrem kleines Elektroniksortiment (Atmel, Eproms), ist eigentlich ein Satshop.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- laut Diskussion:Lokale_Elektroniklieferanten gibt es den Laden nicht mehr.&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Electronic am Wall&lt;br /&gt;
|Straße=Hoher Wall 22&lt;br /&gt;
|PLZ=44137&lt;br /&gt;
|Ort=Dortmund&lt;br /&gt;
|Telefon=0231-16863&lt;br /&gt;
|Fax= 	0231-160632&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    9.00 – 18.00 Uhr (?)&lt;br /&gt;
|Weblink=http://electronic-am-wall.de&lt;br /&gt;
|Email=electronic-am-wall@t-online.de&lt;br /&gt;
|Bemerkung=Alteingesessener Laden mit mittlerem Elektronik und Bauteilesortiment (Leider nicht mehr so viel wie früher).&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Duisburg ===&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektro Urban&lt;br /&gt;
|Straße=Kaiser-Friedrich-Straße 127&lt;br /&gt;
|PLZ=47169&lt;br /&gt;
|Ort=Duisburg&lt;br /&gt;
|Telefon=0203-593311&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    9.00 – 18.00 Uhr, Mittagspause von 13.00 - 15.00 Uhr&amp;lt;br&amp;gt;Sa.  9.00 – 14.00 Uhr&lt;br /&gt;
|Email=&lt;br /&gt;
|Weblink=http://www.elur.de/&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Düsseldorf ===&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Oststraße 34&lt;br /&gt;
|PLZ=40211&lt;br /&gt;
|Ort=Düsseldorf&lt;br /&gt;
|Telefon=0211 - 38 83 76 - 0&lt;br /&gt;
|Fax=0211 - 38 83 76 - 14&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 9.30-20.00 Uhr&lt;br /&gt;
|Email=filiale.duesseldorf@conrad.de  &lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Essen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Altendorfer Str. 11&lt;br /&gt;
|PLZ=45127&lt;br /&gt;
|Ort=Essen&lt;br /&gt;
|Telefon=01805-564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    10.00 – 19.30 Uhr&amp;lt;br&amp;gt;Sa.  10.00 – 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=filiale.essen@conrad.de&lt;br /&gt;
|Bemerkung=schräg gegenüber von IKEA, Tiefgarage im UG für Kunden kostenlos, Karte an der Kasse lochen lassen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Herne===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Electronic Hanke&lt;br /&gt;
|Straße=Wilhelmstr. 38 &lt;br /&gt;
|PLZ=44649&lt;br /&gt;
|Ort=Herne&lt;br /&gt;
|Telefon=02325-52728  &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    10.00 – 18.00 Uhr, außer Dienstags ab 15.00Uhr&amp;lt;br&amp;gt;Mittagspause von 13.00 Uhr - 15.00 Uhr&amp;lt;br&amp;gt;Sa.  9.30 – 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.electronic-hanke.de/&lt;br /&gt;
|Email=electronic_hanke@t-online.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Ibbenbüren===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Bleker&lt;br /&gt;
|Straße=Bahnhofstrasse 22&lt;br /&gt;
|PLZ=49477&lt;br /&gt;
|Ort=Ibbenbüren&lt;br /&gt;
|Telefon=05451-13844&lt;br /&gt;
|Fax=05451-78025&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    09.00 – 18.00 Uhr&amp;lt;br&amp;gt;Mittagspause von 12.30 Uhr - 14.30 Uhr&amp;lt;br&amp;gt;Sa.  9.30 – 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.bleker.de/&lt;br /&gt;
|Email=info@bleker.de&lt;br /&gt;
|Bemerkung= Sehr teuer; Muss µCs extra bestellen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Köln===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=M. + M. van der Meyden GmbH&lt;br /&gt;
|Straße=Breite Straße 101&lt;br /&gt;
|PLZ=50667&lt;br /&gt;
|Ort=Köln&lt;br /&gt;
|Telefon=0221/2576369&lt;br /&gt;
|Fax=0221/2576369&lt;br /&gt;
|Öffnungszeiten=Mo.–Fr. von 9:30 – 19:00 Uhr&amp;lt;br&amp;gt;Sa. von 10:00 – 16:30 Uhr &lt;br /&gt;
|Weblink=http://vandermeyden.de&lt;br /&gt;
|Email=http://vandermeyden.de/?page_id=13&lt;br /&gt;
|Bemerkung=Sehr teuer (Standard Quarz HC49/S --&amp;gt; 1,50€); Muss manche µCs extra bestellen, die gängigsten AVR-Typen in DIP jedoch auf Lager&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bergisch Gladbach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=MS-Elektronik&lt;br /&gt;
|Straße=Laurentiusstraße 20&lt;br /&gt;
|PLZ=51465&lt;br /&gt;
|Ort=Bergisch Gladbach&lt;br /&gt;
|Telefon=02202 - 93 22 17&lt;br /&gt;
|Fax=02202 - 93 22 18&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr.: 09:00-12:30 &amp;amp; 14:30 - 18:30 Uhr&amp;lt;br&amp;gt;Sa: 09:00 - 14:00 Uhr&lt;br /&gt;
|Weblink=http://www.ms-elektronik.info/&lt;br /&gt;
|Email=info@ms-elektronik.info&lt;br /&gt;
|Bemerkung= Auch Versand&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=DARISUS GmbH&lt;br /&gt;
|Straße=Friedrich-Ebert-Str. 75 Haus 34/I&lt;br /&gt;
|PLZ=51429&lt;br /&gt;
|Ort=Bergisch Gladbach&lt;br /&gt;
|Telefon=02204 - 98 18 11&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://darisusgmbh.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Nur Abholung von vorher online bestellten Teilen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Langenfeld===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=rs elektronik - Reinhard Sinzel&lt;br /&gt;
|Straße=Solinger Straße 152&lt;br /&gt;
|PLZ=40764&lt;br /&gt;
|Ort=Langenfeld&lt;br /&gt;
|Telefon=02173/22766&lt;br /&gt;
|Fax=02173/25958&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 10:00-13:00 + 15:00-18:00, Sa 10:00-13:00&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=zwischen Polizeiwache und Bahnunterführung auf der linken Seite. Nur Ladenverkauf!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Moers===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Nürnberg Electronic&lt;br /&gt;
|Straße=Uerdinger Str. 121&lt;br /&gt;
|PLZ=47441&lt;br /&gt;
|Ort=Moers&lt;br /&gt;
|Telefon=02841-32221 &lt;br /&gt;
|Fax=02841-31733&lt;br /&gt;
|Öffnungszeiten=Mo.- Fr. 9:00 - 13:00 und 14:00 - 18:00&amp;lt;br&amp;gt;Samstag 9:00 - 13:00&amp;lt;br&amp;gt;Mittwoch Nachmittag geschlossen!&lt;br /&gt;
|Weblink=http://www.nuernberg-electronic.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Mönchengladbach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Brunenberg Elektronik&lt;br /&gt;
|Straße=Lürriper Straße 170&lt;br /&gt;
|PLZ=41065&lt;br /&gt;
|Ort=Mönchengladbach&lt;br /&gt;
|Telefon=02161-44421&lt;br /&gt;
|Fax=02161-42552&lt;br /&gt;
|Öffnungszeiten=Mo.- Fr. 9:00 - 13:00 und 14:00 - 18:00&amp;lt;br&amp;gt;Samstag 9:00 - 13:00&amp;lt;br&amp;gt;Donnerstag Nachmittag geschlossen!&lt;br /&gt;
|Weblink=http://www.bruntronic.de&lt;br /&gt;
|Email=info@bruntronic.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Zilles Elektronik GmbH&lt;br /&gt;
|Straße=Aachener Str. 415&lt;br /&gt;
|PLZ=41069&lt;br /&gt;
|Ort=Mönchengladbach&lt;br /&gt;
|Telefon=02161/176005&lt;br /&gt;
|Fax=02161/176007&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 8:45 - 13:00 &amp;amp; 14:00 - 18:00&amp;lt;br&amp;gt;Samstag 9:30 - 13:00&lt;br /&gt;
|Weblink=http://www.zilles-elektronik.de/&lt;br /&gt;
|Email=info@zilles-elektronik.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Monheim am Rhein===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schukat electronic Vertriebs GmbH&lt;br /&gt;
|Straße=Daimlerstraße 26&lt;br /&gt;
|PLZ=40789&lt;br /&gt;
|Ort=Monheim am Rhein&lt;br /&gt;
|Telefon=02173 - 950-5&lt;br /&gt;
|Fax=02173 - 950-999&lt;br /&gt;
|Öffnungszeiten=montags bis freitags zwischen 8 Uhr und 18 Uhr&lt;br /&gt;
|Weblink=http://www.schukat.com&lt;br /&gt;
|Email=info@schukat.com&lt;br /&gt;
|Internet: www.schukat.com&lt;br /&gt;
|Bemerkung=nur Gewerblich Teile können nach Vorbestellung auch abgeholt werden ! &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paderborn===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Jansen-Elektronik GmbH &amp;amp; Co. KG (GK-Elektronik Guido Kloss)&lt;br /&gt;
|Straße=Heiersstraße 24&lt;br /&gt;
|PLZ=33098 &lt;br /&gt;
|Ort=Paderborn&lt;br /&gt;
|Telefon=05251-282848&lt;br /&gt;
|Fax=05251-282851&lt;br /&gt;
|Öffnungszeiten=Mo. – Fr.    9.30 – 13.00 Uhr&amp;lt;br&amp;gt;Mo. – Fr.   14.30 – 18.30 Uhr&amp;lt;br&amp;gt;Sa.   9.30 – 14.00 Uhr&lt;br /&gt;
|Weblink=http://www.jansen-elektronik.de/&lt;br /&gt;
|Email=info@jansen-elektronik.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Recklinghausen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik-Center Wenzlik, Inh. H.- J. Juhnke&lt;br /&gt;
|Straße=Halterner Straße 24&lt;br /&gt;
|PLZ=45657 &lt;br /&gt;
|Ort=Recklinghausen&lt;br /&gt;
|Telefon=02361-14103&lt;br /&gt;
|Fax=02361-182489&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr.: 9.00h-13.00h u. 14.30h-18.30h, Sa.: 10.00h-13.00h geöffnet!&lt;br /&gt;
|Weblink=http://www.ju-tec.de&lt;br /&gt;
|Email=ecw-recklinghausen@t-online.de&lt;br /&gt;
|Bemerkung= Elektronik Einzelhandel 35.000 verschiedene Artikel vorrätig.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Siegen===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Radig Hard &amp;amp; Software, Inh. U. Radig&lt;br /&gt;
|Straße=An der Bahn 18&lt;br /&gt;
|PLZ=57223&lt;br /&gt;
|Ort=Kreuztal&lt;br /&gt;
|Telefon=02732-762442&lt;br /&gt;
|Fax=02732-762443&lt;br /&gt;
|Öffnungszeiten=Nach Vereinbahrung&lt;br /&gt;
|Weblink=http://www.ulrichradig.de&lt;br /&gt;
|Email=mail@ulrichradig.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Wuppertal===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=WE elektronik&lt;br /&gt;
|Straße=Sedanstraße 88&lt;br /&gt;
|PLZ=42281&lt;br /&gt;
|Ort=Wuppertal&lt;br /&gt;
|Telefon=0202-510444&lt;br /&gt;
|Fax=0202-510666&lt;br /&gt;
|Öffnungszeiten=Mo.- Fr. 9.00 - 18.00&lt;br /&gt;
|Weblink=http://www.we-wuppertal.de/&lt;br /&gt;
|Email=info@we-wuppertal.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=K&amp;amp;K Elektronic&lt;br /&gt;
|Straße=Höhne 33&lt;br /&gt;
|PLZ=42275&lt;br /&gt;
|Ort=Wuppertal&lt;br /&gt;
|Telefon=0202&lt;br /&gt;
|Fax=0202&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Rheinland-Pfalz==&lt;br /&gt;
===Andernach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=EDV + Elektronic Systeme Manuel Zitzer e.K.&lt;br /&gt;
|Straße=Füllscheuer 30&lt;br /&gt;
|PLZ=56626&lt;br /&gt;
|Ort=Andernach&lt;br /&gt;
|Telefon=02632/9293-0&lt;br /&gt;
|Fax=02632/9293-33&lt;br /&gt;
|Öffnungszeiten=Montag-Freitag 8:00 Uhr - 12:00 Uhr und 14:00 Uhr - 18:00 Uhr, Dienstag zusätzlich bis 19:00 Uhr, Samstag geschlossen&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
|Weblink=http://www.eleksys.de/&lt;br /&gt;
|Email=info@eleksys.de&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Kaiserslautern===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=BURCKHARDT-ELEKTRONIK&lt;br /&gt;
|Straße=Waldstr. 17&lt;br /&gt;
|PLZ=67659 &lt;br /&gt;
|Ort=Kaiserslautern&lt;br /&gt;
|Telefon=+49 (0)631 70114&lt;br /&gt;
|Fax=49 (0)631 70162&lt;br /&gt;
|Öffnungszeiten=Montag-Donnerstag 8:00 Uhr - 16:45 Uhr/Freitag 8:00 Uhr - 12:00 Uhr&lt;br /&gt;
|Weblink=http://www.burckhardt-elektronik.de&lt;br /&gt;
|Email=burckhardt-elektronik@web.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Koblenz===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Radio Erbar&lt;br /&gt;
|Straße=Bahnhofstr. 40&lt;br /&gt;
|PLZ=56068  &lt;br /&gt;
|Ort=Koblenz&lt;br /&gt;
|Telefon=0261/34782&lt;br /&gt;
|Fax=0261/14570&lt;br /&gt;
|Öffnungszeiten=Montag-Freitag 9:00 Uhr - 18:00 Uhr/Samstag 9:00 Uhr - 12:00 Uhr&lt;br /&gt;
|Weblink=http://www.radio-erbar.de/&lt;br /&gt;
|Email=webmaster@radio-erbar.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
===Mainz===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Binger Str. 14-16 (nähe Hauptbahnhof)&lt;br /&gt;
|PLZ=55122 &lt;br /&gt;
|Ort=Mainz&lt;br /&gt;
|Telefon=0180 5312111&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=http://www.conrad.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Schmidt&lt;br /&gt;
|Straße=Boppstraße 62 - 64&lt;br /&gt;
|PLZ=55118 &lt;br /&gt;
|Ort=Mainz&lt;br /&gt;
|Telefon=0180 5312111&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag 09.00 Uhr - 13.00 Uhr und 14.00 Uhr - 18.00 Uhr&amp;lt;br&amp;gt;&lt;br /&gt;
Samstag 09.00 Uhr - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.schmidt-electronic.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Saarland==&lt;br /&gt;
=== Saarbrücken ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=ESS Elektronik Service Skowronek&lt;br /&gt;
|Straße=Peter-Zimmer-Str. 13&lt;br /&gt;
|PLZ=66123  &lt;br /&gt;
|Ort=Saarbrücken&lt;br /&gt;
|Telefon=+49 (681) 816414&lt;br /&gt;
|Fax= +49 (681) 816992&lt;br /&gt;
|Öffnungszeiten= Mo-Fr 8:00-12:00 Uhr / 14:00-18:00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Trierer Straße 16-20&lt;br /&gt;
|PLZ=66111&lt;br /&gt;
|Ort=Saarbrücken&lt;br /&gt;
|Telefon=0180 5 564445 (derzeit 14 Cent/Min. aus dem Festnetz der Dt. Telekom. Evtl. abweichende Preise für Anrufe aus den Mobilfunknetzen.)&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten= Mo.-Fr. 09.00-19.00 Uhr / Sa. 09.00-19.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Sachsen==&lt;br /&gt;
===Chemnitz===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mükra electronic shop GmbH&lt;br /&gt;
|Straße=Hartmannstr.45&lt;br /&gt;
|PLZ=09113&lt;br /&gt;
|Ort=Chemnitz&lt;br /&gt;
|Telefon=0371/365736&lt;br /&gt;
|Fax=0371/365736&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00 Uhr - 18.00 Uhr&amp;lt;br&amp;gt;Sa. 10.00 Uhr - 13.00 Uhr&lt;br /&gt;
|Weblink=http://www.muekra.com/filiale_chemnitz.html&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=gut sortiert aber keine SMD BE | wirkt manchmal recht unfreundlich und demotiviert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=köhler-elektronik&amp;lt;br&amp;gt;Firma Michael Köhler&lt;br /&gt;
|Straße=Erfenschlager Straße 31&lt;br /&gt;
|PLZ=09125&lt;br /&gt;
|Ort=Chemnitz&lt;br /&gt;
|Telefon=(03 71) 51 91 03&lt;br /&gt;
|Fax=(03 71) 51 91 04&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. von 9 - 18 Uhr &amp;lt;br&amp;gt; Sa. von 9 - 12 Uhr&lt;br /&gt;
|Weblink=http://www.koehler-elektronik.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=NEUMERKEL&lt;br /&gt;
|Straße=Straße der Nationen 26&lt;br /&gt;
|PLZ=09111&lt;br /&gt;
|Ort=Chemnitz&lt;br /&gt;
|Telefon=(03 71) 6 66 29 27&lt;br /&gt;
|Fax=(03 71) 6 66 29 51&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. von 9 - 13 und 14 - 18 Uhr&lt;br /&gt;
|Weblink=http://www.neumerkel.de&lt;br /&gt;
|Email=neumerkel.chemnitz@neumerkel.de&lt;br /&gt;
|Bemerkung=zwischen B. Uhse und ehemals McDonald’s :)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Dresden===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Friedrich-List-Platz 2&amp;lt;br&amp;gt;gegenüber Hauptbahnhof&lt;br /&gt;
|PLZ=01069&lt;br /&gt;
|Ort=Dresden &lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 09.30-20.00 Uhr, &amp;lt;br&amp;gt;Sa. 09.00-20.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= verhältnismäßig teuer&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Sullus&lt;br /&gt;
|Straße=Tharandter Str. 67&lt;br /&gt;
|PLZ=01187&lt;br /&gt;
|Ort=Dresden &lt;br /&gt;
|Telefon=0351 4112100&lt;br /&gt;
|Fax=0351 4112146&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 10.00-18.30 Uhr, &amp;lt;br&amp;gt;Sa. 09.00-12.00 Uhr&lt;br /&gt;
|Weblink=http://www.sullus.de/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronic-Shop Meissen&amp;lt;br&amp;gt;Rainer Pötzsch&lt;br /&gt;
|Straße=Neugasse 34&lt;br /&gt;
|PLZ=01662&lt;br /&gt;
|Ort=Meissen&lt;br /&gt;
|Telefon= +49 3521 452301&lt;br /&gt;
|Fax= +49 3521 452399&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. von 9 - 19 Uhr &amp;lt;br&amp;gt; Sa. von 9 - 32 Uhr&lt;br /&gt;
|Weblink=http://www.electronic-poetzsch.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Leipzig===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Neumarkt 20&lt;br /&gt;
|PLZ=04109&lt;br /&gt;
|Ort=Leipzig &lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa.: 09.30-20.00 Uhr&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=ELMICRO Computer GmbH &amp;amp; Co. KG &lt;br /&gt;
|Straße=Hohe Str. 9-13&lt;br /&gt;
|PLZ=04107&lt;br /&gt;
|Ort=Leipzig &lt;br /&gt;
|Telefon=+49-(0)341-9104810&lt;br /&gt;
|Fax=+49-(0)341-9104818&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa.: 09.00-17.00 Uhr&lt;br /&gt;
|Weblink=http://elmicro.com/de/ela-leipzig.html&lt;br /&gt;
|Email=leipzig|at|elmicro.com&lt;br /&gt;
|Bemerkung=Besucher werden gebeten, sich kurzfristig telefonisch anzumelden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Zwickau===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Neumerkel GmbH&lt;br /&gt;
|Straße=Kolpingstraße 20&lt;br /&gt;
|PLZ=08058&lt;br /&gt;
|Ort=Zwickau&lt;br /&gt;
|Telefon=+ 49 (0)375-589920&lt;br /&gt;
|Fax=+ 49 (0)375-5899222&lt;br /&gt;
|Öffnungszeiten=Mo. - Fr. 9:00 - 18:00 Uhr, Sa. 9:00 - 12:30 Uhr&lt;br /&gt;
|Weblink=http://www.neumerkel.de&lt;br /&gt;
|Email=info@neumerkel.de&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Sachsen-Anhalt==&lt;br /&gt;
===Magdeburg===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=mittrenga electronic&lt;br /&gt;
|Straße=Maxim-Gorki-Str. 34&lt;br /&gt;
|PLZ=39108&lt;br /&gt;
|Ort=Magdeburg&lt;br /&gt;
|Telefon=0391/7333500&lt;br /&gt;
|Fax=0391/7346538&lt;br /&gt;
|Öffnungszeiten= 15.00- 18.00&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Keine Microcontroller&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Halle (Saale)===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Funkhaus Alter Markt&lt;br /&gt;
|Straße=Alter Markt 6&lt;br /&gt;
|PLZ=06108&lt;br /&gt;
|Ort=Halle&lt;br /&gt;
|Telefon=0345/2831651&lt;br /&gt;
|Fax=0345/2831651&lt;br /&gt;
|Öffnungszeiten=Mo bis Fr&lt;br /&gt;
|Weblink=http://www.fernsehklinik-halle.de/&lt;br /&gt;
|Email=Service@Fernsehklinik-Halle.de&lt;br /&gt;
|Bemerkung=elektronische Bauteile aller Art gut sortiert auf Lager. Nach Möglichkeit vorher telefonisch nachfragen(!), damit das Teil aus dem Lager geholt werden kann, insgesamt vergleichsweise teuer, ansonsten recht unkompliziert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Westfalia&lt;br /&gt;
|Straße=Grenzstraße 35&lt;br /&gt;
|PLZ=06112&lt;br /&gt;
|Ort=Halle&lt;br /&gt;
|Telefon=0345 560 62 31&lt;br /&gt;
|Fax=0345 560 62 32 &lt;br /&gt;
|Öffnungszeiten= &lt;br /&gt;
Montag - Mittwoch 08.00 - 18.30&lt;br /&gt;
&lt;br /&gt;
Donnerstag        08.00 - 19.00&lt;br /&gt;
&lt;br /&gt;
Freitag           08.00 - 18.30&lt;br /&gt;
&lt;br /&gt;
Samstag           08.30 - 13.30 &lt;br /&gt;
&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Elektronikmäßig relativ klein sortiert, keine einzelnen Bauelemente, dafür Restposten-/Sortimentebeutel mit jeweils verschiedenen Widerständen, Kondensatoren, Transistoren, LEDs etc. &lt;br /&gt;
Ferner Platinen, vereinzelt Trafos, jede Menge Bausätze, Lötzubehör, Lautsprecher, Stecker, Buchsen und Kabel aller Art, Gehäuse&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Schleswig Holstein==&lt;br /&gt;
===Kiel===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Elektronik Schmidt Inh. Karl Heinz Parting&lt;br /&gt;
|Straße=Adelheidstr. 28&lt;br /&gt;
|PLZ=24103&lt;br /&gt;
|Ort=Kiel&lt;br /&gt;
|Telefon=0431 94682&lt;br /&gt;
|Fax=0431 92574&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= viele historische Bauteile verfügbar, Röhren&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Lübeck===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Lenzner Jürgen Elektronik GmbH&lt;br /&gt;
|Straße=Krähenstraße 19&lt;br /&gt;
|PLZ=23552&lt;br /&gt;
|Ort=Lübeck&lt;br /&gt;
|Telefon=0451 77336&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= keine uC, teils historische Bauteile verfügbar, Röhren, LEDs überteuert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Schwentinental===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Mergenthalerstr. 22&lt;br /&gt;
|PLZ=24223&lt;br /&gt;
|Ort=Schwentinental, OT Raisdorf&lt;br /&gt;
|Telefon=0180 5 564445 &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Sa. 10.00-20.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.de&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Thüringen==&lt;br /&gt;
===Eisenach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Jena===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Stefan Schmutzer VAT Elektronik&lt;br /&gt;
|Straße=Bachstraße 10&lt;br /&gt;
|PLZ=07743&lt;br /&gt;
|Ort=Jena&lt;br /&gt;
|Telefon= (03641)447184&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten= Mo-Fr. bis 18:00Uhr. Sa zu&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= reichlich teuer. Für einzelne Kleinteile jedoch definitiv zu empfehlen, wenn man nicht gleich bestellen will&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Gera===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname= Neumerkel Elektronik&lt;br /&gt;
|Straße=Karl-Schurz-Straße 12&lt;br /&gt;
|PLZ=07545&lt;br /&gt;
|Ort=Gera&lt;br /&gt;
|Telefon= +49 (0) 3 65 - 82 46 90&lt;br /&gt;
|Fax= 	+49 (0) 3 65 - 82 46 922&lt;br /&gt;
|Öffnungszeiten= Mo-Fr. 9.00 bis 18:00Uhr. Sa 9.00 bis 12.00 &lt;br /&gt;
|Weblink= http://www.neumerkel.de/gera.htm&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Österreich=&lt;br /&gt;
==Linz==&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Aigner Elektronik&lt;br /&gt;
|Straße=Dinghoferstr. 63&lt;br /&gt;
|PLZ=A-4020 &lt;br /&gt;
|Ort=Linz&lt;br /&gt;
|Telefon=+43 732 669691-0 &lt;br /&gt;
|Fax=+43 732 669691-15&lt;br /&gt;
|Öffnungszeiten=Mo. bis Fr. 8:30 bis 17:00 (keine Mittagssperre), Samstag 8:30 bis 12:00&lt;br /&gt;
|Weblink=http://www.aigner.co.at/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic&lt;br /&gt;
|Straße=Kornstraße 4&lt;br /&gt;
|PLZ=A-4060 &lt;br /&gt;
|Ort=Leonding&lt;br /&gt;
|Telefon=+43 732 683040-0  &lt;br /&gt;
|Fax=+43 732 683040-13 &lt;br /&gt;
|Öffnungszeiten=Mo. bis Fr. 9:00 bis 19:00 , Samstag 9:00 bis 17:00&lt;br /&gt;
|Weblink=http://www.conrad.at/&lt;br /&gt;
|Email=mailto://filiale.linz@conrad.at&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Graz== &lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Neuhold Elektronik&lt;br /&gt;
|Straße=Griesplatz 1&lt;br /&gt;
|PLZ=A-8020 &lt;br /&gt;
|Ort=Graz&lt;br /&gt;
|Telefon=+43 (0) 316 711245   &lt;br /&gt;
|Fax=+43 (0) 316 717419&lt;br /&gt;
|Öffnungszeiten=Montag bis Freitag von 9.00 - 18.00 Uhr&amp;lt;br&amp;gt;Samstag 9.00-12.30 Uhr&lt;br /&gt;
|Weblink=http://www.neuhold-elektronik.at/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=Großes Sortiment mit auch sehr ausgefallenen Artikeln. &amp;lt;br&amp;gt; Führt eine breite Produktpalette. &amp;lt;br&amp;gt; Durchweg sehr günstige Preise, jedoch manchmal bei Standardbauteilen (Mikrocontrollern z.B. AVRs) teurer als die Konkurrenz. &amp;lt;br&amp;gt; Vergleichbar mit Pollin.  &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=L-Tronik Austria&lt;br /&gt;
|Straße=Karlauerstraße 5&lt;br /&gt;
|PLZ=A-8020 &lt;br /&gt;
|Ort=Graz&lt;br /&gt;
|Telefon=Tel: +43 (0) 316 904 672            &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Montag bis Freitag von 9.00 - 17.00 Uhr &amp;lt;br&amp;gt;Samstag 9.00-12.00 Uhr&lt;br /&gt;
|Weblink=http://www.l-tronik.com/index.php&lt;br /&gt;
|Email=info@lta.at&lt;br /&gt;
|Bemerkung=Riesiges Sortiment an Halbleitern (Auch SMD). Solartechnik, Sicherheitstechnik, Haustechnik u.s.w..&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Weblinger Gürtel 25&lt;br /&gt;
|PLZ=A-8054&lt;br /&gt;
|Ort=Graz&lt;br /&gt;
|Telefon=Tel: +43 (0) 50 - 20 40 73 00         &lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Montag bis Freitag von 9.00 - 19.30 Uhr &amp;lt;br&amp;gt;Samstag 9.00 - 18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.at&lt;br /&gt;
|Email=filiale.graz@conrad.at&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Salzburg==&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Alpenstraße 95 - 97&lt;br /&gt;
|PLZ=5020  &lt;br /&gt;
|Ort=Salzburg&lt;br /&gt;
|Telefon=050 - 20 40 81 00&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00-19.00 Uhr&amp;lt;br&amp;gt;Sa. 9.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.at/megastores&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
==Wien==&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Technotronic&lt;br /&gt;
|Straße=ZIEGLERGASSE 27&lt;br /&gt;
|PLZ=1070&lt;br /&gt;
|Ort=Wien&lt;br /&gt;
|Telefon=+43 1 5236204&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Do. 9.00-18.00 Uhr&amp;lt;br/&amp;gt;Fr. 9-15&lt;br /&gt;
|Weblink=&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=auch andere Filialen in Wien&amp;lt;br/&amp;gt;05.08.2013 Zettel mit &amp;quot;aufgelassen&amp;quot; im Fenster&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Hütteldorfer Straße 81b (Meiselmarkt U3 Johnstrasse)&lt;br /&gt;
|PLZ=1150 &lt;br /&gt;
|Ort=Wien&lt;br /&gt;
|Telefon=050 - 20 40 75 00&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00-19.00 Uhr&amp;lt;br/&amp;gt;Sa. 9.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.at/megastores&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Gewerbeparkstraße 12 (Gewerbepark Stadlau)&lt;br /&gt;
|PLZ=1220 &lt;br /&gt;
|Ort=Wien&lt;br /&gt;
|Telefon=050 - 20 40 72 00&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00-19.00 Uhr&amp;lt;br/&amp;gt;Sa. 9.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.at/megastores&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad&lt;br /&gt;
|Straße=Nordring 2&lt;br /&gt;
|PLZ=2334 &lt;br /&gt;
|Ort=Vösendorf/Süd&lt;br /&gt;
|Telefon=050 - 20 40 71 00&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=Mo.-Fr. 9.00-19.00 Uhr&amp;lt;br/&amp;gt;Mi 9.00-20.00 Uhr&amp;lt;br/&amp;gt;Sa. 9.00-18.00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.at/megastores&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Schweiz=&lt;br /&gt;
----&lt;br /&gt;
== Basel-Landschaft (BL) ==&lt;br /&gt;
=== 4450 Sissach ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Grieder Elektronik Bauteile AG&lt;br /&gt;
|Straße=Reuslistrasse 62&lt;br /&gt;
|PLZ=4450&lt;br /&gt;
|Ort=Sissach&lt;br /&gt;
|Telefon=061 976 95 95&lt;br /&gt;
|Fax=061 976 95 90&lt;br /&gt;
|Öffnungszeiten=Mo-Do 800-1200, 1300-1600 und Fr 800-1200, 1300-1500.&lt;br /&gt;
|Weblink=http://shop.griederbauteile.ch/&lt;br /&gt;
|Email=info@griederbauteile.ch&lt;br /&gt;
|Bemerkung=Mindestbestellwert CHF 20. Vorbestellte Waren können abgeholt werden.  Der &amp;quot;Laden&amp;quot; befindet sich 10 Minuten zu Fuss vom Bahnhof Sissach.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
== Bern (BE) ==&lt;br /&gt;
=== 2560 Nidau ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Redacom AG / thinkembedded.ch Web Shop&lt;br /&gt;
|Straße=Hauptstrasse 96&lt;br /&gt;
|PLZ=2560&lt;br /&gt;
|Ort=Nidau&lt;br /&gt;
|Telefon=+41 32 332 99 55&lt;br /&gt;
|Fax=+41 32 332 99 59&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
|Weblink =http://redacom.ch/ Shop: http://thinkembedded.ch/ &lt;br /&gt;
|Email=order@redacom.ch&lt;br /&gt;
|Bemerkung=Bestellungen im Onlineshop können wahlweise versendet oder abgeholt werden. &lt;br /&gt;
&#039;&#039;&#039;Sortiment:&#039;&#039;&#039;&amp;lt;br&amp;gt;Diverse Microcontroller Boards, Debugger, Programmer und USB-Messinstrumente&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Luzern (LU) ==&lt;br /&gt;
=== Emmenbrücke ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic Schweiz&lt;br /&gt;
|Straße=Seetalstrasse 11&lt;br /&gt;
|PLZ=6020&lt;br /&gt;
|Ort=Emmenbrücke &lt;br /&gt;
|Telefon=0848/80 12 83&lt;br /&gt;
|Fax=041/267 32 14&lt;br /&gt;
|Öffnungszeiten=Mo/Di/Do 09:00-18:30, Mi/Fr 09:00-21:00, Sa 08:00-16:00 Uhr&lt;br /&gt;
|Weblink=http://www1.ch2.conrad.com/infocenter/filialen.php&lt;br /&gt;
|Email=filiale.emmenbruecke@conrad.ch&lt;br /&gt;
|Bemerkung=5 Minuten vom Bahnhof Emmenbrücke&amp;lt;br&amp;gt;GRATIS Parkhaus &amp;amp; Parkplätze &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Solothurn (SO) ==&lt;br /&gt;
===5014 Gretzenbach===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=EFG Electronic AG&lt;br /&gt;
|Straße=Köllikerstrasse 32&lt;br /&gt;
|PLZ=5014&lt;br /&gt;
|Ort=Gretzenbach&lt;br /&gt;
|Telefon= 062 849 23 61 &lt;br /&gt;
|Fax= 062 849 23 70 &lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
Mo-Fr 08:30-11:30, 13:30-18:30, Mi geschlossen, Sa 09:00-16:00 &lt;br /&gt;
|Weblink=http://www.maxland.ch/netmax/standseiten/efg/index.html&lt;br /&gt;
|Email=efgag@yetnet.ch &lt;br /&gt;
|Bemerkung=Kabel - Messgeräte - Lautsprecher - elektronische Bauteile&lt;br /&gt;
kein Versand, nur Ladengeschäft&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Zürich (ZH) ==&lt;br /&gt;
===8004 Zürich===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Pusterla Elektronik AG&lt;br /&gt;
|Straße=Hohlstrasse 52 &lt;br /&gt;
|PLZ=8004&lt;br /&gt;
|Ort= Zürich&lt;br /&gt;
|Telefon=044 241 56 77&lt;br /&gt;
|Fax=044 242 01 04&lt;br /&gt;
|Öffnungszeiten=&lt;br /&gt;
Mo-Fr 09:00-18:30, Sa 09:00-16:00&lt;br /&gt;
|Weblink=http://www.pusterla.ch/&lt;br /&gt;
|Email=info@pusterla.ch&lt;br /&gt;
|Bemerkung=Absoluter &amp;quot;Kult-Laden&amp;quot; mit Tradition. Wer jemals in der Schweiz einen Lötkolben in der Hand hatte, der kennt &amp;quot;Pusti&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Sortiment ist zweigeteilt:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;hinter dem Tresen:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
gutes allgemeines Bauteilesortiment, spezielle Sachen werden bestellt.&lt;br /&gt;
&amp;lt;br&amp;gt;Man nimmt sich Zeit für Fachberatung - es wird auch schon mal ein Vergleichstyp aus der Liste gesucht und dem jungen &amp;quot;Case-Modder&amp;quot; wird mit Engelsgeduld erklärt wie man den Vorwiderstand für seine coole LED-Prozessorinnenbeleuchtung berechnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;vor dem Tresen - Selbstbedienung:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Am Eingang nimmt man sich eine Pappschale mit Bleistift und Notizblock.&lt;br /&gt;
Artikel, Menge und Preise schreibt man selbst auf!&lt;br /&gt;
&lt;br /&gt;
Das Sortiment bietet einen Querschnitt durch die elektronische Bauteilefertigung der letzten 50 Jahre. Sehr gute Quelle für spannungsfeste Kondensatoren und hochohmige (Leistungs-)Widerstände sowie mechanischem &amp;quot;Klein-Grabbel-Kram.&amp;quot; Gute Auswahl an Gehäusen, Transformatoren (z.T. recht schräge Typen) sowie Relais und Stecker/Buchsen die die Welt wohl niemals gebraucht hat. &amp;lt;br&amp;gt; &#039;&#039;&#039;Vorsicht bei Elektrolytkondensatoren:&#039;&#039;&#039; &amp;quot;historische&amp;quot; Lagerware, besser man hat ein ESR-Meter dabei - sodenn man hat!&lt;br /&gt;
&amp;lt;br&amp;gt;Kabel jeglicher Art gibt es ab der Rolle zum Selberabschneiden - auch 10cm sind kein Problem - ausrechnen und aufschreiben machst Du ja selber.&lt;br /&gt;
&amp;lt;br&amp;gt; Präsentation der Ware im Selbsbedienungsteil:&lt;br /&gt;
&amp;lt;br&amp;gt; Bauteile offen oder ab Gurt in kleinen, liebevoll angeschriebenen Pappschachteln (noch von Vater Pusterla), grösseren Wühlschachteln, einer Wühlecke sowie hier und da einige Merkwürdigkeiten auf dem Fussboden.&lt;br /&gt;
Man stelle sich das Ladenlokal eines Joint-Ventures aus Oppermann, Pollin, dem ehem. Völkner sowie dem örtlichen Entsorgungshof vor - &#039;&#039;&#039;das&#039;&#039;&#039; ist &amp;quot;Pusti&amp;quot; und so war er schon immer!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fazit:&#039;&#039;&#039; absolut lohnenswert, auch wenn man vielleicht nicht immer das bekommt was man wollte, dafür findet man aber alles, wonach man nie gesucht hatte!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8092 Zürich===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=&amp;quot;Bastli&amp;quot;&amp;lt;br&amp;gt;Fachverein der Departemente Informationstechnologie und Elektrotechnik und Maschinenbau und Verfahrenstechnik an der ETH Zürich.&lt;br /&gt;
|Straße=Universitätsstrasse 19&lt;br /&gt;
|PLZ=8092&lt;br /&gt;
|Ort= Zürich&lt;br /&gt;
|Telefon= n/a&lt;br /&gt;
|Fax= n/a&lt;br /&gt;
|Öffnungszeiten=Die Öffnungszeiten gelten nur während des Semesters.&lt;br /&gt;
Mo 12:15 - 13:00 Uhr&amp;lt;br&amp;gt;&lt;br /&gt;
Do 12:15 - 13:00 Uhr&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
|Weblink=http://www.bastli.ethz.ch/&lt;br /&gt;
|Email=bastli@amiv.ethz.ch&lt;br /&gt;
|Bemerkung=Studentischer &amp;quot;Bastel-Shop&amp;quot;&lt;br /&gt;
Während den Öffnungszeiten ist der Bastli-Shop im ersten Stock des UNG geöffnet.&lt;br /&gt;
Ihr könnt Bauteile, welche wir an Lager haben, kaufen und euch wird mit diversen elektronischen Problemen geholfen. &lt;br /&gt;
&lt;br /&gt;
Organisierte Sammelbestellungen bei Fa. Reichelt / Deutschland&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standort:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bastli und Messplatz befinden sich in den Räumlichkeiten des AMIV im UNG Gebäude schräg gegenüber des CAB.&lt;br /&gt;
Es ist das gleiche Gebäude in dem auch der ehem. AMIV-Verlag respektive ehem. WBS respektive SPOD untergebracht ist.&lt;br /&gt;
&lt;br /&gt;
Das Gebäude wirkt beim ersten Kontakt wohl für jeden neuen ein bisschen abschreckend. Aber keine Scheu, wenn man durch das etwas schlecht beleuchtete Treppenhaus in den ersten Stock gelangt, wendet man sich dort gleich nach rechts. Bastli und Messplatz haben die Zimmernummern C6 und C5.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 8305 Dietlikon ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Conrad Electronic Schweiz&lt;br /&gt;
|Straße=Alte Dübendorferstrasse 17&lt;br /&gt;
|PLZ=8305&lt;br /&gt;
|Ort=Dietlikon&lt;br /&gt;
|Telefon=0848/80 12 84 (Normaltarif)&lt;br /&gt;
|Fax=044/805 35 14&lt;br /&gt;
|Öffnungszeiten=Mo-Sa 09:00-20:00 Uhr&lt;br /&gt;
|Weblink=http://www.conrad.ch/ce/de/ChainstoreInfo.html?detail&amp;amp;chainstorecode=CS_CH_ZH&lt;br /&gt;
|Email=filiale.dietlikon@conrad.ch&lt;br /&gt;
|Bemerkung=5 Minuten vom Bahnhof Dietlikon&amp;lt;br&amp;gt;Parkhaus &amp;amp; Parkplätze vorhanden&lt;br /&gt;
(Stand: 2012-08-27)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 8606 Nänikon ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Distrelec Schweiz&lt;br /&gt;
|Straße=Grabenstrasse 6&lt;br /&gt;
|PLZ=8606&lt;br /&gt;
|Ort=Nänikon&lt;br /&gt;
|Telefon=044 - 944 99 11&lt;br /&gt;
|Fax=044 - 944 99 88&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 07:30-18:00 Uhr (nur Abholschalter)&lt;br /&gt;
|Weblink=https://www.distrelec.ch&lt;br /&gt;
|Email=info@distrelec.com&lt;br /&gt;
|Bemerkung=&#039;&#039;&#039;Abholschalter:&#039;&#039;&#039; (Vorbestellung unbedingt erforderlich)&lt;br /&gt;
Telefonisch oder online bestellte Ware kann nach ca. 2 Stunden abgeholt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;Es kann auch direkt vor Ort ab Katalog bestellt werden, allerdings dann Wartezeit von min. 2 Stunden&lt;br /&gt;
&amp;lt;br&amp;gt;Bezahlung: bar/EC- und Post-Card&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== St. Gallen (SG) ==&lt;br /&gt;
=== 9443 Widnau ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Asif Elektronik&lt;br /&gt;
|Straße=Schützenstrasse 35&lt;br /&gt;
|PLZ=9443&lt;br /&gt;
|Ort=Widnau&lt;br /&gt;
|Telefon=071/722 01 57 (Normaltarif)&lt;br /&gt;
|Fax=071/588 02 58&lt;br /&gt;
|Öffnungszeiten=Mo-Fr 14:00-17:00 Uhr (Information und Support)&lt;br /&gt;
|Weblink=http://www.asif-elektronik.ch&lt;br /&gt;
|Email=sales@asif-elektronik.ch&lt;br /&gt;
|Bemerkung= Sprachen: Englisch und Deutsch.&lt;br /&gt;
Online Geschäft. Lieferung per Post. Abholung nur nach Vereinbarung.&lt;br /&gt;
&amp;lt;br&amp;gt;Bezahlung: Überweisung/Paypal/Kreditkarte&lt;br /&gt;
&amp;lt;br&amp;gt;Gratis Versand ab 50 CHF.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Luxembourg =&lt;br /&gt;
=== L-1510 Luxembourg ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=Schaller Electronic S.à.r.l&lt;br /&gt;
|Straße=19, Av. de la Faïencerie&lt;br /&gt;
|PLZ=1510&lt;br /&gt;
|Ort=Luxembourg&lt;br /&gt;
|Telefon=+352-475239-1&lt;br /&gt;
|Fax=+352-471507&lt;br /&gt;
|Öffnungszeiten=Montag - Freitag: 08:30 - 12:30, 13:30 - 18:00&amp;lt;br&amp;gt;Samstag: 09:00 - 13:00&lt;br /&gt;
|Weblink=http://schaller-electronic.lu/index.php?home&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== L-6905 Niederanven ===&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname=electronic-Shop S.àr.l. &lt;br /&gt;
|Straße=141, route de Trèves&lt;br /&gt;
|PLZ=6905&lt;br /&gt;
|Ort=Niederanven&lt;br /&gt;
|Telefon=+352 269464-1&lt;br /&gt;
|Fax=+352 269464-64&lt;br /&gt;
|Öffnungszeiten=&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|Weblink=www.electronic-shop.lu&lt;br /&gt;
|Email=info@electronic-shop.lu&lt;br /&gt;
|Bemerkung=Online-Bestellungen, die ein paar Tage später an der Abholtheke abgeholt werden können.&lt;br /&gt;
}}&lt;br /&gt;
= Türkei =&lt;br /&gt;
== Istanbul ==&lt;br /&gt;
=== Istanbul ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ElektronikLieferant&lt;br /&gt;
|Firmenname= Ufuk Elektronik&lt;br /&gt;
|Straße=Yemişçi Hasan Sok. 1&lt;br /&gt;
|PLZ=&lt;br /&gt;
|Ort=&lt;br /&gt;
|Telefon=&lt;br /&gt;
|Fax=&lt;br /&gt;
|Öffnungszeiten=&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|Weblink=http://www.ufukelektronik.com/&lt;br /&gt;
|Email=&lt;br /&gt;
|Bemerkung= Im Gebiet des Fähranleger Karaköy gibt es einige Läden die Bauelemente anbieten. Der aufgeführte Laden wurde nur Beispielhaft aufgeführt. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Siehe auch =&lt;br /&gt;
* [[Platinenhersteller]]&lt;br /&gt;
* [[Elektronikversender]]&lt;br /&gt;
* [[Eisenwarenversender]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=72426</id>
		<title>VHDL</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=72426"/>
		<updated>2013-02-17T20:12:05Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Deutsch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VHDL als Sprache ==&lt;br /&gt;
&lt;br /&gt;
VHDL ist eine kombinierte Sprache: Sie enthält, wie andere typische Programmiersprachen, eine Reihe von Konstrukten und Befehlen, die Abläufe und zeitliches Verhalten beschreiben, sowie ferner auch Elemente, die Strukturen und Zusammenhänge definieren. Diese werden genutzt, um das Verhalten der Schaltung zu definieren. Wesentlich ist dabei die funktionelle Abhängigkeit der Ausgänge von Schaltungsmodulen von ihren Eingängen, sowie der Zusammenhang der Eingänge der Module mit den Ausgängen anderer Module. Diese können jeweils direkt oder über FlipFlops verknüpft werden, wodurch die Informationsweitergabe erst im nächsten Takt erfolgt. Mit dieser grundsätzlichen Topologie sind alle wichtigen Grundfunktionen digitaler Schaltungen darstellbar. Letztlich wird das Verhalten der Chipausgänge in Abhängigkeit der Chipeingänge definiert und dabei alle erdenklichen Zustände, in denen sich die Teilschaltungen befinden können, vollumfänglich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei VHDL das Verständnis, dass alle ausdrücklichen, zeitlichen Abläufe lediglich während der Simulation so vollzogen werden, wie sie anhand üblicher Regeln der Softwaretechnologie erwartet werden. Bei der Synthese hingegen, bleiben einige zeitliche Konstrukte und Zusammenhänge unberücksichtigt und nur die Strukturen selbst werden in die Schaltung übernommen. Damit ist z.B. die Anordnung des Codes in einem Modul aber auch die Ordnung der Prozesse und Reihenfolge von Signalzuweisungen weitgehend unerheblich.&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
&lt;br /&gt;
Bei der Simulation wird der Code in klassischer Weise kompiliert und ausgeführt. Die Anordnung von Codezeilen kann dabei ebenso relevant sein, wie die zeitliche Steuerung von Modulen, die bestimmte Abhängigkeiten von einzelnen Signalen haben. In dieser Funktion wird VHDL hauptsächlich zum Schreiben von Testbenches und Modellen verwendet. Näheres dazu im Artikel [[VHDL Testbench]].&lt;br /&gt;
&lt;br /&gt;
=== Synthese ===&lt;br /&gt;
&lt;br /&gt;
Bei der Synthese wird die Beschreibung von einer Synthesesoftware in eine Netzliste umgesetzt. Der grundlegende Unterschied zur Verwendung von VHDL als Simulationsprache besteht darin, dass man nicht beliebigen Code schreiben kann, sondern sich an bestimmte Strukturen halten muss, die der Synthesizer kennt und in Hardware umsetzen kann. Schleifen z.B. werden zur Compilezeit ausgeführt, um Matritzen, Vektoren oder redundante Strukturen zu beschreiben und besitzen keine zeitliche Relevanz zur Ausführungszeit.&lt;br /&gt;
&lt;br /&gt;
Wie diese Strukturen im allgemeinen aussehen, ist weiter unten beschrieben, Details erfährt man in der Dokumentation der Software, z.&amp;amp;nbsp;B. dem [http://toolbox.xilinx.com/docsan/xilinx9/books/docs/xst/xst.pdf XST User Guide].&lt;br /&gt;
&lt;br /&gt;
==== Grundregeln für synthetisierbaren VHDL-Code ====&lt;br /&gt;
&lt;br /&gt;
Folgende Grundregeln sollten vor allem Anfänger auf jeden Fall einhalten:&lt;br /&gt;
&lt;br /&gt;
* Es darf nur zwei Arten von Prozessen geben:&lt;br /&gt;
*# Rein kombinatorische Prozesse (keine Zustandsspeicher):&lt;br /&gt;
*#* Alle Signale die im Prozess gelesen werden in die sensitivity list eintragen&lt;br /&gt;
*#* Jedes Ausgangssignal muss in jedem if-Zweig einen von sich selbst verschiedenen Wert zugewiesen bekommen, damit keine [[Latch]]es entstehen (mein_signal &amp;lt;= mein_signal; ist unzulässig!)&lt;br /&gt;
*#* Keine Taktflankenabfrage&lt;br /&gt;
*# Rein getaktete Prozesse (Flip-Flops als Zustandsspeicher):&lt;br /&gt;
*#* Nur Clk und asynchroner Reset in die sensitivity list&lt;br /&gt;
*#* Maximal ein [[Reset für FPGA/CPLD | Reset]]&lt;br /&gt;
*#* Nur eine Taktflankenabfrage (rising_edge)&lt;br /&gt;
* Möglichst nur ein einziger Takt im gesamten Design, nur steigende ODER fallende Taktflanke auswerten. Um eine Flanke eines anderen Signals zu erkennen, siehe [[VHDL Flankenerkennung]].&lt;br /&gt;
* Keine Takte herunter teilen, stattdessen [[Taktung FPGA/CPLD#Clock Enable|Clock Enable]]  verwenden.&lt;br /&gt;
* Kein &amp;quot;after&amp;quot;, &amp;quot;wait for&amp;quot; o.ä. verwenden, das ist nicht synthetisierbar&lt;br /&gt;
* Keine shared variables verwenden&lt;br /&gt;
* Variablen nur dann verwenden, wenn man genau verstanden hat, was der Unterschied zu einem Signal ist und sich das Problem nicht auch mit Signalen lösen lässt&lt;br /&gt;
* Kein IEEE.STD_LOGIC_(UN)SIGNED verwenden, sondern IEEE.NUMERIC_STD (siehe [[Rechnen in VHDL]])&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
===&amp;lt;code&amp;gt;CLK=&#039;1&#039; and CLK&#039;event&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;rising_edge()&amp;lt;/code&amp;gt;?===&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Bei der Beschreibung von FlipFlops werden je nach Buch/Programmierer zwei unterschiedliche Konstrukte benutzt:&lt;br /&gt;
&lt;br /&gt;
Variante 1 (klassisch):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if clk = &#039;1&#039; and clk&#039;event then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
und Variante 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche ist zu empfehlen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antwort:&#039;&#039;&#039;&lt;br /&gt;
Kurz gesagt bei der Synthese gibt es keine Unterschiede, in der Simulation kleine. Verwende die besser lesbare Variante. Die mit &#039;&#039;rising_edge()&#039;&#039; (bzw. &#039;&#039;falling_edge()&#039;&#039;) gilt allgemein als die bessere (Lesbarkeit und Simulationsgenauigkeit).&lt;br /&gt;
&lt;br /&gt;
Wer es genau wissen will: Die klassische Variante ist nur korrekt für Signale die nur die Werte &#039;1&#039; und &#039;0&#039; annehmen können. Bei Signalen vom Typ std_logic (der Standardtyp für Signale) werden Flanken erkannt, die tatsächlich keine sind.&lt;br /&gt;
Zum Beispiel beim Treiben eines PullUps (&#039;H&#039; -&amp;gt; &#039;1&#039; keine tatsächliche Flanke aber für &#039;&#039;clk = &#039;1&#039; and clk&#039;event&#039;&#039;) oder beim Simulationsstart ohne Initialisierungswert für die Signale (&#039;U&#039; -&amp;gt; &#039;1&#039;).(Signale mit Initialisierungswert werden so deklariert: &#039;&#039;signal a: std_logic := &#039;0&#039;; &#039;&#039;).&lt;br /&gt;
Die Funktionen &#039;&#039;rising_edge()&#039;&#039; und &#039;&#039;falling_edge()&#039;&#039; konvertieren den std_logic Wert vor dem Vergleich auf &#039;1&#039; bzw. &#039;0&#039; und simulieren so keine Flanke wo in der echten Hardware auch keine ist.&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/forum/read-9-391894.html&lt;br /&gt;
&lt;br /&gt;
===Synchroner oder asynchroner Reset===&lt;br /&gt;
Folgende Regeln gelten bei der Überlegung, ob man einen ansynchronen Reset verwenden sollte:&lt;br /&gt;
&lt;br /&gt;
* In FPGAs führt die Nutzung von Resetfunktionen in aller Regel zu einem erhöhten Resourcenverbrauch. Mitunter werden Taktnetze belegt.&lt;br /&gt;
&lt;br /&gt;
* Asynchrone Resets bedürfen besonderer Behandlung, damit die negative RST-Taktflanke nicht genau zur Clk-Flanke kommt, da dies zu inkonsitenten Startbedingungen der FFs im FPGA führen kann.&lt;br /&gt;
&lt;br /&gt;
* Viele FPGAs können per Init-Kommando in VHDL initialisiert werden und benötigen zum Anlaufen gar keinen (Re)set - weder synchron noch aysnchron.&lt;br /&gt;
&lt;br /&gt;
* Oft benötigen FPGAs aus Betriebssicherheitsgründen einen synchronen Reset inmitten des Betriebs durch eine Instanz wie einen Controller, wenn ein Fehler detektiert wurde. In diesen Fällen ist ein asynchroner Reset unnötig.&lt;br /&gt;
&lt;br /&gt;
* asynchrone Resets sollten nur an von einander unabhängigen Punkten der Schaltungselektronik angewendet werden, wie z.B. an verschiedenen Chips, wo man ohnehin keine totale Synchronität unterstellt und Massnahmen zum sicheren Anlaufen aller Schaltungsteile ergreifen muss.&lt;br /&gt;
&lt;br /&gt;
* asynchrone Resets müssen in jeder einzelnen domain getrennt eingetaktet werden, um sie sicher in synchrone Resets zu überführen&lt;br /&gt;
&lt;br /&gt;
* Innerhalb eines FPGAs sollten asnchrones Resets an z.B. PLLs geführt werden, damit deren Reset nicht von einer zweiten PLL abhängig ist.&lt;br /&gt;
&lt;br /&gt;
* Sollen FPGAs in ASICs übersetzt werden und dort unbedingt ein asynchroner Reset verwendet werden müssen, können asynchrone Resets bedingt compilierbar eingebaut werden, sodass sie im FPGA nicht zwangsläufig aktiv sein müssen&lt;br /&gt;
&lt;br /&gt;
==== Standardresetpfad in FPGAs ====&lt;br /&gt;
&lt;br /&gt;
Ein probates und meistens sehr gut funktionierendes Design sieht folgendermassen aus:&lt;br /&gt;
&lt;br /&gt;
* externer asynchroner Reset vom IO-PAD (bei nReset über Inverter) direkt im Top-Level an die Master-PLL / bzw den Haupt-DCM, genannt &amp;quot;PLL1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Die &amp;quot;PLL1&amp;quot; generiert neben den Takten ein LOCKED-Signal, das in invertierter Form als Reset für diese domain benutzt wird. Aus dem aynchronen Reset wird dadurch mittels des LOCK-Signals ein interner, synchroner Reset&lt;br /&gt;
&lt;br /&gt;
* Dieser interne Reset wird in jeder einzelnen Teildomain dieser PLL zweimmal einsynchronisiert, um lokale Reset-Signale zu erzeugen. Damit werden die Auswirkungen metastabiler Zustände verhindert, die bei der negativen Resetflanke entstehen könnten, falls die Taktflanken der erzeugten PLL-Takte genau auf dieser Flanke liegen&lt;br /&gt;
&lt;br /&gt;
* Der interne Reset der &amp;quot;PLL1&amp;quot; versorgt zudem auch alle weiteren PLLs der anderen Domains, die sich ihren lokalen Reset auf dieselbe Weise generieren. Der in der domain der PLL1 synchrone reset wirkt bei diesen PLLs quasi asynchron.&lt;br /&gt;
&lt;br /&gt;
Damit wird sichergestellt dass alle PLLs einen eigenen Reset bekommen und sie danach definitiv anlaufen. Es ist nun wichtig, dass beachtet wird, dass der exakte Zeitpunkt der Resets der unterschiedlichen domains unbekannt ist. Daher müssen die locked-signale dieser domains gfs wieder einsynchronsiert werden, damit in der Master-Domain bekannt ist, wenn alle Teilschaltungen angelaufen sind und das Design &amp;quot;starten&amp;quot; kann.&lt;br /&gt;
&lt;br /&gt;
Bei kritischen Applikationen muss gegebenenfalls auch noch dafür gesorgt werden, dass in der Phase zwischen Start des FPGAs und Arbeiten aller PLLs alle FPGA-Ausgänge auf einem passenden Pegel gehalten werden.&lt;br /&gt;
&lt;br /&gt;
===Wann und warum verwendet man Variablen?===&lt;br /&gt;
&lt;br /&gt;
* Variablen sind als Zwischenergebnisse / Synonyme für aus Kombinatorik gewonnene Werte / Signale zu verstehen. Sie erhalten jeweils &amp;quot;sofort&amp;quot; nach der Zuweisung ihren neuen Wert, der direkt an anderer Stelle genutzt werden kann - so, als läge eine direkte Verdrahtung vor. Die Nutzung von Variablen entkoppelt somit jegliche Berechung von den zeitlichen Randbedingungen, speziell dem Takt. Damit ist es möglich, komplexe Architekturen und Modellverhalten innerhalb von Simulationen ohne einen Zeitverlust zu berechnen, siehe Beispiele unten.&lt;br /&gt;
&lt;br /&gt;
* Signale erhalten ihren neu zugewiesenen Wert dagegen erst nach dem vollständigen Abarbeiten eines Prozesses, praktisch nach einem Delta-Delay oder nach einer spezifizierten Zeit. Sie repräsentieren eine physikalische Signalkette mit tatsächlichem Datenfluss. Während Variablen daher in einem Prozess gleich weiterverwendet werden können, sind Signale faktisch erst mit dem nächsten Takt aktuell (das Delta-Delay führt dazu, dass der Wert für diesen Durchlauf noch nicht gilt, der nächste Durchlauf des getakteten Prozesses passiert dann erst einen Clockcycle später.&lt;br /&gt;
&lt;br /&gt;
* Bei asynchronen Prozessen wird der Prozess bei der Verwendung von Signalen dann nochmals gestartet ... (oder so oft, so viele voneinander abhängige Signalzuweisungen drin sind), bei Variablen wird er in einem Durchlauf berechnet (Simulationszeit!).&lt;br /&gt;
&lt;br /&gt;
* Die Benutzung von Variablen gegenüber Signalen hat mitunter Vorteile im Bereich der Ausführungszeit bei Simulationen, wenn umfangreiche Berechnungen nötig sind, die ansonsten mit Vektoren durchgeführt werden müssten.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Signalen&lt;br /&gt;
-- die letzte Anweisung ist gültig und überschreibt alle vorhergehenden Anweisungen&lt;br /&gt;
&lt;br /&gt;
-- steht real in der Signaldefinition über begin&lt;br /&gt;
signal a: std_logic;&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a &amp;lt;= a and b;&lt;br /&gt;
    a &amp;lt;= a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and c, die Zeile zuvor wird ignoriert&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Variablen&lt;br /&gt;
-- Aufeinanderfolgende Anweisungen werden sofort logisch wirksam und in die neue Anweisung einbezogen, die Anweisungen werden somit verkettet&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
  variable a: std_logic;&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a := a and b;&lt;br /&gt;
    a := a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and b and c, Verkettung der Anweisung wie in normalen Programmiersprachen&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Es kann recht unübersichtlich werden, wenn man eine komplexe Berechnung hat und diese mit vielen Klammerebenen verschachtelt direkt in der Signalzuweisung beschreibt. Hier kann es besser sein, den Wert &amp;quot;nach und nach&amp;quot; über Variablen &amp;quot;zusammenzubauen&amp;quot; und erst am Schluss auf ein Signal zuzuweisen.&lt;br /&gt;
&lt;br /&gt;
* Manchmal möchte man gemeinsame Teilausdrücke vorab berechnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Var1 := A + B;&lt;br /&gt;
  Var2 := C + D;&lt;br /&gt;
  Var3 := E + F;&lt;br /&gt;
  Result1 &amp;lt;= Var1 - Var2;&lt;br /&gt;
  Result2 &amp;lt;= Var1 - Var3;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
ist i.d.R. besser als&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Result1 &amp;lt;= (A + B) - (C + D);&lt;br /&gt;
  Result2 &amp;lt;= (A + B) - (E + F);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Wenns komplexer wird, ist es auch einfacher, daran was zu ändern.&lt;br /&gt;
&lt;br /&gt;
* Verschiedenen Synthesetools können manchmal mehr, manchmal weniger gut optimieren. So kann man z.&amp;amp;nbsp;B. durch das Zusammenfassen eines Teilausdruckes eine bessere Optimierung erreichen (Stichwort Resource-Sharing). Z.B.:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    res &amp;lt;= a+b;&lt;br /&gt;
  else -- opcode = sub&lt;br /&gt;
    res &amp;lt;= a-b;&lt;br /&gt;
  end if;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    var1 := b;&lt;br /&gt;
  else&lt;br /&gt;
    var1 := -b;&lt;br /&gt;
  end if;&lt;br /&gt;
  res &amp;lt;= a+var1;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall wird ggf. ein Addierer und ein Subtrahierer (noch&#039;n Addierer) eingebaut und das Ergebniss gemultiplext, im zweiten Fall wird eventuell nur ein Addierer eingebaut und der b-Eingang des Addierers gemultiplext. Sind a und b beispielsweise 32-Bit-Vektoren, dann macht das HW-mäßig schon was aus.&lt;br /&gt;
Gute Synthesetools sollten dies aber mittlerweile automatisch machen, so das in beiden Fällen dasselbe rauskommt (war nicht immer so). (BTW, ich selber tendiere normalerweise zur ersten Variante, da besser lesbar - und man die HW-Implementierung nicht notwendigerweise vorwegnehmen soll, aber da hat jeder seine eigene Meinung zu ...)&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Bei Analogen Filtern ist es oft notwendig, iterative Schleifen zu verwenden, um die Ergebnisse zu erlangen. Nur die Verwendung von Variablen und Loops gestattet es, komplexe Rechenergebnisse von &amp;quot;analoger&amp;quot; Reaktionsgeschwindigkeit vom Simulator zu erlangen, ohne Simulationszeit oder gar Takte vergehen zu lassen.&lt;br /&gt;
&lt;br /&gt;
==== Geschwindigkeit ====&lt;br /&gt;
Simulatoren rechnen i.d.R. mit Variablen schneller, als mit Signalen. Hat man also viele Prozesse mit Signalen vs. Variablen in einem großen Design, dann kann das schon was ausmachen ... Siehe auch oben bei asynchronen Prozessen, die mit Signalen ggf. wesentlich öfters durchlaufen werden. Auch wenn also ein System mit Signalen abzubilden ist, so empfiehlt sich der Einsatz von Variablen mitunter dennoch.&lt;br /&gt;
&lt;br /&gt;
Ausnahme: I.d.R. sind nur auf Signalen und getakteten Prozessen basierende Modelle voll und leicht synthesierbar. Soll z.&amp;amp;nbsp;B. ein Modell in einem [[HIL]] System getestet werden, ist die Verwendung von Signalen mit entsprechender Berücksichtigung des timing angezeigt.&lt;br /&gt;
&lt;br /&gt;
==== Anfängerprobleme ====&lt;br /&gt;
Anfänger meinen oft, die unmittelbare Zuweisung eines Werts an eine Variable im Prozess gewinnbringend nutzen zu können. So werden dann ausgiebig Variablen verwendet, und eines der Hauptprobleme von Variablen übersehen: sie können nicht in der Sensitivliste eines Prozesses aufgeführt werden. Von diesem Nebeneffekt sind insbesondere &#039;&#039;speichernde&#039;&#039; Variablen betroffen. Im Beitrag &lt;br /&gt;
http://www.mikrocontroller.net/topic/117630 sind dort ein paar Beispiele aufgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Hauptproblem an diesem Verhalten ist, dass die (fehlerfreie) Simulation nicht mehr zum Syntheseergebnis (das ebenfalls fehlerfrei und ohne Warnungen erzeugt wurde) passt.&lt;br /&gt;
&lt;br /&gt;
=== Kodierschaltungen ===&lt;br /&gt;
Kodierschaltungen (Coder) sind Schaltungen mit einem mehrstelligen Ein- und Ausgang. In der Schaltung werden keine FF oder andere Speicher benutzt. Ein typisches Beispiel ist die Wandlung einer Binärzahl in eine Binär Codierte Dezimalzahl. Eine sehr übersichtliche Schreibweise benutzt ein Konstanten-Feld. &lt;br /&gt;
&lt;br /&gt;
Vor- und Nachteile verschiedener VHDL-Varianten einen Coder zu beschreiben werden [[TTL74185|hier]] besprochen. &lt;br /&gt;
&lt;br /&gt;
===If außerhalb eines Prozesses?===&lt;br /&gt;
If-Bedinungen sind außerhalb eines Prozesses nicht möglich.&lt;br /&gt;
Lösung:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
 vector_or &amp;lt;= &#039;0&#039; when oder_vector = X&amp;quot;0000&amp;quot; else &#039;1&#039;;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Dies nennt der Fachmann bedingte Zuweisung (conditional assignment), es ist eine der &#039;&#039;nebenläufigen&#039;&#039; Anweisungen von VHDL. Daneben gibt es zu ähnlichem Zweck eine select-Anweisung:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
 with vector select&lt;br /&gt;
   bit_pos &amp;lt;= &amp;quot;00&amp;quot; when &amp;quot;0001&amp;quot;,&lt;br /&gt;
              &amp;quot;01&amp;quot; when &amp;quot;0010&amp;quot;,&lt;br /&gt;
              &amp;quot;10&amp;quot; when &amp;quot;0100&amp;quot;,&lt;br /&gt;
              &amp;quot;11&amp;quot; when &amp;quot;1000&amp;quot;,&lt;br /&gt;
              &amp;quot;00&amp;quot; when others;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für sperrige Fälle, die sich partout nicht lesbar und/oder elegant mittels dieser nebenläufigen Zuweisungen formulieren lassen, bietet sich entweder ein kombinatorischer Prozess an oder man verpackt die Zuweisung in eine Funktion. In beiden Fällen kann man dann den Ergebnisvektor schrittweise mit if-Abfragen zusammenbauen.&lt;br /&gt;
&lt;br /&gt;
=== Alle Leitungen auf &amp;quot;0000..&amp;quot; bzw &amp;quot;1111...&amp;quot; setzen? ===&lt;br /&gt;
&lt;br /&gt;
Auf null setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;0&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf eins setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;1&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vergleich eines std_logic_vector mit einer Konstanten===&lt;br /&gt;
&lt;br /&gt;
Um einen std_logic_vector auf &amp;quot;00000...&amp;quot; oder &amp;quot;1111...&amp;quot; zu vergleichen, kann die (others =&amp;gt; &#039;0&#039;) Schreibweise nicht verwendet werden, weil die Vektorbreite dabei nicht definiert ist. Hier muss also ein Bereich angegeben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (15 downto 0=&amp;gt;&#039;0&#039;) then..&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (VECTOR&#039;range=&amp;gt;&#039;0&#039;) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Diese Schreibweise gilt universell für alle Libs.&lt;br /&gt;
&lt;br /&gt;
Werte ungleich &amp;quot;000..&amp;quot; und &amp;quot;1111...&amp;quot; müssen bei Verwendung der NUMERIC_STD.ALL etwas aufwendiger umgewandelt werden (hier der Wert 77):&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = std_logic_vector(to_unsigned(77,VECTOR&#039;length)) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die herstellerabhängige Synopsis-Lib STD_LOGIC_UNSIGNED.ALL verwendet, kann auch einfach so geschrieben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 0 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Genauso einfach geht ein Vergleich auf z.&amp;amp;nbsp;B. den Wert 77:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 77 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Report von std_logic_vector===&lt;br /&gt;
&lt;br /&gt;
Report kann nur Strings verarbeiten, deswegen muss ein std_logic_vector in einen String verwandelt werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
report integer&#039;image(to_integer(unsigned(rdata)));&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===parallel -&amp;gt; seriell: Schieberegister oder Multiplexer?===&lt;br /&gt;
* http://www.mikrocontroller.net/topic/78556&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
=== Beiträge ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/198531 Einsynchronisieren mit hörerer Taktrate]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/156600 Detailbetrachtungen zur Metastabilität]&lt;br /&gt;
&lt;br /&gt;
=== VHDL-Bespiele ===&lt;br /&gt;
* [http://www.lothar-miller.de/s9y/categories/4-FPGA Beispiel von Lothar Miller]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/VHDL_Softwarepool VHDL Software Pool]&lt;br /&gt;
&lt;br /&gt;
===Kurzreferenzen===&lt;br /&gt;
* [http://www.tcnj.edu/~hernande/r/VHDL_QRC__01.pdf VHDL Quick Reference Card]&lt;br /&gt;
* [http://www.lrr.in.tum.de/~acher/tgi/uebung/VHDL-Buch.pdf VHDHL buch als PDF]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/21066/VHDL_Coding_eng.pdf - Design Rules &amp;amp; Coding Style (PDF)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Online-Bücher===&lt;br /&gt;
&lt;br /&gt;
====Deutsch====&lt;br /&gt;
* [http://www.nt-nv.fh-koeln.de/Labor/VhdlEasy/index.html VHDL easy] - deutschsprachige VHDL-Einführung von der FH Köln&lt;br /&gt;
* [http://digbib.ubka.uni-karlsruhe.de/volltexte/documents/202594 Schaltungsdesign mit VHDL] - komplettes Buch als PDF&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/doc/kurzanleitung/vhdl.pdf VHDL Kurzanleitung] - Umfangreiches Buch der Uni Hamburg, deutschsprachig, ca. 110 Seiten &lt;br /&gt;
* [http://www.informatik.uni-ulm.de/ni/Lehre/SS03/ProSemFPGA/VHDL-Grundlagen.pdf VHDL Grundlagen] 15 Seiten Grundlagen, Universität Ulm&lt;br /&gt;
* [http://wwwlrh.fh-bielefeld.de/vhdl_vor/VHDL_VOR.htm Schaltungs-Synthese mit VHDL] eine Einfuehrung&lt;br /&gt;
* [http://de.wikibooks.org/wiki/VHDL VHDL - Wiki - Buch] VHDL Syntax mit vielen Beispielen. Da es sich um ein Wiki steht jede Woche mehr (korrigierter) Inhalt zur Verfügung.&lt;br /&gt;
* [http://www.lothar-miller.de/s9y/archives/81-Xilinx-ISE-Step-by-Step.html Xilinx ISE Step by Step] Bebildertes Tutorial für Xilinx ISE Entwicklungsumgebung&lt;br /&gt;
&lt;br /&gt;
====English====&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/ Hamburg VHDL archive]&lt;br /&gt;
* [http://www.ti.informatik.uni-frankfurt.de/Docs/cook/ VHDL Cookbook] - komplettes Buch&lt;br /&gt;
* [http://www.fpga4fun.com/VHDLTips.html VHDL Tips and Tricks]&lt;br /&gt;
* [http://www.doulos.com/knowhow/vhdl_designers_guide/ The Designer&#039;s Guide to VHDL]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Tutorial: Learn by Example] - viele Beispiele mit Testbenches&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
[[Category:Programmiersprachen]]&lt;br /&gt;
[[Kategorie:VHDL| ]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64913</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64913"/>
		<updated>2012-03-13T06:56:10Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, dafür wurde dieser Wikieintrag angelegt. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Bipolar-Transistoren, die leicht erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&#039;&#039;&#039;Bemerkungen:&#039;&#039;&#039;&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;npn&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| &amp;amp;beta;@IC|| V&amp;lt;sub&amp;gt;CEsat&amp;lt;/sub&amp;gt; || P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/PN2222 PN2222]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0,8&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|300&lt;br /&gt;
|Allrounder&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.reichelt.de/?ACTION=7;LA=3;INDEX=0;FILENAME=A100%252FPN2222A_NXP.pdf National]&lt;br /&gt;
|0.06&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3904 2N3904]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/2N/2N3904.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3055 2N3055]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC107 BC107]B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC547 BC547]B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC547.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD679 BD679]A&lt;br /&gt;
|TO-126&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MPSA42 MPSA42]&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC337 BC337]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|100&lt;br /&gt;
|0.7&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC%2FBC337.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC368 BC368]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC368.pdf Fairchild]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|300&lt;br /&gt;
|0.15&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT619 FMMT619]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|50&lt;br /&gt;
|2&lt;br /&gt;
|40-400&lt;br /&gt;
|200&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT619.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT625 FMMT625]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|150&lt;br /&gt;
|1&lt;br /&gt;
|15-400&lt;br /&gt;
|45&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT625.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MJ15003 MJ15003]&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD131 BD131]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei ?&lt;br /&gt;
| [http://www.datasheetcatalog.org/datasheet/philips/BD131.pdf Fairchild]&lt;br /&gt;
| 0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC517 BC517]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BC517.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW66 BCW66]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.diodes.com/datasheets/BCW66.pdf Zetex]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BFR92 BFR92]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BUX85 BUX85]&lt;br /&gt;
|TO-220&lt;br /&gt;
|450&lt;br /&gt;
|2&lt;br /&gt;
|&amp;gt;35&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|Rei Con&lt;br /&gt;
|[http://www.bourns.com/pdfs/bux85.pdf bourns.com]&lt;br /&gt;
|0.48&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/TIP41C TIP41C]&lt;br /&gt;
|TO-220&lt;br /&gt;
|100&lt;br /&gt;
|6&lt;br /&gt;
|15&lt;br /&gt;
|3000&lt;br /&gt;
|1.5&lt;br /&gt;
|65&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|csd Rei Con&lt;br /&gt;
|&lt;br /&gt;
|0.24&lt;br /&gt;
|-&lt;br /&gt;
|BSR14&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.15&lt;br /&gt;
|1&lt;br /&gt;
|0.35&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR13_BSR14.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BF199 BF199]&lt;br /&gt;
|TO-92&lt;br /&gt;
|25&lt;br /&gt;
|0.05&lt;br /&gt;
|&lt;br /&gt;
|38&lt;br /&gt;
|0.2&lt;br /&gt;
|0.35&lt;br /&gt;
|700&lt;br /&gt;
| alter HF-Transistor&lt;br /&gt;
|Rei Con Far ...&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BF199.pdf NXP]&lt;br /&gt;
|0.35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3906 2N3906]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC560 BC560]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC327 BC327]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC369 BC369]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-400&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC368&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC369 alldatasheet.com]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT717 FMMT717]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu [http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD438 BD438]&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD132 BD132]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC516 BC516]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.12&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCP53 BCP53]&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BDP950 BDP950]&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW67 BCW67]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|T0-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu 2N3055, Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/M/J/2/9/MJ2955.shtml datasheetcatalog]&lt;br /&gt;
|0.70&lt;br /&gt;
|-&lt;br /&gt;
|BSR15&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.25&lt;br /&gt;
|200&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR15_BSR16.pdf NXP]&lt;br /&gt;
|0.09&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NTE912 NTE912]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/CA3086 CA3086]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| eBay&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn483.pdf Intersil]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV61 BCV61]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV62 BCV62]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/ULN2801 ULN2801] [http://www.mikrocontroller.net/part/ULN2802 ULN2802] [http://www.mikrocontroller.net/part/ULN2803 ULN2803] [http://www.mikrocontroller.net/part/ULN2804 ULN2804] &lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x Low-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt&lt;br /&gt;
| Rei, Far, alle&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.35 - 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/UDN2981 UDN2981]&lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x High-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt, obsolete, Ersatz: Micrel MIC2981&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.allegromicro.com/en/Products/Part_Numbers/2981/2981.pdf Allegro] &lt;br /&gt;
| 1.75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollbrücke, Halbbrücke ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| ZDT 6790 TA&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Halbbrücke 1x NPN, 1x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.datasheetarchive.com/pdf-datasheets/Datasheets-311/133888.html Datasheetarchive.com]&lt;br /&gt;
| 0,74 €&lt;br /&gt;
|-&lt;br /&gt;
| ZHB6792&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| H-Brücke 2x NPN, 2x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.diodes.com/zetex/_pdfs/3.0/pdf/ZHB6792.pdf Diodes.com]&lt;br /&gt;
| 1,70 €&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [Rei] [[Elektronikversender#Reichelt|Reichelt]]: http://www.reichelt.de&lt;br /&gt;
* [Con] [[Elektronikversender#Conrad|Conrad-Elektronik]]: http://www.conrad.de&lt;br /&gt;
* [csd] [[Elektronikversender#csd-electronics|CSD-Electronics]]: http://www.csd-electronics.de/&lt;br /&gt;
* [Kes] [[Elektronikversender#Kessler|Kessler]]: http://www.kessler-elektronik.de&lt;br /&gt;
* [Far] [[Elektronikversender#Farnell|Farnell]]: http://www.farnell.de &lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e8a6de25fc Infineon]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/transistor_search Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F47196%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D47196%5D NXP Small-Signal]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F41781%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D41781%5D NXP low VCEsat]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/taxonomy.do?id=797&amp;amp;lctn=home ONsemi]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64912</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64912"/>
		<updated>2012-03-13T06:55:56Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, dafür wurde dieser Wikieintrag angelegt. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Bipolar-Transistoren, die leicht erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&#039;&#039;&#039;Bemerkungen:&#039;&#039;&#039;&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;npn&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| &amp;amp;beta;@IC|| V&amp;lt;sub&amp;gt;CEsat&amp;lt;/sub&amp;gt; || P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/PN2222 PN2222]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0,8&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|300&lt;br /&gt;
|Allrounder&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.reichelt.de/?ACTION=7;LA=3;INDEX=0;FILENAME=A100%252FPN2222A_NXP.pdf National]&lt;br /&gt;
|0.06&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3904 2N3904]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/2N/2N3904.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3055 2N3055]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC107 BC107]B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC547 BC547]B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC547.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD679 BD679]A&lt;br /&gt;
|TO-126&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MPSA42 MPSA42]&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC337 BC337]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|100&lt;br /&gt;
|0.7&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC%2FBC337.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC368 BC368]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC368.pdf Fairchild]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|300&lt;br /&gt;
|0.15&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT619 FMMT619]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|50&lt;br /&gt;
|2&lt;br /&gt;
|40-400&lt;br /&gt;
|200&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT619.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT625 FMMT625]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|150&lt;br /&gt;
|1&lt;br /&gt;
|15-400&lt;br /&gt;
|45&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT625.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MJ15003 MJ15003]&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD131 BD131]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei ?&lt;br /&gt;
| [http://www.datasheetcatalog.org/datasheet/philips/BD131.pdf Fairchild]&lt;br /&gt;
| 0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC517 BC517]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BC517.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW66 BCW66]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.diodes.com/datasheets/BCW66.pdf Zetex]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BFR92 BFR92]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BUX85 BUX85]&lt;br /&gt;
|TO-220&lt;br /&gt;
|450&lt;br /&gt;
|2&lt;br /&gt;
|&amp;gt;35&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|Rei Con&lt;br /&gt;
|[http://www.bourns.com/pdfs/bux85.pdf bourns.com]&lt;br /&gt;
|0.48&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/TIP41C TIP41C]&lt;br /&gt;
|TO-220&lt;br /&gt;
|100&lt;br /&gt;
|6&lt;br /&gt;
|15&lt;br /&gt;
|3000&lt;br /&gt;
|1.5&lt;br /&gt;
|65&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|csd Rei Con&lt;br /&gt;
|&lt;br /&gt;
|0.24&lt;br /&gt;
|-&lt;br /&gt;
|BSR14&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.15&lt;br /&gt;
|1&lt;br /&gt;
|0.35&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR13_BSR14.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BF199 BF199]&lt;br /&gt;
|TO-92&lt;br /&gt;
|25&lt;br /&gt;
|0.05&lt;br /&gt;
|&lt;br /&gt;
|38&lt;br /&gt;
|0.2&lt;br /&gt;
|0.35&lt;br /&gt;
|700&lt;br /&gt;
| alter HF-Transistor&lt;br /&gt;
|Rei Con Far ...&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BF199.pdf NXP]&lt;br /&gt;
|0.35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3906 2N3906]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC560 BC560]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC327 BC327]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC369 BC369]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-400&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC368&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC369 alldatasheet.com]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT717 FMMT717]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu [http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD438 BD438]&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD132 BD132]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC516 BC516]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.12&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCP53 BCP53]&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BDP950 BDP950]&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW67 BCW67]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|T0-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu 2N3055, Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/M/J/2/9/MJ2955.shtml datasheetcatalog]&lt;br /&gt;
|0.70&lt;br /&gt;
|-&lt;br /&gt;
|BSR15&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.25&lt;br /&gt;
|200&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR15_BSR16.pdf NXP]&lt;br /&gt;
|0.09&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NTE912 NTE912]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/CA3086 CA3086]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| eBay&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn483.pdf Intersil]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV61 BCV61]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV62 BCV62]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/ULN2801 ULN2801] [http://www.mikrocontroller.net/part/ULN2802 ULN2802] [http://www.mikrocontroller.net/part/ULN2803 ULN2803] [http://www.mikrocontroller.net/part/ULN2804 ULN2804] &lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x Low-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt&lt;br /&gt;
| Rei, Far, alle&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.35 - 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/UDN2981 UDN2981]&lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x High-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt, Obsolete, Ersatz: Micrel MIC2981&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.allegromicro.com/en/Products/Part_Numbers/2981/2981.pdf Allegro] &lt;br /&gt;
| 1.75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollbrücke, Halbbrücke ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| ZDT 6790 TA&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Halbbrücke 1x NPN, 1x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.datasheetarchive.com/pdf-datasheets/Datasheets-311/133888.html Datasheetarchive.com]&lt;br /&gt;
| 0,74 €&lt;br /&gt;
|-&lt;br /&gt;
| ZHB6792&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| H-Brücke 2x NPN, 2x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.diodes.com/zetex/_pdfs/3.0/pdf/ZHB6792.pdf Diodes.com]&lt;br /&gt;
| 1,70 €&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [Rei] [[Elektronikversender#Reichelt|Reichelt]]: http://www.reichelt.de&lt;br /&gt;
* [Con] [[Elektronikversender#Conrad|Conrad-Elektronik]]: http://www.conrad.de&lt;br /&gt;
* [csd] [[Elektronikversender#csd-electronics|CSD-Electronics]]: http://www.csd-electronics.de/&lt;br /&gt;
* [Kes] [[Elektronikversender#Kessler|Kessler]]: http://www.kessler-elektronik.de&lt;br /&gt;
* [Far] [[Elektronikversender#Farnell|Farnell]]: http://www.farnell.de &lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e8a6de25fc Infineon]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/transistor_search Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F47196%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D47196%5D NXP Small-Signal]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F41781%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D41781%5D NXP low VCEsat]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/taxonomy.do?id=797&amp;amp;lctn=home ONsemi]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64911</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64911"/>
		<updated>2012-03-13T06:55:31Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, dafür wurde dieser Wikieintrag angelegt. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Bipolar-Transistoren, die leicht erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&#039;&#039;&#039;Bemerkungen:&#039;&#039;&#039;&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;npn&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| &amp;amp;beta;@IC|| V&amp;lt;sub&amp;gt;CEsat&amp;lt;/sub&amp;gt; || P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/PN2222 PN2222]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0,8&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|300&lt;br /&gt;
|Allrounder&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.reichelt.de/?ACTION=7;LA=3;INDEX=0;FILENAME=A100%252FPN2222A_NXP.pdf National]&lt;br /&gt;
|0.06&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3904 2N3904]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/2N/2N3904.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3055 2N3055]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC107 BC107]B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC547 BC547]B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC547.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD679 BD679]A&lt;br /&gt;
|TO-126&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MPSA42 MPSA42]&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC337 BC337]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|100&lt;br /&gt;
|0.7&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC%2FBC337.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC368 BC368]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC368.pdf Fairchild]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|300&lt;br /&gt;
|0.15&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT619 FMMT619]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|50&lt;br /&gt;
|2&lt;br /&gt;
|40-400&lt;br /&gt;
|200&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT619.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT625 FMMT625]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|150&lt;br /&gt;
|1&lt;br /&gt;
|15-400&lt;br /&gt;
|45&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT625.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MJ15003 MJ15003]&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD131 BD131]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei ?&lt;br /&gt;
| [http://www.datasheetcatalog.org/datasheet/philips/BD131.pdf Fairchild]&lt;br /&gt;
| 0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC517 BC517]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BC517.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW66 BCW66]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.diodes.com/datasheets/BCW66.pdf Zetex]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BFR92 BFR92]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BUX85 BUX85]&lt;br /&gt;
|TO-220&lt;br /&gt;
|450&lt;br /&gt;
|2&lt;br /&gt;
|&amp;gt;35&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|Rei Con&lt;br /&gt;
|[http://www.bourns.com/pdfs/bux85.pdf bourns.com]&lt;br /&gt;
|0.48&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/TIP41C TIP41C]&lt;br /&gt;
|TO-220&lt;br /&gt;
|100&lt;br /&gt;
|6&lt;br /&gt;
|15&lt;br /&gt;
|3000&lt;br /&gt;
|1.5&lt;br /&gt;
|65&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|csd Rei Con&lt;br /&gt;
|&lt;br /&gt;
|0.24&lt;br /&gt;
|-&lt;br /&gt;
|BSR14&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.15&lt;br /&gt;
|1&lt;br /&gt;
|0.35&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR13_BSR14.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BF199 BF199]&lt;br /&gt;
|TO-92&lt;br /&gt;
|25&lt;br /&gt;
|0.05&lt;br /&gt;
|&lt;br /&gt;
|38&lt;br /&gt;
|0.2&lt;br /&gt;
|0.35&lt;br /&gt;
|700&lt;br /&gt;
| alter HF-Transistor&lt;br /&gt;
|Rei Con Far ...&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BF199.pdf NXP]&lt;br /&gt;
|0.35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3906 2N3906]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC560 BC560]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC327 BC327]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC369 BC369]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-400&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC368&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC369 alldatasheet.com]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT717 FMMT717]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu [http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD438 BD438]&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD132 BD132]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC516 BC516]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.12&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCP53 BCP53]&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BDP950 BDP950]&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW67 BCW67]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|T0-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu 2N3055, Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/M/J/2/9/MJ2955.shtml datasheetcatalog]&lt;br /&gt;
|0.70&lt;br /&gt;
|-&lt;br /&gt;
|BSR15&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.25&lt;br /&gt;
|200&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR15_BSR16.pdf NXP]&lt;br /&gt;
|0.09&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NTE912 NTE912]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/CA3086 CA3086]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| eBay&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn483.pdf Intersil]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV61 BCV61]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV62 BCV62]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/ULN2801 ULN2801] [http://www.mikrocontroller.net/part/ULN2802 ULN2802] [http://www.mikrocontroller.net/part/ULN2803 ULN2803] [http://www.mikrocontroller.net/part/ULN2804 ULN2804] &lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x Low-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt&lt;br /&gt;
| Rei, Far, alle&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.35 - 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/UDN2981 UDN2981]&lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x High-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt, Obsolete, Ersatz Micrel MIC2981&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.allegromicro.com/en/Products/Part_Numbers/2981/2981.pdf Allegro] &lt;br /&gt;
| 1.75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollbrücke, Halbbrücke ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| ZDT 6790 TA&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Halbbrücke 1x NPN, 1x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.datasheetarchive.com/pdf-datasheets/Datasheets-311/133888.html Datasheetarchive.com]&lt;br /&gt;
| 0,74 €&lt;br /&gt;
|-&lt;br /&gt;
| ZHB6792&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| H-Brücke 2x NPN, 2x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.diodes.com/zetex/_pdfs/3.0/pdf/ZHB6792.pdf Diodes.com]&lt;br /&gt;
| 1,70 €&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [Rei] [[Elektronikversender#Reichelt|Reichelt]]: http://www.reichelt.de&lt;br /&gt;
* [Con] [[Elektronikversender#Conrad|Conrad-Elektronik]]: http://www.conrad.de&lt;br /&gt;
* [csd] [[Elektronikversender#csd-electronics|CSD-Electronics]]: http://www.csd-electronics.de/&lt;br /&gt;
* [Kes] [[Elektronikversender#Kessler|Kessler]]: http://www.kessler-elektronik.de&lt;br /&gt;
* [Far] [[Elektronikversender#Farnell|Farnell]]: http://www.farnell.de &lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e8a6de25fc Infineon]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/transistor_search Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F47196%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D47196%5D NXP Small-Signal]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F41781%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D41781%5D NXP low VCEsat]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/taxonomy.do?id=797&amp;amp;lctn=home ONsemi]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64910</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64910"/>
		<updated>2012-03-13T06:54:59Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, dafür wurde dieser Wikieintrag angelegt. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Bipolar-Transistoren, die leicht erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&#039;&#039;&#039;Bemerkungen:&#039;&#039;&#039;&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;npn&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| &amp;amp;beta;@IC|| V&amp;lt;sub&amp;gt;CEsat&amp;lt;/sub&amp;gt; || P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/PN2222 PN2222]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0,8&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|300&lt;br /&gt;
|Allrounder&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.reichelt.de/?ACTION=7;LA=3;INDEX=0;FILENAME=A100%252FPN2222A_NXP.pdf National]&lt;br /&gt;
|0.06&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3904 2N3904]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/2N/2N3904.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3055 2N3055]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC107 BC107]B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC547 BC547]B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC547.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD679 BD679]A&lt;br /&gt;
|TO-126&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MPSA42 MPSA42]&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC337 BC337]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|100&lt;br /&gt;
|0.7&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC%2FBC337.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC368 BC368]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC368.pdf Fairchild]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|300&lt;br /&gt;
|0.15&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT619 FMMT619]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|50&lt;br /&gt;
|2&lt;br /&gt;
|40-400&lt;br /&gt;
|200&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT619.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT625 FMMT625]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|150&lt;br /&gt;
|1&lt;br /&gt;
|15-400&lt;br /&gt;
|45&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT625.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MJ15003 MJ15003]&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD131 BD131]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei ?&lt;br /&gt;
| [http://www.datasheetcatalog.org/datasheet/philips/BD131.pdf Fairchild]&lt;br /&gt;
| 0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC517 BC517]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BC517.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW66 BCW66]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.diodes.com/datasheets/BCW66.pdf Zetex]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BFR92 BFR92]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BUX85 BUX85]&lt;br /&gt;
|TO-220&lt;br /&gt;
|450&lt;br /&gt;
|2&lt;br /&gt;
|&amp;gt;35&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|Rei Con&lt;br /&gt;
|[http://www.bourns.com/pdfs/bux85.pdf bourns.com]&lt;br /&gt;
|0.48&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/TIP41C TIP41C]&lt;br /&gt;
|TO-220&lt;br /&gt;
|100&lt;br /&gt;
|6&lt;br /&gt;
|15&lt;br /&gt;
|3000&lt;br /&gt;
|1.5&lt;br /&gt;
|65&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|csd Rei Con&lt;br /&gt;
|&lt;br /&gt;
|0.24&lt;br /&gt;
|-&lt;br /&gt;
|BSR14&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.15&lt;br /&gt;
|1&lt;br /&gt;
|0.35&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR13_BSR14.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BF199 BF199]&lt;br /&gt;
|TO-92&lt;br /&gt;
|25&lt;br /&gt;
|0.05&lt;br /&gt;
|&lt;br /&gt;
|38&lt;br /&gt;
|0.2&lt;br /&gt;
|0.35&lt;br /&gt;
|700&lt;br /&gt;
| alter HF-Transistor&lt;br /&gt;
|Rei Con Far ...&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BF199.pdf NXP]&lt;br /&gt;
|0.35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3906 2N3906]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC560 BC560]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC327 BC327]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC369 BC369]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-400&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC368&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC369 alldatasheet.com]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT717 FMMT717]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu [http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD438 BD438]&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD132 BD132]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC516 BC516]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.12&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCP53 BCP53]&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BDP950 BDP950]&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW67 BCW67]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|T0-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu 2N3055, Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/M/J/2/9/MJ2955.shtml datasheetcatalog]&lt;br /&gt;
|0.70&lt;br /&gt;
|-&lt;br /&gt;
|BSR15&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.25&lt;br /&gt;
|200&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR15_BSR16.pdf NXP]&lt;br /&gt;
|0.09&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NTE912 NTE912]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/CA3086 CA3086]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| eBay&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn483.pdf Intersil]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV61 BCV61]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV62 BCV62]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/ULN2801 ULN2801] [http://www.mikrocontroller.net/part/ULN2802 ULN2802] [http://www.mikrocontroller.net/part/ULN2803 ULN2803] [http://www.mikrocontroller.net/part/ULN2804 ULN2804] &lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x Low-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt&lt;br /&gt;
| Rei, Far, alle&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.35 - 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/UDN2981 UDN2981]&lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x High-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt, Abgekündigt, Ersatz: Micrel MIC2981&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.allegromicro.com/en/Products/Part_Numbers/2981/2981.pdf Allegro] &lt;br /&gt;
| 1.75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollbrücke, Halbbrücke ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| ZDT 6790 TA&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Halbbrücke 1x NPN, 1x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.datasheetarchive.com/pdf-datasheets/Datasheets-311/133888.html Datasheetarchive.com]&lt;br /&gt;
| 0,74 €&lt;br /&gt;
|-&lt;br /&gt;
| ZHB6792&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| H-Brücke 2x NPN, 2x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.diodes.com/zetex/_pdfs/3.0/pdf/ZHB6792.pdf Diodes.com]&lt;br /&gt;
| 1,70 €&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [Rei] [[Elektronikversender#Reichelt|Reichelt]]: http://www.reichelt.de&lt;br /&gt;
* [Con] [[Elektronikversender#Conrad|Conrad-Elektronik]]: http://www.conrad.de&lt;br /&gt;
* [csd] [[Elektronikversender#csd-electronics|CSD-Electronics]]: http://www.csd-electronics.de/&lt;br /&gt;
* [Kes] [[Elektronikversender#Kessler|Kessler]]: http://www.kessler-elektronik.de&lt;br /&gt;
* [Far] [[Elektronikversender#Farnell|Farnell]]: http://www.farnell.de &lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e8a6de25fc Infineon]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/transistor_search Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F47196%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D47196%5D NXP Small-Signal]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F41781%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D41781%5D NXP low VCEsat]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/taxonomy.do?id=797&amp;amp;lctn=home ONsemi]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64909</id>
		<title>Transistor-Übersicht</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Transistor-%C3%9Cbersicht&amp;diff=64909"/>
		<updated>2012-03-13T06:54:31Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistor-Array */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Forum wird immer wieder gefragt, welcher [[Transistor]] für eine bestimmte Anwendung passend ist, dafür wurde dieser Wikieintrag angelegt. Wie in der [[Mosfet-Übersicht]] und der [[Dioden-Übersicht]] soll hier eine Liste entstehen mit gängigen Bipolar-Transistoren, die leicht erhältlich sind. Für die Typbezeichnung siehe [[Kennzeichnung von Halbleitern]]. Eine allgemeine Übersicht über verschiedene Bauteile gibt es hier: [[Standardbauelemente]].&lt;br /&gt;
&lt;br /&gt;
== NPN ==&lt;br /&gt;
&#039;&#039;&#039;Bemerkungen:&#039;&#039;&#039;&lt;br /&gt;
*U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt; = Maximale Kollektor-Emitter-Spannung bei I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
*I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; = Maximaler Kollektorstrom&lt;br /&gt;
*SOT-32 = TO-126&lt;br /&gt;
&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;npn&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung || Package || U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V || I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A || &amp;amp;beta; (Beta)|| &amp;amp;beta;@IC|| V&amp;lt;sub&amp;gt;CEsat&amp;lt;/sub&amp;gt; || P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W|| f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz|| Bemerkung|| Lieferant|| Datenblatt|| ca. Preis/&amp;amp;euro;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/PN2222 PN2222]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0,8&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|300&lt;br /&gt;
|Allrounder&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.reichelt.de/?ACTION=7;LA=3;INDEX=0;FILENAME=A100%252FPN2222A_NXP.pdf National]&lt;br /&gt;
|0.06&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3904 2N3904]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.5&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/2N/2N3904.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3055 2N3055]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/2466/MOSPEC/2N3055.html alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC107 BC107]B&lt;br /&gt;
|TO-18&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|200-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.3&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/45348/SIEMENS/BC107B.html alldatasheet.com]&lt;br /&gt;
|0.23&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC547 BC547]B&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.1&lt;br /&gt;
|125-500&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.625&lt;br /&gt;
|300&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC547.pdf Fairchild]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD679 BD679]A&lt;br /&gt;
|TO-126&lt;br /&gt;
|80&lt;br /&gt;
|4&lt;br /&gt;
|750&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/11588/ONSEMI/BD679A.html alldatasheet.com]&lt;br /&gt;
|0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MPSA42 MPSA42]&lt;br /&gt;
|TO-92&lt;br /&gt;
|300&lt;br /&gt;
|0.5&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|50&lt;br /&gt;
|hohe Spannung&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/MP/MPSA42.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC337 BC337]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|100&lt;br /&gt;
|0.7&lt;br /&gt;
|0.625&lt;br /&gt;
|210&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC%2FBC337.pdf Fairchild]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC368 BC368]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-450&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.625&lt;br /&gt;
|40&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.fairchildsemi.com/ds/BC/BC368.pdf Fairchild]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|3&lt;br /&gt;
|60-300&lt;br /&gt;
|300&lt;br /&gt;
|0.15&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT617.pdf Zetex]&lt;br /&gt;
|0.27&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT619 FMMT619]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|50&lt;br /&gt;
|2&lt;br /&gt;
|40-400&lt;br /&gt;
|200&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT619.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT625 FMMT625]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|150&lt;br /&gt;
|1&lt;br /&gt;
|15-400&lt;br /&gt;
|45&lt;br /&gt;
|0.2&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT625.pdf Zetex]&lt;br /&gt;
|0.32&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/MJ15003 MJ15003]&lt;br /&gt;
| TO-3&lt;br /&gt;
| 140&lt;br /&gt;
| 20&lt;br /&gt;
| 25-150&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| Leistungstransistor&lt;br /&gt;
| Rei Far&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/4799/MOTOROLA/MJ15004.html alldatasheet.com]&lt;br /&gt;
| 1.55&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD131 BD131]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-70&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Mittlere Leistung, guter Allrounder&lt;br /&gt;
| Rei ?&lt;br /&gt;
| [http://www.datasheetcatalog.org/datasheet/philips/BD131.pdf Fairchild]&lt;br /&gt;
| 0.21&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC517 BC517]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|0.6&lt;br /&gt;
|200&lt;br /&gt;
|Darlington&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BC517.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW66 BCW66]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|&lt;br /&gt;
|0.9&lt;br /&gt;
|0.36&lt;br /&gt;
|170&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.diodes.com/datasheets/BCW66.pdf Zetex]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BFR92 BFR92]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|15&lt;br /&gt;
|0.3&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0.2&lt;br /&gt;
|5000&lt;br /&gt;
| Hochfrequenz&lt;br /&gt;
|Rei ...&lt;br /&gt;
|&lt;br /&gt;
|0.16&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BUX85 BUX85]&lt;br /&gt;
|TO-220&lt;br /&gt;
|450&lt;br /&gt;
|2&lt;br /&gt;
|&amp;gt;35&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|40&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|Rei Con&lt;br /&gt;
|[http://www.bourns.com/pdfs/bux85.pdf bourns.com]&lt;br /&gt;
|0.48&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/TIP41C TIP41C]&lt;br /&gt;
|TO-220&lt;br /&gt;
|100&lt;br /&gt;
|6&lt;br /&gt;
|15&lt;br /&gt;
|3000&lt;br /&gt;
|1.5&lt;br /&gt;
|65&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|csd Rei Con&lt;br /&gt;
|&lt;br /&gt;
|0.24&lt;br /&gt;
|-&lt;br /&gt;
|BSR14&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.15&lt;br /&gt;
|1&lt;br /&gt;
|0.35&lt;br /&gt;
|300&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR13_BSR14.pdf NXP]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BF199 BF199]&lt;br /&gt;
|TO-92&lt;br /&gt;
|25&lt;br /&gt;
|0.05&lt;br /&gt;
|&lt;br /&gt;
|38&lt;br /&gt;
|0.2&lt;br /&gt;
|0.35&lt;br /&gt;
|700&lt;br /&gt;
| alter HF-Transistor&lt;br /&gt;
|Rei Con Far ...&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BF199.pdf NXP]&lt;br /&gt;
|0.35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PNP ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;G&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/2N3906 2N3906]&lt;br /&gt;
|TO-92&lt;br /&gt;
|40&lt;br /&gt;
|0.2&lt;br /&gt;
|100-300&lt;br /&gt;
|0.5&lt;br /&gt;
|250&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.05&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC560 BC560]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0,1&lt;br /&gt;
|110-800&lt;br /&gt;
|0.5&lt;br /&gt;
|150&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC560 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC327 BC327]&lt;br /&gt;
|TO-92&lt;br /&gt;
|45&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC337&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC327 alldatasheet.com]&lt;br /&gt;
|0.04&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC369 BC369]&lt;br /&gt;
|TO-92&lt;br /&gt;
|20&lt;br /&gt;
|1.5&lt;br /&gt;
|100-400&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu BC368&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BC369 alldatasheet.com]&lt;br /&gt;
|0.08&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/FMMT717 FMMT717]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|12&lt;br /&gt;
|2.5&lt;br /&gt;
|50-300&lt;br /&gt;
|0.625&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu [http://www.mikrocontroller.net/part/FMMT617 FMMT617]&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.zetex.com/3.0/pdf/FMMT717.pdf Zetex]&lt;br /&gt;
|0.19&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BD438 BD438]&lt;br /&gt;
|TO-126&lt;br /&gt;
|45&lt;br /&gt;
|4&lt;br /&gt;
|30-140&lt;br /&gt;
|36&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=BD438 alldatasheet.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|TO-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|2.5&lt;br /&gt;
|2N3055 Komplement&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://alldatasheet.com/view.jsp?Searchword=MJ2955 alldatasheet.com]&lt;br /&gt;
|0.40&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BD132 BD132]&lt;br /&gt;
| TO-126&lt;br /&gt;
| 45&lt;br /&gt;
| 3&lt;br /&gt;
| 30-120&lt;br /&gt;
| 15&lt;br /&gt;
| 60&lt;br /&gt;
| Komplement zu BD131&lt;br /&gt;
| Rei,?&lt;br /&gt;
| [http://www.alldatasheet.com/datasheet-pdf/pdf/16168/PHILIPS/BD132.html alldatasheet.com]&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BC516 BC516]&lt;br /&gt;
|TO-92&lt;br /&gt;
|30&lt;br /&gt;
|0.5&lt;br /&gt;
|30000&lt;br /&gt;
|0.5&lt;br /&gt;
|220&lt;br /&gt;
|Komplement zum BC517&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/15078/PHILIPS/2N3906.html alldatasheet.com]&lt;br /&gt;
|0.12&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCP53 BCP53]&lt;br /&gt;
|SOT223&lt;br /&gt;
|80&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1.3&lt;br /&gt;
|115&lt;br /&gt;
| &lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/B/C/P/5/BCP52-16.shtml datasheetcatalog.com]&lt;br /&gt;
|0.17&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BDP950 BDP950]&lt;br /&gt;
|SOT223&lt;br /&gt;
|60&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.com/datasheets_pdf/B/D/P/9/BDP950.shtml datasheetcatalog.com]&lt;br /&gt;
|0.29&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/BCW67 BCW67]&lt;br /&gt;
|SOT-23&lt;br /&gt;
|42&lt;br /&gt;
|0.8&lt;br /&gt;
|100-630&lt;br /&gt;
|0.32&lt;br /&gt;
|200&lt;br /&gt;
|&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://pdf1.alldatasheet.com/datasheet-pdf/view/79166/INFINEON/BCW67.html alldatasheet.com]&lt;br /&gt;
|0.041&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.mikrocontroller.net/part/MJ2955 MJ2955]&lt;br /&gt;
|T0-3&lt;br /&gt;
|60&lt;br /&gt;
|15&lt;br /&gt;
|20-70&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|Komplement zu 2N3055, Leistungstransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.datasheetcatalog.net/de/datasheets_pdf/M/J/2/9/MJ2955.shtml datasheetcatalog]&lt;br /&gt;
|0.70&lt;br /&gt;
|-&lt;br /&gt;
|BSR15&lt;br /&gt;
|SOT23&lt;br /&gt;
|40&lt;br /&gt;
|0.8&lt;br /&gt;
|100&lt;br /&gt;
|0.25&lt;br /&gt;
|200&lt;br /&gt;
|Schalttransistor&lt;br /&gt;
|Rei&lt;br /&gt;
|[http://www.nxp.com/documents/data_sheet/BSR15_BSR16.pdf NXP]&lt;br /&gt;
|0.09&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transistor-Array ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/NTE912 NTE912]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren&lt;br /&gt;
| Far&lt;br /&gt;
| [http://www.nteinc.com/specs/900to999/pdf/nte912.pdf NTE]&lt;br /&gt;
| 3.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/CA3086 CA3086]&lt;br /&gt;
| DIL-14&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 5 NPN-Transistoren, abgekündigt&lt;br /&gt;
| eBay&lt;br /&gt;
| [http://www.intersil.com/data/fn/fn483.pdf Intersil]&lt;br /&gt;
| 0.50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV61 BCV61]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 NPN-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV61 alldatasheet.com] &lt;br /&gt;
| 0.14&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/BCV62 BCV62]&lt;br /&gt;
| SOT143&lt;br /&gt;
| 30&lt;br /&gt;
| 0.1&lt;br /&gt;
| 100-800&lt;br /&gt;
| 0.25&lt;br /&gt;
| 100&lt;br /&gt;
| 2 PNP-Transistoren für Stromspiegel&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.19&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/ULN2801 ULN2801] [http://www.mikrocontroller.net/part/ULN2802 ULN2802] [http://www.mikrocontroller.net/part/ULN2803 ULN2803] [http://www.mikrocontroller.net/part/ULN2804 ULN2804] &lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x Low-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt&lt;br /&gt;
| Rei, Far, alle&lt;br /&gt;
| [http://www.alldatasheet.com/view.jsp?Searchword=BCV62 alldatasheet.com] &lt;br /&gt;
| 0.35 - 0,50&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mikrocontroller.net/part/UDN2981 UDN2981]&lt;br /&gt;
| DIL18 SO18&lt;br /&gt;
| 50&lt;br /&gt;
| 0.35&lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| kHz&lt;br /&gt;
| 8x High-Side NPN-Darlington, Freilaufdiode, max 500mA insgesamt, Ersatz: Micrel MIC2981&lt;br /&gt;
| Rei, Far&lt;br /&gt;
| [http://www.allegromicro.com/en/Products/Part_Numbers/2981/2981.pdf Allegro] &lt;br /&gt;
| 1.75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollbrücke, Halbbrücke ==&lt;br /&gt;
(Tabelle mit Klick auf Überschrift sortierbar)&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pkanalmosfets&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeeee&amp;quot;&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Package&lt;br /&gt;
! U&amp;lt;sub&amp;gt;CE&amp;lt;/sub&amp;gt;/V&lt;br /&gt;
! I&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;/A&lt;br /&gt;
! &amp;amp;beta; (Beta)&lt;br /&gt;
! P&amp;lt;sub&amp;gt;tot&amp;lt;/sub&amp;gt;/W&lt;br /&gt;
! f&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;/MHz&lt;br /&gt;
! Bemerkung&lt;br /&gt;
! Lieferant&lt;br /&gt;
! Datenblatt&lt;br /&gt;
! ca. Preis/€&lt;br /&gt;
|-&lt;br /&gt;
| ZDT 6790 TA&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Halbbrücke 1x NPN, 1x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.datasheetarchive.com/pdf-datasheets/Datasheets-311/133888.html Datasheetarchive.com]&lt;br /&gt;
| 0,74 €&lt;br /&gt;
|-&lt;br /&gt;
| ZHB6792&lt;br /&gt;
| SM-8&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| H-Brücke 2x NPN, 2x PNP&lt;br /&gt;
| Rei&lt;br /&gt;
| [http://www.diodes.com/zetex/_pdfs/3.0/pdf/ZHB6792.pdf Diodes.com]&lt;br /&gt;
| 1,70 €&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lieferantenübersicht ==&lt;br /&gt;
* [Rei] [[Elektronikversender#Reichelt|Reichelt]]: http://www.reichelt.de&lt;br /&gt;
* [Con] [[Elektronikversender#Conrad|Conrad-Elektronik]]: http://www.conrad.de&lt;br /&gt;
* [csd] [[Elektronikversender#csd-electronics|CSD-Electronics]]: http://www.csd-electronics.de/&lt;br /&gt;
* [Kes] [[Elektronikversender#Kessler|Kessler]]: http://www.kessler-elektronik.de&lt;br /&gt;
* [Far] [[Elektronikversender#Farnell|Farnell]]: http://www.farnell.de &lt;br /&gt;
&lt;br /&gt;
== Parametrische Suche beim Hersteller ==&lt;br /&gt;
* [http://www.infineon.com/cms/de/product/channel.html?channel=db3a304319c6f18c011a14e8a6de25fc Infineon]&lt;br /&gt;
* [http://www.diodes.com/zetex/?ztx=3.0/transistor_search Diodes (vormals Zetex)]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F47196%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D47196%5D NXP Small-Signal]&lt;br /&gt;
* [http://www.nxp.com/#/homepage/cb=%5Bt%3Dp%2Cp%3D%2F71078%2F41781%5D%7Cpp%3D%5Bt%3Dpfp%2Ci%3D41781%5D NXP low VCEsat]&lt;br /&gt;
* [http://www.onsemi.com/PowerSolutions/taxonomy.do?id=797&amp;amp;lctn=home ONsemi]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=64095</id>
		<title>LED-Matrix</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-Matrix&amp;diff=64095"/>
		<updated>2012-02-08T15:26:46Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Transistoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In einer [[LED]]-Matrix sind jeweils die Kathoden und Anoden der LEDs in Zeilen bzw. Spalten verbunden. Der Vorteil besteht darin, dass weniger Kontakte nach außen geführt und angesteuert werden müssen, ebenso sinkt der Verdrahtungsaufwand im Modul bzw. auf der Platine. Die Ansteuerung erfolgt dabei im sogenannten Multiplexbetrieb. Prinzipiell kann man sowohl die Zeilen als auch die Spalten multiplexen. Die nachfolgende Beschreibung bezieht sich auf das Multiplexen von Spalten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_5x7.png|right|thumb|220px|Eine 5&amp;amp;times;7 LED-Matrix]]&lt;br /&gt;
&lt;br /&gt;
==Multiplexbetrieb==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Multiplexverfahren Multiplexverfahren (Wikipedia)]&lt;br /&gt;
&lt;br /&gt;
Der Trick einer LED-Matrix besteht darin, dass jeweils immer nur eine Spalte wirklich leuchtet. Die anderen sind ausgeschaltet. Wird nun in schneller Folge jede Spalte einmal angeschaltet. So entsteht aufgrund der Trägheit des menschlichen Auges ein scheinbar vollständiges Bild, bei dem alle LEDs gleichzeitig leuchten. Wird dieser Zyklus schnell genug durchlaufen, ist das Bild flimmerfrei, was ab ca. 100Hz erreicht wird. In Ausnahmefällen kann jedoch eine bewegte LED-Matrix auch bei höheren Multiplexfrequenzen als flimmernd erscheinen, z.&amp;amp;nbsp;B. LED-Bremsleuchten, LED-Anzeigen an Zügen oder Strassenbahnen.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf der Steuerung ist recht einfach:&lt;br /&gt;
&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C1 an Zeilen R1..R7 anlegen, Spalte C1 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C2 an Zeilen R1..R7 anlegen, Spalte C2 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C3 an Zeilen R1..R7 anlegen, Spalte C3 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C4 an Zeilen R1..R7 anlegen, Spalte C4 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
#alle Spalten ausschalten, Muster für Spalte C5 an Zeilen R1..R7 anlegen, Spalte C5 einschalten&lt;br /&gt;
# Spaltenmultiplexzeit warten&lt;br /&gt;
# Zyklus beginnt bei 1.&lt;br /&gt;
&lt;br /&gt;
Praktisch wird man dazu einen [[Timer]] per [[Interrupt]] verwenden, keine Warteschleifen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LEDmatrix_timing.png|left|thumb|700px|Multiplexzeitdiagramm]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin:1em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!LEDs  ||  IOs  ||  Vorwiderstände &lt;br /&gt;
|-&lt;br /&gt;
|16    ||    8  ||      4      &lt;br /&gt;
|-&lt;br /&gt;
|64    ||   16  ||      8     &lt;br /&gt;
|-&lt;br /&gt;
|1024  ||   64  ||     32     &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Durch Einsatz der Multiplexverfahrens können mit relativ wenigen Ansteuerbauteilen (IO-Pins, Transistoren, Stromquellen) sehr viele LEDs gesteuert werden. Während bei direkter Ansteuerung für jede LED ein IO-Pin sowie eine Stromquelle bzw. Vorwiderstand benötig würde,  ist in einer zweiachsigen LED-Matrix der Aufwand für die Bauteile deutlich geringer:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Anzahl der Bauteile} = \sqrt\text{Anzahl der LEDs}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung==&lt;br /&gt;
&lt;br /&gt;
Der verringerte Aufwand an Bauteilen kommt jedoch nicht ohne Nachteile. Da jede Spalte in einer Matrix mit N Spalten immer nur für 1/N der Zeit für einen vollen Bildaufbau aktiv ist, muss in dieser Zeit die gleiche Lichtmenge (=Energie) abgegeben werden, damit die genauso hell erscheint, wie wenn sie konstant mit Strom versorgt wird. Dazu muss der N-fache Strom fliessen. Demensprechend müssen die Vorwiderstände bzw. Stromquellen dimensioniert sein. Doch das führt zu zwei Problemen.&lt;br /&gt;
&lt;br /&gt;
# Der Pulsstrom durch eine LED kann nicht beliebig gesteigert werden. Genaue Angaben dazu gibt es im Datenblatt. Als grobe Abschätzung kann man sagen, dass die meisten LEDs bis etwa 1:10 gemuxt werden können, darüberhinaus werden die Pulsströme zu hoch (20mA Betriebsstrom =&amp;gt; 200 mA Pulsstrom!)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#Die hohen Pulsströme verkraften die LEDs wirklich nur ganz kurz, sie brauchen die Ausschaltzeit um wieder abzukühlen! D.H. Die Ansteuerung des Multiplex darf NIE stehen bleiben, sonst brennen die LEDs durch! Für die Testphase der Matrix sowie Softwareentwicklung sollte man deshalb die Ströme stark veringern, die LEDs sind dann zwar wesenlich dunkler, überleben aber einen Softwareabsturz der Steuerung. Wenn am Ende alles getestet ist und man sich sicher ist daß die Steuerung funktioniert, kann man den Strom der Matrix wieder auf das volle Niveau erhöhen. Um ganz sicher zu gehen kann man einen Watchdog mit minimaler Laufzeit oder ein [[Monoflop]] verwenden, um im Fehlerfall die Stromversorgung bzw. Ansteuerung der LEDs abzuschalten.&lt;br /&gt;
&lt;br /&gt;
Um die Helligkeit der LEDs im Multiplexbetrieb voll zu nutzen muss meistens ein höherer Strom geschaltet werden, als Mikrocontroller es können. Eine [[LED]] muss aufgrund ihrer Kennlinie an einer Stromquelle betrieben werden. Im einfachsten Fall ist das ein in Reihe geschalteter Widerstand an einer Spannungsquelle. Ob man die Zeilen oder Spalten einer Matrix multiplext ist im Prinzip egal, aber manchmal ist es schlicht logisch sinnvoller. So ist z.B. bei einer LED-Laufschrift mit 8 Zeilen und 40 Spalten es sinnvoll, die Zeilen mit 1:8 zu multiplexen und nicht die Spalten mit 1:40! Generell kann man das in einer Schaltung so erkennen. Die gemultiplexte Dimension hat vor den Leistungsschaltern keine Vorwiderstände bzw. Konstantstromquellen sondern geht direkt an die LEDs. &lt;br /&gt;
&lt;br /&gt;
===Direkt===&lt;br /&gt;
&lt;br /&gt;
In einigen Projekten im Internet sieht man LED-Matritzen direkt per Mikrocontroller angesteuert, ohne Transistoren. Das geht praktisch nur mit Low-Current Bauteilen, sonst sind die LEDs auf Grund des geringen Stroms zu dunkel.&lt;br /&gt;
&lt;br /&gt;
=== Transistoren ===&lt;br /&gt;
&lt;br /&gt;
Das ist der Normalfall. Man kann diskrete [[Transistor|Transistoren]] (z.&amp;amp;nbsp;B. BC846, BC337) benutzen.&lt;br /&gt;
&lt;br /&gt;
Eine praktische Umsetzung kann man hier sehen. Q1-Q8 arbeiten als Emitterfolger ([[Transistor#Kollektorschaltung_(Emitterfolger)|Kollektorschaltung]]), darum gibt es hier auch keine [[Basiswiderstand | Basiswiderstände]]. Q9-Q13 arbeiten ganz einfach in [[Transistor#Emitterschaltung|Emitterschaltung]]. Dadurch braucht man nur NPN Transistoren,  die Schaltung ist dadurch auch relativ schnell. Einziger Nachteil ist ein um ca. 0,5 V höherer Spannungsverlust an Q1-Q8 im Vergleich zu PNP-Transistoren in Emitterschaltung. Das spielt hier aber keine große Rolle, weil bei den roten LEDs mit 2,2V Uf noch ausreichend Spannung für den Vorwiderstand bleibt. Werden z.B. blaue LEDS mit bis zu 4V Uf engesetzt, dann verbleibt für den Widerstand zuwenig Spannung. Dadurch ändert sich schon bei kleinsten Versorgungsspannungsschwankungen der Strom recht stark.&lt;br /&gt;
&lt;br /&gt;
Ein Schieberegister ist im Prinzip ein Seriell-Parallel-Wandler.&lt;br /&gt;
Das hat mit Multiplexbetrieb eigentlich nichts direkt zu tun, es ist vielmehr eine Erweiterung der IO-Pins (siehe auch [[Porterweiterung mit SPI]] und [[AVR-Tutorial: Schieberegister]]).&lt;br /&gt;
&lt;br /&gt;
Eine weitere Schaltung mit Schieberegistern ist im &amp;quot;Retro-Spiel zum Selberbauen&amp;quot; [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong Ping-Pong] von Burkhard Kainka verwendet worden. Hier werden die 10 Zeilen mit Atmega8-Portpins über 100 &amp;amp;Omega; Widerstände [http://www.elo-web.de/elo/mikrocontroller-und-programmierung/ping-pong/ping-pong-selbst-programmieren] gegen 12 Schieberegister-Spalten zweier 4094D CMOS-ICs geschaltet, um eine Matrix aus 120 roten SMD-LEDs zu steuern.&lt;br /&gt;
&lt;br /&gt;
[[Bild:LED_Matrix_8x5.png|thumb|right|250px|Multiplexansteuerung mit Schieberegistern und Transistoren]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Will man nun seine Schaltung optimal betreiben, muss man ausrechnen wieviel Strom geschaltet werden muss. Wie oben bereits beschrieben, teilt sich der gemultiplexte Strom im Verhältnis 1:N auf die LEDs auf, in diesem Beispiel hier 1:5. Der Treiber für die Zeilen muss diesen im Extremfall kontinuierlich an jedem Ausgang zur Verfügung stellen, wenn nämlich alle LEDs der Matrix aktiv sind. Der Treiber für die Spalten ist pro Kanal nur 1:N der Multiplexzeit aktiv, muss aber währenddessen den gesamten Nennstrom der Matrix schalten können! Das sind schnell mal ein paar Ampere, wie die nachfolgenden Beispiele zeigen!&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LEDs: 4mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LEDs: 2,2V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Spalten): 1:5&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Zeilen in der Matrix: 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{Sat}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Transistors, hier Q9-Q13 mit ca. 0,7V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{BE}&amp;lt;/math&amp;gt;: Basis-Emitter-Spannung des High Side Transistors, hier Q1-Q8 ca. 0,7V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Dauerstrom der Zeilentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Pulsstrom der Spaltentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Zeilen &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N = 4mA \cdot 5 = 20mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N \cdot S = 4mA \cdot 5 \cdot 8 = 160mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{Sat} - U_{BE}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{5V-0,7V-0,7V-2,2V}{4mA \cdot 5} \approx 68 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Zeil}^2 \cdot R = 20mA^2 \cdot 68 \Omega = 27mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
Bei grossen Anzeigen mit vielen LEDs werden die Pulsströme bisweilen schon recht hoch. Hier wird man dann mehr auf Treiber (z.&amp;amp;nbsp;B. ULN2803)zurück greifen. Vor allem die Schalter für die gemultiplexte Dimension, hier im Beispiel die Zeilen, müssen sehr große Ströme schalten.&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-ULN-UDN.png|thumb|right|250px|Multiplexansteuerung mit integrierten Treibern]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 15mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 7V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:4&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix 8&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt;: Sättigungsspannung des Low Side Switch, hier IC1 mit ca. 1V&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt;: Sättigungsspannung des High Side Switch, hier IC2 mit ca. 2V&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 15mA \cdot 4 = 60mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 15mA \cdot 4 \cdot 8 = 480mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - U_{IC1} - U_{IC2}-U_F}{I_{Nenn} \cdot N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V-1V-2V-7V}{15mA \cdot 4}=33 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 60mA^2 \cdot 33 \Omega = 119mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
60mA kann IC2 dauerhaft auf jedem Kanal liefern, 500mA Pulsstrom sind für IC1 schon die absolute Grenze laut Datenblatt. Der Spannungsverlust &amp;lt;math&amp;gt;U_{IC1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;U_{IC2}&amp;lt;/math&amp;gt; ist bei diesen relativ alten ICs recht hoch, mit modernen MOSFETs erreicht man hier deutlich kleinere Werte und damit auch kleinere Verlustleistungen bzw. höhere Ströme.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== MOSFETs ===&lt;br /&gt;
&lt;br /&gt;
Bei Strömen über 1A nimmt man heute meist [[FET|MOSFETs]].&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-MOSFET.png|thumb|right|250px|Multiplexansteuerung mit MOSFETs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Die Berechnung erfolgt analog zum vorherigen Beispiel, nur mit dem Unterschied, daß die MOSFETs deutlich kleinere Spannungsabfälle zu verzeichnen haben. Damit die MOSFETs schnell schalten werden [[MOSFET-Übersicht| MOSFET-Treiber]] eingesetzt. Für die P-Kanal MOSFETs nutzt man hier im Beispiel einen echten [[MOSFET-Übersicht##Mosfet-Treiber | MOSFET-Treiber]], die N-Kanal MOSFETS kann man hier mit einem einfachen CMOS-Inverter ansteuern. Das geht bei kleinen Logic Level MOSFETs mit 1-2nF Gatekapazität noch ausreichend schnell, bei größeren MOSFETs ist auch hier ein echter MOSFET-Treiber nötig. Der berühmt-berüchtigte Gatewiderstand kann hier entfallen, die Ausgänge der CMOS-Inverter sind bereits hochohmig genug, um parasitäre Schwingungen zu dämpfen. Nimmt man für den Inverter einen HCT-Typ, so wirkt der gleichzeitig als [[Pegelwandler]] und die Matrix kann mit 3,3V Signalen angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 25mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : 0,25&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, low}&amp;lt;/math&amp;gt;: Einschaltwiderstand der Low Side MOSFETs: 0,13&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;R_V&amp;lt;/math&amp;gt;: Vorwiderstand für LED-Spalten &lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung der Vorwiderstände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 25mA \cdot 8 = 200mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 25mA \cdot 8 \cdot 8 = 1600mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V = \frac{U}{I} = \frac{Vcc - I_{Spl} \cdot R_{DS-ON, high} - I_{Zeil} \cdot R_{DS-ON, low} -U_F}{I_{Spl}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_V=\frac{12V - 0,2A \cdot 0,25 \Omega - 1,6A \cdot 0,13 \Omega -9V}{0,2A} \approx 13 \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl}^2 \cdot R_V = 200mA^2 \cdot 13 \Omega = 520mW&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der gesparte Spannungsabfall über den MOSFETs genutzt, um LEDs mit höherer Flußspannung in Reihe schalten, womit der Wirkungsgrad ansteigt. Liegt die LED-Betriebsspannung über 15V braucht man einen sogenannten [[Treiber | High Side Driver]], weil dann die Gates der P-Kanal MOSFETs nicht mehr direkt angesteuert werden können. Ein einfaches Beispiel findet man [http://www.mikrocontroller.net/attachment/34752/P_FET.png hier].&lt;br /&gt;
&lt;br /&gt;
===Dimmen===&lt;br /&gt;
&lt;br /&gt;
Multiplexen kann auch mit [[PWM]] kombiniert werden. Dabei ist die Multiplexzeit einer Spalte gleich der PWM-Periodendauer. Allerdings kann hier der Rechenaufwand für die CPU schon recht hoch werden, da die meisten Mikrocontroller nicht so viele PWM-Kanäle in Hardware zur Verfügung stellen und die PWM in Software nachgebildet werden muss ([[Soft-PWM]]).&lt;br /&gt;
&lt;br /&gt;
Falls die Multiplexzeit klein genug gewählt wird, kann man in Grenzen auch per gezieltem Ein- und Abschalten in Grenzen eine Dimmfunktion erreichen. Um hier allerdings noch flimmerfreie Ergebnisse zu erzielen, sollte die Multiplexfrequenz mit den geplanten Dimmstufen multipliziert werden (bspw. 16 Dimmstufen bei 100 Hz Multiplexfrequenz = 1600 Hz angepasste Multiplexfrequenz), was die Rechenzeit wiederum schnell in die Höhe treiben kann. Dimmen selbst erreicht man dann mit entsprechend angepassten Schaltzeiten (bspw. 25% Helligkeit = 4x LED an, 12x LED aus bei insgesamt 16 Dimmstufen, dann von vorne).&lt;br /&gt;
&lt;br /&gt;
=== Spezielle ICs ===&lt;br /&gt;
&lt;br /&gt;
Neben den typischen Treiberbausteinen für möglichst hohe Ströme, die weiter unten aufgeführt sind, gibt es auch noch integrierte Lösungen für das direkte Betreiben einer LED-Matrix an der [[SPI]] oder [[I2C]]-Schnittstelle. Beispiele sind hier MAXIM 7219 und 7221 oder AS1100-08/15-18 für 8x8 LED-Matrizen oder 8x8-Segmentanzeigen. Zwischen beiden Modi wird per Software gewechselt. Die ICs bieten einige Vorteile, wie automatische Dimmung und großzügiges Freischaufeln von CPU-Kapazität auf dem Mikrocontroller. Außerdem können die ICs dank SPI kaskadiert werden wie normale [[AVR-Tutorial: Schieberegister|Schieberegister]] und somit eine nahezu unbegrenzte Zahl an LEDs ansteuern. Allerdings ist der Strom für die integrierten Stromsenken auf etwa 50 mA begrenzt, was bei einigen Displays zu wenig sein kann. Hier muss man wieder Vor- und Nachteile abwägen. Weitere ICs bei [http://www.maxim-ic.com Maxim] umfassen Standardfälle wie 5x7 Matrizen oder 7-, 10-, 14-Segment LED-Anzeigen mit 4 bis 16 Stellen. Diese ICs gibt es dann allerdings leider nicht bei den [[Elektronikversender|Standardversandhändlern]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bauteil                  || Beschreibung                          || Bezugsquelle&lt;br /&gt;
|-&lt;br /&gt;
|ULN2803                  || 8fach NPN-Transistorarray, 500mA      ||&lt;br /&gt;
|-&lt;br /&gt;
|ULN2003                  || 7fach NPN-Transistorarray, 500mA      ||&lt;br /&gt;
|-&lt;br /&gt;
|UDN2981                  || 8fach High Side Treiber, 500mA        ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5921                  || 16 Bit-Schieberegister plus Latch&amp;lt;BR&amp;gt; mit Konstantstromsenken, max. 80mA pro Ausgang       ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5922                  &lt;br /&gt;
|| 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 80mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 7 Bit möglich, pinkompatibel zum TLC5921      ||&lt;br /&gt;
|-&lt;br /&gt;
|TLC5940 || 16 Bit-Schieberegister plus Latch mit Konstantstromsenken, max. 120mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, kompatibel mit AS1112 || mouser.com&lt;br /&gt;
|-&lt;br /&gt;
|CAT4016&lt;br /&gt;
|| 16 Bit-Schieberegister/Latch mit Konstantstromsenken(max. 100mA), günstig || Farnell&lt;br /&gt;
|-&lt;br /&gt;
|TPIC6B595&lt;br /&gt;
|| 8-Bit Schieberegister + Leistungstreiber, 500mA      ||&lt;br /&gt;
|-&lt;br /&gt;
|IRF7304                  || 2fach P-Kanal MOSFET, 3,5A, SO-8 Gehäuse ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7219                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|MAX7221                  || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x ||&lt;br /&gt;
|-&lt;br /&gt;
|AS1100-08                || Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit MAX72xx || [http://www.austriamicrosystems.com/AS1106 AS1106]&lt;br /&gt;
|-&lt;br /&gt;
|AS1115/17                || I²C angesteuerter 8x8 Matrizentreiber mit Diagnose &amp;amp; Tastenerkennung|| [http://www.austriamicrosystems.com/AS1115 AS1115]&lt;br /&gt;
|-&lt;br /&gt;
|AS1116/18                || Seriell angesteuerter 8x8 Matrizentreiber mit Diagnose|| [http://www.austriamicrosystems.com/AS1116 AS1116]&lt;br /&gt;
|-&lt;br /&gt;
|AS1119            || I²C angesteuerter 144LEDs Matrizentreiber mit Animationsspeicher, Dignose und ChargePump||[http://www.austriamicrosystems.com/AS1119 AS1119]&lt;br /&gt;
|-&lt;br /&gt;
|AS1130            || I²C angesteuerter 132 LEDs Matrizentreiber mit Animationsspeicher, Scroll Funktion &amp;amp; Dignose||[http://www.austriamicrosystems.com/AS1130 AS1130]&lt;br /&gt;
|-&lt;br /&gt;
|AS1112            || 15V 16Kanal LED Treiber, max. 100mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion, kompatibel mit TLC594x ||[http://www.austriamicrosystems.com/AS1112 AS1112]&lt;br /&gt;
|-&lt;br /&gt;
|AS1121            || 30V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1121 AS1121]&lt;br /&gt;
|-&lt;br /&gt;
|AS1123            || 5V 16Kanal LED Treiber, max. 40mA pro Ausgang&amp;lt;BR&amp;gt;Low Power, Diagnosefunktion ||[http://www.austriamicrosystems.com/AS1123 AS1123]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[bild:LED-Matrix-TLC5921.png|thumb|right|250px|Multiplexansteuerung mit Special-ICs]]&lt;br /&gt;
&lt;br /&gt;
==== Berechnung ====&lt;br /&gt;
&lt;br /&gt;
Der TLC5921 und seine zahlreichen [http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?family=analog&amp;amp;familyId=480&amp;amp;uiTemplateId=NODE_STRY_PGE_T Kollegen] von [http://www.ti.com Texas Instruments] bieten eine komfortable Möglichkeit zur Ansteuerung von LED-Matrizen. Der TLC5921 besitzt 16 Ausgänge, welche als [[Konstantstromquelle]] arbeiten. Der Konstantstrom wird dabei über einen Widerstand eingestellt. Es entfallen somit die Vorwiderstände. Der Vorteil ist, dass Schwankungen der LED-Flußspannung oder Versorgungsspannung ausgeglichen werden, ohne dass die Helligkeit der LEDs sich dabei ändert. Außerdem erlauben die besseren Typen der Baureihe wie z.B. der TLC5922 eine Dimmung der einzelnen Kanäle. Doch Vorsicht! Die zulässige Verlustleistung des ICs ist groß, ca. 4W mit ausreichender [[Kühlkörper#Die_Platine_als_Kühlkörper |Kühlung]], aber nicht endlos. Denn die Restspannung aus Betriebsspannung und LED-Flußspannung fällt über dem IC ab. Als Minimum gilt je nach Strom 0,5-1V, welches über dem TLC5921 abfallen muss, damit er korrekt arbeitet. Nach oben wird die Grenze durch die Verlustleistung und max. Spannung von 17V gesetzt. Weiterhin ist zu beachten, dass hier das Multiplexing der Zeilen und Spalten vertauscht wurde.&lt;br /&gt;
&lt;br /&gt;
Gegeben&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Nenn}&amp;lt;/math&amp;gt;: Nennstrom der LED-Stränge: 10mA&lt;br /&gt;
*&amp;lt;math&amp;gt;U_{F}&amp;lt;/math&amp;gt;: Flußspannung der LED-Stränge: 9V&lt;br /&gt;
*&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: Multiplexverhältnis (Zeilen): 1:8&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: Spalten in der Matrix: 8&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{DS-ON, high}&amp;lt;/math&amp;gt;: Einschaltwiderstand der High Side MOSFETs : 0,25&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Spl}&amp;lt;/math&amp;gt;: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs&lt;br /&gt;
*&amp;lt;math&amp;gt;I_{Zeil}&amp;lt;/math&amp;gt;: Pulsstrom der Zeilentreiber&lt;br /&gt;
*&amp;lt;math&amp;gt;P_V&amp;lt;/math&amp;gt;: Verlustleistung des TLC5921&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Spl} = I_{Nenn} \cdot N = 10mA \cdot 8 = 80mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Zeil} = I_{Nenn} \cdot N \cdot S = 10mA \cdot 8 \cdot 8 = 640mA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V=I_{Spl} \cdot S \cdot U_{Rest} = I_{Spl} \cdot S \cdot (Vcc - U_F - I_{Zeil} \cdot R_{DS-ON, high})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V= 80mA \cdot 8 \cdot (12V - 9V - 1,6A \cdot 0,25 \Omega) = 1{,}66W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[LED cube]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/209988#new Forenbeitrag]: Nachleuchten beim Multiplexen vermeiden&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=%2Bled+%2Bmatrix&amp;amp;forums%5B%5D=1&amp;amp;forums%5B%5D=2&amp;amp;forums%5B%5D=4&amp;amp;forums%5B%5D=6 Beiträge zum Thema LED-Matrix im Forum]&lt;br /&gt;
* [http://members.ziggo.nl/electro1/avr/dotmatrix.htm Dotmatrix mit ATtiny2313 ansteuern, engl.]&lt;br /&gt;
* [http://www.braindrum.de/tools/leddotmatrix/leddotmatrix.htm LED-Dotmatrix mit ATmega16 ansteuern]&lt;br /&gt;
* Open Project [http://www.tiletoy.org/ TileToy] is a modular, electronic game prototype for tangible LED game tiles (PIC). [http://www.youtube.com/watch?v=XVmhlLvJNHc Youtube-Video]&lt;br /&gt;
* [http://www.kalanda.com/scroller-de-7x5-leds-basado-en-micro-attiny2313.html Eine 5x7 Matrix mit ATtiny2313 angesteuert, spanisch]&lt;br /&gt;
* [http://www.saccade.com/writing/projects/Puzzlemation/Puzzlemation.html Modulare Dotmatrixanzeige, engl.]&lt;br /&gt;
* [http://spritesmods.com/?art=ledmatrix Dotmatrix, engl.]&lt;br /&gt;
* [http://www.harbaum.org/till/ledmatrix/ Große LED-Matrix mit RS232 Ansteuerung, engl.]&lt;br /&gt;
* [https://www.das-labor.org/wiki/Blinken_Borgs Blinken_Borgs] Diverse Projekte von &#039;&#039;Das Labor&#039;&#039;&lt;br /&gt;
* [http://www.werkzeugh.at/intern/deflatable-led-matrix/ Eine aufblasbare LED-Matrix!]&lt;br /&gt;
* [http://metalab.at/wiki/MetaLEDs 8x48 LED-Matrix]&lt;br /&gt;
* [http://www.das-labor.org/wiki/Blinken_Borgs LED-Würfel mit 5^3 RGB-LEDs]&lt;br /&gt;
* [http://www.ulrichradig.de/home/index.php/avr/avr-mega-dis LED-Matrix bei Ulrich Radig]&lt;br /&gt;
* [http://www.elo-web.de/elo/entwicklung-und-projekte/ping-pong/laufschrift Eine kleine Laufschrift auf der Ping-Pong-Platine] von Sascha Bader (C, Atmega8)&lt;br /&gt;
* [http://www.sparkfun.com/tutorials/47 12 Fuß (3,6m) Wanduhr auf Sparkfun.com]&lt;br /&gt;
* [http://www.decadecounter.com/vta/articleview.php?item=879 Gigantic 5x7 LED Matrix] by AnubisTTP&lt;br /&gt;
* [http://klautesblog.blogspot.com/search/label/LED%20Matrix Mikes LED Matrix (21 x 21 LEDs)] by klaute&lt;br /&gt;
* [http://blinkenlights.net/ Blinkenlights] keine LEDs, aber groß (CCC)!&lt;br /&gt;
* Die riesige LED Tafel am [http://money.howstuffworks.com/nasdaq-marketsite-tower.htm Time Square] in New York, 105m hoch und 1 MW Spitzenverbrauch!&lt;br /&gt;
* Nochmal ein Artikel zur [http://bits.blogs.nytimes.com/2008/11/20/towering-led-sign-will-light-times-square/ Time Square LED-Wand] &lt;br /&gt;
* [http://wiki.niftylight.de niftylight] open-source Software um LED Matrix Ansteuerung zu erleichtern&lt;br /&gt;
* [http://www.dsw-elektronik.de/Dot-mat1.html DSW-Elektronik], Hersteller elektromechanischer Matrixelemente&lt;br /&gt;
* [http://www.crafted.de/photonenbanner.php LULI Photonenbanner 96x24]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=59809</id>
		<title>VHDL</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=59809"/>
		<updated>2011-08-25T07:08:55Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Wann und warum verwendet man Variablen? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VHDL als Programmiersprache ==&lt;br /&gt;
&lt;br /&gt;
VHDL ist im Grunde eine ganz normale Programmiersprache, die kompiliert und ausgeführt werden kann. In dieser Funktion wird VHDL hauptsächlich zum Schreiben von Simulationen (Testbenches) verwendet. Näheres dazu im Artikel [[VHDL Testbench]].&lt;br /&gt;
&lt;br /&gt;
== VHDL als Hardwarebeschreibungssprache ==&lt;br /&gt;
&lt;br /&gt;
In VHDL lassen sich auch digitale Schaltungen beschreiben. Die Beschreibung wird von einer Synthesesoftware in eine Netzliste umgesetzt. Der grundlegende Unterschied zur Verwendung von VHDL als Programmiersprache ist, dass man nicht beliebigen Code schreiben kann, sondern sich an bestimmte Strukturen halten muss die der Synthesizer kennt und in Hardware umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Wie diese Strukturen im allgemeinen aussehen ist weiter unten beschrieben, Details erfährt man in der Dokumentation der Software, z.&amp;amp;nbsp;B. dem [http://toolbox.xilinx.com/docsan/xilinx9/books/docs/xst/xst.pdf XST User Guide].&lt;br /&gt;
&lt;br /&gt;
== Grundregeln für synthetisierbaren VHDL-Code ==&lt;br /&gt;
&lt;br /&gt;
Folgende Grundregeln sollten vor allem Anfänger auf jeden Fall einhalten:&lt;br /&gt;
&lt;br /&gt;
* Es darf nur zwei Arten von Prozessen geben:&lt;br /&gt;
*# Rein kombinatorische Prozesse (keine Zustandsspeicher):&lt;br /&gt;
*#* Alle Signale die im Prozess gelesen werden in die sensitivity list eintragen&lt;br /&gt;
*#* Jedes Ausgangssignal muss in jedem if-Zweig einen von sich selbst verschiedenen Wert zugewiesen bekommen, damit keine [[Latch]]es entstehen (mein_signal &amp;lt;= mein_signal; ist unzulässig!)&lt;br /&gt;
*#* Keine Taktflankenabfrage&lt;br /&gt;
*# Rein getaktete Prozesse (Flip-Flops als Zustandsspeicher):&lt;br /&gt;
*#* Nur Clk und asynchroner Reset in die sensitivity list&lt;br /&gt;
*#* Maximal ein [[Reset für FPGA/CPLD | Reset]]&lt;br /&gt;
*#* Nur eine Taktflankenabfrage (rising_edge)&lt;br /&gt;
* Nur ein einziger Takt im gesamten Design, nur steigende ODER fallende Taktflanke auswerten. Um eine Flanke eines anderen Signals zu erkennen, siehe [[VHDL Flankenerkennung]].&lt;br /&gt;
* Keine Takte runterteilen, stattdessen [[Taktung FPGA/CPLD#Clock Enable|Clock Enable]]  verwenden.&lt;br /&gt;
* Kein &amp;quot;after&amp;quot;, &amp;quot;wait for&amp;quot; o.ä. verwenden, das ist nicht synthetisierbar&lt;br /&gt;
* Keine shared variables verwenden&lt;br /&gt;
* Variablen nur dann verwenden, wenn man genau verstanden hat was der Unterschied zu einem Signal ist, und sich das Problem nicht auch mit Signalen lösen lässt&lt;br /&gt;
* Kein IEEE.STD_LOGIC_(UN)SIGNED verwenden, sondern IEEE.NUMERIC_STD (siehe [[Rechnen in VHDL]])&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Kombinatorischer Prozess ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(a,b,c)&lt;br /&gt;
begin&lt;br /&gt;
  y &amp;lt;= a + b + c;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Getakteter Prozess ohne Reset ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    x &amp;lt;= a + b + c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
===&amp;lt;code&amp;gt;CLK=&#039;1&#039; and CLK&#039;event&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;rising_edge()&amp;lt;/code&amp;gt;?===&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Bei der Beschreibung von FlipFlops werden je nach Buch/Programmierer zwei unterschiedliche Konstrukte benutzt:&lt;br /&gt;
&lt;br /&gt;
Variante 1 (klassisch):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if clk = &#039;1&#039; and clk&#039;event then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
und Variante 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche ist zu empfehlen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antwort:&#039;&#039;&#039;&lt;br /&gt;
Kurz gesagt bei der Synthese gibt es keine Unterschiede, in der Simulation kleine. Verwende die besser lesbare Variante. Die mit &#039;&#039;rising_edge()&#039;&#039; (bzw. &#039;&#039;falling_edge()&#039;&#039;) gilt allgemein als die bessere (Lesbarkeit und Simulationsgenauigkeit).&lt;br /&gt;
&lt;br /&gt;
Wer es genau wissen will: Die klassische Variante ist nur korrekt für Signale die nur die Werte &#039;1&#039; und &#039;0&#039; annehmen können. Bei Signalen vom Typ std_logic (der Standardtyp für Signale) werden Flanken erkannt, die tatsächlich keine sind.&lt;br /&gt;
Zum Beispiel beim Treiben eines PullUps (&#039;H&#039; -&amp;gt; &#039;1&#039; keine tatsächliche Flanke aber für &#039;&#039;clk = &#039;1&#039; and clk&#039;event&#039;&#039;) oder beim Simulationsstart ohne Initialisierungswert für die Signale (&#039;U&#039; -&amp;gt; &#039;1&#039;).(Signale mit Initialisierungswert werden so deklariert: &#039;&#039;signal a: std_logic := &#039;0&#039;; &#039;&#039;).&lt;br /&gt;
Die Funktionen &#039;&#039;rising_edge()&#039;&#039; und &#039;&#039;falling_edge()&#039;&#039; konvertieren den std_logic Wert vor dem Vergleich auf &#039;1&#039; bzw. &#039;0&#039; und simulieren so keine Flanke wo in der echten Hardware auch keine ist.&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/forum/read-9-391894.html&lt;br /&gt;
&lt;br /&gt;
===Wann und warum verwendet man Variablen?===&lt;br /&gt;
&lt;br /&gt;
* Variablen sind als Zwischenergebnisse / Synonyme für aus Kombinatorik gewonnene Werte / Signale zu verstehen. Sie erhalten jeweils &amp;quot;sofort&amp;quot; nach der Zuweisung ihren neuen Wert, der direkt an anderer Stelle genutzt werden kann - so, als läge eine direkte Verdrahtung vor. Die Nutzung von Variablen entkoppelt somit jegliche Berechung von den zeitlichen Randbedingungen, speziell dem Takt. Damit ist es möglich, komplexe Architekturen und Modellverhalten innerhalb von Simulationen ohne einen Zeitverlust zu berechnen, siehe Beispiele unten.&lt;br /&gt;
&lt;br /&gt;
* Signale erhalten ihren neu zugewiesenen Wert dagegen erst nach dem vollständigen Abarbeiten eines Prozesses, praktisch nach einem Delta-Delay oder nach einer spezifizierten Zeit. Sie repräsentieren eine physikalische Signalkette mit tatsächlichem Datenfluss. Während Variablen daher in einem Prozess gleich weiterverwendet werden können, sind Signale faktisch erst mit dem nächsten Takt aktuell (das Delta-Delay führt dazu, dass der Wert für diesen Durchlauf noch nicht gilt, der nächste Durchlauf des getakteten Prozesses passiert dann erst einen Clockcycle später.&lt;br /&gt;
&lt;br /&gt;
* Bei asynchronen Prozessen wird der Prozess bei der Verwendung von Signalen dann nochmals gestartet ... (oder so oft, so viele voneinander abhängige Signalzuweisungen drin sind), bei Variablen wird er in einem Durchlauf berechnet (Simulationszeit!).&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Signalen&lt;br /&gt;
-- die letzte Anweisung ist gültig und überschreibt alle vorhergehenden Anweisungen&lt;br /&gt;
&lt;br /&gt;
-- steht real in der Signaldefinition über begin&lt;br /&gt;
signal a: std_logic;&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a &amp;lt;= a and b;&lt;br /&gt;
    a &amp;lt;= a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and c, die Zeile zuvor wird ignoriert&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Variablen&lt;br /&gt;
-- Aufeinanderfolgende Anweisungen werden sofort logisch wirksam und in die neue Anweisung einbezogen, die Anweisungen werden somit verkettet&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
  variable a: std_logic;&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a := a and b;&lt;br /&gt;
    a := a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and b and c, Verkettung der Anweisung wie in normalen Programmiersprachen&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Es kann recht unübersichtlich werden, wenn man eine komplexe Berechnung hat und diese mit vielen Klammerebenen verschachtelt direkt in der Signalzuweisung beschreibt. Hier kann es besser sein, den Wert &amp;quot;nach und nach&amp;quot; über Variablen &amp;quot;zusammenzubauen&amp;quot; und erst am Schluss auf ein Signal zuzuweisen.&lt;br /&gt;
&lt;br /&gt;
* Manchmal möchte man gemeinsame Teilausdrücke vorab berechnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Var1 := A + B;&lt;br /&gt;
  Var2 := C + D;&lt;br /&gt;
  Var3 := E + F;&lt;br /&gt;
  Result1 &amp;lt;= Var1 - Var2;&lt;br /&gt;
  Result2 &amp;lt;= Var1 - Var3;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
ist i.d.R. besser als&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Result1 &amp;lt;= (A + B) - (C + D);&lt;br /&gt;
  Result2 &amp;lt;= (A + B) - (E + F);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Wenns komplexer wird, ist es auch einfacher, daran was zu ändern.&lt;br /&gt;
&lt;br /&gt;
* Verschiedenen Synthesetools können manchmal mehr, manchmal weniger gut optimieren. So kann man z.&amp;amp;nbsp;B. durch das Zusammenfassen eines Teilausdruckes eine bessere Optimierung erreichen (Stichwort Resource-Sharing). Z.B.:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    res &amp;lt;= a+b;&lt;br /&gt;
  else -- opcode = sub&lt;br /&gt;
    res &amp;lt;= a-b;&lt;br /&gt;
  end if;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    var1 := b;&lt;br /&gt;
  else&lt;br /&gt;
    var1 := -b;&lt;br /&gt;
  end if;&lt;br /&gt;
  res &amp;lt;= a+var1;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall wird ggf. ein Addierer und ein Subtrahierer (noch&#039;n Addierer) eingebaut und das Ergebniss gemultiplext, im zweiten Fall wird eventuell nur ein Addierer eingebaut und der b-Eingang des Addierers gemultiplext. Sind a und b beispielsweise 32-Bit-Vektoren, dann macht das HW-mäßig schon was aus.&lt;br /&gt;
Gute Synthesetools sollten dies aber mittlerweile automatisch machen, so das in beiden Fällen dasselbe rauskommt (war nicht immer so). (BTW, ich selber tendiere normalerweise zur ersten Variante, da besser lesbar - und man die HW-Implementierung nicht notwendigerweise vorwegnehmen soll, aber da hat jeder seine eigene Meinung zu ...)&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Bei Analogen Filtern ist es oft notwendig, iterative Schleifen zu verwenden, um die Ergebnisse zu erlangen. Nur die Verwendung von Variablen und Loops gestattet es, komplexe Rechenergebnisse von &amp;quot;analoger&amp;quot; Reaktionsgeschwindigkeit vom Simulator zu erlangen, ohne Simulationszeit oder gar Takte vergehen zu lassen.&lt;br /&gt;
&lt;br /&gt;
==== Geschwindigkeit ====&lt;br /&gt;
Simulatoren rechnen i.d.R. mit Variablen schneller als mit Signalen. Hat man also viele Prozesse mit Signalen vs. Variablen in einem großen Design, dann kann das schon was ausmachen ... Siehe auch oben bei asynchronen Prozessen, die mit Signalen ggf. wesentlich öfters durchlaufen werden. Auch wenn also ein System mit Signalen abzubilden ist, so empfiehlt sich der Einsatz von Variablen mitunter dennoch.&lt;br /&gt;
&lt;br /&gt;
Ausnahme: I.d.R. sind nur auf Signalen und getakteten Prozessen basierende Modelle voll und leicht synthesierbar. Soll z.&amp;amp;nbsp;B. ein Modell in einem [[HIL]] System getestet werden, ist die Verwendung von Signalen mit entsprechender Berücksichtigung des timing angezeigt.&lt;br /&gt;
&lt;br /&gt;
==== Anfängerprobleme ====&lt;br /&gt;
Anfänger meinen oft, die unmittelbare Zuweisung eines Werts an eine Variable im Prozess gewinnbringend nutzen zu können. So werden dann ausgiebig Variablen verwendet, und eines der Hauptprobleme von Variablen übersehen: sie können nicht in der Sensitivliste eines Prozesses aufgeführt werden. Von diesem Nebeneffekt sind insbesondere &#039;&#039;speichernde&#039;&#039; Variablen betroffen. Im Beitrag &lt;br /&gt;
http://www.mikrocontroller.net/topic/117630 sind dort ein paar Beispiele aufgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Hauptproblem an diesem Verhalten ist, dass die (fehlerfreie) Simulation nicht mehr zum Syntheseergebnis (das ebenfalls fehlerfrei und ohne Warnungen erzeugt wurde) passt.&lt;br /&gt;
&lt;br /&gt;
=== Kodierschaltungen ===&lt;br /&gt;
Kodierschaltungen (Coder) sind Schaltungen mit einem mehrstelligen Ein- und Ausgang. In der Schaltung werden keine FF oder andere Speicher benutzt. Ein typisches Beispiel ist die Wandlung einer Binärzahl in eine Binär Codierte Dezimalzahl. Eine sehr übersichtliche Schreibweise benutzt ein Konstanten-Feld. &lt;br /&gt;
&lt;br /&gt;
Vor- und Nachteile verschiedener VHDL-Varianten einen Coder zu beschreiben werden [[TTL74185|hier]] besprochen. &lt;br /&gt;
&lt;br /&gt;
===If außerhalb eines Prozesses?===&lt;br /&gt;
If-Bedinungen sind außerhalb eines Prozesses nicht möglich.&lt;br /&gt;
Lösung:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
 vector_or &amp;lt;= &#039;0&#039; when oder_vector = X&amp;quot;0000&amp;quot; else &#039;1&#039;;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Dies nennt der Fachman bedingte Zuweisung (conditional assignment).&lt;br /&gt;
&lt;br /&gt;
=== Alle Leitungen auf &amp;quot;0000..&amp;quot; bzw &amp;quot;1111...&amp;quot; setzen? ===&lt;br /&gt;
&lt;br /&gt;
Auf null setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;0&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf eins setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;1&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vergleich eines std_logic_vector mit einer Konstanten===&lt;br /&gt;
&lt;br /&gt;
Um einen std_logic_vector auf &amp;quot;00000...&amp;quot; oder &amp;quot;1111...&amp;quot; zu vergleichen, kann die (others =&amp;gt; &#039;0&#039;) Schreibweise nicht verwendet werden, weil die Vektorbreite dabei nicht definiert ist. Hier muss also ein Bereich angegeben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (15 downto 0=&amp;gt;&#039;0&#039;) then..&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (VECTOR&#039;range=&amp;gt;&#039;0&#039;) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Diese Schreibweise gilt universell für alle Libs.&lt;br /&gt;
&lt;br /&gt;
Werte ungleich &amp;quot;000..&amp;quot; und &amp;quot;1111...&amp;quot; müssen bei Verwendung der NUMERIC_STD.ALL etwas aufwendiger umgewandelt werden (hier der Wert 77):&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = std_logic_vector(to_unsigned(77,VECTOR&#039;length)) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die herstellerabhängige Synopsis-Lib STD_LOGIC_UNSIGNED.ALL verwendet, kann auch einfach so geschrieben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 0 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Genauso einfach geht ein Vergleich auf z.&amp;amp;nbsp;B. den Wert 77:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 77 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Report von std_logic_vector===&lt;br /&gt;
&lt;br /&gt;
Report kann nur Strings verarbeiten, deswegen muss ein std_logic_vector in einen String verwandelt werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
report integer&#039;image(to_integer(unsigned(rdata)));&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===parallel -&amp;gt; seriell: Schieberegister oder Multiplexer?===&lt;br /&gt;
* http://www.mikrocontroller.net/topic/78556&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
===Kurzreferenzen===&lt;br /&gt;
* http://www.tcnj.edu/~hernande/r/VHDL_QRC__01.pdf - VHDL Quick Reference Card&lt;br /&gt;
* http://www.lrr.in.tum.de/~acher/tgi/uebung/VHDL-Buch.pdf&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/21066/VHDL_Coding_eng.pdf - Design Rules &amp;amp; Coding Style&lt;br /&gt;
&lt;br /&gt;
===Online-Bücher===&lt;br /&gt;
http://de.wikibooks.org/wiki/VHDL&lt;br /&gt;
&lt;br /&gt;
====Deutsch====&lt;br /&gt;
* [http://www.nt-nv.fh-koeln.de/Labor/VhdlEasy/index.html VHDL easy] - deutschsprachige VHDL-Einführung von der FH Köln&lt;br /&gt;
* [https://www-itiv.etec.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/book/download.html Schaltungsdesign mit VHDL] - komplettes Buch als PDF&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/doc/kurzanleitung/vhdl.pdf VHDL Kurzanleitung] - Umfangreiches Buch der Uni Hamburg, deutschsprachig, ca. 110 Seiten &lt;br /&gt;
* [http://www.informatik.uni-ulm.de/ni/Lehre/SS03/ProSemFPGA/VHDL-Grundlagen.pdf VHDL Grundlagen] 15 Seiten Grundlagen, Universität Ulm&lt;br /&gt;
* [http://wwwlrh.fh-bielefeld.de/vhdl_vor/VHDL_VOR.htm Schaltungs-Synthese mit VHDL] eine Einfuehrung&lt;br /&gt;
* [http://www.vhdl-online.de/tutorial/ VHDL Tutorial] - umfangreiches Tutorial zu VHDL&lt;br /&gt;
* [http://de.wikibooks.org/wiki/VHDL VHDL - Wiki - Buch] VHDL Syntax mit vielen Beispielen. Da wiki steht aller Wochen mehr (korrigierter) Inhalt zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
====English====&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/ Hamburg VHDL archive]&lt;br /&gt;
* [http://www.ti.informatik.uni-frankfurt.de/Docs/cook/ VHDL Cookbook] - komplettes Buch&lt;br /&gt;
* [http://www.fpga4fun.com/VHDLTips.html VHDL Tips and Tricks]&lt;br /&gt;
* [http://www.doulos.com/knowhow/vhdl_designers_guide/ The Designer&#039;s Guide to VHDL]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Tutorial: Learn by Example] - viele Beispiele mit Testbenches&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
[[Category:Programmiersprachen]]&lt;br /&gt;
[[Kategorie:VHDL| ]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Programmierbare_Logik&amp;diff=57623</id>
		<title>Programmierbare Logik</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Programmierbare_Logik&amp;diff=57623"/>
		<updated>2011-06-06T19:06:31Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Bücher/Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programmierbare Logik ist eine Möglichkeit, digitale Schaltungen nahezu beliebiger Komplexität von der Digitaluhr über die eigene CPU bis zur Mobilfunk-Basisstation mit einzelnen, preiswerten, integrierten Schaltkreisen aufzubauen. &lt;br /&gt;
&lt;br /&gt;
Die Historie der programmierbaren digitalen Logik reicht von den starren ICs der 74***-Reihe über die schon programmierbaren &amp;quot;Urväter&amp;quot; [[GAL]] und [[PAL]] zu den heute oft eingesetzten [[CPLD]]s zu Hochleistungs-[[FPGA]]s mit intergrierter PowerPC-CPU. &lt;br /&gt;
Heute meint man mit Programmierbarer Logik Bausteine, die in einer Hochsprache wie [[VHDL]] oder [[Verilog]] beschrieben werden, also [[CPLD]]s oder [[FPGA]]s.&lt;br /&gt;
&lt;br /&gt;
Obwohl die Entwicklungsarbeit an einem FPGA der an einem Mikrocontroller ähnelt, sind FPGA- und Software-Entwicklung grundverschiedene Lösungsansätze.&lt;br /&gt;
&lt;br /&gt;
== Hardwarebeschreibungssprachen und Simulation allgemein ==&lt;br /&gt;
&lt;br /&gt;
* [[Hardwarebeschreibungssprachen|Übersicht zu VHDL, Verilog, ABEL etc.]]&lt;br /&gt;
* [http://www.symphonyeda.com/ Ein VHDL Simulator für Linux und Windows, auch mit kostenloser Lizenz] &lt;br /&gt;
* [http://ghdl.free.fr/ OpenSource VHDL Simulator unter GPL für Linux &amp;amp; Windows]&lt;br /&gt;
* [http://icarus.com/eda/verilog/ OpenSource Verilog Simulator unter GPL für Linux &amp;amp; Windows]&lt;br /&gt;
* [[ModelSim| Praxistipps zu ModelSim]]&lt;br /&gt;
* [http://home.nc.rr.com/gtkwave/ GTKWave] ist ein Program mit dem man .vcd Signal dumps ansehen kann. Es ist gerade interessant wenn man Simulatoren wie z.&amp;amp;nbsp;B. ghdl oder Icarus Verilog benutzt, die keine eigene GUI haben.&lt;br /&gt;
&lt;br /&gt;
==Synthese Digitaler Schaltungen, Electronic Design Automatisation (EDA)==&lt;br /&gt;
&lt;br /&gt;
* [[FPGA/CPLD Toolchain | Allgemeine Beschreibung der Arbeitsweise von Synthesewerkzeugen]]&lt;br /&gt;
* [http://www.xilinx.com/ise/logic_design_prod/webpack.htm Xilinx ISE Webpack]&lt;br /&gt;
** [[Xilinx_ISE|Fehler einkreisen]]&lt;br /&gt;
** [[Xilinx ISE: Hinweise zu Versionen|Bugs &amp;amp; Features der einzelnen ISE-Versionen]]&lt;br /&gt;
** [[Xilinx_ISE_Linux|ISE unter Linux]]&lt;br /&gt;
** [[Xilinx_ISE_Tutorial|ISE Tutorial]]&lt;br /&gt;
* [http://www.altera.com/products/software/products/quartus2/qts-index.html Altera Quartus II]&lt;br /&gt;
** [http://www.mikrocontroller.net/forum/read-9-387954.html Timing mit Quartus II:]&lt;br /&gt;
* [http://www.latticesemi.com/products/designsoftware/isplever/index.cfm Lattice ispLEVER]&lt;br /&gt;
* [http://www.actel.com/products/software/default.aspx Actel Libero]&lt;br /&gt;
&lt;br /&gt;
==Beschaltung/Inbetriebnahme/Konfiguration FPGAs==&lt;br /&gt;
&lt;br /&gt;
===Konfiguration allgemein===&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-293892.html Kopierschutz des FPGA Konfigurationsspeichers]&lt;br /&gt;
&lt;br /&gt;
===Konfiguration (Download) Xilinx===&lt;br /&gt;
&lt;br /&gt;
* [[Impact_mask|Fehler bei Konfiguration: &amp;quot;*.mask not found&amp;quot;]]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-395732.html Spannung ROM/FPGA Spartan3]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-385079.html USB Programmierkabel unter Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-360045.html Spartan2 Konfiguration per JTAG beschalten]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-286219.html Selbstbau Programmierkabel]&lt;br /&gt;
* [[media:Parallel_Cable_III.png | Parallel Cable III, verbesserte Version, für alle Xilinxbausteine]]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Xilinx_USB-JTAG-Adapter Selbstbau USB Programmierkabel - Xilinx DLC9G clone]&lt;br /&gt;
&lt;br /&gt;
===Konfiguration Altera===&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-282738.html Selbstbau Programmierkabel]&lt;br /&gt;
&lt;br /&gt;
===Beschaltung allgemein===&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-330299.html Stromaufnahme von FPGAs]&lt;br /&gt;
&lt;br /&gt;
===Beschaltung Xilinx===&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-328386.html Spannungsregler für Spartan3]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-291474.html Unterschiede Spartan3/3E]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-306733.html XC95xxx CPLD: Beschaltung Quarz/Oszillator]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-294326.html Probleme beim Programmieren XC95xxx]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-285009.html Spartan2 Programmierfehler durch falsches PowerUp]&lt;br /&gt;
&lt;br /&gt;
== FPGA/CPLD Aufbau und Funktion ==&lt;br /&gt;
&lt;br /&gt;
* [[CPLD]]&lt;br /&gt;
* [[FPGA]]&lt;br /&gt;
&lt;br /&gt;
=== Xilinx-FPGA Designs ===&lt;br /&gt;
&lt;br /&gt;
*[[MicroBlaze Takt|MicroBlaze max. Taktfrequenz und Leistung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-393058.html MicroBlaze Timingprobleme]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungsboards==&lt;br /&gt;
&lt;br /&gt;
*[[FPGA#Entwicklungsboards|FPGA-Evalboards verschiedener Hersteller]]&lt;br /&gt;
&lt;br /&gt;
*Kleines CPLD Experimentiersystem im Selbstbau [http://www.mikrocontroller.net/topic/116702]&lt;br /&gt;
&lt;br /&gt;
* [[Scalable FPGA Board]]&lt;br /&gt;
&lt;br /&gt;
==Bücher/Links==&lt;br /&gt;
&lt;br /&gt;
* [http://old.xess.com/ho03000.html Tutorials, Beispieldesigns, Makefiles -&amp;gt; eine Fundgrube! (alter Link)]&lt;br /&gt;
* [http://www.alse-fr.com/English/ips.html Beispielcores, Application Notes zu UART,LCD,PWM,Quiz zu VHDL]&lt;br /&gt;
* [http://www.doulos.com/knowhow/vhdl_designers_guide/ Nette Monthly VHDL Columne]&lt;br /&gt;
* [http://www.fpga4fun.com/ Nette kleine Projekte von RS232, I2C, 10BaseT, PCI, bis Oszilloskope]&lt;br /&gt;
*Dokumente über Verilog und System Verilog &lt;br /&gt;
** http://www.sunburst-design.com/papers/&lt;br /&gt;
** http://www.sutherland-hdl.com/papers.html&lt;br /&gt;
* [http://www.iapetus.ch/article5.html Quine Mc Cluskey] vereinfacht Digitalschaltungen analog dem Verfahren der [http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm Karnaugh-Veith-Diagramme (&amp;gt;Wikipedia)]. Durch Einsatz des numerischen [http://de.wikipedia.org/wiki/Verfahren_nach_Quine_und_McCluskey Quine und Mc Cluskey Verfahrens (&amp;gt;Wikipedia)] können Schaltungen mit maximal 16 Eingängen und Ausgängen bearbeitet werden. Das Resultat der Berechnung kann als Schema, Tabelle oder Formel ausgegeben werden. (98/2000/XP/(Vista?), Freeware)&lt;br /&gt;
&lt;br /&gt;
== Editoren ==&lt;br /&gt;
&lt;br /&gt;
Immer wieder wird hier nach einem guten VHDL Editor gefragt. Zu Empfehlen ist der Crimson Editor, wer etwas mehr Power mag (allerdings auch mehr Einarbeitungszeit) nimmt Emacs. Emacs gibt es für Linux, Unix, und auch für [http://www.gnu.org/software/emacs/windows/ntemacs.html Windows].&lt;br /&gt;
Sehr empfehlen kann ich noch die [http://ecb.sourceforge.net/ ECB Erweiterung]. Unter Debian GNU Linux ist Emacs und ECB enthalten! Emacs ist sehr mächtig, leider ist die Lernkurve anfangs sehr flach. Hier gibt es ein [http://book.chinaunix.net/special/ebook/oreilly/LearningGnuEmacs/ eBook] zu Emacs. &lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/9 Bereich FPGA, VHDL &amp;amp; Co. auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
== Artikel aus der Kategorie FPGA &amp;amp; Co. ==&lt;br /&gt;
&amp;lt;ncl style=compact maxdepth=2 headings=bullet headstart=2&lt;br /&gt;
      showcats=1 showarts=1&amp;gt;FPGA und Co&amp;lt;/ncl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Royer_Converter&amp;diff=49550</id>
		<title>Royer Converter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Royer_Converter&amp;diff=49550"/>
		<updated>2010-07-27T10:59:07Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Leistungsoptimierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein Royer Converter ist ein Sinus-Leistungsozillator. Er wird im Wesentlichen als Schaltnetzteil verwendet.&lt;br /&gt;
&lt;br /&gt;
== Geschichtliches ==&lt;br /&gt;
&lt;br /&gt;
Der Name geht auf G.H. Royer zurück, welcher diese Schaltung im Jahr 1954 entwickelte. Die originale Schaltung arbeitet mit einem [http://de.wikipedia.org/wiki/Trafo Trafo] mit [http://de.wikipedia.org/wiki/Ferrite Ferritkern], welcher zum Umschalten in die Sättigung getrieben wird. Das Ausgangssignal ist rechteckförmig. Die hier vorgestellte Version arbeitet jedoch mit einem Trafo, welcher nicht in die Sättigung geht und mittles LC [http://de.wikipedia.org/wiki/Schwingkreis Schwingkreis] ein Sinussignal erzeugt. Der Trafo kann sogar als Luftspule ohne Kern ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau ist sehr einfach und robust. Zwei Transistoren ([[FET|MOSFETs]] oder [[Transistor|Bipolar]]) werden wechselseitig geschaltet (Gegentaktbetrieb, engl. push pull), und damit abwechselnd die eine und die andere Spulenhäfte der Primärwicklung von Strom durchflossen. Die Schaltung ist selbstschwingend, d.h. das Steuersignal wird direkt aus dem Trafo zurückgewonnen. Damit schwingt sie immer optimal auf Resonanz, ohne Abgleich von Bauteiltoleranzen und auch bei Alterung oder Temperaturänderung. Die Frequenz wird durch die Induktivität der Primärwicklung und den Kondensator C2 bestimmt (Parallelschwingkreis). Die Drosselspule L1 sorgt dafür, dass die Betriebsspannung wechselspannungsmäßig von der Mittelanzapfung von TR1 entkoppelt wird, sie wirkt als [[Konstantstromquelle]].&lt;br /&gt;
&lt;br /&gt;
[[bild:royer_bipolar.png | thumb | 670px | left | Schaltplan des Royer Converters]]&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
*Einfacher, robuster Aufbau&lt;br /&gt;
*Sinusförmige Strom- und Spannungsverläufe&lt;br /&gt;
*Transistoren schalten im Nulldurchgang der Spannung, dadurch geringe Schaltverluste und Störstrahlung&lt;br /&gt;
*Bei ausreichend großer Streuinduktivität zwischen Primär- und Sekundärwicklung ist die Schaltung kurzschlussfest.&lt;br /&gt;
*Vollkommen unempfindlich gegenüber Streuinduktivitäten des Trafos (im Gegensatz zu den meisten anderen Schaltnetzteiltopologien)&lt;br /&gt;
&lt;br /&gt;
Besonders der letzte Punkt ist sehr interessant. Auf Grund des Aufbaus und der Funktion wird sämtliche Energie im Magnetfeld, welche nicht über die Sekundärspule ausgekoppelt wird, wieder in den Schwingkreis zurückgeführt. Damit geht nur sehr wenig Energie verloren, egal wie gut die Kopplung zwischen Sekundär- und Primärspule ist.&lt;br /&gt;
&lt;br /&gt;
Der Trafo TR1 kann sehr verschieden aufgebaut sein. In einem Inverter für [http://de.wikipedia.org/wiki/Leuchtr%C3%B6hre CCFLs] ist es ein normaler Trafo mit Ferritkern. In anderen Anwendungen kann es aber auch ein kernloser Trafo sein, bei dem es zwischen Primärspule und Sekundärspule einen grossen Abstand gibt ([http://de.wikipedia.org/wiki/Induktive_%C3%9Cbertragung Kontaktlose Energieübertragung]).&lt;br /&gt;
&lt;br /&gt;
== Ein praktisches Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Auf Grund der Unempfindlichkeit der Schaltung gegenüber Streuinduktivitäten ist diese Schaltung ideal für einen Trafo ohne Kern und mit grossem Abstand zwischen Primär- und Sekundärspule. Damit kann kontaktlos recht viel Energie übertragen werden. Anwendungen sind z.&amp;amp;nbsp;B. die Ladestation elektrischer Zahnbürsten oder ein Rotationstrafo für eine [http://www.google.de/cse?q=propelleruhr Propelleruhr]. Für Letzteres soll dieses Beispiel hier dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung benutzt einfach beschaffbare Bauteile. Der Trafo wird selber gewickelt, ist aber auch vollkommen unkritisch. Wie im Bild zu sehen, wurde absichtlich ein recht grosser Luftspalt zwischen Primär- und Sekundärspule gelassen, um die Leistungsfähigkeit der Schaltung zu demonstrieren. Die Primärwicklung ist [http://de.wikipedia.org/wiki/Bifilar bifilar] gewickelt, d.h. man nimmt den Draht doppelt und wickelt damit gleichzeitig beide Spulenhälften, welche man dann phasenrichtig verschaltet. Dadurch verbessert sich die Kopplung, das ist hier wichtig. Der Trafo hat folgende Parameter. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Wickeldaten&#039;&#039;&#039; &lt;br /&gt;
|- &lt;br /&gt;
! Wicklung       || Windungszahl || Drahtdurchmesser [mm] || Durchmesser [mm] || Induktivität [µH]&lt;br /&gt;
|-&lt;br /&gt;
| Primär         || 2x10           || 0,55   || 80 || 70&lt;br /&gt;
|-&lt;br /&gt;
| Steuer         || 1              || 0,2    || 80 || ---&lt;br /&gt;
|-&lt;br /&gt;
| Sekundär       || 13             || 0,55   || 65 || 23&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Stückliste&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Wert || Reichelt Bestellnummer&lt;br /&gt;
|-&lt;br /&gt;
| T1, T2  || BC337 || [http://www.reichelt.de/?;ARTICLE=4986; 337-25] &lt;br /&gt;
|-&lt;br /&gt;
| L1 || 330µH; 0,5A|| [http://www.reichelt.de/?ARTICLE=1123; 09P 330µ]&lt;br /&gt;
|-&lt;br /&gt;
| C1 || 100µF, 25V|| [http://www.reichelt.de/?ARTICLE=15102; RAD 100/25]&lt;br /&gt;
|-&lt;br /&gt;
| C2 || 33nF, 100V|| [http://www.reichelt.de/?ARTICLE=31975; MKP-10-630 33N]&lt;br /&gt;
|-&lt;br /&gt;
| C3 || 6,8µF, 50V|| [http://www.reichelt.de/?ARTICLE=31926; MKS-2 6,8µ]&lt;br /&gt;
|-&lt;br /&gt;
| R1 || 2k2, 1/4W|| [http://www.reichelt.de/?ARTICLE=11586; METALL 2,21K]&lt;br /&gt;
|-&lt;br /&gt;
| R2 || 22R, 5W|| [http://www.reichelt.de/?ARTICLE=2611; 5W AXIAL 22]&lt;br /&gt;
|-&lt;br /&gt;
| D1-4 || 1N5818|| [http://www.reichelt.de/?ARTICLE=41849; 1N 5818]&lt;br /&gt;
|-&lt;br /&gt;
| TR1 || CuL, 0,5mm || [http://www.reichelt.de/?;ARTICLE=57182 CUL 100/0,50] &lt;br /&gt;
|}&lt;br /&gt;
[[bild:royer_prop_aufbau.jpg | thumb | 640px | left | Praktischer Aufbau]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
Mit 12V Eingangsspannung beträgt die Spannungsamplitude im Primärkreis ziemlich genau 38V. Der Leerlaufstrom der Schaltung beträgt 36mA. ABER! Der Leerlaufstrom im Schwingkreis beträgt 580mA(eff), die Blindleistung 15,6VA! Hier wird klar, warum sowohl die Primärspule als auch C2 sehr verlustarm sein müssen. Die Resonanzfrequenz beträgt 105 kHz. Damit wurden folgende Messwerte erreicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!Belastung	|| Eingangsstrom&amp;lt;br&amp;gt;[mA] || Ausgangsstrom&amp;lt;br&amp;gt;[mA]	|| Ausgangsspannung&amp;lt;br&amp;gt;[Veff] || Ausgangsleistung&amp;lt;br&amp;gt;[W] || Wirkungsgrad&amp;lt;br&amp;gt;[%]&lt;br /&gt;
|-&lt;br /&gt;
| Leerlauf               || 36  || 	0  || 7,8 || 0 ||  0&lt;br /&gt;
|-&lt;br /&gt;
| 22 &amp;amp;Omega;                  || 220	|| 320	|| 7	|| 2,2 || 84&lt;br /&gt;
|-&lt;br /&gt;
| Gleichrichter + 22 &amp;amp;Omega; || 190	|| 270	|| 6	|| 1,6 || 71&lt;br /&gt;
|-&lt;br /&gt;
| 10 &amp;amp;Omega;                || 250 || 490  || 4,9  || 2,4 || 80&lt;br /&gt;
|-&lt;br /&gt;
| Kurzschluß             || 60  || 650  || 0    || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
Nach Gleichrichtung mit schnellen Schottkydioden und Filterung bleiben bei 22 Ohm Last noch ca. 6V Gleichspannung übrig, genug um mit einem Low Drop Spannungsregler stabile 5V für einen Mikrocontroller bereitzustellen. Selbst bei der recht hohen Ausgangsleistung bleiben alle Bauteile kühl. Dabei werden nur recht kleine Transistoren verwendet. Das zeigt umso mehr die Leistungsfähigkeit der Schaltung. Bei optimaler Leistungsanpassung mit 10 &amp;amp;Omega; Last kann man 2,4W aus dem Trafo entnehmen. Diese Leistung wird vor allem durch den recht geringen Koppelfaktor von nur 0,45 begrenzt. Dieser kommt allerdings dem Kurzschlussfall zu gute, hier beträgt die Stromaufnahme der Schaltung nur 60mA, die Resonanzfrequenz steigt nur mässig auf 123kHz. Prinzipiell ist diese Schaltung bis in den Bereich von mehreren kW Leistung skalierbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
*Der Kondensator C2 wird auch im Leerlauf von einem recht hohen Strom durchflossen. Deshalb muss hier auf jeden Fall ein verlustarmer Typ eingesetzt werden. Entweder ein [http://de.wikipedia.org/wiki/Folienkondensator Folienkondensator] mit Polypropylen als Dielektrikum (MKP oder FKP) oder ein [http://de.wikipedia.org/wiki/Keramikkondensator Keramikkondensator] aus COG oder NP0. Andere Typen (Folie MKS, Keramik X7R, Z5U etc.) gehen &#039;&#039;&#039;nicht&#039;&#039;&#039;, denn hier werden zu hohe dielektrische Veluste im Kondensator erzeugt, welche diesen erhitzen und irgendwann zerstören. Die Verluste von X7R sind ca. 20mal höher als von NP0!&lt;br /&gt;
*Die Transistoren sollten nur mässig überdimensioniert sein, denn Transistoren mit sehr hohen Kollektorströmen sind meist auch recht langsam.&lt;br /&gt;
*Die Transistoren müssen mindestens eine Sperrspannung von &amp;lt;math&amp;gt;\pi \cdot U_{ein}&amp;lt;/math&amp;gt; aushalten, denn das ist die exakte Amplitude der Schwingung im Primärkreis. Praktisch sollte man aber mindestens 20% und mehr Reserve einplanen.&lt;br /&gt;
*Der [[Basiswiderstand]] muss experimentell ermittelt werden. Er muss so ausgelegt sein, dass die Transistoren beim Schalten nur &#039;&#039;&#039;schwach&#039;&#039;&#039; in die Sättigung gehen, um schneller wieder abschalten zu können (Stichwort Speicherzeit, engl. storage time).&lt;br /&gt;
*Die Drossel L1 sollte ca. den 2..3fachen Induktivitätswert der Primärwicklung haben. Je mehr, umso besser. Sie darf bei vollem Laststrom nicht in die Sättigung gehen, da dann ihre Induktivität stark absinkt.&lt;br /&gt;
* Man sollte &#039;&#039;&#039;keine&#039;&#039;&#039; [[Potentiometer | Drahtpotis]] zur Lastvariation nutzen. Die haben soviel Induktivität (im Test 12µH, =8&amp;amp;Omega; bei 105kHz), dass die dadurch den Maximalstrom ungewollt verringern. Selbst einfache Drahtwiderstände sind mit 3µH/2&amp;amp;Omega; induktivem Anteil schon ungünstig.&lt;br /&gt;
*Die Spitze-Spitze-Spannung der Steuerwicklung darf ca. 5V nicht überschreiten, weil diese als Sperrspannung für die Transistoren wirksam wird. Die meisten Bipolartransistoren verkraften max. 5V Sperrspannung zwischen Basis und Emitter.&lt;br /&gt;
*Schwingt die Schaltung nicht an (Strombegrenzung am Netzteil einstellen!), ist in den meisten Fällen die Steuerwicklung verpolt.&lt;br /&gt;
*Im Kurzschlussfall der Sekundärwicklung reduziert sich die Induktivität der Primärwicklung auf die Streuinduktivität, was zu einer Frequenzerhöhung führt. Durch die höhere Frequenz stellt die Streuinduktivität einen höheren Blindwiderstand dar, welcher den Strom wirkungsvoll begrenzt. Aufgrund der höheren Frequenz fließt allerdings ein größerer Strom im Schwingkreis. Verwendet man also diesen Zustand, dann muss die Schaltung für die höheren Belastungen ausgelegt sein. Je kleiner der Koppelfaktor, umso besser die Kurzschlussfestigkeit. Die nachfolgende Tabelle gibt die Erhöhung des Eingangsstroms sowie der Resonanzfrequenz beim Kurzschluss in Abhängigkeit des Koppelfaktors an.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Koppelfaktor &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Faktor gegenüber Leerlauf&lt;br /&gt;
|-&lt;br /&gt;
! Resonanzfrequenz || Eingangsstrom&lt;br /&gt;
|-&lt;br /&gt;
|0,01 || 1,0 || 1,0&lt;br /&gt;
|-&lt;br /&gt;
|0,1 || 1,1 || 1,1&lt;br /&gt;
|-&lt;br /&gt;
|0,2 || 1,1 || 1,3&lt;br /&gt;
|-&lt;br /&gt;
|0,5 || 1,4 || 2,0&lt;br /&gt;
|-&lt;br /&gt;
|0,6 || 1,6 || 2,5&lt;br /&gt;
|-&lt;br /&gt;
|0,7 || 1,8 || 3,3&lt;br /&gt;
|-&lt;br /&gt;
|0,8 || 2,2 || 5&lt;br /&gt;
|-&lt;br /&gt;
|0,9 || 3,2 || 10&lt;br /&gt;
|-&lt;br /&gt;
|0,95 || 4,5 || 20&lt;br /&gt;
|-&lt;br /&gt;
|0,99 || 10 || 100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Formeln zum Royer Converter ==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;f_r=\frac{1}{2 \pi \sqrt{L_{pri} C_2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;U_p = \pi \cdot U_{ein}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_p = U_{ein} \cdot \pi \sqrt{\frac{C}{L}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;k = \frac {U_{aus}}{\pi \cdot U_{ein}} \cdot \frac {N_{pri}}{N_{sek}}&amp;lt;/math&amp;gt; (im Leerlauf gemessen)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;k = \sqrt{1-\frac{L_{Pri-K}}{L_{Pri-0}}}&amp;lt;/math&amp;gt; (mit L-Meter gemessen)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R1 \sim \frac{\beta _{I_N} \cdot U_{ein}}{I_N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N_{steu} \le \frac{5 \cdot N_{Pri}}{2\pi \cdot U_{ein}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{max}=\frac{(\pi \cdot U_{ein} \cdot k)^2 \sqrt{L_{pri} \cdot C_2 (1-k^2)}}{4 \cdot L_{pri} \cdot (1-k^2)}&amp;lt;/math&amp;gt; (Näherungsformel)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{opt}=(1-k^2)(\frac{N_{sek}}{N_{pri}})^2 L_{pri} \cdot 2\pi \cdot f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
! Formelzeichen	|| Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, f_r&amp;lt;/math&amp;gt; || Resonanzfrequenz im Leerlauf &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri}&amp;lt;/math&amp;gt; || Induktivität der Primärwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, C2&amp;lt;/math&amp;gt; || Kapazität des Primärschwingkreises&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_p&amp;lt;/math&amp;gt; || Spitzenspannung im Resonanzkreis &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, I_p&amp;lt;/math&amp;gt; || Spitzenstrom im Resonanzkreis &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, k&amp;lt;/math&amp;gt; || Koppelfaktor zwischen Primär- und Sekundärwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri-0}&amp;lt;/math&amp;gt; || Primärinduktivität bei Leerlauf der Sekundärwicklung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri-K}&amp;lt;/math&amp;gt; || Primärinduktivität bei Kurzschluss der Sekundärwicklung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_{ein}&amp;lt;/math&amp;gt; || Eingangsspannung des Royer Converters (Gleichspannung)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_{aus}&amp;lt;/math&amp;gt; || Ausgangsspannung des Royer Converters (Wechselspannung, Spitzenwert)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, R1&amp;lt;/math&amp;gt; || Basiswiderstand&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, I_N&amp;lt;/math&amp;gt; || Nennstrom des Royer Converters am Eingang&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, \beta _{I_N}&amp;lt;/math&amp;gt; || Stromverstärkung der Transistoren bei Nennstrom&amp;lt;br&amp;gt;Achung! Die Stromverstärkung sinkt bei höheren Strömen deutlich, ins Datenblatt schauen.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, N_{steu}&amp;lt;/math&amp;gt; || Windungszahl der Steuerwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, P_{max}&amp;lt;/math&amp;gt; || Maximale Ausgangsleistung bei Leistungsanpassung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, R_{opt}&amp;lt;/math&amp;gt; || Optimaler Lastwiderstand für Leistungsanpassung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Ganze ist auch als [[media:Royer_Converter.xls | Exceltabelle]] zur leichten Anwendung verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Leistungsoptimierung ==&lt;br /&gt;
&lt;br /&gt;
Wie kann ich den Wirkungsgrad sowie die Ausgangsleistung für meine Anwendung optimieren?&lt;br /&gt;
&lt;br /&gt;
* Die Eingangsspannung soll möglichst hoch sein.&lt;br /&gt;
* Der Koppelfaktor soll möglichst hoch sein. Das erreicht man durch&lt;br /&gt;
** Flache Spulen mit grossem Durchmesser und kleinem Abstand (parallele Spulen)&lt;br /&gt;
** Konzentrische (ineinandergestapelte) Spulen mit geringem Luftspalt zwischen den Spulen&lt;br /&gt;
** Einsatz von Ferritkernen (Schalenkerne, Stäbe etc.) zur Bündelung des Magnetfeldes&lt;br /&gt;
* Wenn man die Sekundärwicklung mit einem parallel geschalteten Kondensator auf Resonanz mit der Primärwicklung abgleicht, kann man den scheinbaren Kopplungsfaktor deutlich erhöhen. Man muss dabei beachten, dass die Ausgangsspannung ohne Last stark ansteigt (Prinzip der [http://de.wikipedia.org/wiki/Teslaspule Teslaspule]). Unter Last verhält sich der Ausgang dann nahezu wie eine [[Konstantstromquelle]]. Auch für diesen zusätzlichen Kondensator gilt das Gleiche wie C2, er muss sehr verlustarm sein. Es gilt&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;L_{Prim} \cdot C_2 = L_{Sek} \cdot C_{Sek}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Das Verhältnis &amp;lt;math&amp;gt;C/L&amp;lt;/math&amp;gt; soll möglichst hoch sein. Verdoppelt man die Kapazität und reduziert gleichzeitig die Primärinduktivität um den Faktor zwei (Windungszahl * 0,7), verdoppelt sich die maximal verfügbare Leistung. Der Preis dafür sind doppelt so hohe Leerlaufströme im Schwingkreis und damit ca. 2,8mal so hohe Leerlaufverluste (bei gleichem Drahtquerschnitt, P = I^2 * R).&lt;br /&gt;
* Die Resonanzfrequenz soll möglichst niedrig sein, daduch veringern sich die induktiven Widerstände der Streuinduktivitäten, welche den Strom und damit die Leistung begrenzen.&lt;br /&gt;
* Der Drahtquerschnitt der Primärwicklung muss möglichst gross sein, denn hier fließen sehr hohe Ströme. Allerdings bewirkt die meist recht hohe Resonanzfrequenz auf grund des [http://de.wikipedia.org/wiki/Skineffekt Skineffekts] eine Verringerung des effektiven Drahtquerschnitts. Ausserdem lassen sich dicke, massive Kupferdrähte eher schlecht wickeln. Darum verwendet man oft [http://de.wikipedia.org/wiki/Hochfrequenzlitze HF-Litze], welche aus sehr vielen, sehr dünnen, gegeneinander isolierten Drähten besteht. Diese lässt sich deutlich besser wickeln und wirkt dem Skineffekt entgegen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Spule]]&lt;br /&gt;
* [[Transformatoren und Spulen]]&lt;br /&gt;
&lt;br /&gt;
== Diskussionen im Forum ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/118124#new Verwendung in einem Induktionsofen, MOSFETs als Schalter]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/151538#new Verwendung in einem Induktionsofen, neuer Thread]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/61266/Induktive_Energie_bertragung.pdf Dokument über drahtlose Energieübertragung]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/80808#675198 Komplettes Projekt einer Propelleruhr und lange Diskussion]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/61706#489279 Noch eine Propelleruhr]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/155778#1529891 Royer Converter mit Schalenkernen und 20W Ausgangsleistung]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/152785#1540938 Royer Converter mit Luftspulen und 14W Ausgangsleistung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/152785#1712213 Kleiner Royer Converter für einen Propellerglobus]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.serious-technology.de/kleiner-wandler.htm Sehr ausführliche Beschreibung des Aufbaus und Berechnung der Komponenten]&lt;br /&gt;
*[http://www.serious-technology.de/ernsthafter_wandler.htm Das Ganze nochmal in Groß]&lt;br /&gt;
*[http://mitglied.lycos.de/bk4/ezvs.htm MOSFET-Variante mit viel Beschreibung]&lt;br /&gt;
*[http://www.epcos.de/web/generator/Web/Sections/Components/Page,locale=nn,r=263286,a=422456.html noch eine MOSFET-Variante, mit kleineren Fehlern im Text (geschrieben vom Marketing?)]&lt;br /&gt;
*[[media: an14.pdf | Application Note von Zetex, englisch]]&lt;br /&gt;
*[[media: dn164f.pdf | Design Note von Linear Technology, englisch]]&lt;br /&gt;
*[http://4hv.org/e107_plugins/forum/forum_viewtopic.php?74096.0 Schönes Projekt zur kontaktlosen Energieübertragung]&lt;br /&gt;
*[http://www.youtube.com/watch?v=2ODW-ntPHSU Video zum Projekt]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Uhr&amp;diff=45146</id>
		<title>AVR-Tutorial: Uhr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Uhr&amp;diff=45146"/>
		<updated>2010-03-24T10:38:06Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Der CTC-Modus des Timers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine beliebte Übung für jeden Programmierer ist die Implementierung einer Uhr. Die meisten Uhren bestehen aus einem Taktgeber und einer Auswerte- und Anzeigevorrichtung. Wir wollen hier beides mittels eines Programmes in einem Mikrocontroller realisieren. Voraussetzung für diese Fallstudie ist das Verständnis der Kapitel über&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: LCD| Ansteuerung eines LC-Displays]]&lt;br /&gt;
* [[AVR-Tutorial: Timer| Timer]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Funktion ==&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe des Taktgebers, der uns einen möglichst konstanten und genauen Takt liefert, übernimmt ein Timer. Der Timer ermöglicht einen einfachen Zugang zum Takt, die der AVR vom Quarz abgreift. Wie schon im Einführungskapitel über den [[AVR-Tutorial:_Timer|Timer]] wird dazu ein Timer Overflow Interrupt installiert und in diesem Interrupt wird die eigentliche Uhr hochgezählt. Die Uhr selbst besteht aus 4 Registern. 3 davon repräsentieren die Sekunden, Minuten und Stunden unserer Uhr. Nach jeweils einer Sekunde wird das Sekundenregister um 1 erhöht. Sind 60 Sekunden vergangen, dann wird das Sekundenregister wieder auf 0 gesetzt und dafür das Minutenregister um 1 erhöht (Überlauf). Nach 60 Minuten werden die Minuten wieder auf 0 gesetzt und für diese 60 Minuten eine Stunde mehr gezählt. Nach 24 Stunden schliesslich werden die Stunden wieder auf 0 gesetzt, ein ganzer Tag ist vergangen.&lt;br /&gt;
&lt;br /&gt;
Aber wozu das 4. Register?&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller wird mit 4MHz betrieben. Bei einem Teiler von 1024 zählt der Timer also mit 4000000 / 1024 = 3906.25 Pulsen pro Sekunde. Der Timer muss einmal bis 256 zählen, bis er einen Overflow auslöst. Das heist, es ereignen sich 3906.25 / 256 = 15.2587 Overflows pro Sekunde. Die Aufgabe des 4. Registers ist es nun diese 15 Overflows zu zählen. Bei Auftreten des 15.ten Overflow ist 1 Sekunde vergangen. Dass dies nicht exakt stimmt, da ja die Division auch Nachkommastellen aufwies, wird im Moment der Einfachheit halber ignoriert. In einem späteren Abschnitt wird darauf noch eingegangen.&lt;br /&gt;
&lt;br /&gt;
Im Overflow Interrupt wird also diese Kette von Zählvorgängen auf den Sekunden, Minuten und Stunden durchgeführt und anschliessend zur Anzeige gebracht. Dazu werden die in einem vorhergehenden Kapitel entwickelten [[AVR-Tutorial:_LCD|LCD Funktionen]] benutzt.&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
.def flag  = r19&lt;br /&gt;
 &lt;br /&gt;
.def SubCount = r21&lt;br /&gt;
.def Sekunden = r22&lt;br /&gt;
.def Minuten  = r23&lt;br /&gt;
.def Stunden  = r24&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
        rjmp    main                ; Reset Handler&lt;br /&gt;
.org OVF0addr&lt;br /&gt;
        rjmp    timer0_overflow     ; Timer Overflow Handler&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp1&lt;br /&gt;
        ldi     temp1, LOW(RAMEND)  ; Stackpointer initialisieren&lt;br /&gt;
        out     SPL, temp1&lt;br /&gt;
    &lt;br /&gt;
        rcall   lcd_init&lt;br /&gt;
        rcall   lcd_clear&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, (1&amp;lt;&amp;lt;CS02) | (1&amp;lt;&amp;lt;CS00)   ; Teiler 1024&lt;br /&gt;
        out     TCCR0, temp1&lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, 1&amp;lt;&amp;lt;TOIE0     ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp1&lt;br /&gt;
 &lt;br /&gt;
        clr     Minuten             ; Die Uhr auf 0 setzen&lt;br /&gt;
        clr     Sekunden&lt;br /&gt;
        clr     Stunden&lt;br /&gt;
        clr     SubCount&lt;br /&gt;
        clr     Flag                ; Merker löschen&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
 &lt;br /&gt;
loop:&lt;br /&gt;
        cpi     flag,0&lt;br /&gt;
        breq    loop                ; Flag im Interrupt gesetzt?&lt;br /&gt;
        ldi     flag,0              ; flag löschen&lt;br /&gt;
  &lt;br /&gt;
        rcall   lcd_clear           ; das LCD löschen&lt;br /&gt;
        mov     temp1, Stunden      ; und die Stunden ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; zwischen Stunden und Minuten einen &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Minuten      ; dann die Minuten ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; und noch ein &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Sekunden     ; und die Sekunden&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
&lt;br /&gt;
        rjmp    loop&lt;br /&gt;
 &lt;br /&gt;
timer0_overflow:                    ; Timer 0 Overflow Handler&lt;br /&gt;
&lt;br /&gt;
        push    temp1               ; temp 1 sichern&lt;br /&gt;
        in      temp1,sreg          ; SREG sichern&lt;br /&gt;
        push    temp1&lt;br /&gt;
&lt;br /&gt;
        inc     SubCount            ; Wenn dies nicht der 15. Interrupt&lt;br /&gt;
        cpi     SubCount, 15        ; ist, dann passiert gar nichts&lt;br /&gt;
        brne    end_isr&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     SubCount            ; SubCount rücksetzen&lt;br /&gt;
        inc     Sekunden            ; plus 1 Sekunde&lt;br /&gt;
        cpi     Sekunden, 60        ; sind 60 Sekunden vergangen?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht kann die Ausgabe schon&lt;br /&gt;
                                    ; gemacht werden&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Sekunden            ; Sekunden wieder auf 0 und dafür&lt;br /&gt;
        inc     Minuten             ; plus 1 Minute&lt;br /&gt;
        cpi     Minuten, 60         ; sind 60 Minuten vergangen ?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht, -&amp;gt; Ausgabe&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Minuten             ; Minuten zurücksetzen und dafür&lt;br /&gt;
        inc     Stunden             ; plus 1 Stunde&lt;br /&gt;
        cpi     Stunden, 24         ; nach 24 Stunden, die Stundenanzeige&lt;br /&gt;
        brne    Ausgabe             ; wieder zurücksetzen&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Stunden             ; Stunden rücksetzen&lt;br /&gt;
&lt;br /&gt;
Ausgabe:&lt;br /&gt;
        ldi     flag,1              ; Flag setzen, LCD updaten&lt;br /&gt;
&lt;br /&gt;
end_isr:&lt;br /&gt;
&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        out     sreg,temp1          ; sreg wieder herstellen&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        reti                        ; das wars. Interrupt ist fertig&lt;br /&gt;
&lt;br /&gt;
; Eine Zahl aus dem Register temp1 ausgeben&lt;br /&gt;
&lt;br /&gt;
lcd_number:&lt;br /&gt;
        push    temp2               ; register sichern,&lt;br /&gt;
                                    ; wird für Zwsichenergebnisse gebraucht     &lt;br /&gt;
        ldi     temp2, &#039;0&#039;         &lt;br /&gt;
lcd_number_10:                &lt;br /&gt;
        subi    temp1, 10           ; abzählen wieviele Zehner in&lt;br /&gt;
        brcs    lcd_number_1        ; der Zahl enthalten sind&lt;br /&gt;
        inc     temp2&lt;br /&gt;
        rjmp    lcd_number_10&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
        push    temp1               ; den Rest sichern (http://www.mikrocontroller.net/topic/172026)&lt;br /&gt;
        mov     temp1,temp2         ; &lt;br /&gt;
        rcall   lcd_data            ; die Zehnerstelle ausgeben&lt;br /&gt;
        pop     temp1               ; den Rest wiederherstellen&lt;br /&gt;
        subi    temp1, -10          ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                    ; vorhergehende Schleife 10 zuviel&lt;br /&gt;
                                    ; abgezogen hat&lt;br /&gt;
                                    ; das Subtrahieren von -10&lt;br /&gt;
                                    ; = Addition von +10 ist ein Trick&lt;br /&gt;
                                    ; da kein addi Befehl existiert&lt;br /&gt;
        ldi     temp2, &#039;0&#039;          ; die übrig gebliebenen Einer&lt;br /&gt;
        add     temp1, temp2        ; noch ausgeben&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
&lt;br /&gt;
        pop     temp2               ; Register wieder herstellen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der ISR wird nur die Zeit in den Registern neu berechnet, die Ausgabe auf das LCD erfolgt in der Hauptschleife. Das ist notwendig, da die LCD-Ausgabe bisweilen sehr lange dauern kann. Wenn sie länger als ~2/15 Sekunden dauert werden Timerinterrupts &amp;quot;verschluckt&amp;quot; und unsere Uhr geht noch mehr falsch. Dadurch, dass aber die Ausgabe in der Hauptschleife durchgeführt wird, welche jederzeit durch einen Timerinterrupt unterbrochen werden kann, werden keine Timerinterrupts verschluckt. Das ist vor allem wichtig, wenn mit höheren Interruptfrequenzen gearbeitet wird, z.&amp;amp;nbsp;B. 1/100s im Beispiel weiter unten. Auch wenn in diesem einfachen Beispiel die Ausgabe bei weitem nicht 2/15 Sekunden dauert, sollte man sich diesen Programmierstil allgemein angewöhnen. Siehe auch [[Interrupt]].&lt;br /&gt;
&lt;br /&gt;
Eine weitere Besonderheit ist das Register &#039;&#039;&#039;flag&#039;&#039;&#039; (=r19). Dieses Register fungiert als Anzeiger, wie eine Flagge, daher auch der Name. In der ISR wird dieses Register auf 1 gesetzt. Die Hauptschleife, also alles zwischen &#039;&#039;loop&#039;&#039; und &#039;&#039;rjmp loop&#039;&#039;, prüft dieses Flag und nur dann, wenn das Flag auf 1 steht, wird die LCD Ausgabe gemacht und das Flag wieder auf 0 zurückgesetzt. Auf diese Art wird nur dann Rechenzeit für die LCD Ausgabe verbraucht, wenn dies tatsächlich notwendig ist. Die ISR teilt mit dem Flag der Hauptschleife mit, dass eine bestimmte Aufgabe, nämlich der Update der Anzeige gemacht werden muss und die Hauptschleife reagiert darauf bei nächster Gelegenheit, indem sie diese Aufgabe ausführt und setzt das Flag zurück. Solche Flags werden daher auch &#039;&#039;&#039;Job-Flags&#039;&#039;&#039; genannt, weil durch ihr setzten das Abarbeiten eines Jobs (einer Aufgabe) angestoßen wird. Auch hier gilt wieder: Im Grunde würde man in diesem speziellen Beispiel kein Job-Flag benötigen, weil es in der Hauptschleife nur einen einzigen möglichen Job, die Neuausgabe der Uhrzeit, gibt. Sobald aber Programme komplizierter werden und mehrere Jobs möglich sind, sind Job-Flags eine gute Möglichkeit, ein Programm so zu organsieren, dass bestimmte Dinge nur dann gemacht werden, wenn sie notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Im Moment gibt es keine Möglichkeit, die Uhr auf eine bestimmte Uhrzeit einzustellen. Um dies tun zu können, müssten noch zusätzlich Taster an den Mikrocontroller angeschlossen werden, mit deren Hilfe die Sekunden, Minuten und Stunden händisch vergrößert bzw. verkleinert werden können. Studieren Sie mal die Bedienungsanleitung einer käuflichen Digitaluhr und versuchen sie zu beschreiben, wie dieser Stellvorgang bei dieser Uhr vor sich geht. Sicherlich werden Sie daraus eine Idee entwickeln können, wie ein derartiges Stellen mit der hier vorgestellten Digitaluhr funktionieren könnte. Als Zwischenlösung kann man im Programm die Uhr beim Start anstelle von 00:00:00 z.&amp;amp;nbsp;B. auch auf 20:00:00 stellen und exakt mit dem Start der Tagesschau starten. Wobei der Start der Tagesschau verzögert bei uns ankommt, je nach Übertragung können das mehrere Sekunden sein.&lt;br /&gt;
&lt;br /&gt;
== Ganggenauigkeit ==&lt;br /&gt;
&lt;br /&gt;
Wird die Uhr mit einer gekauften Uhr verglichen, so stellt man schnell fest, dass sie ganz schön ungenau geht. Sie geht vor! Woran liegt das? Die Berechnung sieht so aus:&lt;br /&gt;
* Frequenz des Quarzes: 4.0 MHz&lt;br /&gt;
* Vorteiler des Timers: 1024&lt;br /&gt;
* Überlauf alle 256 Timertakte&lt;br /&gt;
&lt;br /&gt;
Daraus errechnet sich, dass in einer Sekunde 4000000 / 1024 / 256 = 15.258789 Overflow Interrupts auftreten. Im Programm wird aber bereits nach 15 Overflows eine Sekunde weitergeschaltet, daher geht die Uhr vor. Rechnen wir etwas:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {15}{15,258789}-1) \cdot 100% = -1,69%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So wie bisher läuft die Uhr also rund 1.7 % zu schnell. In einer Minute ist das immerhin etwas mehr als eine Sekunde. Im Grunde ist das ein ähnliches Problem wie mit unserer Jahreslänge. Ein Jahr dauert nicht exakt 365 Tage, sondern in etwa einen viertel Tag länger. Die Lösung, die im Kalender dafür gemacht wurde - der Schalttag -, könnte man fast direkt übernehmen. Nach 3 Stück 15er Overflow Sekunden folgt eine Sekunde für die 16 Overflows ablaufen müssen. Wie sieht die Rechnung bei einem 15, 15, 15, 16 Schema aus? Für 4 Sekunden werden exakt 15.258789 * 4 = 61,035156 Overflow Interrupts benötigt. Mit einem 15, 15, 15, 16 Schema werden in 4 Sekunden genau 61 Overflow Interrupts durchgeführt. Der relative Fehler beträgt dann&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {61}{61,035156}-1) \cdot 100% = -0,0575%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Schema ist der Fehler beträchtlich gesunken. Nur noch 0.06%. Bei dieser Rate muss die Uhr immerhin etwas länger als 0,5 Stunden laufen, bis der Fehler auf eine Sekunde angewachsen ist. Das sind aber immer noch 48 Sekunden pro Tag bzw. 1488 Sekunden (=24,8 Minuten) pro Monat. So schlecht sind nicht mal billige mechanische Uhren!&lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich noch weiter gehen und immer kompliziertere &amp;quot;Schalt-Overflow&amp;quot;-Schemata austüfteln und damit die Genauigkeit näher an 100% bringen. Aber gibt es noch andere Möglichkeiten?&lt;br /&gt;
&lt;br /&gt;
Im ersten Ansatz wurde ein Vorteiler von 1024 eingesetzt. Was passiert bei einem anderen Vorteiler? Nehmen wir mal einen Vorteiler von 64. Das heißt, es müssen ( 4000000 / 64 ) / 256 = 244.140625 Overflows auflaufen, bis 1 Sekunde vergangen ist. Wenn also 244 Overflows gezählt werden, dann beläuft sich der Fehler auf&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {244}{244,140625}-1) \cdot 100% = -0,0576%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht schlecht. Nur durch Verändern von 2 Zahlenwerten im Programm (Teilerfaktor und Anzahl der Overflow Interrupts bis zu einer Sekunden) kann die Genauigkeit gegenüber dem ursprünglichen Overflow-Schema beträchtlich gesteigert werden. Aber geht das noch besser? Ja das geht. Allerdings nicht mit dem Overflow Interrupt.&lt;br /&gt;
&lt;br /&gt;
== Der CTC-Modus des Timers ==&lt;br /&gt;
&lt;br /&gt;
Worin liegt denn das eigentliche Problem, mit dem die Uhr zu kämpfen hat? Das Problem liegt darin, dass jedesmal ein kompletter Timerzyklus bis zum Overflow abgewartet werden muss, um darauf zu reagieren. Da aber nur jeweils ganzzahlige Overflowzyklen abgezählt werden können, heißt das auch, dass im ersten Fall nur in Vielfachen von 1024 * 256 = 262144 Takten operiert werden kann, während im letzten Fall immerhin schon eine Granulierung von 64 * 256 = 16384 Takten erreicht wird. Aber offensichtlich ist das nicht genau genug. Bei 4 MHz entsprechen 262144 Takte bereits einem Zeitraum von 65,5ms, während 16384 Takte einem Zeitbedarf von 4,096ms entsprechen. Beide Zahlen teilen aber 1000ms nicht ganzzahlig. Und daraus entsteht der Fehler. Angestrebt wird ein Timer, der seinen &amp;lt;i&amp;gt;Overflow&amp;lt;/i&amp;gt; so erreicht, dass sich ein ganzzahliger Teiler von 1 Sekunde einstellt. Dazu müsste man dem Timer aber vorschreiben können, bei welchem Zählerstand der &amp;lt;i&amp;gt;Overflow&amp;lt;/i&amp;gt; erfolgen soll. Und genau dies ist im &#039;&#039;&#039;CTC&#039;&#039;&#039;-Modus, allerdings nur beim Timer 1, möglich. &#039;&#039;&#039;CTC&#039;&#039;&#039; bedeutet &amp;quot;&#039;&#039;&#039;C&#039;&#039;&#039;lear &#039;&#039;&#039;T&#039;&#039;&#039;imer on &#039;&#039;&#039;C&#039;&#039;&#039;ompare match&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Timer 1, ein 16-Bit-Timer, wird mit einem Vorteiler von 1 betrieben. Dadurch wird erreicht, dass der Timer mit höchster Zeitauflösung arbeiten kann. Bei jedem Ticken des Systemtaktes von 4 MHz wird auch der Timer um 1 erhöht. Zusätzlich wird noch das WGM12-Bit bei der Konfiguration gesetzt. Dadurch wird der Timer in den &#039;&#039;&#039;CTC&#039;&#039;&#039;-Modus gesetzt. Dabei wird der Inhalt des Timers hardwaremäßig mit dem Inhalt des &#039;&#039;&#039;OCR1A&#039;&#039;&#039;-Registers verglichen. Stimmen beide überein, so wird der Timer auf 0 zurückgesetzt und im nächsten Taktzyklus ein &#039;&#039;&#039;OCIE1A&#039;&#039;&#039;-Interrupt ausgelöst. Dadurch ist es möglich, exakt die Anzahl an Taktzyklen festzulegen, die von einem Interrupt zum nächsten vergehen sollen. Das Compare Register &#039;&#039;&#039;OCR1A&#039;&#039;&#039; wird mit dem Wert 39999 vorbelegt. Dadurch vergehen exakt 40000 Taktzyklen von einem Compare-Interrupt zum nächsten. &amp;quot;Zufällig&amp;quot; ist dieser Wert so gewählt, dass bei einem Systemtakt von 4 MHz von einem Interrupt zum nächsten genau 1/100 Sekunde vergeht, denn 40000 / 4000000 = 0.01. Bei einem möglichen Umbau der Uhr zu einer Stoppuhr könnte sich das als nützlich erweisen. Im Interrupt wird das Hilfsregister SubCount bis 100 hochgezählt und nach 100 Interrupts kommt wieder die Sekundenweiterschaltung wie oben in Gang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
.def Flag  = r19&lt;br /&gt;
 &lt;br /&gt;
.def SubCount = r21&lt;br /&gt;
.def Sekunden = r22&lt;br /&gt;
.def Minuten  = r23&lt;br /&gt;
.def Stunden  = r24&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
           rjmp    main             ; Reset Handler&lt;br /&gt;
.org OC1Aaddr&lt;br /&gt;
           rjmp    timer1_compare   ; Timer Compare Handler&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp1&lt;br /&gt;
        ldi     temp1, LOW(RAMEND)  ; Stackpointer initialisieren&lt;br /&gt;
        out     SPL, temp1&lt;br /&gt;
    &lt;br /&gt;
        rcall   lcd_init&lt;br /&gt;
        rcall   lcd_clear&lt;br /&gt;
 &lt;br /&gt;
                                    ; Vergleichswert &lt;br /&gt;
        ldi     temp1, high( 40000 - 1 )&lt;br /&gt;
        out     OCR1AH, temp1&lt;br /&gt;
        ldi     temp1, low( 40000 - 1 )&lt;br /&gt;
        out     OCR1AL, temp1&lt;br /&gt;
                                    ; CTC Modus einschalten&lt;br /&gt;
                                    ; Vorteiler auf 1&lt;br /&gt;
        ldi     temp1, ( 1 &amp;lt;&amp;lt; WGM12 ) | ( 1 &amp;lt;&amp;lt; CS10 )&lt;br /&gt;
        out     TCCR1B, temp1&lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, 1 &amp;lt;&amp;lt; OCIE1A  ; OCIE1A: Interrupt bei Timer Compare&lt;br /&gt;
        out     TIMSK, temp1&lt;br /&gt;
 &lt;br /&gt;
        clr     Minuten             ; Die Uhr auf 0 setzen&lt;br /&gt;
        clr     Sekunden&lt;br /&gt;
        clr     Stunden&lt;br /&gt;
        clr     SubCount&lt;br /&gt;
        clr     Flag                ; Flag löschen&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
loop:&lt;br /&gt;
        cpi     flag,0&lt;br /&gt;
        breq    loop                ; Flag im Interrupt gesetzt?&lt;br /&gt;
        ldi     flag,0              ; Flag löschen&lt;br /&gt;
  &lt;br /&gt;
        rcall   lcd_clear           ; das LCD löschen&lt;br /&gt;
        mov     temp1, Stunden      ; und die Stunden ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; zwischen Stunden und Minuten einen &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Minuten      ; dann die Minuten ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; und noch ein &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Sekunden     ; und die Sekunden&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
&lt;br /&gt;
        rjmp    loop&lt;br /&gt;
 &lt;br /&gt;
timer1_compare:                     ; Timer 1 Output Compare Handler&lt;br /&gt;
&lt;br /&gt;
        push    temp1               ; temp 1 sichern&lt;br /&gt;
        in      temp1,sreg          ; SREG sichern&lt;br /&gt;
&lt;br /&gt;
        inc     SubCount            ; Wenn dies nicht der 100. Interrupt&lt;br /&gt;
        cpi     SubCount, 100       ; ist, dann passiert gar nichts&lt;br /&gt;
        brne    end_isr&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     SubCount            ; SubCount rücksetzen&lt;br /&gt;
        inc     Sekunden            ; plus 1 Sekunde&lt;br /&gt;
        cpi     Sekunden, 60        ; sind 60 Sekunden vergangen?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht kann die Ausgabe schon&lt;br /&gt;
                                    ; gemacht werden&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Sekunden            ; Sekunden wieder auf 0 und dafür&lt;br /&gt;
        inc     Minuten             ; plus 1 Minute&lt;br /&gt;
        cpi     Minuten, 60         ; sind 60 Minuten vergangen ?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht, -&amp;gt; Ausgabe&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Minuten             ; Minuten zurücksetzen und dafür&lt;br /&gt;
        inc     Stunden             ; plus 1 Stunde&lt;br /&gt;
        cpi     Stunden, 24         ; nach 24 Stunden, die Stundenanzeige&lt;br /&gt;
        brne    Ausgabe             ; wieder zurücksetzen&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Stunden             ; Stunden rücksetzen&lt;br /&gt;
&lt;br /&gt;
Ausgabe:&lt;br /&gt;
        ldi     flag,1              ; Flag setzen, LCD updaten&lt;br /&gt;
&lt;br /&gt;
end_isr:&lt;br /&gt;
&lt;br /&gt;
        out     sreg,temp1          ; sreg wieder herstellen&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        reti                        ; das wars. Interrupt ist fertig&lt;br /&gt;
&lt;br /&gt;
; Eine Zahl aus dem Register temp1 ausgeben&lt;br /&gt;
&lt;br /&gt;
lcd_number:&lt;br /&gt;
        push    temp2               ; register sichern,&lt;br /&gt;
                                    ; wird für Zwsichenergebnisse gebraucht     &lt;br /&gt;
        ldi     temp2, &#039;0&#039;         &lt;br /&gt;
lcd_number_10:                &lt;br /&gt;
        subi    temp1, 10           ; abzählen wieviele Zehner in&lt;br /&gt;
        brcs    lcd_number_1        ; der Zahl enthalten sind&lt;br /&gt;
        inc     temp2&lt;br /&gt;
        rjmp    lcd_number_10&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
        push    temp1               ; den Rest sichern (http://www.mikrocontroller.net/topic/172026)&lt;br /&gt;
        mov     temp1,temp2         ; &lt;br /&gt;
        rcall   lcd_data            ; die Zehnerstelle ausgeben&lt;br /&gt;
        pop     temp1               ; den Rest wieder holen&lt;br /&gt;
        subi    temp1, -10          ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                    ; vorhergehende Schleife 10 zuviel&lt;br /&gt;
                                    ; abgezogen hat&lt;br /&gt;
                                    ; das Subtrahieren von -10&lt;br /&gt;
                                    ; = Addition von +10 ist ein Trick&lt;br /&gt;
                                    ; da kein addi Befehl existiert&lt;br /&gt;
        ldi     temp2, &#039;0&#039;          ; die übrig gebliebenen Einer&lt;br /&gt;
        add     temp1, temp2        ; noch ausgeben&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
&lt;br /&gt;
        pop     temp2               ; Register wieder herstellen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Interrupt-Routine werden wieder, genauso wie vorher, die Anzahl der Interrupt-Aufrufe gezählt. Beim 100. Aufruf sind daher 40.000 * 100 = 4.000.000 Takte vergangen und da der Quarz mit 4.000.000 Schwingungen in der Sekunde arbeitet, ist daher eine Sekunde vergangen. Sie wird genauso wie vorher registriert und die Uhr entsprechend hochgezählt. Wird jetzt die Uhr mit einer kommerziellen verglichen, dann fällt nach einiger Zeit auf ... Sie geht immer noch falsch! Was ist jetzt die Ursache? Die Ursache liegt in einem Problem, das nicht direkt behebbar ist. Am Quarz! Auch wenn auf dem Quarz drauf steht, dass er eine Frequenz von 4MHz hat, so stimmt das nicht exakt. Auch Quarze haben Fertigungstoleranzen und verändern ihre Frequenz mit der Temperatur. Typisch liegt die Fertigungstoleranz bei +/- 100ppm = 0,01% (&#039;&#039;&#039;p&#039;&#039;&#039;arts &#039;&#039;&#039;p&#039;&#039;&#039;er &#039;&#039;&#039;m&#039;&#039;&#039;illion, Millionstel Teile), die Temperaturdrift zwischen -40 Grad und 85 Grad liegt je nach Typ in der selben Größenordnung. Das bedeutet, dass die Uhr pro Monat um bis zu 268 Sekunden (~4 1/2 Minuten) falsch gehen kann. Diese Einflüsse auf die Quarzfrequenz sind aber messbar und per Hardware oder Software behebbar. In Uhren kommen normalerweise genauer gefertigte Uhrenquarze zum Einsatz, die vom Uhrmacher auch noch auf die exakte Frequenz abgeglichen werden (mittels Kondensatoren und Frequenzzähler). Ein Profi verwendet einen sehr genauen Frequenzzähler, womit er innerhalb weniger Sekunden die Frequenz sehr genau messen kann. Als Hobbybastler kann man die Uhr eine zeitlang (Tage, Wochen) laufen lassen und die Abweichung feststellen (z.&amp;amp;nbsp;B. exakt 20:00 Uhr zum Start der Tagsschau). Aus dieser Abweichung lässt sich dann errechnen, wie schnell der Quarz wirklich schwingt. Und da dank CTC die Messperiode taktgenau eingestellt werden kann, ist es möglich, diesen Frequenzfehler auszugleichen. Der genaue Vorgang ist in dem Wikiartikel [[AVR - Die genaue Sekunde / RTC]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Timer|&lt;br /&gt;
zurücklink=AVR-Tutorial: Timer|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=ADC|&lt;br /&gt;
vorlink=AVR-Tutorial: ADC}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Uhr&amp;diff=45140</id>
		<title>AVR-Tutorial: Uhr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Uhr&amp;diff=45140"/>
		<updated>2010-03-24T06:45:20Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Das erste Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine beliebte Übung für jeden Programmierer ist die Implementierung einer Uhr. Die meisten Uhren bestehen aus einem Taktgeber und einer Auswerte- und Anzeigevorrichtung. Wir wollen hier beides mittels eines Programmes in einem Mikrocontroller realisieren. Voraussetzung für diese Fallstudie ist das Verständnis der Kapitel über&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: LCD| Ansteuerung eines LC-Displays]]&lt;br /&gt;
* [[AVR-Tutorial: Timer| Timer]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Funktion ==&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe des Taktgebers, der uns einen möglichst konstanten und genauen Takt liefert, übernimmt ein Timer. Der Timer ermöglicht einen einfachen Zugang zum Takt, die der AVR vom Quarz abgreift. Wie schon im Einführungskapitel über den [[AVR-Tutorial:_Timer|Timer]] wird dazu ein Timer Overflow Interrupt installiert und in diesem Interrupt wird die eigentliche Uhr hochgezählt. Die Uhr selbst besteht aus 4 Registern. 3 davon repräsentieren die Sekunden, Minuten und Stunden unserer Uhr. Nach jeweils einer Sekunde wird das Sekundenregister um 1 erhöht. Sind 60 Sekunden vergangen, dann wird das Sekundenregister wieder auf 0 gesetzt und dafür das Minutenregister um 1 erhöht (Überlauf). Nach 60 Minuten werden die Minuten wieder auf 0 gesetzt und für diese 60 Minuten eine Stunde mehr gezählt. Nach 24 Stunden schliesslich werden die Stunden wieder auf 0 gesetzt, ein ganzer Tag ist vergangen.&lt;br /&gt;
&lt;br /&gt;
Aber wozu das 4. Register?&lt;br /&gt;
&lt;br /&gt;
Der Mikrocontroller wird mit 4MHz betrieben. Bei einem Teiler von 1024 zählt der Timer also mit 4000000 / 1024 = 3906.25 Pulsen pro Sekunde. Der Timer muss einmal bis 256 zählen, bis er einen Overflow auslöst. Das heist, es ereignen sich 3906.25 / 256 = 15.2587 Overflows pro Sekunde. Die Aufgabe des 4. Registers ist es nun diese 15 Overflows zu zählen. Bei Auftreten des 15.ten Overflow ist 1 Sekunde vergangen. Dass dies nicht exakt stimmt, da ja die Division auch Nachkommastellen aufwies, wird im Moment der Einfachheit halber ignoriert. In einem späteren Abschnitt wird darauf noch eingegangen.&lt;br /&gt;
&lt;br /&gt;
Im Overflow Interrupt wird also diese Kette von Zählvorgängen auf den Sekunden, Minuten und Stunden durchgeführt und anschliessend zur Anzeige gebracht. Dazu werden die in einem vorhergehenden Kapitel entwickelten [[AVR-Tutorial:_LCD|LCD Funktionen]] benutzt.&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
.def flag  = r19&lt;br /&gt;
 &lt;br /&gt;
.def SubCount = r21&lt;br /&gt;
.def Sekunden = r22&lt;br /&gt;
.def Minuten  = r23&lt;br /&gt;
.def Stunden  = r24&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
        rjmp    main                ; Reset Handler&lt;br /&gt;
.org OVF0addr&lt;br /&gt;
        rjmp    timer0_overflow     ; Timer Overflow Handler&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp1&lt;br /&gt;
        ldi     temp1, LOW(RAMEND)  ; Stackpointer initialisieren&lt;br /&gt;
        out     SPL, temp1&lt;br /&gt;
    &lt;br /&gt;
        rcall   lcd_init&lt;br /&gt;
        rcall   lcd_clear&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, (1&amp;lt;&amp;lt;CS02) | (1&amp;lt;&amp;lt;CS00)   ; Teiler 1024&lt;br /&gt;
        out     TCCR0, temp1&lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, 1&amp;lt;&amp;lt;TOIE0     ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp1&lt;br /&gt;
 &lt;br /&gt;
        clr     Minuten             ; Die Uhr auf 0 setzen&lt;br /&gt;
        clr     Sekunden&lt;br /&gt;
        clr     Stunden&lt;br /&gt;
        clr     SubCount&lt;br /&gt;
        clr     Flag                ; Merker löschen&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
 &lt;br /&gt;
loop:&lt;br /&gt;
        cpi     flag,0&lt;br /&gt;
        breq    loop                ; Flag im Interrupt gesetzt?&lt;br /&gt;
        ldi     flag,0              ; flag löschen&lt;br /&gt;
  &lt;br /&gt;
        rcall   lcd_clear           ; das LCD löschen&lt;br /&gt;
        mov     temp1, Stunden      ; und die Stunden ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; zwischen Stunden und Minuten einen &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Minuten      ; dann die Minuten ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; und noch ein &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Sekunden     ; und die Sekunden&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
&lt;br /&gt;
        rjmp    loop&lt;br /&gt;
 &lt;br /&gt;
timer0_overflow:                    ; Timer 0 Overflow Handler&lt;br /&gt;
&lt;br /&gt;
        push    temp1               ; temp 1 sichern&lt;br /&gt;
        in      temp1,sreg          ; SREG sichern&lt;br /&gt;
        push    temp1&lt;br /&gt;
&lt;br /&gt;
        inc     SubCount            ; Wenn dies nicht der 15. Interrupt&lt;br /&gt;
        cpi     SubCount, 15        ; ist, dann passiert gar nichts&lt;br /&gt;
        brne    end_isr&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     SubCount            ; SubCount rücksetzen&lt;br /&gt;
        inc     Sekunden            ; plus 1 Sekunde&lt;br /&gt;
        cpi     Sekunden, 60        ; sind 60 Sekunden vergangen?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht kann die Ausgabe schon&lt;br /&gt;
                                    ; gemacht werden&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Sekunden            ; Sekunden wieder auf 0 und dafür&lt;br /&gt;
        inc     Minuten             ; plus 1 Minute&lt;br /&gt;
        cpi     Minuten, 60         ; sind 60 Minuten vergangen ?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht, -&amp;gt; Ausgabe&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Minuten             ; Minuten zurücksetzen und dafür&lt;br /&gt;
        inc     Stunden             ; plus 1 Stunde&lt;br /&gt;
        cpi     Stunden, 24         ; nach 24 Stunden, die Stundenanzeige&lt;br /&gt;
        brne    Ausgabe             ; wieder zurücksetzen&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Stunden             ; Stunden rücksetzen&lt;br /&gt;
&lt;br /&gt;
Ausgabe:&lt;br /&gt;
        ldi     flag,1              ; Flag setzen, LCD updaten&lt;br /&gt;
&lt;br /&gt;
end_isr:&lt;br /&gt;
&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        out     sreg,temp1          ; sreg wieder herstellen&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        reti                        ; das wars. Interrupt ist fertig&lt;br /&gt;
&lt;br /&gt;
; Eine Zahl aus dem Register temp1 ausgeben&lt;br /&gt;
&lt;br /&gt;
lcd_number:&lt;br /&gt;
        push    temp2               ; register sichern,&lt;br /&gt;
                                    ; wird für Zwsichenergebnisse gebraucht     &lt;br /&gt;
        ldi     temp2, &#039;0&#039;         &lt;br /&gt;
lcd_number_10:                &lt;br /&gt;
        subi    temp1, 10           ; abzählen wieviele Zehner in&lt;br /&gt;
        brcs    lcd_number_1        ; der Zahl enthalten sind&lt;br /&gt;
        inc     temp2&lt;br /&gt;
        rjmp    lcd_number_10&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
        push    temp1               ; den Rest sichern (http://www.mikrocontroller.net/topic/172026)&lt;br /&gt;
        mov     temp1,temp2         ; &lt;br /&gt;
        rcall   lcd_data            ; die Zehnerstelle ausgeben&lt;br /&gt;
        pop     temp1               ; den Rest wiederherstellen&lt;br /&gt;
        subi    temp1, -10          ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                    ; vorhergehende Schleife 10 zuviel&lt;br /&gt;
                                    ; abgezogen hat&lt;br /&gt;
                                    ; das Subtrahieren von -10&lt;br /&gt;
                                    ; = Addition von +10 ist ein Trick&lt;br /&gt;
                                    ; da kein addi Befehl existiert&lt;br /&gt;
        ldi     temp2, &#039;0&#039;          ; die übrig gebliebenen Einer&lt;br /&gt;
        add     temp1, temp2        ; noch ausgeben&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
&lt;br /&gt;
        pop     temp2               ; Register wieder herstellen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der ISR wird nur die Zeit in den Registern neu berechnet, die Ausgabe auf das LCD erfolgt in der Hauptschleife. Das ist notwendig, da die LCD-Ausgabe bisweilen sehr lange dauern kann. Wenn sie länger als ~2/15 Sekunden dauert werden Timerinterrupts &amp;quot;verschluckt&amp;quot; und unsere Uhr geht noch mehr falsch. Dadurch, dass aber die Ausgabe in der Hauptschleife durchgeführt wird, welche jederzeit durch einen Timerinterrupt unterbrochen werden kann, werden keine Timerinterrupts verschluckt. Das ist vor allem wichtig, wenn mit höheren Interruptfrequenzen gearbeitet wird, z.&amp;amp;nbsp;B. 1/100s im Beispiel weiter unten. Auch wenn in diesem einfachen Beispiel die Ausgabe bei weitem nicht 2/15 Sekunden dauert, sollte man sich diesen Programmierstil allgemein angewöhnen. Siehe auch [[Interrupt]].&lt;br /&gt;
&lt;br /&gt;
Eine weitere Besonderheit ist das Register &#039;&#039;&#039;flag&#039;&#039;&#039; (=r19). Dieses Register fungiert als Anzeiger, wie eine Flagge, daher auch der Name. In der ISR wird dieses Register auf 1 gesetzt. Die Hauptschleife, also alles zwischen &#039;&#039;loop&#039;&#039; und &#039;&#039;rjmp loop&#039;&#039;, prüft dieses Flag und nur dann, wenn das Flag auf 1 steht, wird die LCD Ausgabe gemacht und das Flag wieder auf 0 zurückgesetzt. Auf diese Art wird nur dann Rechenzeit für die LCD Ausgabe verbraucht, wenn dies tatsächlich notwendig ist. Die ISR teilt mit dem Flag der Hauptschleife mit, dass eine bestimmte Aufgabe, nämlich der Update der Anzeige gemacht werden muss und die Hauptschleife reagiert darauf bei nächster Gelegenheit, indem sie diese Aufgabe ausführt und setzt das Flag zurück. Solche Flags werden daher auch &#039;&#039;&#039;Job-Flags&#039;&#039;&#039; genannt, weil durch ihr setzten das Abarbeiten eines Jobs (einer Aufgabe) angestoßen wird. Auch hier gilt wieder: Im Grunde würde man in diesem speziellen Beispiel kein Job-Flag benötigen, weil es in der Hauptschleife nur einen einzigen möglichen Job, die Neuausgabe der Uhrzeit, gibt. Sobald aber Programme komplizierter werden und mehrere Jobs möglich sind, sind Job-Flags eine gute Möglichkeit, ein Programm so zu organsieren, dass bestimmte Dinge nur dann gemacht werden, wenn sie notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Im Moment gibt es keine Möglichkeit, die Uhr auf eine bestimmte Uhrzeit einzustellen. Um dies tun zu können, müssten noch zusätzlich Taster an den Mikrocontroller angeschlossen werden, mit deren Hilfe die Sekunden, Minuten und Stunden händisch vergrößert bzw. verkleinert werden können. Studieren Sie mal die Bedienungsanleitung einer käuflichen Digitaluhr und versuchen sie zu beschreiben, wie dieser Stellvorgang bei dieser Uhr vor sich geht. Sicherlich werden Sie daraus eine Idee entwickeln können, wie ein derartiges Stellen mit der hier vorgestellten Digitaluhr funktionieren könnte. Als Zwischenlösung kann man im Programm die Uhr beim Start anstelle von 00:00:00 z.&amp;amp;nbsp;B. auch auf 20:00:00 stellen und exakt mit dem Start der Tagesschau starten. Wobei der Start der Tagesschau verzögert bei uns ankommt, je nach Übertragung können das mehrere Sekunden sein.&lt;br /&gt;
&lt;br /&gt;
== Ganggenauigkeit ==&lt;br /&gt;
&lt;br /&gt;
Wird die Uhr mit einer gekauften Uhr verglichen, so stellt man schnell fest, dass sie ganz schön ungenau geht. Sie geht vor! Woran liegt das? Die Berechnung sieht so aus:&lt;br /&gt;
* Frequenz des Quarzes: 4.0 MHz&lt;br /&gt;
* Vorteiler des Timers: 1024&lt;br /&gt;
* Überlauf alle 256 Timertakte&lt;br /&gt;
&lt;br /&gt;
Daraus errechnet sich, dass in einer Sekunde 4000000 / 1024 / 256 = 15.258789 Overflow Interrupts auftreten. Im Programm wird aber bereits nach 15 Overflows eine Sekunde weitergeschaltet, daher geht die Uhr vor. Rechnen wir etwas:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {15}{15,258789}-1) \cdot 100% = -1,69%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So wie bisher läuft die Uhr also rund 1.7 % zu schnell. In einer Minute ist das immerhin etwas mehr als eine Sekunde. Im Grunde ist das ein ähnliches Problem wie mit unserer Jahreslänge. Ein Jahr dauert nicht exakt 365 Tage, sondern in etwa einen viertel Tag länger. Die Lösung, die im Kalender dafür gemacht wurde - der Schalttag -, könnte man fast direkt übernehmen. Nach 3 Stück 15er Overflow Sekunden folgt eine Sekunde für die 16 Overflows ablaufen müssen. Wie sieht die Rechnung bei einem 15, 15, 15, 16 Schema aus? Für 4 Sekunden werden exakt 15.258789 * 4 = 61,035156 Overflow Interrupts benötigt. Mit einem 15, 15, 15, 16 Schema werden in 4 Sekunden genau 61 Overflow Interrupts durchgeführt. Der relative Fehler beträgt dann&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {61}{61,035156}-1) \cdot 100% = -0,0575%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Schema ist der Fehler beträchtlich gesunken. Nur noch 0.06%. Bei dieser Rate muss die Uhr immerhin etwas länger als 0,5 Stunden laufen, bis der Fehler auf eine Sekunde angewachsen ist. Das sind aber immer noch 48 Sekunden pro Tag bzw. 1488 Sekunden (=24,8 Minuten) pro Monat. So schlecht sind nicht mal billige mechanische Uhren!&lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich noch weiter gehen und immer kompliziertere &amp;quot;Schalt-Overflow&amp;quot;-Schemata austüfteln und damit die Genauigkeit näher an 100% bringen. Aber gibt es noch andere Möglichkeiten?&lt;br /&gt;
&lt;br /&gt;
Im ersten Ansatz wurde ein Vorteiler von 1024 eingesetzt. Was passiert bei einem anderen Vorteiler? Nehmen wir mal einen Vorteiler von 64. Das heißt, es müssen ( 4000000 / 64 ) / 256 = 244.140625 Overflows auflaufen, bis 1 Sekunde vergangen ist. Wenn also 244 Overflows gezählt werden, dann beläuft sich der Fehler auf&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_r = (\frac {244}{244,140625}-1) \cdot 100% = -0,0576%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht schlecht. Nur durch Verändern von 2 Zahlenwerten im Programm (Teilerfaktor und Anzahl der Overflow Interrupts bis zu einer Sekunden) kann die Genauigkeit gegenüber dem ursprünglichen Overflow-Schema beträchtlich gesteigert werden. Aber geht das noch besser? Ja das geht. Allerdings nicht mit dem Overflow Interrupt.&lt;br /&gt;
&lt;br /&gt;
== Der CTC-Modus des Timers ==&lt;br /&gt;
&lt;br /&gt;
Worin liegt denn das eigentliche Problem, mit dem die Uhr zu kämpfen hat? Das Problem liegt darin, dass jedesmal ein kompletter Timerzyklus bis zum Overflow abgewartet werden muss, um darauf zu reagieren. Da aber nur jeweils ganzzahlige Overflowzyklen abgezählt werden können, heißt das auch, dass im ersten Fall nur in Vielfachen von 1024 * 256 = 262144 Takten operiert werden kann, während im letzten Fall immerhin schon eine Granulierung von 64 * 256 = 16384 Takten erreicht wird. Aber offensichtlich ist das nicht genau genug. Bei 4 MHz entsprechen 262144 Takte bereits einem Zeitraum von 65,5ms, während 16384 Takte einem Zeitbedarf von 4,096ms entsprechen. Beide Zahlen teilen aber 1000ms nicht ganzzahlig. Und daraus entsteht der Fehler. Angestrebt wird ein Timer, der seinen &amp;lt;i&amp;gt;Overflow&amp;lt;/i&amp;gt; so erreicht, dass sich ein ganzzahliger Teiler von 1 Sekunde einstellt. Dazu müsste man dem Timer aber vorschreiben können, bei welchem Zählerstand der &amp;lt;i&amp;gt;Overflow&amp;lt;/i&amp;gt; erfolgen soll. Und genau dies ist im &#039;&#039;&#039;CTC&#039;&#039;&#039;-Modus, allerdings nur beim Timer 1, möglich. &#039;&#039;&#039;CTC&#039;&#039;&#039; bedeutet &amp;quot;&#039;&#039;&#039;C&#039;&#039;&#039;lear &#039;&#039;&#039;T&#039;&#039;&#039;imer on &#039;&#039;&#039;C&#039;&#039;&#039;ompare match&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Timer 1, ein 16-Bit-Timer, wird mit einem Vorteiler von 1 betrieben. Dadurch wird erreicht, dass der Timer mit höchster Zeitauflösung arbeiten kann. Bei jedem Ticken des Systemtaktes von 4 MHz wird auch der Timer um 1 erhöht. Zusätzlich wird noch das WGM12-Bit bei der Konfiguration gesetzt. Dadurch wird der Timer in den &#039;&#039;&#039;CTC&#039;&#039;&#039;-Modus gesetzt. Dabei wird der Inhalt des Timers hardwaremäßig mit dem Inhalt des &#039;&#039;&#039;OCR1A&#039;&#039;&#039;-Registers verglichen. Stimmen beide überein, so wird der Timer auf 0 zurückgesetzt und im nächsten Taktzyklus ein &#039;&#039;&#039;OCIE1A&#039;&#039;&#039;-Interrupt ausgelöst. Dadurch ist es möglich, exakt die Anzahl an Taktzyklen festzulegen, die von einem Interrupt zum nächsten vergehen sollen. Das Compare Register &#039;&#039;&#039;OCR1A&#039;&#039;&#039; wird mit dem Wert 39999 vorbelegt. Dadurch vergehen exakt 40000 Taktzyklen von einem Compare-Interrupt zum nächsten. &amp;quot;Zufällig&amp;quot; ist dieser Wert so gewählt, dass bei einem Systemtakt von 4 MHz von einem Interrupt zum nächsten genau 1/100 Sekunde vergeht, denn 40000 / 4000000 = 0.01. Bei einem möglichen Umbau der Uhr zu einer Stoppuhr könnte sich das als nützlich erweisen. Im Interrupt wird das Hilfsregister SubCount bis 100 hochgezählt und nach 100 Interrupts kommt wieder die Sekundenweiterschaltung wie oben in Gang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
.def Flag  = r19&lt;br /&gt;
 &lt;br /&gt;
.def SubCount = r21&lt;br /&gt;
.def Sekunden = r22&lt;br /&gt;
.def Minuten  = r23&lt;br /&gt;
.def Stunden  = r24&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
           rjmp    main             ; Reset Handler&lt;br /&gt;
.org OC1Aaddr&lt;br /&gt;
           rjmp    timer1_compare   ; Timer Compare Handler&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp1&lt;br /&gt;
        ldi     temp1, LOW(RAMEND)  ; Stackpointer initialisieren&lt;br /&gt;
        out     SPL, temp1&lt;br /&gt;
    &lt;br /&gt;
        rcall   lcd_init&lt;br /&gt;
        rcall   lcd_clear&lt;br /&gt;
 &lt;br /&gt;
                                    ; Vergleichswert &lt;br /&gt;
        ldi     temp1, high( 40000 - 1 )&lt;br /&gt;
        out     OCR1AH, temp1&lt;br /&gt;
        ldi     temp1, low( 40000 - 1 )&lt;br /&gt;
        out     OCR1AL, temp1&lt;br /&gt;
                                    ; CTC Modus einschalten&lt;br /&gt;
                                    ; Vorteiler auf 1&lt;br /&gt;
        ldi     temp1, ( 1 &amp;lt;&amp;lt; WGM12 ) | ( 1 &amp;lt;&amp;lt; CS10 )&lt;br /&gt;
        out     TCCR1B, temp1&lt;br /&gt;
 &lt;br /&gt;
        ldi     temp1, 1 &amp;lt;&amp;lt; OCIE1A  ; OCIE1A: Interrupt bei Timer Compare&lt;br /&gt;
        out     TIMSK, temp1&lt;br /&gt;
 &lt;br /&gt;
        clr     Minuten             ; Die Uhr auf 0 setzen&lt;br /&gt;
        clr     Sekunden&lt;br /&gt;
        clr     Stunden&lt;br /&gt;
        clr     SubCount&lt;br /&gt;
        clr     Flag                ; Flag löschen&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
loop:&lt;br /&gt;
        cpi     flag,0&lt;br /&gt;
        breq    loop                ; Flag im Interrupt gesetzt?&lt;br /&gt;
        ldi     flag,0              ; Flag löschen&lt;br /&gt;
  &lt;br /&gt;
        rcall   lcd_clear           ; das LCD löschen&lt;br /&gt;
        mov     temp1, Stunden      ; und die Stunden ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; zwischen Stunden und Minuten einen &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Minuten      ; dann die Minuten ausgeben&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
        ldi     temp1, &#039;:&#039;          ; und noch ein &#039;:&#039;&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
        mov     temp1, Sekunden     ; und die Sekunden&lt;br /&gt;
        rcall   lcd_number&lt;br /&gt;
&lt;br /&gt;
        rjmp    loop&lt;br /&gt;
 &lt;br /&gt;
timer1_compare:                     ; Timer 1 Output Compare Handler&lt;br /&gt;
&lt;br /&gt;
        push    temp1               ; temp 1 sichern&lt;br /&gt;
        in      temp1,sreg          ; SREG sichern&lt;br /&gt;
&lt;br /&gt;
        inc     SubCount            ; Wenn dies nicht der 100. Interrupt&lt;br /&gt;
        cpi     SubCount, 100       ; ist, dann passiert gar nichts&lt;br /&gt;
        brne    end_isr&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     SubCount            ; SubCount rücksetzen&lt;br /&gt;
        inc     Sekunden            ; plus 1 Sekunde&lt;br /&gt;
        cpi     Sekunden, 60        ; sind 60 Sekunden vergangen?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht kann die Ausgabe schon&lt;br /&gt;
                                    ; gemacht werden&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Sekunden            ; Sekunden wieder auf 0 und dafür&lt;br /&gt;
        inc     Minuten             ; plus 1 Minute&lt;br /&gt;
        cpi     Minuten, 60         ; sind 60 Minuten vergangen ?&lt;br /&gt;
        brne    Ausgabe             ; wenn nicht, -&amp;gt; Ausgabe&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Minuten             ; Minuten zurücksetzen und dafür&lt;br /&gt;
        inc     Stunden             ; plus 1 Stunde&lt;br /&gt;
        cpi     Stunden, 24         ; nach 24 Stunden, die Stundenanzeige&lt;br /&gt;
        brne    Ausgabe             ; wieder zurücksetzen&lt;br /&gt;
&lt;br /&gt;
                                    ; Überlauf&lt;br /&gt;
        clr     Stunden             ; Stunden rücksetzen&lt;br /&gt;
&lt;br /&gt;
Ausgabe:&lt;br /&gt;
        ldi     flag,1              ; Flag setzen, LCD updaten&lt;br /&gt;
&lt;br /&gt;
end_isr:&lt;br /&gt;
&lt;br /&gt;
        out     sreg,temp1          ; sreg wieder herstellen&lt;br /&gt;
        pop     temp1&lt;br /&gt;
        reti                        ; das wars. Interrupt ist fertig&lt;br /&gt;
&lt;br /&gt;
; Eine Zahl aus dem Register temp1 ausgeben&lt;br /&gt;
&lt;br /&gt;
lcd_number:&lt;br /&gt;
        push    temp2               ; register sichern,&lt;br /&gt;
                                    ; wird für Zwsichenergebnisse gebraucht     &lt;br /&gt;
        ldi     temp2, &#039;0&#039;         &lt;br /&gt;
lcd_number_10:                &lt;br /&gt;
        subi    temp1, 10           ; abzählen wieviele Zehner in&lt;br /&gt;
        brcs    lcd_number_1        ; der Zahl enthalten sind&lt;br /&gt;
        inc     temp2&lt;br /&gt;
        rjmp    lcd_number_10&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
        rcall   lcd_data            ; die Zehnerstelle ausgeben&lt;br /&gt;
        subi    temp1, -10          ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                    ; vorhergehende Schleife 10 zuviel&lt;br /&gt;
                                    ; abgezogen hat&lt;br /&gt;
                                    ; das Subtrahieren von -10&lt;br /&gt;
                                    ; = Addition von +10 ist ein Trick&lt;br /&gt;
                                    ; da kein addi Befehl existiert&lt;br /&gt;
        ldi     temp2, &#039;0&#039;          ; die übrig gebliebenen Einer&lt;br /&gt;
        add     temp1, temp2        ; noch ausgeben&lt;br /&gt;
        rcall   lcd_data&lt;br /&gt;
&lt;br /&gt;
        pop     temp2               ; Register wieder herstellen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Interrupt-Routine werden wieder, genauso wie vorher, die Anzahl der Interrupt-Aufrufe gezählt. Beim 100. Aufruf sind daher 40.000 * 100 = 4.000.000 Takte vergangen und da der Quarz mit 4.000.000 Schwingungen in der Sekunde arbeitet, ist daher eine Sekunde vergangen. Sie wird genauso wie vorher registriert und die Uhr entsprechend hochgezählt. Wird jetzt die Uhr mit einer kommerziellen verglichen, dann fällt nach einiger Zeit auf ... Sie geht immer noch falsch! Was ist jetzt die Ursache? Die Ursache liegt in einem Problem, das nicht direkt behebbar ist. Am Quarz! Auch wenn auf dem Quarz drauf steht, dass er eine Frequenz von 4MHz hat, so stimmt das nicht exakt. Auch Quarze haben Fertigungstoleranzen und verändern ihre Frequenz mit der Temperatur. Typisch liegt die Fertigungstoleranz bei +/- 100ppm = 0,01% (&#039;&#039;&#039;p&#039;&#039;&#039;arts &#039;&#039;&#039;p&#039;&#039;&#039;er &#039;&#039;&#039;m&#039;&#039;&#039;illion, Millionstel Teile), die Temperaturdrift zwischen -40 Grad und 85 Grad liegt je nach Typ in der selben Größenordnung. Das bedeutet, dass die Uhr pro Monat um bis zu 268 Sekunden (~4 1/2 Minuten) falsch gehen kann. Diese Einflüsse auf die Quarzfrequenz sind aber messbar und per Hardware oder Software behebbar. In Uhren kommen normalerweise genauer gefertigte Uhrenquarze zum Einsatz, die vom Uhrmacher auch noch auf die exakte Frequenz abgeglichen werden (mittels Kondensatoren und Frequenzzähler). Ein Profi verwendet einen sehr genauen Frequenzzähler, womit er innerhalb weniger Sekunden die Frequenz sehr genau messen kann. Als Hobbybastler kann man die Uhr eine zeitlang (Tage, Wochen) laufen lassen und die Abweichung feststellen (z.&amp;amp;nbsp;B. exakt 20:00 Uhr zum Start der Tagsschau). Aus dieser Abweichung lässt sich dann errechnen, wie schnell der Quarz wirklich schwingt. Und da dank CTC die Messperiode taktgenau eingestellt werden kann, ist es möglich, diesen Frequenzfehler auszugleichen. Der genaue Vorgang ist in dem Wikiartikel [[AVR - Die genaue Sekunde / RTC]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Timer|&lt;br /&gt;
zurücklink=AVR-Tutorial: Timer|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=ADC|&lt;br /&gt;
vorlink=AVR-Tutorial: ADC}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=41467</id>
		<title>Benutzer:Lkmiller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=41467"/>
		<updated>2009-12-17T16:52:07Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier gibts einen Teil meiner Erkenntnisse zum Thema VHDL und FPGA:&lt;br /&gt;
[http://www.lothar-miller.de www.lothar-miller.de]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=41466</id>
		<title>Benutzer:Lkmiller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Lkmiller&amp;diff=41466"/>
		<updated>2009-12-17T16:51:33Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: Die Seite wurde neu angelegt: „Hier gibts einen Teil meiner Erkenntnisse zum Thema VHDL und FPGA: [http://www.lothar-miller.de VHDL und FPGAs]“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier gibts einen Teil meiner Erkenntnisse zum Thema VHDL und FPGA:&lt;br /&gt;
[http://www.lothar-miller.de VHDL und FPGAs]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=39935</id>
		<title>VHDL</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=39935"/>
		<updated>2009-10-14T11:16:18Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Vergleich eines std_logic_vector mit einer Konstanten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VHDL als Programmiersprache ==&lt;br /&gt;
&lt;br /&gt;
VHDL ist im Grunde eine ganz normale Programmiersprache die kompiliert und ausgeführt werden kann. In dieser Funktion wird VHDL haupsächlich zum Schreiben von Simulationen (Testbenches) verwendet. Näheres dazu im Artikel [[VHDL Testbench]].&lt;br /&gt;
&lt;br /&gt;
== VHDL als Hardwarebeschreibungssprache ==&lt;br /&gt;
&lt;br /&gt;
In VHDL lassen sich auch digitale Schaltungen beschreiben. Die Beschreibung wird von einer Synthesesoftware in eine Netzliste umgesetzt. Der grundlegende Unterschied zur Verwendung von VHDL als Programmiersprache ist, dass man nicht beliebigen Code schreiben kann, sondern sich an bestimmte Strukturen halten muss die der Synthesizer kennt und in Hardware umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Wie diese Strukturen im allgemeinen aussehen ist weiter unten beschrieben, Details erfährt man in der Dokumentation der Software, z.B. dem [http://toolbox.xilinx.com/docsan/xilinx9/books/docs/xst/xst.pdf XST User Guide].&lt;br /&gt;
&lt;br /&gt;
== Grundregeln für synthetisierbaren VHDL-Code ==&lt;br /&gt;
&lt;br /&gt;
Folgende Grundregeln sollten vor allem Anfänger auf jeden Fall einhalten:&lt;br /&gt;
&lt;br /&gt;
* Es darf nur zwei Arten von Prozessen geben:&lt;br /&gt;
*# Rein kombinatorische Prozesse (keine Zustandsspeicher):&lt;br /&gt;
*#* Alle Signale die im Prozess gelesen werden in die sensitivity list eintragen&lt;br /&gt;
*#* Jedes Ausgangssignal muss in jedem if-Zweig einen von sich selbst verschiedenen Wert zugewiesen bekommen, damit keine [[Latch]]es entstehen (mein_signal &amp;lt;= mein_signal; ist unzulässig!)&lt;br /&gt;
*#* Keine Taktflankenabfrage&lt;br /&gt;
*# Rein getaktete Prozesse (Flip-Flops als Zustandsspeicher):&lt;br /&gt;
*#* Nur Clk und asynchroner Reset in die sensitivity list&lt;br /&gt;
*#* Maximal ein [[Reset für FPGA/CPLD | Reset]]&lt;br /&gt;
*#* Nur eine Taktflankenabfrage (rising_edge)&lt;br /&gt;
* Nur ein einziger Takt im gesamten Design, nur steigende ODER fallende Taktflanke auswerten. Um eine Flanke eines anderen Signals zu erkennen, siehe [[VHDL Flankenerkennung]].&lt;br /&gt;
* Keine Takte runterteilen, stattdessen [[Taktung FPGA/CPLD#Clock Enable|Clock Enable]]  verwenden.&lt;br /&gt;
* Kein &amp;quot;after&amp;quot;, &amp;quot;wait for&amp;quot; o.ä. verwenden, das ist nicht synthetisierbar&lt;br /&gt;
* Keine shared variables verwenden&lt;br /&gt;
* Variablen nur dann verwenden, wenn man genau verstanden hat was der Unterschied zu einem Signal ist, und sich das Problem nicht auch mit Signalen lösen lässt&lt;br /&gt;
* Kein IEEE.STD_LOGIC_(UN)SIGNED verwenden, sondern IEEE.NUMERIC_STD (siehe [[Rechnen in VHDL]])&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Kombinatorischer Prozess ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(a,b,c)&lt;br /&gt;
begin&lt;br /&gt;
  y &amp;lt;= a + b + c;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Getakteter Prozess ohne Reset ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    x &amp;lt;= a + b + c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
===&amp;lt;code&amp;gt;CLK=&#039;1&#039; and CLK&#039;event&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;rising_edge()&amp;lt;/code&amp;gt;?===&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Bei der Beschreibung von FlipFlops werden je nach Buch/Programmierer zwei unterschiedliche Konstrukte benutzt:&lt;br /&gt;
&lt;br /&gt;
Variante 1 (klassisch):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if clk = &#039;1&#039; and clk&#039;event then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
und Variante 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche ist zu empfehlen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antwort:&#039;&#039;&#039;&lt;br /&gt;
Kurz gesagt bei der Synthese gibt es keine Unterschiede, in der Simulation kleine. Verwende die besser lesbare Variante. Die mit &#039;&#039;rising_edge()&#039;&#039; (bzw. &#039;&#039;falling_edge()&#039;&#039;) gilt allgemein als die bessere (Lesbarkeit und Simulationsgenauigkeit).&lt;br /&gt;
&lt;br /&gt;
Wer es genau wissen will: Die klassische Variante ist nur korrekt für Signale die nur die Werte &#039;1&#039; und &#039;0&#039; annehmen können. Bei Signalen vom Typ std_logic (der Standardtyp für Signale) werden Flanken erkannt, die tatsächlich keine sind.&lt;br /&gt;
Zum Beispiel beim Treiben eines PullUps (&#039;H&#039; -&amp;gt; &#039;1&#039; keine tatsächliche Flanke aber für &#039;&#039;clk = &#039;1&#039; and clk&#039;event&#039;&#039;) oder beim Simulationsstart ohne Initialisierungswert für die Signale (&#039;U&#039; -&amp;gt; &#039;1&#039;).(Signale mit Initialisierungswert werden so deklariert: &#039;&#039;signal a: std_logic := &#039;0&#039;; &#039;&#039;).&lt;br /&gt;
Die Funktionen &#039;&#039;rising_edge()&#039;&#039; und &#039;&#039;falling_edge()&#039;&#039; konvertieren den std_logic Wert vor dem Vergleich auf &#039;1&#039; bzw. &#039;0&#039; und simulieren so keine Flanke wo in der echten Hardware auch keine ist.&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/forum/read-9-391894.html&lt;br /&gt;
&lt;br /&gt;
===Wann und warum verwendet man Variablen?===&lt;br /&gt;
&lt;br /&gt;
* Variablen sind als Zwischenergebnisse / Synonyme für aus Kombinatorik gewonnene Werte / Signale zu verstehen. Sie erhalten jeweils &amp;quot;sofort&amp;quot; nach der Zuweisung ihren neuen Wert, der direkt an anderer Stelle genutzt werden kann - so, als läge eine direkte Verdrahtung vor. Die Nutzung von Variablen entkoppelt somit jegliche Berechung von den zeitlichen Randbedingungen, speziell dem Takt. Damit ist es möglich, komplexe Architekturen und Modellverhalten innerhalb von Simulationen ohne einen Zeitverlust zu berechnen, siehe Beispiele unten.&lt;br /&gt;
&lt;br /&gt;
* Signale erhalten ihren neu zugewiesenen Wert dagegen erst nach dem vollständigen Abarbeiten eines Prozesses, praktisch nach einem Delta-Delay oder nach einer spezifizierten Zeit. Sie repräsentieren eine physikalische Signalkette mit tatsächlichem Datenfluss. Während Variablen daher in einem Prozess gleich weiterverwendet werden können, sind Signale faktisch erst mit dem nächsten Takt aktuell (das Delta-Delay führt dazu, dass der Wert für diesen Durchlauf noch nicht gilt, der nächste Durchlauf des getakteten Prozesses passiert dann erst einen Clockcycle später.&lt;br /&gt;
&lt;br /&gt;
* Bei asynchronen Prozessen wird der Prozess bei der Verwendung von Signalen dann nochmals gestartet ... (oder so oft, so viele voneinander abhängige Signalzuweisungen drin sind), bei Variablen wird er in einem Durchlauf berechnet (Simulationszeit!).&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Signalen&lt;br /&gt;
-- die letzte Anweisung ist gültig und überschreibt alle vorhergehenden Anweisungen&lt;br /&gt;
&lt;br /&gt;
-- steht real in der Signaldefinition über begin&lt;br /&gt;
signal a: std_logic;&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a &amp;lt;= a and b;&lt;br /&gt;
    a &amp;lt;= a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and c, die Zeile zuvor wird ignoriert&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Variablen&lt;br /&gt;
-- Aufeinanderfolgende Anweisungen werden sofort logisch wirksam und in die neue Anweisung einbezogen, die Anweisungen werden somit verkettet&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
  variable a: std_logic;&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a := a and b;&lt;br /&gt;
    a := a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and b and c, Verkettung der Anweisung wie in normalen Programmiersprachen&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Es kann recht unübersichtlich werden, wenn man eine komplexe Berechnung hat und diese mit vielen Klammerebenen verschachtelt direkt in der Signalzuweisung beschreibt. Hier kann es besser sein, den Wert &amp;quot;nach und nach&amp;quot; über Variablen &amp;quot;zusammenzubauen&amp;quot; und erst am Schluss auf ein Signal zuzuweisen.&lt;br /&gt;
&lt;br /&gt;
* Manchmal möchte man gemeinsame Teilausdrücke vorab berechnen, z.B.&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Sig1 := A + B;&lt;br /&gt;
  Sig2 := C + D;&lt;br /&gt;
  Sig3 := E + F;&lt;br /&gt;
  Result1 &amp;lt;= Sig1 - Sig2;&lt;br /&gt;
  Result2 &amp;lt;= Sig1 - Sig3;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
ist i.d.R. besser als&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Result1 &amp;lt;= (A + B) - (C + D);&lt;br /&gt;
  Result2 &amp;lt;= (A + B) - (E + F);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Wenns komplexer wird, ist es auch einfacher, daran was zu ändern.&lt;br /&gt;
&lt;br /&gt;
* Verschiedenen Synthesetools können manchmal mehr, manchmal weniger gut optimieren. So kann man z.B. durch das Zusammenfassen eines Teilausdruckes eine bessere Optimierung erreichen (Stichwort Resource-Sharing). Z.B.:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    res &amp;lt;= a+b;&lt;br /&gt;
  else -- opcode = sub&lt;br /&gt;
    res &amp;lt;= a-b;&lt;br /&gt;
  end if;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    var1 := b;&lt;br /&gt;
  else&lt;br /&gt;
    var1 := -b;&lt;br /&gt;
  end if;&lt;br /&gt;
  res &amp;lt;= a+var1;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall wird ggf. ein Addierer und ein Subtrahierer (noch&#039;n Addierer) eingebaut und das Ergebniss gemultiplext, im zweiten Fall wird eventuell nur ein Addierer eingebaut und der b-Eingang des Addierers gemultiplext. Sind a und b beispielsweise 32-Bit-Vektoren, dann macht das HW-mäßig schon was aus.&lt;br /&gt;
Gute Synthesetools sollten dies aber mittlerweile automatisch machen, so das in beiden Fällen dasselbe rauskommt (war nicht immer so). (BTW, ich selber tendiere normalerweise zur ersten Variante, da besser lesbar - und man die HW-Implementierung nicht notwendigerweise vorwegnehmen soll, aber da hat jeder seine eigene Meinung zu ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Bei Analogen Filtern ist es oft notwendig, iterative Schleifen zu verwenden, um die Ergebnisse zu erlangen. Nur die Verwendung von Variablen und Loops gestattet es, komplexe Rechenergebnisse von &amp;quot;analoger&amp;quot; Reaktionsgeschwindigkeit vom Simulator zu erlangen, ohne Simulationszeit oder gar Takte vergehen zu lassen.&lt;br /&gt;
&lt;br /&gt;
==== Geschwindigkeit ====&lt;br /&gt;
Simulatoren rechnen i.d.R. mit Variablen schneller als mit Signalen. Hat man also viele Prozesse mit Signalen vs. Variablen in einem großen Design, dann kann das schon was ausmachen ... Siehe auch oben bei asynchronen Prozessen, die mit Signalen ggf. wesentlich öfters durchlaufen werden. Auch wenn also ein System mit Signalen abzubilden ist, so empfiehlt sich der Einsatz von Variablen mitunter dennoch.&lt;br /&gt;
&lt;br /&gt;
Ausnahme: I.d.R. sind nur auf Signalen und getakteten Prozessen basierende Modelle voll und leicht synthesierbar. Soll z.B. ein Modell in einem [[HIL]] System getestet werden, ist die Verwendung von Signalen mit entsprechender Berücksichtigung des timing angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== Kodierschaltungen ===&lt;br /&gt;
Kodierschaltungen (Coder) sind Schaltungen mit einem mehrstelligen Ein- und Ausgang. In der Schaltung werden keine FF oder andere Speicher benutzt. Ein typisches Beispiel ist die Wandlung einer Binärzahl in eine Binär Codierte Dezimalzahl. Eine sehr übersichtliche Schreibweise benutzt ein Konstanten-Feld. &lt;br /&gt;
&lt;br /&gt;
Vor- und Nachteile verschiedener VHDL-Varianten einen Coder zu beschreiben werden [[TTL74185|hier]] besprochen. &lt;br /&gt;
&lt;br /&gt;
===If außerhalb eines Prozesses?===&lt;br /&gt;
If-Bedinungen sind außerhalb eines Prozesses nicht möglich.&lt;br /&gt;
Lösung:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
 vector_or &amp;lt;= &#039;0&#039; when oder_vector = X&amp;quot;0000&amp;quot; else &#039;1&#039;;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Dies nennt der Fachman bedingte Zuweisung (conditional assignment).&lt;br /&gt;
&lt;br /&gt;
=== Alle Leitungen auf &amp;quot;0000..&amp;quot; bzw &amp;quot;1111...&amp;quot; setzen? ===&lt;br /&gt;
&lt;br /&gt;
Auf null setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;0&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf eins setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;1&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vergleich eines std_logic_vector mit einer Konstanten===&lt;br /&gt;
&lt;br /&gt;
Um einen std_logic_vector auf &amp;quot;00000...&amp;quot; oder &amp;quot;1111...&amp;quot; zu vergleichen, kann die (others =&amp;gt; &#039;0&#039;) Schreibweise nicht verwendet werden, weil die Vektorbreite dabei nicht definiert ist. Hier muss also ein Bereich angegeben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (15 downto 0=&amp;gt;&#039;0&#039;) then..&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (VECTOR&#039;range=&amp;gt;&#039;0&#039;) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Diese Schreibweise gilt universell für alle Libs.&lt;br /&gt;
&lt;br /&gt;
Werte ungleich &amp;quot;000..&amp;quot; und &amp;quot;1111...&amp;quot; müssen bei Verwendung der NUMERIC_STD.ALL etwas aufwendiger umgewandelt werden (hier der Wert 77):&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = std_logic_vector(to_unsigned(77,VECTOR&#039;length)) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die herstellerabhängige Synopsis-Lib STD_LOGIC_UNSIGNED.ALL verwendet, kann auch einfach so geschrieben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 0 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Genauso einfach geht ein Vergleich auf z.B. den Wert 77:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 77 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Report von std_logic_vector===&lt;br /&gt;
&lt;br /&gt;
Report kann nur Strings verarbeiten, deswegen muss ein std_logic_vector in einen String verwandelt werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
report integer&#039;image(to_integer(unsigned(rdata)));&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===parallel -&amp;gt; seriell: Schieberegister oder Multiplexer?===&lt;br /&gt;
* http://www.mikrocontroller.net/topic/78556&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
===Kurzreferenzen===&lt;br /&gt;
* http://wwwhome.cs.utwente.nl/~molenkam/vhdl_boek/8_app_i.pdf&lt;br /&gt;
* http://wwwhome.cs.utwente.nl/~molenkam/vhdl_boek/9_app_i.pdf&lt;br /&gt;
* http://www.tcnj.edu/~hernande/r/VHDL_QRC__01.pdf - VHDL Quick Reference Card&lt;br /&gt;
* http://www.lrr.in.tum.de/~acher/tgi/uebung/VHDL-Buch.pdf&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/21066/VHDL_Coding_eng.pdf - Design Rules &amp;amp; Coding Style&lt;br /&gt;
&lt;br /&gt;
===Online-Bücher===&lt;br /&gt;
http://de.wikibooks.org/wiki/VHDL&lt;br /&gt;
&lt;br /&gt;
====Deutsch====&lt;br /&gt;
* [http://www.nt-nv.fh-koeln.de/Labor/VhdlEasy/index.html VHDL easy] - deutschsprachige VHDL-Einführung von der FH Köln&lt;br /&gt;
* [https://www-itiv.etec.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/book/download.html Schaltungsdesign mit VHDL] - komplettes Buch als PDF&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/doc/kurzanleitung/vhdl.pdf VHDL Kurzanleitung] - deutschsprachig, ca. 110 Seiten &lt;br /&gt;
* [http://www.informatik.uni-ulm.de/ni/Lehre/SS03/ProSemFPGA/VHDL-Grundlagen.pdf VHDL Grundlagen] 15 Seiten Grundlagen, Universität Ulm&lt;br /&gt;
* [http://wwwlrh.fh-bielefeld.de/vhdl_vor/VHDL_VOR.htm Schaltungs-Synthese mit VHDL] eine Einfuehrung&lt;br /&gt;
* [http://www.vhdl-online.de/tutorial/ VHDL Tutorial] - umfangreiches Tutorial zu VHDL&lt;br /&gt;
* [http://de.wikibooks.org/wiki/VHDL VHDL - Wiki - Buch] VHDL Syntax mit vielen Beispielen. Da wiki steht aller Wochen mehr (korrigierter) Inhalt zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
====English====&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/ Hamburg VHDL archive]&lt;br /&gt;
* [http://www.ti.informatik.uni-frankfurt.de/Docs/cook/ VHDL Cookbook] - komplettes Buch&lt;br /&gt;
* [http://www.fpga4fun.com/VHDLTips.html VHDL Tips and Tricks]&lt;br /&gt;
* [http://www.doulos.com/knowhow/vhdl_designers_guide/ The Designer&#039;s Guide to VHDL]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Tutorial: Learn by Example] - viele Beispiele mit Testbenches&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
[[Category:Programmiersprachen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=39932</id>
		<title>VHDL</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=39932"/>
		<updated>2009-10-14T07:21:34Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VHDL als Programmiersprache ==&lt;br /&gt;
&lt;br /&gt;
VHDL ist im Grunde eine ganz normale Programmiersprache die kompiliert und ausgeführt werden kann. In dieser Funktion wird VHDL haupsächlich zum Schreiben von Simulationen (Testbenches) verwendet. Näheres dazu im Artikel [[VHDL Testbench]].&lt;br /&gt;
&lt;br /&gt;
== VHDL als Hardwarebeschreibungssprache ==&lt;br /&gt;
&lt;br /&gt;
In VHDL lassen sich auch digitale Schaltungen beschreiben. Die Beschreibung wird von einer Synthesesoftware in eine Netzliste umgesetzt. Der grundlegende Unterschied zur Verwendung von VHDL als Programmiersprache ist, dass man nicht beliebigen Code schreiben kann, sondern sich an bestimmte Strukturen halten muss die der Synthesizer kennt und in Hardware umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Wie diese Strukturen im allgemeinen aussehen ist weiter unten beschrieben, Details erfährt man in der Dokumentation der Software, z.B. dem [http://toolbox.xilinx.com/docsan/xilinx9/books/docs/xst/xst.pdf XST User Guide].&lt;br /&gt;
&lt;br /&gt;
== Grundregeln für synthetisierbaren VHDL-Code ==&lt;br /&gt;
&lt;br /&gt;
Folgende Grundregeln sollten vor allem Anfänger auf jeden Fall einhalten:&lt;br /&gt;
&lt;br /&gt;
* Es darf nur zwei Arten von Prozessen geben:&lt;br /&gt;
*# Rein kombinatorische Prozesse (keine Zustandsspeicher):&lt;br /&gt;
*#* Alle Signale die im Prozess gelesen werden in die sensitivity list eintragen&lt;br /&gt;
*#* Jedes Ausgangssignal muss in jedem if-Zweig einen von sich selbst verschiedenen Wert zugewiesen bekommen, damit keine [[Latch]]es entstehen (mein_signal &amp;lt;= mein_signal; ist unzulässig!)&lt;br /&gt;
*#* Keine Taktflankenabfrage&lt;br /&gt;
*# Rein getaktete Prozesse (Flip-Flops als Zustandsspeicher):&lt;br /&gt;
*#* Nur Clk und asynchroner Reset in die sensitivity list&lt;br /&gt;
*#* Maximal ein [[Reset für FPGA/CPLD | Reset]]&lt;br /&gt;
*#* Nur eine Taktflankenabfrage (rising_edge)&lt;br /&gt;
* Nur ein einziger Takt im gesamten Design, nur steigende ODER fallende Taktflanke auswerten. Um eine Flanke eines anderen Signals zu erkennen, siehe [[VHDL Flankenerkennung]].&lt;br /&gt;
* Keine Takte runterteilen, stattdessen [[Taktung FPGA/CPLD#Clock Enable|Clock Enable]]  verwenden.&lt;br /&gt;
* Kein &amp;quot;after&amp;quot;, &amp;quot;wait for&amp;quot; o.ä. verwenden, das ist nicht synthetisierbar&lt;br /&gt;
* Keine shared variables verwenden&lt;br /&gt;
* Variablen nur dann verwenden, wenn man genau verstanden hat was der Unterschied zu einem Signal ist, und sich das Problem nicht auch mit Signalen lösen lässt&lt;br /&gt;
* Kein IEEE.STD_LOGIC_(UN)SIGNED verwenden, sondern IEEE.NUMERIC_STD (siehe [[Rechnen in VHDL]])&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Kombinatorischer Prozess ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(a,b,c)&lt;br /&gt;
begin&lt;br /&gt;
  y &amp;lt;= a + b + c;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Getakteter Prozess ohne Reset ===&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    x &amp;lt;= a + b + c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
===&amp;lt;code&amp;gt;CLK=&#039;1&#039; and CLK&#039;event&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;rising_edge()&amp;lt;/code&amp;gt;?===&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Bei der Beschreibung von FlipFlops werden je nach Buch/Programmierer zwei unterschiedliche Konstrukte benutzt:&lt;br /&gt;
&lt;br /&gt;
Variante 1 (klassisch):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if clk = &#039;1&#039; and clk&#039;event then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
und Variante 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    --snip&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche ist zu empfehlen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antwort:&#039;&#039;&#039;&lt;br /&gt;
Kurz gesagt bei der Synthese gibt es keine Unterschiede, in der Simulation kleine. Verwende die besser lesbare Variante. Die mit &#039;&#039;rising_edge()&#039;&#039; (bzw. &#039;&#039;falling_edge()&#039;&#039;) gilt allgemein als die bessere (Lesbarkeit und Simulationsgenauigkeit).&lt;br /&gt;
&lt;br /&gt;
Wer es genau wissen will: Die klassische Variante ist nur korrekt für Signale die nur die Werte &#039;1&#039; und &#039;0&#039; annehmen können. Bei Signalen vom Typ std_logic (der Standardtyp für Signale) werden Flanken erkannt, die tatsächlich keine sind.&lt;br /&gt;
Zum Beispiel beim Treiben eines PullUps (&#039;H&#039; -&amp;gt; &#039;1&#039; keine tatsächliche Flanke aber für &#039;&#039;clk = &#039;1&#039; and clk&#039;event&#039;&#039;) oder beim Simulationsstart ohne Initialisierungswert für die Signale (&#039;U&#039; -&amp;gt; &#039;1&#039;).(Signale mit Initialisierungswert werden so deklariert: &#039;&#039;signal a: std_logic := &#039;0&#039;; &#039;&#039;).&lt;br /&gt;
Die Funktionen &#039;&#039;rising_edge()&#039;&#039; und &#039;&#039;falling_edge()&#039;&#039; konvertieren den std_logic Wert vor dem Vergleich auf &#039;1&#039; bzw. &#039;0&#039; und simulieren so keine Flanke wo in der echten Hardware auch keine ist.&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/forum/read-9-391894.html&lt;br /&gt;
&lt;br /&gt;
===Wann und warum verwendet man Variablen?===&lt;br /&gt;
&lt;br /&gt;
* Variablen sind als Zwischenergebnisse / Synonyme für aus Kombinatorik gewonnene Werte / Signale zu verstehen. Sie erhalten jeweils &amp;quot;sofort&amp;quot; nach der Zuweisung ihren neuen Wert, der direkt an anderer Stelle genutzt werden kann - so, als läge eine direkte Verdrahtung vor. Die Nutzung von Variablen entkoppelt somit jegliche Berechung von den zeitlichen Randbedingungen, speziell dem Takt. Damit ist es möglich, komplexe Architekturen und Modellverhalten innerhalb von Simulationen ohne einen Zeitverlust zu berechnen, siehe Beispiele unten.&lt;br /&gt;
&lt;br /&gt;
* Signale erhalten ihren neu zugewiesenen Wert dagegen erst nach dem vollständigen Abarbeiten eines Prozesses, praktisch nach einem Delta-Delay oder nach einer spezifizierten Zeit. Sie repräsentieren eine physikalische Signalkette mit tatsächlichem Datenfluss. Während Variablen daher in einem Prozess gleich weiterverwendet werden können, sind Signale faktisch erst mit dem nächsten Takt aktuell (das Delta-Delay führt dazu, dass der Wert für diesen Durchlauf noch nicht gilt, der nächste Durchlauf des getakteten Prozesses passiert dann erst einen Clockcycle später.&lt;br /&gt;
&lt;br /&gt;
* Bei asynchronen Prozessen wird der Prozess bei der Verwendung von Signalen dann nochmals gestartet ... (oder so oft, so viele voneinander abhängige Signalzuweisungen drin sind), bei Variablen wird er in einem Durchlauf berechnet (Simulationszeit!).&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Signalen&lt;br /&gt;
-- die letzte Anweisung ist gültig und überschreibt alle vorhergehenden Anweisungen&lt;br /&gt;
&lt;br /&gt;
-- steht real in der Signaldefinition über begin&lt;br /&gt;
signal a: std_logic;&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a &amp;lt;= a and b;&lt;br /&gt;
    a &amp;lt;= a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and c, die Zeile zuvor wird ignoriert&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Nutzung von Variablen&lt;br /&gt;
-- Aufeinanderfolgende Anweisungen werden sofort logisch wirksam und in die neue Anweisung einbezogen, die Anweisungen werden somit verkettet&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
  variable a: std_logic;&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    a := a and b;&lt;br /&gt;
    a := a and c;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Ergebnis: a &amp;lt;= a and b and c, Verkettung der Anweisung wie in normalen Programmiersprachen&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Es kann recht unübersichtlich werden, wenn man eine komplexe Berechnung hat und diese mit vielen Klammerebenen verschachtelt direkt in der Signalzuweisung beschreibt. Hier kann es besser sein, den Wert &amp;quot;nach und nach&amp;quot; über Variablen &amp;quot;zusammenzubauen&amp;quot; und erst am Schluss auf ein Signal zuzuweisen.&lt;br /&gt;
&lt;br /&gt;
* Manchmal möchte man gemeinsame Teilausdrücke vorab berechnen, z.B.&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Sig1 := A + B;&lt;br /&gt;
  Sig2 := C + D;&lt;br /&gt;
  Sig3 := E + F;&lt;br /&gt;
  Result1 &amp;lt;= Sig1 - Sig2;&lt;br /&gt;
  Result2 &amp;lt;= Sig1 - Sig3;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
ist i.d.R. besser als&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  Result1 &amp;lt;= (A + B) - (C + D);&lt;br /&gt;
  Result2 &amp;lt;= (A + B) - (E + F);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Wenns komplexer wird, ist es auch einfacher, daran was zu ändern.&lt;br /&gt;
&lt;br /&gt;
* Verschiedenen Synthesetools können manchmal mehr, manchmal weniger gut optimieren. So kann man z.B. durch das Zusammenfassen eines Teilausdruckes eine bessere Optimierung erreichen (Stichwort Resource-Sharing). Z.B.:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    res &amp;lt;= a+b;&lt;br /&gt;
  else -- opcode = sub&lt;br /&gt;
    res &amp;lt;= a-b;&lt;br /&gt;
  end if;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
  if (opcode = add) then&lt;br /&gt;
    var1 := b;&lt;br /&gt;
  else&lt;br /&gt;
    var1 := -b;&lt;br /&gt;
  end if;&lt;br /&gt;
  res &amp;lt;= a+var1;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall wird ggf. ein Addierer und ein Subtrahierer (noch&#039;n Addierer) eingebaut und das Ergebniss gemultiplext, im zweiten Fall wird eventuell nur ein Addierer eingebaut und der b-Eingang des Addierers gemultiplext. Sind a und b beispielsweise 32-Bit-Vektoren, dann macht das HW-mäßig schon was aus.&lt;br /&gt;
Gute Synthesetools sollten dies aber mittlerweile automatisch machen, so das in beiden Fällen dasselbe rauskommt (war nicht immer so). (BTW, ich selber tendiere normalerweise zur ersten Variante, da besser lesbar - und man die HW-Implementierung nicht notwendigerweise vorwegnehmen soll, aber da hat jeder seine eigene Meinung zu ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Bei Analogen Filtern ist es oft notwendig, iterative Schleifen zu verwenden, um die Ergebnisse zu erlangen. Nur die Verwendung von Variablen und Loops gestattet es, komplexe Rechenergebnisse von &amp;quot;analoger&amp;quot; Reaktionsgeschwindigkeit vom Simulator zu erlangen, ohne Simulationszeit oder gar Takte vergehen zu lassen.&lt;br /&gt;
&lt;br /&gt;
==== Geschwindigkeit ====&lt;br /&gt;
Simulatoren rechnen i.d.R. mit Variablen schneller als mit Signalen. Hat man also viele Prozesse mit Signalen vs. Variablen in einem großen Design, dann kann das schon was ausmachen ... Siehe auch oben bei asynchronen Prozessen, die mit Signalen ggf. wesentlich öfters durchlaufen werden. Auch wenn also ein System mit Signalen abzubilden ist, so empfiehlt sich der Einsatz von Variablen mitunter dennoch.&lt;br /&gt;
&lt;br /&gt;
Ausnahme: I.d.R. sind nur auf Signalen und getakteten Prozessen basierende Modelle voll und leicht synthesierbar. Soll z.B. ein Modell in einem [[HIL]] System getestet werden, ist die Verwendung von Signalen mit entsprechender Berücksichtigung des timing angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== Kodierschaltungen ===&lt;br /&gt;
Kodierschaltungen (Coder) sind Schaltungen mit einem mehrstelligen Ein- und Ausgang. In der Schaltung werden keine FF oder andere Speicher benutzt. Ein typisches Beispiel ist die Wandlung einer Binärzahl in eine Binär Codierte Dezimalzahl. Eine sehr übersichtliche Schreibweise benutzt ein Konstanten-Feld. &lt;br /&gt;
&lt;br /&gt;
Vor- und Nachteile verschiedener VHDL-Varianten einen Coder zu beschreiben werden [[TTL74185|hier]] besprochen. &lt;br /&gt;
&lt;br /&gt;
===If außerhalb eines Prozesses?===&lt;br /&gt;
If-Bedinungen sind außerhalb eines Prozesses nicht möglich.&lt;br /&gt;
Lösung:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
 vector_or &amp;lt;= &#039;0&#039; when oder_vector = X&amp;quot;0000&amp;quot; else &#039;1&#039;;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Dies nennt der Fachman bedingte Zuweisung (conditional assignment).&lt;br /&gt;
&lt;br /&gt;
=== Alle Leitungen auf &amp;quot;0000..&amp;quot; bzw &amp;quot;1111...&amp;quot; setzen? ===&lt;br /&gt;
&lt;br /&gt;
Auf null setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;0&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf eins setzen:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
count &amp;lt;= (others =&amp;gt; &#039;1&#039;);&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vergleich eines std_logic_vector mit einer Konstanten===&lt;br /&gt;
&lt;br /&gt;
Um einen std_logic_vector auf &amp;quot;00000...&amp;quot; oder &amp;quot;1111...&amp;quot; zu vergleichen, kann die (others =&amp;gt; &#039;0&#039;) Schreibweise nicht verwendet werden, weil die Vektorbreite dabei nicht definiert ist. Hier muss also ein Bereich angegeben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (15 downto 0=&amp;gt;&#039;0&#039;) then..&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = (VECTOR&#039;range=&amp;gt;&#039;0&#039;) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Diese Schreibweise gilt universell für alle Libs.&lt;br /&gt;
&lt;br /&gt;
Wird die herstellerabhängige Synopsis-Lib STD_LOGIC_UNSIGNED.ALL verwendet, kann auch einfach so geschrieben werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 0 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
Genauso einfach geht ein Vergleich auf z.B. den Wert 77:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = 0 then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Werte ungleich &amp;quot;000..&amp;quot; und &amp;quot;1111...&amp;quot; müssen bei Verwendung der NUMERIC_STD.ALL etwas aufwendiger umgewandelt werden (hier der Wert 77):&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
if VECTOR = std_logic_vector(to_unsigned(77,VECTOR&#039;length)) then...&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Report von std_logic_vector===&lt;br /&gt;
&lt;br /&gt;
Report kann nur Strings verarbeiten, deswegen muss ein std_logic_vector in einen String verwandelt werden:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
report integer&#039;image(to_integer(unsigned(rdata)));&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===parallel -&amp;gt; seriell: Schieberegister oder Multiplexer?===&lt;br /&gt;
* http://www.mikrocontroller.net/topic/78556&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
===Kurzreferenzen===&lt;br /&gt;
* http://wwwhome.cs.utwente.nl/~molenkam/vhdl_boek/8_app_i.pdf&lt;br /&gt;
* http://wwwhome.cs.utwente.nl/~molenkam/vhdl_boek/9_app_i.pdf&lt;br /&gt;
* http://www.tcnj.edu/~hernande/r/VHDL_QRC__01.pdf - VHDL Quick Reference Card&lt;br /&gt;
* http://www.lrr.in.tum.de/~acher/tgi/uebung/VHDL-Buch.pdf&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/21066/VHDL_Coding_eng.pdf - Design Rules &amp;amp; Coding Style&lt;br /&gt;
&lt;br /&gt;
===Online-Bücher===&lt;br /&gt;
http://de.wikibooks.org/wiki/VHDL&lt;br /&gt;
&lt;br /&gt;
====Deutsch====&lt;br /&gt;
* [http://www.nt-nv.fh-koeln.de/Labor/VhdlEasy/index.html VHDL easy] - deutschsprachige VHDL-Einführung von der FH Köln&lt;br /&gt;
* [https://www-itiv.etec.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/book/download.html Schaltungsdesign mit VHDL] - komplettes Buch als PDF&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/doc/kurzanleitung/vhdl.pdf VHDL Kurzanleitung] - deutschsprachig, ca. 110 Seiten &lt;br /&gt;
* [http://www.informatik.uni-ulm.de/ni/Lehre/SS03/ProSemFPGA/VHDL-Grundlagen.pdf VHDL Grundlagen] 15 Seiten Grundlagen, Universität Ulm&lt;br /&gt;
* [http://wwwlrh.fh-bielefeld.de/vhdl_vor/VHDL_VOR.htm Schaltungs-Synthese mit VHDL] eine Einfuehrung&lt;br /&gt;
* [http://www.vhdl-online.de/tutorial/ VHDL Tutorial] - umfangreiches Tutorial zu VHDL&lt;br /&gt;
* [http://de.wikibooks.org/wiki/VHDL VHDL - Wiki - Buch] VHDL Syntax mit vielen Beispielen. Da wiki steht aller Wochen mehr (korrigierter) Inhalt zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
====English====&lt;br /&gt;
* [http://tams-www.informatik.uni-hamburg.de/vhdl/ Hamburg VHDL archive]&lt;br /&gt;
* [http://www.ti.informatik.uni-frankfurt.de/Docs/cook/ VHDL Cookbook] - komplettes Buch&lt;br /&gt;
* [http://www.fpga4fun.com/VHDLTips.html VHDL Tips and Tricks]&lt;br /&gt;
* [http://www.doulos.com/knowhow/vhdl_designers_guide/ The Designer&#039;s Guide to VHDL]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Tutorial: Learn by Example] - viele Beispiele mit Testbenches&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
[[Category:Programmiersprachen]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Reset_f%C3%BCr_FPGA/CPLD&amp;diff=32770</id>
		<title>Reset für FPGA/CPLD</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Reset_f%C3%BCr_FPGA/CPLD&amp;diff=32770"/>
		<updated>2008-11-27T13:39:36Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Asynchroner Reset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie jede digitale Schaltung mit FF benötigt auch ein FPGA-Design einen definierten Anfangszustand, den Resetzustand. Nach Art, Verteilung und Auslöser kann der Reset unterschieden werden zu:&lt;br /&gt;
&lt;br /&gt;
*synchroner, asynchroner Reset (FF mit synchronen oder asynchronen Set/Reset Eingängen)&lt;br /&gt;
*High oder Low-aktiver Reset (Der Resetzustand wird mit einer &#039;1&#039; oder &#039;0&#039; eingeleitet. Der Reset ist nie Flankengesteuert (?).&lt;br /&gt;
*Reset nach PowerUp, Abschluss FPGA-Laden, stabiles Taktsignal, externer Resetquelle oder Nutzer (Software) Auslösung.&lt;br /&gt;
* Verteilt über allgemeine Routing-Ressourcen oder globales Set/Reset-Netzwerk&lt;br /&gt;
&lt;br /&gt;
== Implementierung von FlipFlops/Registern mit verschiedenen Resetmöglichkeiten ==&lt;br /&gt;
&lt;br /&gt;
=== Kein Reset ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Laden befindet sich der FPGA immer in einem definierten Zustand, alle Speicherelemente (FF, Schiebeketten, RAM) sind fest geladen. Es bedarf also keiner zusätzlichen Resetschaltung. Die Resetwerte bei Xilinx (VHDL, XST) werden durch den Initwert bei der Signal-Deklaration festgelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
signal is_0_after_FPGA_config: std_logic := &#039;0&#039;;&lt;br /&gt;
signal is_1_after_FPGA_config: std_logic := &#039;1&#039;;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manche Logikelemente (bei Xilinx: shift register SR16E) sind nicht mit einem Reset einsetzbar, die Synthese muss also mehr Aufwand betreiben (siehe [http://www.mikrocontroller.net/topic/74068 Beitrag im Forum]).&lt;br /&gt;
&lt;br /&gt;
Der Resetwert für Speicher kann in VHDL, im ucf oder durch Konfigurationsfiles (Coregen, EDK) definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Asynchroner Reset ===&lt;br /&gt;
&lt;br /&gt;
Traditionell am meisten eingesetzt wird der asynchrone Reset:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk, reset)&lt;br /&gt;
begin&lt;br /&gt;
  if reset = &#039;1&#039; then&lt;br /&gt;
    -- Initialisierung der Register&lt;br /&gt;
  elsif rising_edge(clk) then&lt;br /&gt;
    -- Kombinatorik&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Chipdesign ist er i.d.R. unverzichtbar, bei FPGAs wird er nicht unbedingt benötigt. Er kann sogar zu Problemen führen, wenn die fallenden Flanke des Resetsignals zu einem ungünstigen Zeitpunkt kommt (Siehe [http://www.xilinx.com/support/documentation/white_papers/wp272.pdf Witepaper 272 bei Xilinx]). Je nach Logikdesign und der dadurch bedingten Auswirkung der Resetrücknahme, ist damit u.U. eine Verlängerung des Resetsignales so durchzuführen, daß das Löschen des Signals in jedem Falle ausserhalb des Bereiches möglicher Flankenwechsel des Systemtaktes erfolgen. Generell ist darauf zu achten, daß das asynchrone Resetsignal eine genügend lange Periode besitzt, um erfasst zu werden.&lt;br /&gt;
&lt;br /&gt;
Für [[FPGA]]s und [[PLD]]s ist es daher oftmas sinnvoller, einen synchronen Reset zu benutzen:&lt;br /&gt;
&lt;br /&gt;
=== Synchroner Reset ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
process(clk, reset)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    if reset = &#039;1&#039; then&lt;br /&gt;
      -- Initialisierung der Register&lt;br /&gt;
    else&lt;br /&gt;
      -- Kombinatorik&lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Nutzung eines synchronen Resets, erfordert das Eintakten / Einsynchronisieren des externen Resetsignals, sodaß sichergestellt ist, daß der Resetimpuls in der verarbeitenden clock domain gleichzeitg anliegt und die richtige Länge hat.  Wird dies unterlassen, so kann ein mehrfach in das FPGA hineingeführter Takt im ungünstigsten Fall eines Flankenwechsels von einem FF gerade erkannt und von einem weiter entfernten FF gerade verpasst werden, sodaß der Reset in zwei verschiedenen Taktperioden der Zieldomain verarbeitet wird und die Schaltung so &amp;quot;auseinanderläuft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Resetgenerierung ==&lt;br /&gt;
&lt;br /&gt;
Folgend ein Beispiel einer internen Resetschaltung (auch wenn dergleichen heute im FPGA-Bereich kaum noch nötig ist), die einen 16 Takte langen Reset-Impuls erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
--xilinx spartan3&lt;br /&gt;
--reset  using a 16bit shift register&lt;br /&gt;
&lt;br /&gt;
gen_dcm_srl : SRL16E&lt;br /&gt;
&lt;br /&gt;
 GENERIC MAP (INIT =&amp;gt; X&amp;quot;FFFF&amp;quot;)   -- a  16 clk long &#039;1&#039; -pulse&lt;br /&gt;
 PORT MAP (&lt;br /&gt;
 Q =&amp;gt; rst_dcm_geseco,    --the reset signal for the rest of the design        &lt;br /&gt;
 A0 =&amp;gt; &#039;1&#039;,              --determines length Shiftreg (15+1 bit)  &lt;br /&gt;
 A1 =&amp;gt; &#039;1&#039;,&lt;br /&gt;
 A2 =&amp;gt; &#039;1&#039;,&lt;br /&gt;
 A3 =&amp;gt; &#039;1&#039;,&lt;br /&gt;
 CE =&amp;gt; Locked_DCM_MBSYS, --release reset pulse (here when clock is stable) &lt;br /&gt;
 CLK =&amp;gt; CLK96,           --its a synchronous reset   &lt;br /&gt;
 D =&amp;gt; &#039;0&#039;);              -- non-reset is &#039;0&#039; (high active reset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logische Resets ==&lt;br /&gt;
Neben dem physikalischen Reset, der meist alle FFs gleichzeitig in einen Startzustand versetzt, benötigen viele Applikationen einen logisch neutralen Zustand mit z.B. inaktiven Ausgängen, wodurch teilweise weitere Resetzustände definiert werden müssen. Meist wird hier eine Art Warmstart-Zustand definiert. Auch ist es oft wünschenswert, dass nur Schaltungsteile neu gestartet werden, wenn Fehlfunktionen detektiert wurden, oder die Schaltung in Bereitschaft gesetzt werden soll, während andere essenzielle Funktionen aufrechterhalten werden sollen. Pipelines, algorithmische Rechenblöcke und untergeordnete state machines sind z.B. solche Schaltungsteile.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* Beiträge zum Thema im Forum: http://www.mikrocontroller.net/forum/9?filter=reset*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Testseite&amp;diff=32211</id>
		<title>Testseite</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Testseite&amp;diff=32211"/>
		<updated>2008-10-27T19:34:00Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Noch ein Untertitel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;math&amp;gt;Formel hier einfügen&amp;lt;/math&amp;gt;==Untertitel sind blöd==&lt;br /&gt;
&lt;br /&gt;
[[Noch&#039;n Test...]]&lt;br /&gt;
&lt;br /&gt;
SERVUS, bin der Bratwurst-Hannes :-&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a}{b}&amp;lt;/math&amp;gt;&lt;br /&gt;
Ärgere bitte den Hannes nicht ;-)&lt;br /&gt;
Du meinst, wer dem andern eine Bratwurst brät, hat ein Bratwurstbratgerät...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U=U*sin(a)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Unformatierten Text hier einfügen&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
formatierten Text hier einfügen&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
scheint zu funktionieren...oder auch nicht?&lt;br /&gt;
&lt;br /&gt;
[[eine_neue_seite]]&lt;br /&gt;
&amp;lt;vb&amp;lt;sfb&amp;lt;sfb&amp;lt;fb&amp;lt;fb&lt;br /&gt;
&lt;br /&gt;
==test==&lt;br /&gt;
sdfsdfsdf&lt;br /&gt;
&lt;br /&gt;
== Ein Test ==&lt;br /&gt;
&lt;br /&gt;
Es war einmal ein Testlein, das hatte keinen Platz^^ ;) &amp;lt;br&amp;gt; &amp;lt;b&amp;gt;har har&amp;lt;/b&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
123&lt;br /&gt;
&lt;br /&gt;
--hahaha-blablabla--&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;hanse&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Noch ein Untertitel ==&lt;br /&gt;
&lt;br /&gt;
Will doch mal sehen wie man hier einen weiteren Untertitel einfügt.&lt;br /&gt;
&lt;br /&gt;
ist ganz einfach: auf den link rechts klicken, ist dann eigentlich ein recht, aber wir wollen ja hier nicht politisch werden...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1x1=1&amp;lt;/math&amp;gt;== Check this ==&lt;br /&gt;
Das hier ist nur mal ein Test meinerseits, weil ich noch nichts mit Wiki gemacht habe.&lt;br /&gt;
&lt;br /&gt;
genau...&lt;br /&gt;
&lt;br /&gt;
Und genau hier ist mein erster Satz!&lt;br /&gt;
&lt;br /&gt;
Es funktioniert tatsächlich ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{U(s)}{E(s)}  = F _{PID} (s) = K_R [ 1 + \underbrace {\frac{1}{T_I s}}_{I-Anteil} + \underbrace{\frac{T_Ds}{1+T_Vs}}_{D-Aneil} ] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voll Link:&lt;br /&gt;
http://www.mikrocontroller.net/topic/108625#959992&lt;br /&gt;
&lt;br /&gt;
== Hello World Programme ==&lt;br /&gt;
Hallo? Welt? Bist du das?&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Testseite&amp;diff=32210</id>
		<title>Testseite</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Testseite&amp;diff=32210"/>
		<updated>2008-10-27T19:19:17Z</updated>

		<summary type="html">&lt;p&gt;Lkmiller: /* Noch ein Untertitel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;math&amp;gt;Formel hier einfügen&amp;lt;/math&amp;gt;==Untertitel sind blöd==&lt;br /&gt;
&lt;br /&gt;
[[Noch&#039;n Test...]]&lt;br /&gt;
&lt;br /&gt;
SERVUS, bin der Bratwurst-Hannes :-&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a}{b}&amp;lt;/math&amp;gt;&lt;br /&gt;
Ärgere bitte den Hannes nicht ;-)&lt;br /&gt;
Du meinst, wer dem andern eine Bratwurst brät, hat ein Bratwurstbratgerät...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U=U*sin(a)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Unformatierten Text hier einfügen&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
formatierten Text hier einfügen&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
scheint zu funktionieren...oder auch nicht?&lt;br /&gt;
&lt;br /&gt;
[[eine_neue_seite]]&lt;br /&gt;
&amp;lt;vb&amp;lt;sfb&amp;lt;sfb&amp;lt;fb&amp;lt;fb&lt;br /&gt;
&lt;br /&gt;
==test==&lt;br /&gt;
sdfsdfsdf&lt;br /&gt;
&lt;br /&gt;
== Ein Test ==&lt;br /&gt;
&lt;br /&gt;
Es war einmal ein Testlein, das hatte keinen Platz^^ ;) &amp;lt;br&amp;gt; &amp;lt;b&amp;gt;har har&amp;lt;/b&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
123&lt;br /&gt;
&lt;br /&gt;
--hahaha-blablabla--&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;hanse&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Noch ein Untertitel ==&lt;br /&gt;
&lt;br /&gt;
Will doch mal sehen wie man hier einen weiteren Untertitel einfügt.&lt;br /&gt;
&lt;br /&gt;
ist ganz einfach: auf den link rechts klicken, ist dann eigentlich ein recht, aber wir wollen ja hier nicht politisch werden...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1x1=1&amp;lt;/math&amp;gt;== Check this ==&lt;br /&gt;
Das hier ist nur mal ein Test meinerseits, weil ich noch nichts mit Wiki gemacht habe.&lt;br /&gt;
&lt;br /&gt;
genau...&lt;br /&gt;
&lt;br /&gt;
Und genau hier ist mein erster Satz!&lt;br /&gt;
&lt;br /&gt;
Es funktioniert tatsächlich ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{U(s)}{E(s)}  = F _{PID} (s) = K_R [ 1 + \underbrace {\frac{1}{T_I s}}_{I-Anteil} + \underbrace{\frac{T_Ds}{1+T_Vs}}_{D-Aneil} ] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voll Link:&lt;br /&gt;
http://www.mikrocontroller.net/topic/108625#960010&lt;br /&gt;
&lt;br /&gt;
== Hello World Programme ==&lt;br /&gt;
Hallo? Welt? Bist du das?&lt;/div&gt;</summary>
		<author><name>Lkmiller</name></author>
	</entry>
</feed>