<?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=Elektromeister</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=Elektromeister"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Elektromeister"/>
	<updated>2026-04-10T21:41:28Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Motoransteuerung_mit_PWM&amp;diff=97512</id>
		<title>Motoransteuerung mit PWM</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Motoransteuerung_mit_PWM&amp;diff=97512"/>
		<updated>2017-10-12T17:45:18Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Wahl der PWM-Frequenz */ Schaltverluste&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Allgemeines==&lt;br /&gt;
&lt;br /&gt;
Bei der Dimensionierung der Strombelastbarkeit der Bauteile muss man vor allem 2 Werte betrachten:&lt;br /&gt;
* Stromaufnahme des Motors im normalen Betrieb (also mit der Last)&lt;br /&gt;
* Stromaufnahme bei blockiertem Motor, bzw. Anlaufstrom. Hier wird der Strom nur durch den ohmschen Widerstand im Stromkreis begrenzt, er kann also je nach Motor schnell den 2-3 stelligen Amperebereich erreichen.&lt;br /&gt;
&lt;br /&gt;
Die übliche Dimensionierung richtet sich vor allem nach dem ersten Wert und plant entsprechende Reserven ein (für ein paar Sekunden Faktor 2-5 des Stromes), da der zweite Wert in der Praxis aus Kostengründen meist nur schwer realisierbar und unnötig ist. Daher umgeht man das Problem entweder über eine schnelle Strombegrenzung oder über einen Sanftanlauf indem man die [[PWM]] langsam hoch fährt. Dadurch wird der maximale Strom auf einen deutlich niedrigeren Wert begrenzt, so dass die Bauteile schwächer und kostengünstiger ausfallen können. &lt;br /&gt;
&lt;br /&gt;
Die Spannung am Motor und somit näherungsweise die Leerlaufdrehzahl ist proportional zu dem Tastverhältnis:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Motorspannung} = \text{Betriebsspannung} \cdot \mathrm{Tastverh\ddot{a}ltnis}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Schaltungsvarianten==&lt;br /&gt;
&lt;br /&gt;
===Mosfet mit Freilaufdiode, 1-Quadrantensteller===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM_1.gif|thumb|300px|1-Quadrantensteller]]&lt;br /&gt;
Die einfachste Schaltung besteht nur aus Transistor T1, dem Motor, der Freilaufdiode D1, dem Kondensator C1, sowie der eigentlichen [[PWM]]-Erzeugung und dem [[MOSFET-Übersicht#Mosfet-Treiber | Mosfettreiber]].&lt;br /&gt;
&lt;br /&gt;
In der Einschaltphase von T1 liegt am Motor die gesamte Betriebsspannung an. Die Differenz zwischen der vom sich drehenden Motor erzeugten Generatorspannung und der Betriebsspannung fällt am Wicklungswiderstand sowie der Wicklungsinduktivität ab. Man hat es also mit einer RL Reihenschaltung zu tun. Da der Wicklungswiderstand recht klein ist, steigt der Strom näherungsweise linear an, bis T1 abschaltet. Dann übernimmt D1 den Stromfluss und schließt den Stromkreis solange, bis T1 den Strom wieder übernimmt (oder der Strom abgeklungen ist = lückender Betrieb). Obwohl keine Energie mehr von außen zugeführt wird, wird der Motor weiterhin durch die in der Wicklung gespeicherten Energie versorgt. Der Strom fällt nun wieder linear ab, bis T1 wieder durchsteuert und wieder Energie zuführt.&lt;br /&gt;
&lt;br /&gt;
Der Strom durch die Diode D1 ist von der Amplitude her genauso groß wie der Strom durch T1, je nach Tastverhältnis ist der Effektivwert aber kleiner als der durch T1 (bei über 50% Tastverhältnis), gleich (bei 50% Tastverhältnis) oder sogar größer (bei einem Tastverhältnis kleiner 50%). Daher muss die Diode genauso stark dimensioniert werden wie der Transistor (möglichst eine schnelle Schaltdiode (z.B. Schottky) verwenden, keine langsamen Gleichrichterdioden wie 1N400x). Der Kondensator C1 ist notwendig, um den durch die PWM gepulsten Strom zu glätten, da aufgrund der steilen Flanken ansonsten in den Zuleitungen ein Spannungsabfall bzw. Spannungsspitzen auftreten würden (am besten 2 oder mehrere Kondensatoren unterschiedlicher Kapazität und Bauart verwenden, meistens ein Folienkondensator mit einigen Mikrofarad parallel zu einem Aluminiumelektrolytkondensator).&lt;br /&gt;
&lt;br /&gt;
Der Transistor, die Diode und der Kondensator sollen möglichst nahe zusammen plaziert werden (kürzeste Verbindungen). Wenn die Diode am Motor angebracht wird, strahlt die Zuleitung massiv Störungen ab. Die Leitungen sollten am besten verdrillt werden.&lt;br /&gt;
&lt;br /&gt;
===Synchrongleichrichtung, 2-Quadrantensteller===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM_2.gif|thumb|300px|2-Quadrantensteller]]&lt;br /&gt;
Um die Verluste in der Freilaufdiode zu verringern kann man diese durch einen zweiten Mosfet ersetzen, der immer dann eingeschaltet wird, wenn der andere abgeschaltet ist.&lt;br /&gt;
&lt;br /&gt;
Da dieser Mosfet im Gegensatz zu einer Diode in beide Richtungen Strom leitet, ist es damit möglich den Motor kurzzuschließen und so den Motor zu bremsen. Allgemein kann man sagen: Ist die durch die PWM erzeugte mittlere Spannung größer als die Generatorspannung des Motors, wird dieser beschleunigt. Ist die Spannung kleiner, wird der Motor abgebremst. Durch T2 wird der Motor dabei kurzgeschlossen, so dass sich durch die Generatorspannung zunächst der Strom in der Motorwicklung ab- und dann in umgekehrter Richtung wieder aufbaut. Beim Abschalten von T2 und Einschalten von T1 fließt dieser Strom über T1 in C1 und somit die Spannungsquelle zurück. Die Energie wird beim Bremsen also nicht vernichtet, sondern wieder in elektrische Energie zurückverwandelt. Dies sollte man bedenken wenn man eine große Masse abbremst, denn die Spannungsquelle muss die Energie aufnehmen können. Sollte die Spannungsquelle z.&amp;amp;nbsp;B. aus einem Transformator mit Gleichrichter bestehen, kann dieser die Energie nicht aufnehmen sondern nur C1, was dazu führt, dass die Betriebsspannung ansteigt bis eventuell einer der Transistoren zerstört wird. Um dies zu verhindern ist eine Überspannungsbegrenzung in Form eines Bremswiderstands vorzusehen (Bremschopper). In einfachen Fällen reicht auch eine Leistung-Z-Diode oder ein passende Nachbildung aus Z-Diode und Leistungstransistor. Besteht die Spannungsquelle z.&amp;amp;nbsp;B. aus einem Akku dann nimmt dieser die Energie auf und wird beim Bremsen wieder etwas geladen.&lt;br /&gt;
Dies funktioniert allerdings nur, wenn das Tastverhältnis nicht 0% beträgt, also T2 und T1 abwechselnd schalten, so dass nicht die gesamte Energie in der Motorwicklung sowie T2 verheizt wird. Man sollte es daher vermeiden das Tastverhältnis schnell in eine der beiden Richtungen zu ändern, da dies zu einem hohen Strom führt.&lt;br /&gt;
&lt;br /&gt;
Die Ansteuerschaltung muss weiterhin verhindern, dass T1 und T2 gleichzeitig leitend werden können, denn dies würde zu einem Kurzschluss der Betriebsspannung führen. Ein fertig aufgebauter Mosfet-Treiber verhindert dies.&lt;br /&gt;
&lt;br /&gt;
===H-Brücke, 4-Quadrantensteller===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM_3.gif|thumb|300px|4-Quadrantensteller]]&lt;br /&gt;
Die H-Brücke, bzw. der 4-Quadrantensteller ist eine Erweiterung des 2-Quadrantenstellers durch eine zweite Halbbrücke. Diese ermöglicht neben dem Beschleunigen und Bremsen des Motors auch eine Umkehr der Drehrichtung. Dafür gibt es mehrere Ansteuerverfahren&lt;br /&gt;
#Das effizienteste ist, eine Hälfte wie beim 2-Quadrantensteller zu betreiben und mit der anderen den zweiten Motoranschluss an die Betriebsspannung zu legen. Für die andere Drehrichtung wechselt man einfach die Hälften, legt also den anderen Anschluss an die Betriebsspannung und verwendet die andere Hälfte als 2-Quadrantensteller.&lt;br /&gt;
#Das andere Verfahren steuert abwechselnd T1 und T4 oder T2 und T3 durch, legt also immer eine Spannung an den Motor. Ist das Tastverhältnis 50% fließt im Mittel ein Strom von 0A, da der Motor für jeweils die Hälfte der Zeit eine positive und eine negative Spannung erhält, der Motor steht also. Je nachdem ob man das Tastverhältnis darüber oder darunter wählt, legt man die Drehrichtung fest. Dieses Verfahren ist Ansteuertechnisch einfacher, erzeugt aber auch im Stillstand Schaltverluste in den Transistoren und Verluste im Motor.&lt;br /&gt;
&lt;br /&gt;
=== Zusammenfassung der Eigenschaften ===&lt;br /&gt;
&lt;br /&gt;
1 Quadrantensteller&lt;br /&gt;
* Drehzahlvorgabe in eine Richtung&lt;br /&gt;
&lt;br /&gt;
2 Quadrantensteller&lt;br /&gt;
* Drehzahlvorgabe in eine Richtung&lt;br /&gt;
* Aktives Bremsen möglich&lt;br /&gt;
* Energierückspeisung vom Motor in die Stromversorgung möglich (engl. recuperation)&lt;br /&gt;
* etwas geringere Verluste als 1 Quadrantensteller&lt;br /&gt;
&lt;br /&gt;
4 Quadrantensteller&lt;br /&gt;
* Drehzahlvorgabe in zwei Richtungen&lt;br /&gt;
* Aktives Bremsen in zwei Richtungen möglich&lt;br /&gt;
* Energierückspeisung vom Motor in die Stromversorgung möglich (engl. recuperation)&lt;br /&gt;
* etwa doppelt so große Verluste wie 2 Quadrantensteller&lt;br /&gt;
&lt;br /&gt;
==Beispielschaltungen==&lt;br /&gt;
&lt;br /&gt;
===1-Quadrantensteller mit diskretem Mosfettreiber===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM1_real.gif|thumb|300px|Einfacher 1-Quadrantensteller]]&lt;br /&gt;
Diese Schaltung eignet sich für Motoren bis etwa 35V und 10A Dauerstrom.&lt;br /&gt;
Q1 und Q2 zusammen mit deren Beschaltung dienen als [[Pegelwandler]] von 3,3 oder 5V Digitalsignalen auf 12V für das Mosfet Gate. Die Schaltung arbeitet dabei invertierend, der Mosfet schaltet also bei einem Low am Eingang ein.&lt;br /&gt;
Sperrt Q1, wird Q2 über R1 durchgesteuert und liefert etwa 11-11,5V ans Gate des Mosfets. R2 begrenzt dabei den Strom.&lt;br /&gt;
Das Abschalten des Mosfets geschieht über den Pfad Q1 und D1. Gleichzeitig wird Q2 die Basisspannung weggenommen, so dass dieser sperrt.&lt;br /&gt;
D2 zwischen Basis und Kollektor von Q1 verhindert, dass dieser in die Sättigung kommt, so dass dieser nahezu verzögerungsfrei sperrt, sobald der Eingang auf Low wechselt. Ab ein paar Ampere benötigt die Freilaufdiode D3 einen kleinen [[Kühlkörper]], ebenso Q3. Sollte die Betriebsspannung V+ des Motors bei etwa 10-16V liegen, dann kann diese Spannung auch für die Mosfetansteuerung verwendet werden. Ansonsten sollte dafür eine getrennte Spannung mit etwa 12-15V verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===1-Quadrantensteller mit diskretem Highside-Mosfettreiber===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM1b_real.gif|thumb|300px|Einfacher 1-Quadrantensteller mit P-Kanal Mosfet]]&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung eignet sich für Motoren mit etwa 15-40V Betriebsspannung und mit bis zu 10A Dauerstrom. Schaltungen mit P-Kanal Mosfets sollte man wenn möglich vermeiden, da N-Kanal Mosfets prinzipbedingt um Faktor 3 bessere Werte aufweisen als P-Kanal Mosfets. Allerdings wird manchmal ein auf Masse bezogener Ausgang gefordert, dann ist diese Schaltung hier die richtige. Das Problem bei der Highsideansteuerung ist, dass man die Gate-Sourcespannung irgendwie auf max. 20V begrenzen muss, was hier durch eine zusätzliche Hilfsspannung von 12V wie bei der vorigen Schaltung, nicht so einfach geht. Daher wird hier ein anderer Weg eingeschlagen. Q1 und R2 bilden eine [[Konstantstromquelle]]. Dadurch, dass an der Basis eine feste Logikspannung ansteht, steuert Q1 so stark durch, bis er sich durch den Spannungsabfall an R2 selbst die Basisspannung reduziert. Der fließende Strom beträgt dabei (Logikpegel am Eingang - 0,6V Basis-Emitterspannung)/R2. Ein guter Wert für den Strom sind etwa 10-15mA. Bei der Dimensionierung sollte man auch die Verlustleistung beachten: 40V * 15mA = 0,6W. Dies ist für einen Transistor im TO92 Gehäuse deutlich zu viel. Dadurch, dass Q1 im Linearbetrieb arbeitet, kommt er nicht in die Sättigung, und es kann auf die Diode wie in der vorherigen Schaltung verzichtet werden. Ebenso ist ein Basiswiderstand unnötig bzw. sogar hier fehl am Platz. Da nun bekannt ist, dass im durchgesteuerten Zustand von Q1 bei 5V Logikspannung (5V-0,6V)/330Ω= 13,3mA fließen, kann man damit den Spannungsabfall an R1 berechnen, bzw. aus der gewünschten Spannung R1:&lt;br /&gt;
U(R1)=13,3mA*1kOhm=13,3V. Im eingeschalteten Zustand ist die Spannung am Kollektor von Q1 also um 13,3V negativer als V+ und das unabhängig von der Betriebsspannung! Da diese Spannung durch die als Emitterfolger geschalteten Transistor Q2 und Q3 gepuffert auch an das Gate des Mosfets gelegt werden, bekommt dieser also rund 13V Gatespannung im eingeschalteten Zustand. Dies passt gut, denn für die meisten Mosfets sollte man einen Wert zwischen 10 und 15V verwenden. Durch den Spannungsteiler aus R1 und R2 ergibt sich allerdings auch eine untere Grenze der Betriebsspannung, damit die Schaltung sauber funktioniert: Um die 13,3V über R2 zu erhalten, bzw. die 4,4V über R1 sind mindestens 17,7V für V+ notwendig.&lt;br /&gt;
&lt;br /&gt;
===2-Quadrantensteller mit Halbbrücken Mosfettreiber===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Motor_PWM2_real.gif|thumb|300px|Einfacher 2-Quadrantensteller]]&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung eignet sich für Motoren bis etwa 35V und 20A Dauerstrom.&lt;br /&gt;
Um den Aufwand zu minimieren wird für die Halbbrücke ein fertiger Halbbrückentreiber IR2184 verwendet. Dieser besitzt eine integrierte Totzeit (engl. dead time) von 500ns zwischen dem Umschalten der Mosfets, so dass ein gleichzeitiges Einschalten beider Mosfets ausgeschlossen ist. Da der Mosfet gegen V+ angeschlossen ist, arbeitet auch diese Schaltung invertierend. Der Grund, warum der Motor nicht gegenüber GND angeschlossen ist, ist folgender:&lt;br /&gt;
Für die Ansteuerung des Highside Mosfets Q2 ist eine Spannung von etwa 10V mehr als die Betriebsspannung V+ notwendig. Diese wird über die Bootstrapschaltung aus C2 und D1 erzeugt. Ist Q1 durchgesteuert, läd sich C2 über D1 auf. Schaltet anschließend Q1 ab und Q2 ein, wird dessen Ansteuerspannung aus C2 entnommen. Da Q2 nun VS mit V+ verbindet, steigt auch das Potential an C2 an. An dem VB Pin stehen nun etwa V+ + 12V-0,7V (12V Betriebsspannung-Flusspannung von D1) an. Aufgrund von Leckströmen, entläd sich C2 allerdings innerhalb einiger Millisekunden. Daher ist die maximale Einschaltdauer von Q2 begrenzt. 100% Einschaltdauer wären daher nicht möglich. Um dieses Problem zu umgehen ist der Motor gegen V+ geschaltet, so dass für 100% Einschaltdauer Q1 eingeschaltet werden muss, was kein Problem ist, denn dessen Treiber wird direkt auf den 12V versorgt. Ist Q1 dagegen dauerhaft aus, Q2 also an, bremst der Motor, bzw. er steht, so dass kein Strom durch die Mosfets fließt. Daher ist es auch nicht weiter schlimm, wenn Q2 nach einer kurzen Zeit wieder abschaltet. Das einzige was nicht möglich ist, ist ein dauerhaftes Bremsen des Motors mittels Q2, aber dies wird in der Praxis auch nur in den seltensten Fällen benötigt. Über den IN Pin, wird das invertierte PWM Signal mit Logikpegeln eingespeist. Über den SD\ Pin, lassen sich beide Mosfets gemeinsam abschalten. Damit ist ein ungebremstes Auslaufen lassen des Motors möglich (Freilauf). Ab etwa 5Ampere benötigen die Mosfets einen kleinen [[Kühlkörper]].&lt;br /&gt;
&lt;br /&gt;
==Wahl der PWM-Frequenz==&lt;br /&gt;
&lt;br /&gt;
Bei der Wahl der PWM Frequenz muss man mehrere Faktoren berücksichtigen und einen Kompromiss eingehen:&lt;br /&gt;
* Die Motorinduktivität L glättet den Strom, der Wicklungswiderstand R führt zu einem Abfallen des Stromes, daraus ergibt sich die elektrische Zeitkonstante des Motors &amp;lt;math&amp;gt;t=\frac{L}{R}&amp;lt;/math&amp;gt;. Bei vielen Motoren liegt diese um 1ms. Bei hochwertigen Motoren sollte diese Angabe im Datenblatt zu finden sein. Um den Stromripple gering, also das Drehmoment konstant zu halten, sollte die Periodendauer der PWM diese Zeit nicht überschreiten. Vor allem im 2 bzw. 4-Quadratentebetrieb ist dies wichtig, denn dort kann der Strom auch seine Richtung ändern, was zu einem Abbremsen, somit zu einem deutlichen Ruckeln und zu Vibrationen des Motors und zu unnötigen Verlusten führt. &lt;br /&gt;
* Frequenzen zwischen  100Hz und 10kHz erzeugen hörbare Pfeifgeräusche im Motor&lt;br /&gt;
* Mit zunehmender Frequenz steigen die Schaltverluste in den Transistoren sowie die Verluste in der Ankerwicklung sowie in deren Kern.&lt;br /&gt;
* Einfache Gleichstrommotoren (Bürstenmotoren) mit eingebauten Entstörkondensatoren können nur mit relativ niedrigen PWM-Frequenzen von ca. 30-200 Hz betrieben werden. Bei höheren Frequenzen kommt es zu starken Schaltverlusten durch das Umladen der Entstörkondensatoren, wie man in diesem [https://www.mikrocontroller.net/topic/393784#new Beitrag] sehen kann.&lt;br /&gt;
&lt;br /&gt;
=== Ideale Frequenz ===&lt;br /&gt;
Die aus elektrischer Sicht ideale PWM Frequenz liegt daher meist bei 1-2kHz. Allerdings ist dies genau der Bereich, in dem das Gehör am empfindlichsten ist. Wenn das Pfeifen des Motors nicht stört, ist dies also der ideale Bereich.&lt;br /&gt;
Da die untere Frequenz durch die elektrische Zeitkonstante des Motors begrenzt ist, kann man nur nach oben ausweichen. Ein Kompromiss ist daher der Bereich 5-15kHz in dem das Gehör deutlich unempfindlicher ist, sich die Verluste noch in Grenzen halten. Verwendet man die einfache Schaltung mit der Freilaufdiode und legt keinen Wert auf einen runden Lauf, bzw. hat eine hohe Masse am Motor, so dass dieser träge ist, dann kann man als Alternative zu den &amp;gt;5kHz die PWM Frequenz auch bis auf 200Hz reduzieren um das Geräusch erträglicher zu machen. Allerdings reduziert sich dann der Wirkungsgrad aufgrund des hohen Stromripples. Bei Hochstromanwendungen sind sonders die Umschaltverluste ein zusätlziches Problem.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
*[[PWM]]&lt;br /&gt;
*[[Treiber]]&lt;br /&gt;
*[[MOSFET-Übersicht#MOSFET-Treiber | Mosfet-Treiber]]&lt;br /&gt;
*[[H-Brücken Übersicht]]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/103116#900247 Forumsbeitrag]: Highside Mosfetansteuerung mit diskretem Treiber&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/191616#1870643 Forumsbeitrag]: Zur Erklärung der PWM Steuerung, Bremsen und Unterschied zum Relais&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/280480#2960070 Forumsbeitrag]: Clevere MOSFET-Treiber mit kleinsten Trafos&lt;br /&gt;
*[https://www.mikrocontroller.net/topic/370476#4182456 Forumsbeitrag]: PWM Regler mit Strombegrenzer&lt;br /&gt;
*[https://www.mikrocontroller.net/topic/397337?goto=4590784#4575721 Forumsbeitrag]: H-Bridge 50Hz Sinus - LC Filter dimensionieren&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Zweiquadrantensteller Zweiquadrantensteller] bei Wikipedia&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Vierquadrantensteller Vierquadrantensteller] bei Wikipedia&lt;br /&gt;
*[http://homepages.which.net/~paul.hills/SpeedControl/SpeedControllersBody.html Grundlagen zum Thema Motoransteuerung (englisch)]&lt;br /&gt;
*[https://de.wikipedia.org/wiki/Nutzbremse Nutzbremse] bei Wikipedia&lt;br /&gt;
* [https://www.amazon.de/Electric-Motors-Drives-Fundamentals-Applications/dp/0080983324/ref=sr_1_1?ie=UTF8&amp;amp;qid=1507632012&amp;amp;sr=8-1&amp;amp;keywords=motors+drives Electric Motors and Drives: Fundamentals, Types and Applications] (Taschenbuch, Englisch, ISBN-10 0080983324)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Leistungselektronik]]&lt;br /&gt;
[[Kategorie:Motoren]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70269</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70269"/>
		<updated>2012-12-26T19:20:41Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Gegenüberstellung der Verfahren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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 verhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso so 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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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ötgt elektronik&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:&lt;br /&gt;
* SW - Timer:&lt;br /&gt;
* SW - Filter:&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70268</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70268"/>
		<updated>2012-12-26T19:19:33Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Links zum Thema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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 verhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso so 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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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ötgt elektronik&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;
== 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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=70267</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=70267"/>
		<updated>2012-12-26T19:01:16Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel bezieht sich auf das Projekt &#039;Logic Analyzer&#039;, das von einigen Nutzern dieser Plattform gemeinsam entwickelt wird. Eine Übersicht über verschiedene Projekte, die die Entwicklung eines Logikanalysators zum Ziel haben, gibt es unter [[Logic Analyzer Project]] und [[Logic_Analyzer]].&lt;br /&gt;
&lt;br /&gt;
Eine Beschreibung, wie ein Logic Analyzer arbeitet, befindet sich auf der Seite [[Logikanalysator]]&lt;br /&gt;
&lt;br /&gt;
= Lastenheft =&lt;br /&gt;
&lt;br /&gt;
Hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: |||&lt;br /&gt;
* 16 Kanäle: ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||| ||||| |||&lt;br /&gt;
* 64 Kanäle: |&lt;br /&gt;
* Modular (erweiterbar X mal 8/16 Kanäle): |||||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : ||&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : |||||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: ||||| |||| |||||&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: ||||| |||| ||&lt;br /&gt;
*..Konfigurierbar ||||| ||&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : ||||| ||||| |||&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
* &amp;gt;16 ||||| ||&lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; u.U. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: ||&lt;br /&gt;
* Seriell asyncron (RS232).: ||||| ||||| ||||&lt;br /&gt;
* USB......................: ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Parallelport.............: ||||&lt;br /&gt;
* Ethernet.................: ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Linux   .: ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Ubuntu  .: |&lt;br /&gt;
* Anderes .: ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Direktausgabe des L.A.&#039;&#039;&#039;&lt;br /&gt;
* LCD     .: ||&lt;br /&gt;
* TFT     .: |&lt;br /&gt;
* VGA     .: ||||| ||&lt;br /&gt;
* DVI     .: ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Data Analyzer&#039;&#039;&#039;&lt;br /&gt;
* A-Serial.: ||||| ||&lt;br /&gt;
* SPI     .: |||&lt;br /&gt;
* CAN     .: |||&lt;br /&gt;
* ERC     .: ||&lt;br /&gt;
* CRC     .: |&lt;br /&gt;
* I2C     .: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wenn man über WxWidgets/Fox-Toolkit/Qt programmiert, hätte man Win, Linux und MAC erschlagen. COM ist kein Problem, bei USB muss man sehen. Da ist noch nicht viel realisiert. Einen einfachen Treiber sollte man aber hinbekommen können, zumal die Hardware und das Protokoll bekannt sind.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wie ist das mit dem ERC gemeint? gedacht?&lt;br /&gt;
: ich würde vorschlagen, man übergibt dem Dingens eine Gleichung und den Startladewert als Trigger, ab dann kann er selber mitsuchen und das Datenbyte vergleichen und sich melden, wenn es die Negation des CRCs ist.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(-- [[Benutzer:Ope|Ope]] 20:51, 10. M?2006 (CET))&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jedoch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die großen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezüglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Stand z.Zt.: Es ist nicht tot, aber in einem Dämmerzustand, siehe dazu [#VHDL_LA_Core].&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.&amp;amp;nbsp;B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genannten Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.&amp;amp;nbsp;B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrocontroller aus, der seine Ports pollt um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) mit Mikrocontroller/AVR dar. Die CPLD z.&amp;amp;nbsp;B. von Xilinx können mit über 100 MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einen externen SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, das Speicherinterface und natürlich das eigentliche sampeln der Eingänge verantwortlich. Der Mikrocontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampleten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3,3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLDs der XC95000XL Serie mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
Allerdings baut die Lösung mit dem CPLD und externen SRAM sowie Mikrocontroller entsprechend groß und es sollte ja kein Tischgerät werden (CPLD + AVR + SRAM +&lt;br /&gt;
FT245 + EEPROM + Spannungsregler kämen ungefähr auf Europa-Format). Als Abmessungen wurde die Größe einer Zigarettenschachtel als Ziel für gut befunden. Neben den Abmessungen gibt es auch beim Routen des PCB zwischen CPLD und SRAM keine befriedigende Lösung, insbesondere wenn mehrere SRAMs für&#039;s Interleave eingesetzt oder gar Transitional Timing Analysis Mode implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Entsprechend dieser Erkenntnis reicher, ist ein FPGA als eine Komponente des LA in&#039;s Gespräch gekommen. Diese haben genug Platz für Logik und internen SRAM, konkret die Spartan-2 Serie. Diese gibt es in einem lötbaren TQFP Gehäuse - kommt also ohne BGA aus - zu moderaten Preisen.&lt;br /&gt;
&lt;br /&gt;
Da künftig die RS232 Schnittstellen wegfallen und nur noch USB in Hardware unterstützt wird, wird der LA ein USB Interface haben. Dies deckt sich auch mit der Umfrage oben und ist unabhängig von der CPLD+AVR- und FPGA-Lösung.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird im Anhang auf die CPLD-Lösung eingegangen, einfach um die Gedankengänge festzuhalten - auch wenn es an sich überholt ist.&lt;br /&gt;
&lt;br /&gt;
= Hardware Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.&amp;amp;nbsp;B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Threshold) variabel sind und somit auch am flexibelsten für die verschiedenen Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Komparator Lösung ===&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL-Eingänge und da der Eingangsspannungsbereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Threshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom µC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per µC mit anschließendem Tiefpass mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Alles in allem eine komplexe Angelegenheit, weshalb sie in der ersten Version des LA fallen gelassen wurde.&lt;br /&gt;
&lt;br /&gt;
=== Digitale Lösung ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Lösung besteht in einem Levelshifter wie dem 74LVC4245 [http://www.standardics.philips.com/products/levelshifters/alvc164245a/]. Er wird mit 2 Betriebsspannungen versorgt - die FPGA-Seite mit 3,3 V und die Eingangsseite mit variabler Spannung bzw. 3,3 V oder 5 V. Diese Spannung kann per PWM durch den Mikrocontroller erzeugt werden und ermöglicht so, variable Logikpegel am DUT abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Es müsste auch eine Lösung für 2,5V-kompatible FPGA-Eingänge vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstige Betrachtungen ===&lt;br /&gt;
&lt;br /&gt;
Weiterhin besteht Einigkeit in der notwendigen Schutzschaltung, damit die Eingangsspannung den max. Input Voltage Range (je nach Typ) bzw. Strom nicht überschreiten kann:&lt;br /&gt;
* Dioden-Array (bringt Speed-Probleme aufgrund der Sperrschichtkapazität, sofern man keine teuren Spezialdioden verwendet) &lt;br /&gt;
* Serienwiderstand&lt;br /&gt;
&lt;br /&gt;
== FPGA ==&lt;br /&gt;
&lt;br /&gt;
Momentan ist der XC2S100 bzw. XC2S200 (prefered)&lt;br /&gt;
(http://direct.xilinx.com/bvdocs/publications/ds001.pdf)&lt;br /&gt;
&lt;br /&gt;
Das externe SRAM entfällt durch den internen des FPGA, da die größeren FPGAs ausreichend interne Speichermöglichkeit haben und das Platinenlayout durch einen&lt;br /&gt;
externen SRAM um ein vielfaches komplizierter werden würde. &lt;br /&gt;
Für den FPGA haben wir derzeit das PQ208-Gehäuse im Auge, dort ist der&lt;br /&gt;
FPGA etwa 2/3 so teuer wie im TQ144 und kann noch nach oben erweitert&lt;br /&gt;
werden - für die, die mehr Speicher brauchen.&lt;br /&gt;
&lt;br /&gt;
Der interne Speicher ist 40k bzw 56k, wobei nur&lt;br /&gt;
Sample-Änderungen abgespeichert werden um den Block-RAM (echter interner&lt;br /&gt;
RAM) besser ausnützen zu können. Yep, er ist veraltet etc., aber&lt;br /&gt;
verfügbar und im TQ144 oder PQ208 (prefered, da derzeitig bestellbar)&lt;br /&gt;
verhältnissmäßig preiswert zu bekommen. Siehe auch&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-204570.html#new.&lt;br /&gt;
&lt;br /&gt;
Der FPGA LA Core wird in VHDL geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Interface zwischen LA und PC == &lt;br /&gt;
&lt;br /&gt;
In der FPGA-Lösung bietet sich der FTDI FT2232C [http://www.ftdichip.com/Documents/DataSheets/ds2232c_14.pdf] (Dual USB UART/FIFO) an, wie er auch im UXIBO [http://www.uxibo.de/] Verwendung findet. Damit kann der FPGA per USB über die erste Schnittstelle im Bit-Bang-Mode geflasht werden und über die zweite mit dem PC kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Die erste Begeisterung verschwand, nachdem die Preise bekannt waren. Daher wurde  ein AT91SAM7S321/64 mit internen USB gewählt, welcher preiswerter ist und zudem die Mikrocontroller-Fähigkeiten in den LA bringt. Der AT91SAM7S wird per USB (nur Buchse und Widerstände erforderlich) über SPI an den FPGA angebunden.&lt;br /&gt;
&lt;br /&gt;
Zudem hat der AT91SAM7 den Vorteil, dass er über USB programmierbar ist via SAM Boot Assistant (SAM-BA) (User Guide [http://www.atmel.com/dyn/resources/prod_documents/doc6132.pdf]).&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Der FPGA benötigt 2,5 V für den Core selbst und eine weitere Spannung für die I/O. Hier bietet sich 3,3 V an, da dann der SAM7 und der Levelshifter 74LVC4245 damit betrieben werden können. TI bietet hierzu den TPS70358 [http://focus.ti.com/lit/ds/symlink/tps70358.pdf] (2.5/2A + 3.3V/1A) an. Dieser besitzt ein Powerpad unter dem Chip, welches die meisten wohl kaum anlöten können. Aber dafür ist die Strombelastbarkeit total überdimensioniert, d.h. etwas Wärmeleitpaste sollte das Problem (hoffentlich) lösen.&lt;br /&gt;
&lt;br /&gt;
Für die variable Spannung auf der Probenseite bzw. 74LVC4245 scheint der TPS62222 [http://focus.ti.com/docs/prod/folders/print/tps62220.html] eine Lösung zu bieten. Er kann eine einstellbare Spannung erzeugen. Die Vorgabe geschieht entweder mit per PWM erzeugter Sollspannung durch den SAM7 (analog zum STK500 [http://www.avrfreaks.net/Tools/ToolFiles/115/STK500_Schematics.pdf]) oder durch ein digitales Potentiometer bzw. analogem Switch und Widerständen und Ähnlichen, wobei die PWM-Lösung die preiswertere Alternative darstellt.&lt;br /&gt;
&lt;br /&gt;
Indirekt heißt dies aber auch, dass mit einem Bus powered LA nicht zu rechnen ist...&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== VHDL LA Core ==&lt;br /&gt;
&lt;br /&gt;
Dieser ist in VHDL geschrieben und imo die Hauptarbeit. Bisher sind:&lt;br /&gt;
&lt;br /&gt;
* die Trigger komplett geschrieben und getestet (pattern/edge on Low, High und Don&#039;t Care und Condition length),&lt;br /&gt;
* die Probe ist registered wegen der Meta-Stabilität,&lt;br /&gt;
* die Speicherorganisiation des internen RAMs, &lt;br /&gt;
* das handling der Timestamps und &lt;br /&gt;
* eine FSM mit Registerset zur rudimentären Steuerung,&lt;br /&gt;
* ein arithmetischer Trigger existiert auch, ist aber nicht eingebunden (z.&amp;amp;nbsp;B. für Addressvergleiche als Trigger).&lt;br /&gt;
* Clk Management per DLL.&lt;br /&gt;
&lt;br /&gt;
Die Anbindung FPGA zum Mikrocontroller per SPI fehlt komplett (SPI Cores z.&amp;amp;nbsp;B. von Jörn sind im Forum aber vorhanden). &lt;br /&gt;
&lt;br /&gt;
Mit dem VHDL LA Core gehen die eigentlichen Probleme des LA los. Da ich (ope) als einziger LA-Projekt-Programmierer und VHDL-Neuling (bisher nur C/C++) mir das Coden auf die Fahnen geschrieben habe, dauert es entsprechend lange. Das ursprüngliche Ziel, den Core bis Ende 2005 fertig zu bekommen, ist an vielen kleinen Problemen und am Zeitaufwand gescheitert (eben ein Feierabend-Projekt). Viel Zeit nimmt das Schreiben der Testbenches in Anspruch. Weitere Zeit vergeht für die Fehlersuche im Source, aber auch als Bug-Hunter in XST (das übersteigt dann doch meine derzeitigen Fähigkeiten).&lt;br /&gt;
&lt;br /&gt;
Da der Speicher intern nur begrenzt ist, wurde ein Transitional Timing Analysis Mode realisiert d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert. Dummerweise sind 3 Samples beim Auslesen des Speichers am falschen Ende (oberste 3 Addressen), obwohl sie am Anfang sein sollten (unterste 3 Adressen). Irgendwann habe ich dann die Lust verloren, da auch keiner helfen konnte...&lt;br /&gt;
&lt;br /&gt;
== ARM Core ==&lt;br /&gt;
&lt;br /&gt;
Keine konkreten Überlegungen bisher?&lt;br /&gt;
&lt;br /&gt;
== PC Frontend ==&lt;br /&gt;
&lt;br /&gt;
Nichts passiert. Für C++ ist WxWindows, Qt und eben Fox-Toolkit interessant. Aber Fox Toolkit [http://www.fox-toolkit.org],&lt;br /&gt;
[http://wiki.wxwidgets.org/wiki.pl?WxWidgets_Compared_To_Other_Toolkits],&lt;br /&gt;
[http://lists.trolltech.com/qt-interest/2002-06/msg01202.html] ist imo die Alternative zu WxWindows/Qt und von mir (ope) favorisiert.&lt;br /&gt;
&lt;br /&gt;
WxWindows/WxWidgets hat Altlasten, die gehen bis Win 3.1 zurück, Qt&lt;br /&gt;
behagt mir die Geschichte mit den Moc Compiler nicht; auch wenn ich mit&lt;br /&gt;
Qt bereits (gute) Erfahrung habe, aber die neue Politik unter Windows&lt;br /&gt;
behagt mir nicht - dir wird der Compiler vorgeschrieben, aber man wird&lt;br /&gt;
mit dem mingw alleine gelassen. Von der Seite her gibt&#039;s für mich&lt;br /&gt;
keinen Grund unbedingt Qt nehmen zu müssen. FLTK und Gtk lasse ich mal&lt;br /&gt;
ganz außen vor.&lt;br /&gt;
&lt;br /&gt;
Auch sollen viele Dinge in Fox besser gelöst sein, allerdings ist diese&lt;br /&gt;
auch jünger, so dass wohl auch einige GUI-Klassen geschrieben werden&lt;br /&gt;
müssen. Mal sehen, ob sich Cairo&lt;br /&gt;
(http://cairographics.org/introduction) einbinden lässt, dann hätte man&lt;br /&gt;
gleich PDF Wave Plot Export prints und bessere Screen Graphic (kann aber&lt;br /&gt;
auch Overkill sein). Jedoch sind diese Aussagen eben ungeprüft.&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Hier muss Dirk schreiben :-)&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD-Löten mit 0,5 mm-Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Tektronix XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Kommerziell: Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Kommerziell: Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.pctestinstruments.com/] Kommerziell: LogicPort (34 Kanäle)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang A: Die CPLD/AVR Lösung (veraltet) =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch herausstellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschließen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatcht und gemeinsam auf den nun 32 bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit liegt die Schreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man z.&amp;amp;nbsp;B. eine 16 bit Time-Stamp-Adresse (256k) mit einem 16 bit Pattern speichern, oder ein 24 bit Timestamps für 8 bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heißeste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischengespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup- und Hold-Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAMs. Dieser kann aber auch zum Lesen des SRAMs benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen.&lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.&amp;amp;nbsp;B. 512 KiB SRAMs benutzen kann ohne dass der µC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlos an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
µC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N-Teiler um den Sample-Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den µC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und µC und spart den Quarz am µC. Allerdings bietet sich auch ein eigener Quarz für den µC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50 - 64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch Umlöten und Wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per µC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsreichster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Frequenzen mit einem einfachen Quarz erzeugen kann. Dadurch wird der Frequenzteiler im CPLD nicht mehr benötigt und hat wieder einige Macrozellen frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefrequenz liegen zum einem in den verwendeten Bauelementen (&amp;gt; 100 MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das Optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500 mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150 mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320 mA&lt;br /&gt;
* ATmega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit MAX964 8 mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100 mA ziehen (in diese Kategorie wird wohl der LA u.U. fallen), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.&amp;amp;nbsp;B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genug Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
&lt;br /&gt;
=== AVR ===&lt;br /&gt;
Recht früh hat sich im Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATmega-Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40-poliger nötig. Es wird ein ATmega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
=== CPLD ===&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmware über den Computer updaten zu können.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.&amp;amp;nbsp;B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels µC beschrieben wird. &lt;br /&gt;
&lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45 kB für µC-Verhältnisse extrem groß ist und somit nur in einen ATmega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde, da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10 kB für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz-effizienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.&amp;amp;nbsp;B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG-Verbindung zum AVR-Port eingerichtet, falls das Problem irgendwann später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
== PCB ==&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Application Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Converter IC RS232/RS422 USB/Seriell Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | USB FIFO, parallel Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,45&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80&amp;amp;#8364; Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://web.icsi.com.tw/domino/packinfo.nsf/4E09C79E58017C3448256F320003A56F/$FILE/22_61LV25616.Pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ??&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sonstiges==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=70266</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=70266"/>
		<updated>2012-12-26T18:54:36Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Zielplattformen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freier Schiebebereich&lt;br /&gt;
* Einstellbare Eingangsverstärkung&lt;br /&gt;
* Automatische Eingangsverstärkungsregelung (automatic gain control)&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω, 75Ω&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
* verschiedene Kalibrierspannungen&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
* Potentialfreie (galvanisch getrennte) Analog Eingänge&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digilent Spartan 3E&lt;br /&gt;
* Digilent Xilinx Spartan 3A Dev board&lt;br /&gt;
* Digilent Atlys / Nexys&lt;br /&gt;
* Trenz Spartan 6 SLX45, TE630 SLX75&lt;br /&gt;
* AVNET LX150T&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
* Screen-Splitting, wählbare Aufteilung des Bildschirmes (1,2,4 Subframes) in verschiedene Teilbereiche, in denen unterschiedliche Signaldarstellungen laufen&lt;br /&gt;
* Ausgabe der gewonnenen Daten über USB / Ethernet an PC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
=== Vorhandene Designs und Sourcen ===&lt;br /&gt;
Auf diese Designs und Sourcen die bereits realisiert sind, kann für eigene FPGA-Entwicklungen zurückgegriffen werden:&lt;br /&gt;
&lt;br /&gt;
====interne====&lt;br /&gt;
* VGA Core für 800x600 und 1024x768 in VHDL -&amp;gt; [[Projekt_VGA_Core_in_VHDL]]&lt;br /&gt;
* einstellbarer Spektralfilter&lt;br /&gt;
* FFT, DFT&lt;br /&gt;
&lt;br /&gt;
====externe====&lt;br /&gt;
* SUMP Logic Analyzer&lt;br /&gt;
* Bithound Analyzer&lt;br /&gt;
* Logic sniffer open workbench&lt;br /&gt;
&lt;br /&gt;
===Themenverwandte Links auf Mikrocontroller.net===&lt;br /&gt;
&lt;br /&gt;
Digital Oszilloskop FPGA&lt;br /&gt;
*http://www.mikrocontroller.net/topic/228997#new&lt;br /&gt;
&lt;br /&gt;
FPGA Oszilloskop mit VGA Ausgang&lt;br /&gt;
* http://www.mikrocontroller.net/topic/77033#new&lt;br /&gt;
&lt;br /&gt;
BitHound - FPGA Logic Analyzer&lt;br /&gt;
* http://www.mikrocontroller.net/topic/219592#new&lt;br /&gt;
&lt;br /&gt;
Open Workbench Logic Sniffer - taugt der was?&lt;br /&gt;
* http://www.mikrocontroller.net/topic/192400#new&lt;br /&gt;
&lt;br /&gt;
Digilent Atlys (mit Spartan6).&lt;br /&gt;
* http://www.mikrocontroller.net/topic/202083#1990089&lt;br /&gt;
&lt;br /&gt;
Welec Projekt&lt;br /&gt;
* http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=Wittig&lt;br /&gt;
&lt;br /&gt;
Welec Projekt - Hardware&lt;br /&gt;
* http://www.mikrocontroller.net/topic/133766#new&lt;br /&gt;
&lt;br /&gt;
Welec Projekt - Software&lt;br /&gt;
* http://www.mikrocontroller.net/topic/133761#new&lt;br /&gt;
* http://www.mikrocontroller.net/topic/152447#new&lt;br /&gt;
* http://www.mikrocontroller.net/topic/182890#new&lt;br /&gt;
* http://www.mikrocontroller.net/topic/206819#new&lt;br /&gt;
* http://www.mikrocontroller.net/topic/233924#new&lt;br /&gt;
&lt;br /&gt;
Sampling Osci Input Stage&lt;br /&gt;
* http://www.mikrocontroller.net/topic/213231#new&lt;br /&gt;
&lt;br /&gt;
===Themenverwandte externe Links===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/alexvie/welecw2000a&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/apps/trac/welecw2000a/&lt;br /&gt;
&lt;br /&gt;
* http://mhz100q.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
* http://www.ssalewski.de/DAD.html.de&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED&amp;diff=70265</id>
		<title>LED</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED&amp;diff=70265"/>
		<updated>2012-12-26T18:50:33Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung == &lt;br /&gt;
&lt;br /&gt;
[[Bild:Ledrgb.jpg|thumb|right|246px|Detailfoto einer RGB-LED [http://www.mikrocontroller.net/topic/109784#990685]]]&lt;br /&gt;
&lt;br /&gt;
Eine LED (engl. &amp;lt;B&amp;gt;L&amp;lt;/B&amp;gt;ight &amp;lt;B&amp;gt;E&amp;lt;/B&amp;gt;mitting &amp;lt;B&amp;gt;D&amp;lt;/B&amp;gt;iode, &#039;&#039;Leuchtdiode&#039;&#039;) besteht aus einem [[Halbleiter]]-PN-Übergang, der durch seine Zusammensetzung Licht eines stark begrenzten Wellenbereiches emittiert, wenn er in Durchlassrichtung von Strom durchflossen wird. Die Helligkeit einer LED ist in erster Näherung proportional zum Strom.&lt;br /&gt;
&lt;br /&gt;
Die Farbe des emittierten Lichts hängt vom verwendeten Halbleitermaterial ab. Es existieren [[Halbleiter | Halbleitermaterialien]] für den gesamten sichtbaren Bereich als auch für den Infrarotbereich und den nahen Ultraviolettbereich. Für kurze Wellenlängen (Blau bis Ultraviolett) ist ein Halbleitermaterial wie z.&amp;amp;nbsp;B. InGaN oder GaN erforderlich. Für die ersten blauen LEDs wurde SiC verwendet, welche aber eine schlechte Effizienz hat (Quelle:Wikipedia).&lt;br /&gt;
&lt;br /&gt;
Weißes Licht oder andere Farbmischungen können erzeugt werden, indem man eine Blau- oder Ultraviolett-LED mit einem Phosphormaterial beschichtet, welches durch das Licht der LED zur Emission angeregt wird. Die entstehende Farbe wird dabei von der Beschichtung bestimmt.&lt;br /&gt;
&lt;br /&gt;
== Durchlassspannung ==&lt;br /&gt;
&lt;br /&gt;
LEDs haben im Vergleich zu gewöhnlichen [[Diode|Dioden]] eine vergleichsweise hohe, vom Halbleitermaterial abhängige [[Durchlass-Spannung]]. Bevor diese erreicht wird, fließt nur sehr wenig Strom und die LED leuchtet fast nicht. Oberhalb der Durchlassspannung (Flußspannung) steigt der Strom schnell an (Diodenkennlinie). Die Flußspannung reicht von ca. 1,2 V bei Infrarot-LEDs bis zu etwa 4 V bei Ultraviolett-LEDs.&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;
! Farbe || typ. Flußspannung [V]&lt;br /&gt;
|-&lt;br /&gt;
| Infrarot || 1,2&lt;br /&gt;
|-&lt;br /&gt;
| Rot || 1,8&lt;br /&gt;
|-&lt;br /&gt;
| Gelb || 2,0&lt;br /&gt;
|-&lt;br /&gt;
| Grün || 2,2&lt;br /&gt;
|-&lt;br /&gt;
| Grün&amp;lt;br&amp;gt;(Ultrahell) || 3,3&lt;br /&gt;
|-&lt;br /&gt;
| Blau || 3,6&lt;br /&gt;
|-&lt;br /&gt;
| Weiss || 3,6&lt;br /&gt;
|-&lt;br /&gt;
| Ultraviolett || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Durchlassstrom == &lt;br /&gt;
&lt;br /&gt;
Da LEDs durch einen zu hohen Strom zerstört werden, muss der Strom begrenzt werden. Typische Maximalwerte liegen abhängig von der LED z.&amp;amp;nbsp;B. bei 2 mA (low current) oder 20 mA. Genaue Angaben dazu finden sich in entsprechenden Datenblättern.&lt;br /&gt;
&lt;br /&gt;
=== Vorwiderstand ===&lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall und bei relativ geringfügig variierender Betriebsspannung kann man dazu einen Widerstand einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[bild:led_rv.png|right]]&lt;br /&gt;
Bei 6 V Betriebsspannung, einer Durchlassspannung der LED von 2,4 V und einem gewünschten Strom von 20 mA braucht man nach dem ohmschen Gesetz einen Widerstand von 180Ω, bei 12 V Betriebsspannung sind es 480Ω. In der Praxis wird jeweils der nächstgrößere Standardwert gewählt (E-Reihen).&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;RV=\frac{Vcc-U_\text{LED}}{I_\text{LED}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* RV: Vorwiderstand in Ohm&lt;br /&gt;
* Vcc: Betriebsspannung in Volt&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{LED}&amp;lt;/math&amp;gt;: Durchlassspannung der LED in Volt&lt;br /&gt;
* &amp;lt;math&amp;gt;I_{LED}&amp;lt;/math&amp;gt;: Strom durch die LED in Ampere&lt;br /&gt;
&lt;br /&gt;
Mit einem 480-Ohm-Widerstand, welcher für 12 V Betriebsspannung passend ist, würden bei 6 Volt statt 20 mA nur noch 7,5 mA fließen. Mit einem 180-Ohm-Widerstand, welcher für 6 V Betriebsspannung passend ist, würden bei 12 V statt der gewünschten 20 mA allerdings schon 53 mA fließen. &lt;br /&gt;
&lt;br /&gt;
Beachten muss man auch die als Wärme abgegebene &#039;&#039;&#039;Verlustleistung&#039;&#039;&#039; über dem Vorwiderstand, vor allem wenn man LEDs an eine recht hohe Betriebsspannung von 12 V oder gar 24 V anschließt. Die Verlustleistung berechnet sich einfach aus&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_{RV} = (Vcc-U_\text{LED}) \cdot I_\text{LED} = I_\text{LED}^2 \cdot RV&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel mit der 2,4-V-LED und einem Strom von 20 mA heißt das, dass an dem 480-Ohm-Widerstand eine Verlustleistung von 192 mW abfällt. Ein kleiner SMD-Widerstand der Größe 0805 hält das nicht mehr aus (1/8 W = 125 mW maximal).&lt;br /&gt;
&lt;br /&gt;
Wie man aus dem Beispiel erkennt, ist bei stark variierender Betriebsspannung ein Vorwiderstand weniger geeignet. Es sei denn, man nimmt sehr unterschiedliche LED-Ströme und damit LED-Helligkeiten oder möglicherweise die Zerstörung der LED in Kauf.&lt;br /&gt;
&lt;br /&gt;
Bei Batteriebetrieb werden LEDs häufig ohne Vorwiderstand betrieben. So z.B. bei billigen Taschenlampen und Fahrradlampen. Dabei werden oft sogar zwei 1,5V Batterien in Reihe geschaltet und die LED direkt angeschlossen. Der Grund ist, dass das alles nichts kosten darf und man sich auf den Innenwiderstand der Batterie verlässt.&lt;br /&gt;
&lt;br /&gt;
=== Konstantstromquelle ===&lt;br /&gt;
&lt;br /&gt;
Bei stark schwankender Versorgungsspannung oder Umgebungstemperatur heißt der Ausweg [[Konstantstromquelle]]. Kriterien für die Auswahl einer Schaltung für die Konstantstromquelle sind hierbei z.&amp;amp;nbsp;B. Betriebsspannungsbereich, erforderliche Genauigkeit und Kosten. Auch hier ist zu beachten, daß die Verlustleistung der Konstantstromquelle von den Bauteilen abgeführt werden muss, mit einer gewissen Ausnahme der Lösungen mit Schaltregler.&lt;br /&gt;
&lt;br /&gt;
=== Betriebsstrom ===&lt;br /&gt;
&lt;br /&gt;
In der Praxis werden LEDs oft mit einem weit geringeren als dem maximal zulässigen Durchlassstrom betrieben. Insbesondere im Entwicklungs- und Experimentierumfeld kann eine für maximal 20 mA ausgelegte LED auch mit lediglich 3-5 mA betrieben werden. Der subjektiv wahrgenommene Helligkeitsverlust ist deutlich geringer, als der prozentuale Unterschied der Stromstärke vermuten lässt, siehe Artikel [[LED-Fading]].&lt;br /&gt;
&lt;br /&gt;
== Mehrere LEDs zusammenschalten ==&lt;br /&gt;
&lt;br /&gt;
Diese Frage bewegt immer wieder die Gemüter. Wie schaltet man mehrere LEDs &#039;&#039;&#039;richtig&#039;&#039;&#039; zusammen?&lt;br /&gt;
&lt;br /&gt;
=== Reihenschaltung ===&lt;br /&gt;
&lt;br /&gt;
In einer Reihenschaltung ist der Strom durch alle Verbraucher gleich. Ideal für LEDs. Hat man eine ausreichend hohe Versorgungsspannung, kann man mehrere LEDs in Reihe schalten. Dann reicht ein einziger Widerstand bzw. eine [[Konstantstromquelle]]. Allerdings sollte man das nicht übertreiben. 100-150 LEDs direkt an die Netzspannung zu hängen ist nicht möglich, da die LEDs zu viel Sperrspannung abbekommen würden. Auch bei gleichgerichteter Spannung besteht ein Sicherheitsproblem. Als Hobbybastler sollte man sich auch hier auf Spannungen kleiner als 40V beschränken.&lt;br /&gt;
&lt;br /&gt;
=== Parallelschaltung ===&lt;br /&gt;
&lt;br /&gt;
Das direkte Parallelschalten von LEDs ist sehr kritisch und muss vermieden werden. Grund ist die exponentielle Diodekennlinie, welche bewirkt, dass eine kleine Spannungsänderung eine grosse Stromänderung hervorruft. Schaltet man nun zwei LEDs mit verschiedenen Durchlassspannung parallel, bekommt die mit der niedrigeren Durchlassspannung DEUTLICH mehr Strom ab, dadurch wird sie nicht nur deutlich heller sondern auch wärmer. Das führt zum 2. Problem, denn mit steigender Temperatur sinkt die Durchlassspannung zusätzlich, wodurch sich der Effekt weiter verstärkt! LEDs verschiedender Farben haben sehr unterschiedliche Durchlassspannungen, hier ist ein direktes Parallelschalten vollkommen unmöglich. Aber selbst LEDs mit gleicher Farbe und aus einem Produktionsdurchlauf (Lot) weisen herstellungsbedingt bisweilen erhebliche Streuungen der Durchlassspannung auf!&lt;br /&gt;
&lt;br /&gt;
Richtig Parallelschalten kann man LEDs aber durch&lt;br /&gt;
&lt;br /&gt;
* Vorwiderstand/Konstantstromquelle für jede einzelne LED&lt;br /&gt;
* Auswählen von ausgemessenen LEDs mit sehr ähnlicher Flußspannung&lt;br /&gt;
&lt;br /&gt;
Letztere Methode wird von professionellen Herstellern verwendet, um bei grösseren Anzeigen LEDs direkt parallel schalten zu können. Die Unterschiede in der Flußspannung bei Nennstrom sollten dabei kleiner als 10mV(?) sein. Das gilt natürlich auch für das Parallelschalten von LED-Strängen, also Reihenschaltungen von LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Reihen- plus Parallelschaltung ===&lt;br /&gt;
&lt;br /&gt;
Eine Kombination aus Serien- und Parallelschaltung ist weniger kritisch, da sich die unterschiedlichen Kennlinien statistisch mitteln. Z.B. kann man 20 LEDs in Reihe und mehrere solcher Stränge parallel schalten. Eine einzelne Diode mit geringerer Durchlaßspannung wird im Strom durch 9 andere begrenzt. Der Stromanstieg infolge der Unterschiede der einzelnen Stränge erzeugt an allen Bahnwiderständen der Dioden einen Spannungsabfall, der die ungleiche Stromverteilung begrenzt.&lt;br /&gt;
&lt;br /&gt;
Da LEDs mit bis zu 20% in ihrer effektiven Leuchtkraft bei gleicher scheinbarer Spannung streuen, sollte man wenigstens 10 LEDs in Reihe schalten und diese auch nur zu 70% auslasten, um optische Schwankungen auf ein Mass der Nichtsichtbarkeit zu senken und Mitkopplungseffekte infolge von Erwärmung zu begrenzen. Statistisch streuen die Helligkeiten dann nur noch im Bereich einiger Prozente. Die Variation der Stromaufnahme einzelner Stränge sollte demgemäss ebenfalls auf 5% begrenzt werden, d.h. der regelnde Widerstand muss im Bereich von &amp;gt;10% Spannungsänderung aufnehmen können.&lt;br /&gt;
&lt;br /&gt;
Eine brauchbare Dimensionierung für 1,7V-LEDs @ 20mA wäre: 10 LEDs mit R=150Ohm an 20Volt. Der Widerstand sollte mit 1W belastbar sind. Noch besser ist ein gegengeregelter FET, der als Kaltleiter eine doppelte Gegenregelung bringt.&lt;br /&gt;
&lt;br /&gt;
Für eine gleichmässig Lichtversrogung eines Array, sollten die LEDs nicht strangweise parallel, sonderen in Schleifen verlegt werden. Man kann z.B. zwei Stränge alternierend verdrahten.&lt;br /&gt;
&lt;br /&gt;
== Direktbetrieb an 230V ==&lt;br /&gt;
Eine Methode, LEDs an 230V direkt zu betreiben, ist die Strombegrenzung mit einem spannungsfesten Kondensator, der in Reihe zur eigentlichen LED-Schaltung liegt, die aus einem 4-Wege-Gleichrichter einen ELKO und als array verschalteter LEDs besteht. Das LED kann wie im obigen Beispiel auf 20V oder 24V ausgelegt werden und sollte mit zwei antiparallel geschalteten Z-Diode auf 24/28V limitiert werden, um Spannungsspitzen abzufangen. Die vorgeschaltete Kapazität wird mit einer Reihenschaltung von 4 keramischen Kondensatoren aufgebaut, von denen jeder ca 60V abfangen muss. Die Kapazität richtet sich nach der Stromaufnahme der Sumer der LED-Stränge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: IO-Grundlagen#Hardware]]&lt;br /&gt;
* [[LED-Matrix]]&lt;br /&gt;
* [[LED-Fading]]&lt;br /&gt;
* [[Lichtsensor / Helligkeitssensor#LED]]&lt;br /&gt;
* [[Ambilight in Hardware]]&lt;br /&gt;
* [[Konstantstromquelle]] &lt;br /&gt;
* [[Konstantstromquelle fuer Power LED]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/158836?goto=2759782#2759782 Forumsbeitrag]: LEDs an 230V Netzspannung mit Konstantstromquelle&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/219681#2197034 Forumsbeitrag]: Darstellung der Toleranzen von LEDs und deren Wirkung, oder &amp;quot;Warum man einen Vorwiderstand braucht&amp;quot;&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/74169#618682 Forumsbeitrag]: 16-Segment Ganganzeige ohne Mikrocontroller&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267113#2788848 Forumsbeitrag]: Unbekannte LEDs ausmessen.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/280991?goto=2966997#2966820 Forumsbeitrag]: Konstantstromquelle für LED an 40-420VDC&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://de.wikibooks.org/wiki/Arbeiten_mit_LEDs/_Grundlagen Wikibooks Arbeiten mit LEDs: Grundlagen] - Sehr gute Erklärung, auch für Anfänger&lt;br /&gt;
* [http://www.theledlight.com/technical.html www.theledlight.com] - LED Information and Technical Data (englisch)&lt;br /&gt;
* [http://forum.electronicwerkstatt.de/phpBB/faq/led/ LED FAQ für Anfänger]&lt;br /&gt;
* [http://members.misty.com/don/ledx.html Don Klipstein&#039;s LED Main Page (engl.)]&lt;br /&gt;
* [http://www.robotroom.com/LEDTester.html Selecting a LED] - LED Tester von David Cook (Beginnerprojekt)&lt;br /&gt;
* [http://www.evilmadscientist.com/article.php/throw Some thoughts on throwies] von Windell H. Oskay von www.evilmadscientist.com&lt;br /&gt;
*[http://www.led-rechner.de www.led-rechner.de]&lt;br /&gt;
* [http://catalog.osram-os.com/catalogue/catalogue.do?act=downloadFile&amp;amp;favOid=02000002000040ac000100b6 Vergleich von LED-Schaltungen ] - (OSRAM Applikationsschrift)&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Displays und Anzeigen| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED&amp;diff=70264</id>
		<title>LED</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED&amp;diff=70264"/>
		<updated>2012-12-26T18:43:09Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Reihen- plus Parallelschaltung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung == &lt;br /&gt;
&lt;br /&gt;
[[Bild:Ledrgb.jpg|thumb|right|246px|Detailfoto einer RGB-LED [http://www.mikrocontroller.net/topic/109784#990685]]]&lt;br /&gt;
&lt;br /&gt;
Eine LED (engl. &amp;lt;B&amp;gt;L&amp;lt;/B&amp;gt;ight &amp;lt;B&amp;gt;E&amp;lt;/B&amp;gt;mitting &amp;lt;B&amp;gt;D&amp;lt;/B&amp;gt;iode, &#039;&#039;Leuchtdiode&#039;&#039;) besteht aus einem [[Halbleiter]]-PN-Übergang, der durch seine Zusammensetzung Licht eines stark begrenzten Wellenbereiches emittiert, wenn er in Durchlassrichtung von Strom durchflossen wird. Die Helligkeit einer LED ist in erster Näherung proportional zum Strom.&lt;br /&gt;
&lt;br /&gt;
Die Farbe des emittierten Lichts hängt vom verwendeten Halbleitermaterial ab. Es existieren [[Halbleiter | Halbleitermaterialien]] für den gesamten sichtbaren Bereich als auch für den Infrarotbereich und den nahen Ultraviolettbereich. Für kurze Wellenlängen (Blau bis Ultraviolett) ist ein Halbleitermaterial wie z.&amp;amp;nbsp;B. InGaN oder GaN erforderlich. Für die ersten blauen LEDs wurde SiC verwendet, welche aber eine schlechte Effizienz hat (Quelle:Wikipedia).&lt;br /&gt;
&lt;br /&gt;
Weißes Licht oder andere Farbmischungen können erzeugt werden, indem man eine Blau- oder Ultraviolett-LED mit einem Phosphormaterial beschichtet, welches durch das Licht der LED zur Emission angeregt wird. Die entstehende Farbe wird dabei von der Beschichtung bestimmt.&lt;br /&gt;
&lt;br /&gt;
== Durchlassspannung ==&lt;br /&gt;
&lt;br /&gt;
LEDs haben im Vergleich zu gewöhnlichen [[Diode|Dioden]] eine vergleichsweise hohe, vom Halbleitermaterial abhängige [[Durchlass-Spannung]]. Bevor diese erreicht wird, fließt nur sehr wenig Strom und die LED leuchtet fast nicht. Oberhalb der Durchlassspannung (Flußspannung) steigt der Strom schnell an (Diodenkennlinie). Die Flußspannung reicht von ca. 1,2 V bei Infrarot-LEDs bis zu etwa 4 V bei Ultraviolett-LEDs.&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;
! Farbe || typ. Flußspannung [V]&lt;br /&gt;
|-&lt;br /&gt;
| Infrarot || 1,2&lt;br /&gt;
|-&lt;br /&gt;
| Rot || 1,8&lt;br /&gt;
|-&lt;br /&gt;
| Gelb || 2,0&lt;br /&gt;
|-&lt;br /&gt;
| Grün || 2,2&lt;br /&gt;
|-&lt;br /&gt;
| Grün&amp;lt;br&amp;gt;(Ultrahell) || 3,3&lt;br /&gt;
|-&lt;br /&gt;
| Blau || 3,6&lt;br /&gt;
|-&lt;br /&gt;
| Weiss || 3,6&lt;br /&gt;
|-&lt;br /&gt;
| Ultraviolett || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Durchlassstrom == &lt;br /&gt;
&lt;br /&gt;
Da LEDs durch einen zu hohen Strom zerstört werden, muss der Strom begrenzt werden. Typische Maximalwerte liegen abhängig von der LED z.&amp;amp;nbsp;B. bei 2 mA (low current) oder 20 mA. Genaue Angaben dazu finden sich in entsprechenden Datenblättern.&lt;br /&gt;
&lt;br /&gt;
=== Vorwiderstand ===&lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall und bei relativ geringfügig variierender Betriebsspannung kann man dazu einen Widerstand einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[bild:led_rv.png|right]]&lt;br /&gt;
Bei 6 V Betriebsspannung, einer Durchlassspannung der LED von 2,4 V und einem gewünschten Strom von 20 mA braucht man nach dem ohmschen Gesetz einen Widerstand von 180Ω, bei 12 V Betriebsspannung sind es 480Ω. In der Praxis wird jeweils der nächstgrößere Standardwert gewählt (E-Reihen).&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;RV=\frac{Vcc-U_\text{LED}}{I_\text{LED}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* RV: Vorwiderstand in Ohm&lt;br /&gt;
* Vcc: Betriebsspannung in Volt&lt;br /&gt;
* &amp;lt;math&amp;gt;U_{LED}&amp;lt;/math&amp;gt;: Durchlassspannung der LED in Volt&lt;br /&gt;
* &amp;lt;math&amp;gt;I_{LED}&amp;lt;/math&amp;gt;: Strom durch die LED in Ampere&lt;br /&gt;
&lt;br /&gt;
Mit einem 480-Ohm-Widerstand, welcher für 12 V Betriebsspannung passend ist, würden bei 6 Volt statt 20 mA nur noch 7,5 mA fließen. Mit einem 180-Ohm-Widerstand, welcher für 6 V Betriebsspannung passend ist, würden bei 12 V statt der gewünschten 20 mA allerdings schon 53 mA fließen. &lt;br /&gt;
&lt;br /&gt;
Beachten muss man auch die als Wärme abgegebene &#039;&#039;&#039;Verlustleistung&#039;&#039;&#039; über dem Vorwiderstand, vor allem wenn man LEDs an eine recht hohe Betriebsspannung von 12 V oder gar 24 V anschließt. Die Verlustleistung berechnet sich einfach aus&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_{RV} = (Vcc-U_\text{LED}) \cdot I_\text{LED} = I_\text{LED}^2 \cdot RV&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel mit der 2,4-V-LED und einem Strom von 20 mA heißt das, dass an dem 480-Ohm-Widerstand eine Verlustleistung von 192 mW abfällt. Ein kleiner SMD-Widerstand der Größe 0805 hält das nicht mehr aus (1/8 W = 125 mW maximal).&lt;br /&gt;
&lt;br /&gt;
Wie man aus dem Beispiel erkennt, ist bei stark variierender Betriebsspannung ein Vorwiderstand weniger geeignet. Es sei denn, man nimmt sehr unterschiedliche LED-Ströme und damit LED-Helligkeiten oder möglicherweise die Zerstörung der LED in Kauf.&lt;br /&gt;
&lt;br /&gt;
Bei Batteriebetrieb werden LEDs häufig ohne Vorwiderstand betrieben. So z.B. bei billigen Taschenlampen und Fahrradlampen. Dabei werden oft sogar zwei 1,5V Batterien in Reihe geschaltet und die LED direkt angeschlossen. Der Grund ist, dass das alles nichts kosten darf und man sich auf den Innenwiderstand der Batterie verlässt.&lt;br /&gt;
&lt;br /&gt;
=== Konstantstromquelle ===&lt;br /&gt;
&lt;br /&gt;
Bei stark schwankender Versorgungsspannung oder Umgebungstemperatur heißt der Ausweg [[Konstantstromquelle]]. Kriterien für die Auswahl einer Schaltung für die Konstantstromquelle sind hierbei z.&amp;amp;nbsp;B. Betriebsspannungsbereich, erforderliche Genauigkeit und Kosten. Auch hier ist zu beachten, daß die Verlustleistung der Konstantstromquelle von den Bauteilen abgeführt werden muss, mit einer gewissen Ausnahme der Lösungen mit Schaltregler.&lt;br /&gt;
&lt;br /&gt;
=== Betriebsstrom ===&lt;br /&gt;
&lt;br /&gt;
In der Praxis werden LEDs oft mit einem weit geringeren als dem maximal zulässigen Durchlassstrom betrieben. Insbesondere im Entwicklungs- und Experimentierumfeld kann eine für maximal 20 mA ausgelegte LED auch mit lediglich 3-5 mA betrieben werden. Der subjektiv wahrgenommene Helligkeitsverlust ist deutlich geringer, als der prozentuale Unterschied der Stromstärke vermuten lässt, siehe Artikel [[LED-Fading]].&lt;br /&gt;
&lt;br /&gt;
== Mehrere LEDs zusammenschalten ==&lt;br /&gt;
&lt;br /&gt;
Diese Frage bewegt immer wieder die Gemüter. Wie schaltet man mehrere LEDs &#039;&#039;&#039;richtig&#039;&#039;&#039; zusammen?&lt;br /&gt;
&lt;br /&gt;
=== Reihenschaltung ===&lt;br /&gt;
&lt;br /&gt;
In einer Reihenschaltung ist der Strom durch alle Verbraucher gleich. Ideal für LEDs. Hat man eine ausreichend hohe Versorgungsspannung, kann man mehrere LEDs in Reihe schalten. Dann reicht ein einziger Widerstand bzw. eine [[Konstantstromquelle]]. Allerdings sollte man das nicht übertreiben. 100-150 LEDs direkt an die Netzspannung zu hängen ist nicht möglich, da die LEDs zu viel Sperrspannung abbekommen würden. Auch bei gleichgerichteter Spannung besteht ein Sicherheitsproblem. Als Hobbybastler sollte man sich auch hier auf Spannungen kleiner als 40V beschränken.&lt;br /&gt;
&lt;br /&gt;
=== Parallelschaltung ===&lt;br /&gt;
&lt;br /&gt;
Das direkte Parallelschalten von LEDs ist sehr kritisch und muss vermieden werden. Grund ist die exponentielle Diodekennlinie, welche bewirkt, dass eine kleine Spannungsänderung eine grosse Stromänderung hervorruft. Schaltet man nun zwei LEDs mit verschiedenen Durchlassspannung parallel, bekommt die mit der niedrigeren Durchlassspannung DEUTLICH mehr Strom ab, dadurch wird sie nicht nur deutlich heller sondern auch wärmer. Das führt zum 2. Problem, denn mit steigender Temperatur sinkt die Durchlassspannung zusätzlich, wodurch sich der Effekt weiter verstärkt! LEDs verschiedender Farben haben sehr unterschiedliche Durchlassspannungen, hier ist ein direktes Parallelschalten vollkommen unmöglich. Aber selbst LEDs mit gleicher Farbe und aus einem Produktionsdurchlauf (Lot) weisen herstellungsbedingt bisweilen erhebliche Streuungen der Durchlassspannung auf!&lt;br /&gt;
&lt;br /&gt;
Richtig Parallelschalten kann man LEDs aber durch&lt;br /&gt;
&lt;br /&gt;
* Vorwiderstand/Konstantstromquelle für jede einzelne LED&lt;br /&gt;
* Auswählen von ausgemessenen LEDs mit sehr ähnlicher Flußspannung&lt;br /&gt;
&lt;br /&gt;
Letztere Methode wird von professionellen Herstellern verwendet, um bei grösseren Anzeigen LEDs direkt parallel schalten zu können. Die Unterschiede in der Flußspannung bei Nennstrom sollten dabei kleiner als 10mV(?) sein. Das gilt natürlich auch für das Parallelschalten von LED-Strängen, also Reihenschaltungen von LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Reihen- plus Parallelschaltung ===&lt;br /&gt;
&lt;br /&gt;
Eine Kombination aus Serien- und Parallelschaltung ist weniger kritisch, da sich die unterschiedlichen Kennlinien statistisch mitteln. Z.B. kann man 20 LEDs in Reihe und mehrere solcher Stränge parallel schalten. Eine einzelne Diode mit geringerer Durchlaßspannung wird im Strom durch 9 andere begrenzt. Der Stromanstieg infolge der Unterschiede der einzelnen Stränge erzeugt an allen Bahnwiderständen der Dioden einen Spannungsabfall, der die ungleiche Stromverteilung begrenzt.&lt;br /&gt;
&lt;br /&gt;
Da LEDs mit bis zu 20% in ihrer effektiven Leuchtkraft bei gleicher scheinbarer Spannung streuen, sollte man wenigstens 10 LEDs in Reihe schalten und diese auch nur zu 70% auslasten, um optische Schwankungen auf ein Mass der Nichtsichtbarkeit zu senken und Mitkopplungseffekte infolge von Erwärmung zu begrenzen. Statistisch streuen die Helligkeiten dann nur noch im Bereich einiger Prozente. Die Variation der Stromaufnahme einzelner Stränge sollte demgemäss ebenfalls auf 5% begrenzt werden, d.h. der regelnde Widerstand muss im Bereich von &amp;gt;10% Spannungsänderung aufnehmen können.&lt;br /&gt;
&lt;br /&gt;
Eine brauchbare Dimensionierung für 1,7V-LEDs @ 20mA wäre: 10 LEDs mit R=150Ohm an 20Volt. Der Widerstand sollte mit 1W belastbar sind. Noch besser ist ein gegengeregelter FET, der als Kaltleiter eine doppelte Gegenregelung bringt.&lt;br /&gt;
&lt;br /&gt;
Für eine gleichmässig Lichtversrogung eines Array, sollten die LEDs nicht strangweise parallel, sonderen in Schleifen verlegt werden. Man kann z.B. zwei Stränge alternierend verdrahten.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Tutorial: IO-Grundlagen#Hardware]]&lt;br /&gt;
* [[LED-Matrix]]&lt;br /&gt;
* [[LED-Fading]]&lt;br /&gt;
* [[Lichtsensor / Helligkeitssensor#LED]]&lt;br /&gt;
* [[Ambilight in Hardware]]&lt;br /&gt;
* [[Konstantstromquelle]] &lt;br /&gt;
* [[Konstantstromquelle fuer Power LED]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/158836?goto=2759782#2759782 Forumsbeitrag]: LEDs an 230V Netzspannung mit Konstantstromquelle&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/219681#2197034 Forumsbeitrag]: Darstellung der Toleranzen von LEDs und deren Wirkung, oder &amp;quot;Warum man einen Vorwiderstand braucht&amp;quot;&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/74169#618682 Forumsbeitrag]: 16-Segment Ganganzeige ohne Mikrocontroller&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267113#2788848 Forumsbeitrag]: Unbekannte LEDs ausmessen.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/280991?goto=2966997#2966820 Forumsbeitrag]: Konstantstromquelle für LED an 40-420VDC&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://de.wikibooks.org/wiki/Arbeiten_mit_LEDs/_Grundlagen Wikibooks Arbeiten mit LEDs: Grundlagen] - Sehr gute Erklärung, auch für Anfänger&lt;br /&gt;
* [http://www.theledlight.com/technical.html www.theledlight.com] - LED Information and Technical Data (englisch)&lt;br /&gt;
* [http://forum.electronicwerkstatt.de/phpBB/faq/led/ LED FAQ für Anfänger]&lt;br /&gt;
* [http://members.misty.com/don/ledx.html Don Klipstein&#039;s LED Main Page (engl.)]&lt;br /&gt;
* [http://www.robotroom.com/LEDTester.html Selecting a LED] - LED Tester von David Cook (Beginnerprojekt)&lt;br /&gt;
* [http://www.evilmadscientist.com/article.php/throw Some thoughts on throwies] von Windell H. Oskay von www.evilmadscientist.com&lt;br /&gt;
*[http://www.led-rechner.de www.led-rechner.de]&lt;br /&gt;
* [http://catalog.osram-os.com/catalogue/catalogue.do?act=downloadFile&amp;amp;favOid=02000002000040ac000100b6 Vergleich von LED-Schaltungen ] - (OSRAM Applikationsschrift)&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Displays und Anzeigen| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Operationsverst%C3%A4rker-Grundschaltungen&amp;diff=70263</id>
		<title>Operationsverstärker-Grundschaltungen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Operationsverst%C3%A4rker-Grundschaltungen&amp;diff=70263"/>
		<updated>2012-12-26T18:21:39Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Der Logarithmierer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Idealisiertes Modell eines OPV ==&lt;br /&gt;
&lt;br /&gt;
=== Anschlüsse ===&lt;br /&gt;
Ein Operationsverstärker hat zwei Eingänge (+) und (-) und einen Ausgang&lt;br /&gt;
(UA). Außerdem verfügt er über eine positive und eine negative&lt;br /&gt;
Spannungsversorgung (V+) und (V-).&lt;br /&gt;
&lt;br /&gt;
=== Spannungsversorgungen ===&lt;br /&gt;
Die Spannungsversorgungen sollen zunächst nicht interessieren. Sie&lt;br /&gt;
werden in Schaltungen oft nicht eingezeichnet. &lt;br /&gt;
In der Praxis ist es jedoch wichtig zu wissen, dass die Ausgangsspannung immer zwischen (V+) und (V-) liegt. Die Ausgangsspannung des OPV kommt schließlich  dadurch zustande, dass der Ausgang über einen Transistor mehr oder weniger hochohmig mit den beiden Versorgungsspannungen verbunden wird.&lt;br /&gt;
&lt;br /&gt;
Wenn man einen OPV also mit +5V versorgt, so kann der OPV im besten Fall am Ausgang +5V erzeugen. Man würde in diesem Fall von einem &amp;quot;Rail-to-Rail&amp;quot; Operationsverstärker sprechen.&lt;br /&gt;
Bei vielen Operationsverstärkern ist die maximal mögliche Ausgangsspannung geringer als die Versorgungsspannung. Ein mit +5V Spannungsversorgung beschalteter OPV kann dann beispielsweise nur +4V Ausgangsspannung erzeugen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    | \&lt;br /&gt;
    |  \&lt;br /&gt;
 -- | - \&lt;br /&gt;
    |    \_______&lt;br /&gt;
    |    /&lt;br /&gt;
 -- | + /&lt;br /&gt;
    |  /&lt;br /&gt;
    | /&lt;br /&gt;
&lt;br /&gt;
=== Ausgang ===&lt;br /&gt;
Der Ausgang des OPV ist eine ideale Spannungsquelle. Das bedeutet, dass die&lt;br /&gt;
Ausgangsspannung unabhängig davon ist, was ausgangsseitig an den OPV&lt;br /&gt;
angeschlossen wird.&lt;br /&gt;
In der Praxis gilt dieses Modell häufig nur bei &amp;quot;sinnvollen Anwendungen&amp;quot;. So ist beispielsweise der Ausgangsstrom des OPV nach oben begrenzt (typischerweise im mA-Bereich), und manche OPV schwingen sehr leicht, wenn man sie kapazitiv belastet.&lt;br /&gt;
&lt;br /&gt;
=== Eingänge ===&lt;br /&gt;
Die Eingänge eines OPV sind hochohmig, d. h., es handelt sich nur um &amp;quot;Messfühler&amp;quot;, die keinen Strom führen.&lt;br /&gt;
Achtung: Die Eingangsschutzbeschaltung (Dioden von GND und gegen VCC) bei manchen OPVs kann jedoch dazu führen, dass Strom in den Eingang fliesst, wenn dessen Betriebsspannung z.B. abgeschaltet ist.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
Der OPV mißt zu jeder Zeit die Differenz &amp;lt;math&amp;gt;U_D = U(+) - U(-)&amp;lt;/math&amp;gt; der&lt;br /&gt;
Eingangsspannungen.&lt;br /&gt;
&lt;br /&gt;
Ist die Spannung an (+) größer als an (-), so erhöht der OPV die&lt;br /&gt;
Ausgangsspannung.&lt;br /&gt;
Ist die Spannung an (+) niedriger als an (-), so vermindert der OPV die&lt;br /&gt;
Ausgangsspannung.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis dieses Vorgangs wird häufig über die Gleichung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_a = v \cdot U_D&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
beschrieben, wobei &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; eine sehr große Zahl (10^4...10^6) ist. &lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der beschriebenen Funktionsweise lassen sich alle grundlegenden Schaltungen herleiten.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Betrachtet wird die invertierende Grundschaltung nach Abbildung a) im Abschnitt &amp;quot;Verstärkergrundschaltungen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Für die Pfeilrichtungen der Spannungen und Ströme gilt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt;: von oben nach unten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{R3}&amp;lt;/math&amp;gt;: von links nach rechts&lt;br /&gt;
&lt;br /&gt;
Die Spannung am (+)Eingang ist gleich Null. Die Spannung am (-)Eingang wird durch die Spannungsquelle &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; und durch die im OPV befindliche und mit dem Ausgang verbundene Spannungsquelle des OPV manipuliert.&lt;br /&gt;
&lt;br /&gt;
* Ist die Spannung am (-)Eingang negativ, so erhöht der Operationsverstärker die Ausgangsspannung. Dadurch wird auch die Spannung am (-)Eingang positiver. Und zwar so lange, bis die Spannung am (-)Eingang gleich groß ist, wie die Spannung am (+)Eingang, also U(-)=0V.&lt;br /&gt;
* Ist die Spannung am (-)Eingang positiv, so vermindert der Operationsverstärker die Ausgangsspannung. Dadurch wird auch die Spannung am (-)Eingang negativer. Und zwar so lange, bis die Spannung am (-)Eingang gleich groß ist, wie die Spannung am (+)Eingang, also U(-)=0V.&lt;br /&gt;
&lt;br /&gt;
Der Operationsverstärker wird also die Spannungen an (+) und (-)&lt;br /&gt;
angleichen. Das passiert immer dann, wenn der Ausgang mit dem (-)Eingang&lt;br /&gt;
verbunden ist. Man nennt das Prinzip &amp;quot;Gegenkopplung&amp;quot;. Auf diese Art und&lt;br /&gt;
Weise funktionieren alle analogen OPV-Schaltungen.&lt;br /&gt;
&lt;br /&gt;
Da an (+) Massepotential anliegt, liegt an &amp;lt;math&amp;gt;R_3&amp;lt;/math&amp;gt; die Spannung &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; an, und es gilt: &lt;br /&gt;
&amp;lt;math&amp;gt;I_{R3}=\frac{U_e}{R_3}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der (-)Eingang hochohmig ist, fließt &amp;lt;math&amp;gt;I_{R3}&amp;lt;/math&amp;gt; über &amp;lt;math&amp;gt;R_4&amp;lt;/math&amp;gt; weiter zum OPV-Ausgang.&lt;br /&gt;
&lt;br /&gt;
Ua ist die Spannung vom Ausgang zur (virtuellen) Masse am (-)Eingang.&lt;br /&gt;
(--&amp;gt; Pfeil einzeichnen und klarmachen, daß es egal ist, ob der Pfeil vom&lt;br /&gt;
Ausgang zur Masse geht oder vom Ausgang &amp;quot;entgegen der Stromrichtung&amp;quot; zur&lt;br /&gt;
virtuellen Masse an (-)!)&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von &amp;lt;math&amp;gt;I_{R3}=\frac{U_e}{R_3}&amp;lt;/math&amp;gt; ergibt sich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_a = -R_4 \cdot I_{R3} = -{{R_4} \over {R_3}} \cdot U_e.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Energie für den Stromtransport über &amp;lt;math&amp;gt;R_4&amp;lt;/math&amp;gt; stammt vom OPV! Sobald die Ladungen ausgehend von der Spannungsquelle &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; die virtuelle Masse an (-) erreicht haben, hat &amp;lt;math&amp;gt;U_e&amp;lt;/math&amp;gt; seine gesamte Energie abgegeben.&lt;br /&gt;
&lt;br /&gt;
== Reale OPs / Kennwerte ==&lt;br /&gt;
Abweichend vom idealen OP besitzen reale OPs diverse Einschränkungen und Kennwerte, die sie für verschiedene Einsätze mehr oder weniger prädestinieren.&lt;br /&gt;
&lt;br /&gt;
=== Leerlaufverstärkung ===&lt;br /&gt;
Die Leerlaufverstärkung gibt an, wie stark sich das Ausgangssignal i.A. der Änderung eines Eingangsignals statisch ändert, bzw nach dem Einschwingen erreichen könnte, wenn es nicht durch die Betriebsgrenzen limitiert wäre.&lt;br /&gt;
&lt;br /&gt;
=== Anstiegszeit ===&lt;br /&gt;
Bestimmend für die dynamische Änderung des Signal ist wiederum die slew rate, die wesentlich das AC-Verhalten bestimmt.&lt;br /&gt;
&lt;br /&gt;
=== Frequenz-Bandbreiteprodukt ===&lt;br /&gt;
&lt;br /&gt;
=== Gleichtaktverstärkung ===&lt;br /&gt;
Infolge des inhomogenen Aufbaus der internen Verstärkerstufen werden die beiden Eingangssignale nicht exakt gleich verstärkt, was in einen Gleichanteil und einen Differenzanteil aufgeteilt werden kann. Der nicht erwünschte Gleichtakt (engl. &#039;&#039;common mode&#039;&#039;) ist dabei ein Maß für die Qualität des OP.&lt;br /&gt;
&lt;br /&gt;
== Verstärkergrundschaltungen ==&lt;br /&gt;
=== Grundbeschaltung mit Berechnung ===&lt;br /&gt;
[[Bild:Op-verstaerker-a.png]] [[Bild:Op-verstaerker-b.png]]&lt;br /&gt;
&lt;br /&gt;
In a) und b) verwenden wir den OP als Verstärker und nutzen hier die Möglichkeit der Gegenkopplung, um definierte Verstärkungen zu erhalten. Wir gehen wieder davon aus, dass der OP ein ideales Bauteil ist und daher seine Leerlaufverstärkung unendlich ist. Ebenso betrachten wir den Eingangswiderstand als unendlich.&lt;br /&gt;
&lt;br /&gt;
In a) ist ein invertierender Verstärker mit einem OP dargestellt. Durch die Widerstände R3 und R4 wird die Verstärkung bestimmt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = \frac{U_a}{U_e} = -\frac{R_4}{R_3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verhältnis der beiden Widerstände bestimmt also die Verstärkung und somit die Ausgangsspannung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = -\frac{R_4}{R_3} \cdot U_e &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder auch&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = V \cdot U_e&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das negative Vorzeichen drückt aus, dass es sich um einen invertierenden Verstärker handelt.&lt;br /&gt;
&lt;br /&gt;
Beim nichtinvertierenden Verstärker b) finden wir auch eine Rückkopplung über R6 zum invertierenden Eingang des OP. Die Verstärkung wird durch das Gegenkopplungsnetzwerk R6 und R7 bestimmt. Hier ist:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = 1 + \frac{R6}{R7}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Verstärkung von 1 ist sinnvoll, wenn eingangsseitig eine Spannungsquelle mit hohem Innenwiderstand verwendet wird. Für &amp;lt;math&amp;gt;\frac{R6}{R7} \to 0&amp;lt;/math&amp;gt; heißt die Schaltung &amp;quot;Spannungsfolger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kleinere Werte als 1 lassen sich nicht realisieren. Die Ausgangsspannung errechnet sich also so:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_e \cdot \left (1 + \frac{R_6}{R_7}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Eine Eingangsspannung von 0,5 V soll auf den Wert 5 V verstärkt werden, es ist also eine Verstärkung V von 10 benötigt. R7 ist mit 10 k&amp;amp;Omega; vorgegeben. Also ist das Verhältnis&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{R_6}{R_7} = V - 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem Wert von 10 k&amp;amp;Omega; für R7 errechnet sich R6 zu&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
R6 = (V - 1) \cdot R7&lt;br /&gt;
   = (10 - 1) \cdot 10\,\mathrm{k\Omega}&lt;br /&gt;
   = 90\,\mathrm{k\Omega}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgangsspannung Ua wird also:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_a =   U_e \cdot \left (1 + \frac{R_6}{R_7}\right )&lt;br /&gt;
   = 0,5\,\mathrm{V} \cdot \left (1 + \frac{90\,\mathrm{k\Omega}}{10\,\mathrm{k\Omega}}\right)&lt;br /&gt;
   = 5\,\mathrm{V}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nichtinvertierender Verstärker mit Offset ===&lt;br /&gt;
Eine Abwandlung des nichtinvertierenden Verstärkers erlaubt es, einen konstanten Offset vorzugeben. D.h. von der zu verstärkenden Eingangsspannung U(e) wird eine konstante Spannung U(o) abgezogen und die Differenz verstärkt. Auf der Ausgangsspannung U(a) findet sich die Offsetspannung U(o) allerdings wieder.&lt;br /&gt;
[[Bild:Op-verstaerker-offset.png]]&lt;br /&gt;
&lt;br /&gt;
Es gilt:&lt;br /&gt;
&lt;br /&gt;
Offsetspannung: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_o =  U_V \cdot \frac{R2}{R1 + R2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
mit U(V) = Versorgungsspannung an R1&lt;br /&gt;
&lt;br /&gt;
Verstärkung:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
V = 1 + \frac{R3}{\frac{R1 \cdot R2}{R1 + R2}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgangsspannung:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U_a = (U_e - U_o) \cdot V + U_o&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorteil dieser Schaltung ist, daß nur die Differenz verstärkt wird. Damit kann eine größere Verstärkung gewählt werden. Zu berücksichtigen ist dabei, daß die Ausgangsspannung U(a) um die Offsetspannung U(o) überlagert ist.&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfolger (Impedanzwandler) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger1.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Abart des nichtinvertierenden Verstärkers stellt der Spannungsfolger dar. Beim nichtinvertierenden Verstärker errechnet sich die Ausgangsspannung aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_e \cdot \left (1 + \frac{R_2}{R_1}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir R2 auf 0Ω (mit R1 &amp;gt; 0) oder R1 auf unendlich (mit R2 &amp;lt; ∞) ändern, erhalten wir daher:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V = 1 + \frac{R_2}{R_1} = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Spannungsfolger hat also eine Verstärkung V von 1.&lt;br /&gt;
&lt;br /&gt;
Umgezeichnet sieht die Schaltung so aus: &lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger2.png]]&lt;br /&gt;
&lt;br /&gt;
Was soll das nun? Wir nutzen die Eigenschaft, dass ein idealer OP einen unendlichen Eingangswiderstand und einen Ausgangswiderstand von 0Ω hat. Real sieht das natürlich anders aus: so liegt der Eingangswiderstand Re bei normalen OPs in der Größenordnung von 1MOhm bis &amp;lt;math&amp;gt;10^{15} \Omega&amp;lt;/math&amp;gt;, der Ausgangswiderstand Ra im Bereich 20Ω bis 1kOhm. Deshalb spricht man bei dieser Schaltung von einem Impedanzwandler. Eine solche Schaltung kann also aus einer relativ hochohmigen Spannungsquelle eine niederohmige, durch Folgeschaltungen belastbare Spannungsquelle machen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger3.png|left]]&lt;br /&gt;
&lt;br /&gt;
In dem nebenstehenden Beispiel ist eine einfache Möglichkeit zur Erzeugung einer Referenzspannung gezeigt. Es kommt eine normale Stabilisierungsschaltung mit einer Zenerdiode zur Anwendung, die aber nicht mehr die schlechten Eigenschaften der Standardbeschaltung mit lediglich Widerstand und Zenerdiode  hat. Bei einer Zenerdiode hängt die genaue Spannung davon ab, welcher Strom durch sie fliesst. Dieser Strom (und damit auch die Höhe der Zenerspannung) würde sich aber ändern, wenn ein Verbraucher die Zenerdiode direkt mit seinem Stromfluss belasten würde. Als Folge davon würde die Spannungslage der Zenerdiode je nach Verbraucher leicht schwanken. Durch den Spannungsfolger wird das verhindert, weil der jetzt den vom Verbraucher gezogenen Strom bereitstellt.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-spannungsfolger4.png|left]]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Anwendungsmöglichkeit wäre das hochohmige Auskoppeln einer Brückenspannung. Die Brückenschaltung selbst wird durch Folgeschaltungen nicht mehr belastet, alle anderen Eigenschaften bleiben erhalten.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
=== Der Komparator ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-komp-a.png]] [[Bild:Op-komp-b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der einfachsten Beschaltung des Operationsverstärkers erhält man einen Komparator. Es fällt auf, dass kein Gegenkopplungsnetzwerk vorhanden ist. Der OP arbeitet daher mit seiner vollen Leerlaufverstärkung Vo. Dies bedeutet, dass bereits eine kleine Eingangsspannung genügt, um den OP in die Begrenzung zu treiben. Das heißt, die Ausgangsspannung Ua wird annähernd die Betriebsspannung erreichen.&lt;br /&gt;
&lt;br /&gt;
Beim Komparator gibt es zwei Möglichkeiten der Beschaltung: die invertierende nach a) und die nichtinvertierende Beschaltung nach b). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Berechnungsbeispiel für Schaltung b)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Angenommen die Leerlaufverstärkung Vo von 40000 und eine Eingangsspannung von 0,1 Volt. Die Betriebsspannungen Vcc und Vee legen wir auf +/- 24 V fest. Damit ergibt sich theoretisch für Ua:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a =  V_0 \cdot U_e = 40000 \cdot 0,1\,\mathrm{V} = 4000\,\mathrm{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist natürlich ein unrealistischer Wert, da Ua nicht höher sein kann als die Betriebsspannung. Also anders ausgedrückt: Bei welcher Spannung Ue erreicht der OP seine Aussteuerungsgrenze?&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_e = V_{cc} / V_0 = 24\,\mathrm{V} / 40000 = 0,6\,\mathrm{mV}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass eine Spannung von 0,6 mV ausreicht um den Komparator in die Begrenzung zu treiben.&lt;br /&gt;
&lt;br /&gt;
Das gleiche gilt auch für den invertierenden Komparator, allerdings wird hier der OP in die negative Begrenzung gebracht.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = V_0 \cdot U_e&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So hat der Komparator nun einen einstellbaren Schaltpunkt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-komp-c.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Der Addierer (Summierverstärker) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-addierer.png]]&lt;br /&gt;
&lt;br /&gt;
Ein als invertierender Verstärker beschalteter OP lässt sich so beschalten, dass ein Summensignal aus den Eingangsspannungen gebildet wird. Um die Funktion deutlich zu machen, ist eine Betrachtung der einzelnen Ströme nötig.&lt;br /&gt;
&lt;br /&gt;
In einem invertierenden Verstärker wird sich die Ausgangsspannung immer so einstellen, dass der invertierende Eingang Massepotential hat. Die virtuelle Masse (VM) unterscheidet sich von einer &amp;quot;normalen&amp;quot; Masse dadurch, dass das Potential durch einen Regelungsvorgang zustande kommt. &lt;br /&gt;
An der virtuellen Masse (VM) gilt die Knotenpunktregel, wonach die Summe der zufließenden Ströme gleich der Summe der abfließenden Ströme ist.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;I_1 + I_2 = -I_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sofern &amp;lt;math&amp;gt;U_{e1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;U_{e2}&amp;lt;/math&amp;gt; bekannt sind, lässt sich die Gleichung umformen in:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{e1}}{R_1} + \frac{U_{e2}}{R_2} = -\frac{U_a}{R_3}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Ua aufgelöst ergibt sich:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = \left (U_{e1} \cdot \frac{R_3}{R_1}\right ) + \left (U_{e2} \cdot \frac{R_3}{R_2}\right ) + ... + \left (U_{en} \cdot \frac{R_3}{R_n}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war&#039;s eigentlich schon. Einen Sonderfall gibt es, wenn die Widerstände R1 und R2 gleich sind. Dann gilt&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;R_1 = R_2 = R_x&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
und damit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;-U_a = \frac{R_3}{R_x} \cdot (U_{e1} + U_{e2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Der Subtrahierer (Differenzverstärker) ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-subtrahierer.png]]&lt;br /&gt;
&lt;br /&gt;
Ein Subtrahierer ist die Zusammenschaltung eines invertierenden und eines nichtinvertierenden Verstärkers. Schliessen wir Punkt Ue1 nach Masse kurz und steuern Ue2 an, arbeitet die Schaltung als nichtinvertierender Verstärker. Wird Ue2 nach Masse verbunden und Ue1 angesteuert, verhält sich die Schaltung als invertierender Verstärker (R7 vorerst nicht beachten).&lt;br /&gt;
&lt;br /&gt;
Für den 1. Fall gilt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_{e2} \cdot \left (1 + \frac{R_6}{R_4}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für den 2. Fall:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = -U_{e1} \cdot \frac{R_6}{R_4}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der dritte Fall ist die Ansteuerung beider Eingänge:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = -U_{e1} \cdot \frac{R_6}{R_4} + U_{e_2} \cdot \left (1 + \frac{R_6}{R_4}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung ist gut für eine Erklärung, praktisch aber taugt sie nichts. Denn liegen an den Eingängen gleiche Spannungen an, ist die Ausgangsspannung nicht 0, wie eigentlich zu vermuten wäre. Deshalb ändern wir die Schaltung und fügen R7 ein. Jetzt stellt sich am Punkt + des OPs die Spannung&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_{e2+} = U_{e2} \cdot \frac{R_7}{R_5 + R_7}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ein. Wenn wir das berücksichtigen, erhalten wir endlich einen richtigen Subtrahierer:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_{e2} \cdot \left (1 + \frac{R_6}{R_4}\right ) \cdot \frac{R_7}{R_5 + R_7} - \frac{R_6}{R_4} \cdot U_{e1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies gilt für alle Subtrahierer, obwohl es natürlich auch hier wieder zwei Sonderfälle gibt; nämlich a) wenn alle Gegenkopplungswiderstände gleich sind:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;R_6 = R_7 = R_4 = R_5&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann ist &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = U_{e2} - U_{e1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder b) wenn die Widerstandsverhältnisse gleich sind  :&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{R_6}{R_4} = \frac{R_7}{R_5}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann ergibt sich für Ua:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = \left (U_{e2} \cdot \frac{R_6}{R_4}\right ) - \left (U_{e1} \cdot \frac{R_6}{R_4}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder noch einfacher:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a = (U_{e2} - U_{e1}) \cdot \frac{R_6}{R_4}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Addierer/Subtrahierer mit unterschiedlichen Faktoren ===&lt;br /&gt;
Legt man nicht den + sondern den - Eingang des Operationsverstärkers als Bezugspunkt zur Masse mit einem Widerstand fest, übernimmt der Vorwiderstand vom - Eingang, R4 die Aufgabe von R5.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Op-addsub.png]]&lt;br /&gt;
&lt;br /&gt;
Hier die Schaltung die addieren und subtrahieren kann, mit unterschiedlichen Faktoren.&lt;br /&gt;
Sie kann verwendet werden für Aufgaben wie: Gesucht ist eine Schaltung, die aus 0...2.56 V eine Spannung von -10V...10V macht. Für dieses Beispiel wird hier die Dimensionierung durchgeführt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left&amp;quot; &lt;br /&gt;
|&#039;&#039;&#039;Ue1 = 5V&#039;&#039;&#039;&lt;br /&gt;
|Einfach festgelegt, muss nur ein positiver Wert sein&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;R6 = 200k&#039;&#039;&#039;&lt;br /&gt;
|Einfach festgelegt, könnte auch 100k oder 500k sein&lt;br /&gt;
|-&lt;br /&gt;
|Ue2i = 0V, &#039;&#039;&#039;Uai = -10V&#039;&#039;&#039;&lt;br /&gt;
|gewählter momentaner &#039;&#039;Zustand 1&#039;&#039;, Ue2 = 0V ist günstig für Berechnung, Ua ist die dazupassende Ausgangsspannung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ue2ii = 2.56V&#039;&#039;&#039;, &#039;&#039;&#039;Uaii = 10V&#039;&#039;&#039;&lt;br /&gt;
|gewählter beliebiger &#039;&#039;Zustand 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Um = Ue2&lt;br /&gt;
|Gleichgewicht am Eingang&lt;br /&gt;
|-&lt;br /&gt;
|Ia + Ib = Ic&lt;br /&gt;
|In den Eingang fließt &amp;quot;kein&amp;quot; Strom&lt;br /&gt;
|-&lt;br /&gt;
|(Ua-Ue2)/R6 + (Ue1-Ue2)/R4 = Ue2/Rc&lt;br /&gt;
|Gleichung mit den Unbekannten R4 und Rc&lt;br /&gt;
|-&lt;br /&gt;
|(Uai-Ue2i)/R6 + (Ue1-Ue2i)/R4 = Ue2i/Rc&lt;br /&gt;
|Variablen für &#039;&#039;Zustand 1&#039;&#039; eingesetzt, bildet 1. Gleichung&lt;br /&gt;
|-&lt;br /&gt;
|(Uaii-Ue2ii)/R6 + (Ue1-Ue2ii)/R4 = Ue2ii/Rc&lt;br /&gt;
|Variablen für &#039;&#039;Zustand 2&#039;&#039; eingesetzt, bildet 2. Gleichung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;R4=-\frac{R6*U_{e1}}{U_{ai}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|2 Gleichungen mit 2 Unbekannten, Lösung durch Umformen der 1. Gleichung nach R4 und einsetzen von Ue2i=0 (freundlicherweise fällt die 2. Unbekannte dabei raus)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;R4 = 100k&#039;&#039;&#039;&lt;br /&gt;
|restliche Werte eingesetzt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;Rc=\frac{R6*U_{e1}*U_{e2ii}}{U_{aii}*U_{e1}-U_{ai}*(U_{e1}-U_{e2ii})-U_{e1}*U_{e2ii}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|Ergebnis für R4 in die 2. Gleichung einsetzen und Umformen nach Rc&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Rc = 41.6k&#039;&#039;&#039;&lt;br /&gt;
|Werte eingesetzt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Instrumenten-Verstärker ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:Instrument.png]]&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil des Subtrahierer ist sein geringer Eingangswiderstand. Um den nahezu unendlichen Eingangswiderstand des verwendeten Operationsverstärkers zu erreichen, kann man einfach vor beide Eingänge je einen Impedanzwandler vorschalten.&lt;br /&gt;
Die hier beschriebene Schaltung ist um drei Widerstände erweitert und ermöglicht die Einstellung der Differenz-Verstärkung über nur einen Widerstand, nämlich R2.&lt;br /&gt;
&lt;br /&gt;
Am invertierenden Eingang von IC1A gilt (Knotenregel):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{a1}-U_{e1}}{R_1}-\frac{U_{e1}-U_{e2}}{R_2}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am invertierenden Eingang von IC1C gilt (Knotenregel):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\frac{U_{a2}-U_{e2}}{R_1}+\frac{U_{e1}-U_{e2}}{R_2}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subtrahiert man die beiden Gleichungen voneinander, erhält man:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_{a2}-U_{a1}=(U_{e2}-U_{e1})\cdot\left (1+\frac{2\cdot R_1}{R_2}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Letztere Differenz ist die Eingangsspannung eines normalen Subtrahierers mit der Verstärkung 1.&lt;br /&gt;
&lt;br /&gt;
Also ergibt sich als Ausgangsspannung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;U_a=(U_{e2}-U_{e1}) \cdot \left (1+\frac{2\cdot R_1}{R_2}\right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Differenzverstärkung beträgt demnach:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;V=\left (1+\frac{2\cdot R_1}{R_2} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung: Auswertung von Brückenschaltungen, wie Drucksensoren oder Dehnungsmessstreifen, die durch den Eingangswiderstand der Messschaltung nicht belastet werden dürfen.&amp;lt;br&amp;gt;&lt;br /&gt;
Instrumenten-Verstärker kann man auch fertig kaufen. Im INA102 ist die komplette Schaltung integriert. Für R2 sind 3 verschiedene Werte eingebaut, die bei passender Verschaltung eine Verstärkung von 1, 10, 100 oder 1000 ermöglichen.&lt;br /&gt;
&lt;br /&gt;
=== Der Multiplizierer (Mischer) ===&lt;br /&gt;
&lt;br /&gt;
=== Der Logarithmierer ===&lt;br /&gt;
Logarithmierer werden mit der Kennlinie einer Diode konstruiert, die einen eingeprägte Strom in eine Spannung übersetzt.&lt;br /&gt;
&lt;br /&gt;
= Spannungsversorgung und Beschaltung =&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit einfacher Versorgungsspannung ==&lt;br /&gt;
&lt;br /&gt;
Häufig möchte man Wechselspannung (z. B. Audiosignale) die auch negative Spannungen enthält mit einem Opamp verstärken, hat aber nur eine einfache Versorgungsspannung, eine positive in Bezug zu Masse, zur Verfügung. Dafür bieten sich folgende Schaltungen an, die in der Literatur leider häufig vernachlässigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Nichtinvertierender Verstärker ===&lt;br /&gt;
&lt;br /&gt;
[[Bild: Ss_opamp1.png]]&lt;br /&gt;
&lt;br /&gt;
Der positive Eingang wird mit einem Spannungsteiler (R3 und R5) auf die halbe Betriebsspannung gelegt. Dieser Spannung wird dann die zu verstärkende Eingangswechselspannung überlagert. Mit den Kondensatoren am Eingang (C1) und am Ausgang (C2) wird der Gleichspannungsanteil abgekoppelt.&lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist in diesem Beispiel für Wechselspannung 11 (Formel wie oben), für Gleichspannung aber 1, da C4 für Gleichspannung einen unendlichen Widerstand darstellt. C3 sollte dorthin gehen, wo das Eingangssignal seinen Bezugspunkt hat, also die Abschirmung der Cinch-Buchse, während R5 dorthin geht, wo der Operationsverstärker seine negative Versorgungsspannung her bekommt, falls das nicht die gleichen Potentiale, hier GND, sein sollten.&lt;br /&gt;
&lt;br /&gt;
=== Invertierender Verstärker ===&lt;br /&gt;
&lt;br /&gt;
Das Prinzip funktioniert analog auch für die invertierende Beschaltung:&lt;br /&gt;
&lt;br /&gt;
[[Bild: Ss_opamp2.png]]&lt;br /&gt;
&lt;br /&gt;
= Kaufempfehlung =&lt;br /&gt;
LM 158/258/358 2 OPs in einem Gehäuse Preis ca. 0,30€.&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Standardbauelemente#Operationsverst.C3.A4rker|Standardbauelemente - Operationsverstärker]].&lt;br /&gt;
&lt;br /&gt;
Wer Audio OpAmps sucht - tangentsoft.net hat mal welche unter die Lupe genommen: [http://www.tangentsoft.net/audio/opamps.html Notes on Audio OpAmps]&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
*[http://www.eetkorea.com/ARTICLES/2003SEP/A/2003SEP19_AMD_AN07.PDF Op Amp Circuit Collection] - National Semiconductor Application Note 31 mit vielen weiteren OP-Schaltungen&lt;br /&gt;
*[http://www-s.ti.com/sc/psheets/slod006b/slod006b.pdf Op Amps for Everyone] - englischsprachiges, sehr umfangreiches Dokument zu OPV und deren Anwendung&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0209092.htm Operationsverstärker im ElKo]&lt;br /&gt;
*[http://www.inf.fu-berlin.de/lehre/WS00/peg/folien/Peg_v7a.pdf OP Teil 1], [http://www.inf.fu-berlin.de/lehre/WS00/peg/folien/Peg_v7b.pdf OP Teil 2] - OP-Schaltungen (deutsch)&lt;br /&gt;
*[http://www.blecken.de/download/opverst.zip Schaltungstechnik mit Operationsverstärkern] - Prof. K. Blecken, Skript zur Vorlesung (deutsch, *.doc-Format)&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Operationsverst%C3%A4rker RN-Wissen Operationsverstärker]&lt;br /&gt;
* [http://www.national.com/AU/design/0,4706,268_0_,00.html Online Seminar] von National Semiconductor&lt;br /&gt;
* [http://www.franzis.de/elo-das-magazin/grundlagen-und-ausbildung/operationsverstaerker/der-operationsverstaerker ELO-Online-Magazin, Franzis-Verlag], [http://www.franzis.de/online-shop/elektronik/lernpakete-elektronik/lernpaket-elektronik-mit-ics Lernpaket Elektronik mit ICs] &amp;quot;Elektronische Experimente mit integriertem Schaltkreis&amp;quot;, Kasten mit Steckbrett/Bauelementen (ca. 40EUR), &lt;br /&gt;
* [[Schmitt-Trigger]]&lt;br /&gt;
* [[Aktiver RC-Bandpass|Aktiver RC-Bandpass auf Operationsverstärker-Basis]]&lt;br /&gt;
* [http://sound.westhost.com/appnotes/an001.htm Präzisionsgleichrichter], engl.&lt;br /&gt;
* [http://www.elektronikwissen.net/opamp/9-opamp-wissen.html OpAmp Praxis], Praktikertipps + schwingende Operationsverstärker in den Griff bekommen&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70262</id>
		<title>Logikanalysator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70262"/>
		<updated>2012-12-26T18:11:13Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Hersteller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Logikanalysator&#039;&#039;&#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Schaltungstechnik]].&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Digitale Signale werden mit ihren Zuständen 0/1 erfasst und auf einem internen oder externen Bildschirm (früher CRT, heute TFT) ausgeben. Oftmals verfügen auch [[Oszilloskop]]e über LA-Funktionen.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Logic Analyzer werden immer dann benutzt, wenn die Beobachtung der Signaländerungen nicht mehr optisch verfogbar ist und/oder die Gültigkeit von Signalen im Zusammenhang beurteilt werden muss, wie z.B. bei kompletten Bussen.&lt;br /&gt;
&lt;br /&gt;
=== Anschluss ===&lt;br /&gt;
Ein tpischer LA verfügt meist über eines oder mehrere Kabelbündel, mit denen Signale über Klemmen an Bauteilen oder Stiftleisten aufgenommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
Die Auswertung erfolgt durch die Darstellung der Signale als Rechteckkurven, wobei Busse mit ihrem digitalen Wert markiert werden können. Weiter sind Umrechnungen auf fixed point, float und andere Formate mitsamt Skalierung möglich, um die digitalen Werte und ihre analogen Bedeutung im konkreten Kontext plausibilisieren zu können.&lt;br /&gt;
&lt;br /&gt;
Bei Bussen - besonders bei serieller Kommunikation - bietet sich die Möglichkeit, das Protokoll zu decodieren und die Werte ausdrücklich einzublenden. Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
* CAN&lt;br /&gt;
* I2C&lt;br /&gt;
* SPI&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Digital TV&lt;br /&gt;
* HDMI&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
=== Analogteil ===&lt;br /&gt;
Zur Anpassung an verschiedene Pegel benötigt auch ein digitales Gerät wie der LA einen Analogteil, der die HF-mässige Anpassung vollzieht und den erfassten Pegel dem Standard anpasst. Dazu muss die Schaltschwelle passend eingestellt werden können, um vorherzusagen, an welchem Zeitpunkt der Flanke ein angeschlossenes Bauteil schalten wird.&lt;br /&gt;
&lt;br /&gt;
Ist dies nicht einstellbar, sind die Ergebnisse interpretierbedürftig!&lt;br /&gt;
&lt;br /&gt;
=== Digitalteil ===&lt;br /&gt;
Der Digitalteil eines LA besteht aus einem Fenstergenerator, einem Sampler und einem bidirektionalen digitalen Speicher / RAM.&lt;br /&gt;
&lt;br /&gt;
Der Fenstergenerator triggert den Zeitpunkt und bestimmt die Messdauer, sowie die Wiederholrate der Messung / Update des Speichers.&lt;br /&gt;
&lt;br /&gt;
Der Sampler erfasst die Signale mittels entweder Flankentriggerung oder Überabtastung und interpretiert die 0/1 für die spätere Speicherung. Dabei verwenden moderne Sampler eine Schätzung und Interpolation der Flanke.&lt;br /&gt;
&lt;br /&gt;
Der Speicher wird vom Sampler beschrieben und von der Monitoreinheit ausgelesen. Oftmals werden über einen elektronischen Steuerbaustein käufliche RAM-Module (DIMM / DDR) angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
* Hewlett-Packard&lt;br /&gt;
* Agilent&lt;br /&gt;
* Rigol&lt;br /&gt;
&lt;br /&gt;
== Selbstbau ==&lt;br /&gt;
=== Projekte ===&lt;br /&gt;
Siehe Seite [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70261</id>
		<title>Logikanalysator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70261"/>
		<updated>2012-12-26T18:10:35Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Digitalteil */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Logikanalysator&#039;&#039;&#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Schaltungstechnik]].&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Digitale Signale werden mit ihren Zuständen 0/1 erfasst und auf einem internen oder externen Bildschirm (früher CRT, heute TFT) ausgeben. Oftmals verfügen auch [[Oszilloskop]]e über LA-Funktionen.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Logic Analyzer werden immer dann benutzt, wenn die Beobachtung der Signaländerungen nicht mehr optisch verfogbar ist und/oder die Gültigkeit von Signalen im Zusammenhang beurteilt werden muss, wie z.B. bei kompletten Bussen.&lt;br /&gt;
&lt;br /&gt;
=== Anschluss ===&lt;br /&gt;
Ein tpischer LA verfügt meist über eines oder mehrere Kabelbündel, mit denen Signale über Klemmen an Bauteilen oder Stiftleisten aufgenommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
Die Auswertung erfolgt durch die Darstellung der Signale als Rechteckkurven, wobei Busse mit ihrem digitalen Wert markiert werden können. Weiter sind Umrechnungen auf fixed point, float und andere Formate mitsamt Skalierung möglich, um die digitalen Werte und ihre analogen Bedeutung im konkreten Kontext plausibilisieren zu können.&lt;br /&gt;
&lt;br /&gt;
Bei Bussen - besonders bei serieller Kommunikation - bietet sich die Möglichkeit, das Protokoll zu decodieren und die Werte ausdrücklich einzublenden. Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
* CAN&lt;br /&gt;
* I2C&lt;br /&gt;
* SPI&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Digital TV&lt;br /&gt;
* HDMI&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
=== Analogteil ===&lt;br /&gt;
Zur Anpassung an verschiedene Pegel benötigt auch ein digitales Gerät wie der LA einen Analogteil, der die HF-mässige Anpassung vollzieht und den erfassten Pegel dem Standard anpasst. Dazu muss die Schaltschwelle passend eingestellt werden können, um vorherzusagen, an welchem Zeitpunkt der Flanke ein angeschlossenes Bauteil schalten wird.&lt;br /&gt;
&lt;br /&gt;
Ist dies nicht einstellbar, sind die Ergebnisse interpretierbedürftig!&lt;br /&gt;
&lt;br /&gt;
=== Digitalteil ===&lt;br /&gt;
Der Digitalteil eines LA besteht aus einem Fenstergenerator, einem Sampler und einem bidirektionalen digitalen Speicher / RAM.&lt;br /&gt;
&lt;br /&gt;
Der Fenstergenerator triggert den Zeitpunkt und bestimmt die Messdauer, sowie die Wiederholrate der Messung / Update des Speichers.&lt;br /&gt;
&lt;br /&gt;
Der Sampler erfasst die Signale mittels entweder Flankentriggerung oder Überabtastung und interpretiert die 0/1 für die spätere Speicherung. Dabei verwenden moderne Sampler eine Schätzung und Interpolation der Flanke.&lt;br /&gt;
&lt;br /&gt;
Der Speicher wird vom Sampler beschrieben und von der Monitoreinheit ausgelesen. Oftmals werden über einen elektronischen Steuerbaustein käufliche RAM-Module (DIMM / DDR) angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
== Selbstbau ==&lt;br /&gt;
=== Projekte ===&lt;br /&gt;
Siehe Seite [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70260</id>
		<title>Logikanalysator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70260"/>
		<updated>2012-12-26T18:05:45Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Auswertung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Logikanalysator&#039;&#039;&#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Schaltungstechnik]].&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Digitale Signale werden mit ihren Zuständen 0/1 erfasst und auf einem internen oder externen Bildschirm (früher CRT, heute TFT) ausgeben. Oftmals verfügen auch [[Oszilloskop]]e über LA-Funktionen.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Logic Analyzer werden immer dann benutzt, wenn die Beobachtung der Signaländerungen nicht mehr optisch verfogbar ist und/oder die Gültigkeit von Signalen im Zusammenhang beurteilt werden muss, wie z.B. bei kompletten Bussen.&lt;br /&gt;
&lt;br /&gt;
=== Anschluss ===&lt;br /&gt;
Ein tpischer LA verfügt meist über eines oder mehrere Kabelbündel, mit denen Signale über Klemmen an Bauteilen oder Stiftleisten aufgenommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
Die Auswertung erfolgt durch die Darstellung der Signale als Rechteckkurven, wobei Busse mit ihrem digitalen Wert markiert werden können. Weiter sind Umrechnungen auf fixed point, float und andere Formate mitsamt Skalierung möglich, um die digitalen Werte und ihre analogen Bedeutung im konkreten Kontext plausibilisieren zu können.&lt;br /&gt;
&lt;br /&gt;
Bei Bussen - besonders bei serieller Kommunikation - bietet sich die Möglichkeit, das Protokoll zu decodieren und die Werte ausdrücklich einzublenden. Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
* CAN&lt;br /&gt;
* I2C&lt;br /&gt;
* SPI&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Digital TV&lt;br /&gt;
* HDMI&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
=== Analogteil ===&lt;br /&gt;
Zur Anpassung an verschiedene Pegel benötigt auch ein digitales Gerät wie der LA einen Analogteil, der die HF-mässige Anpassung vollzieht und den erfassten Pegel dem Standard anpasst. Dazu muss die Schaltschwelle passend eingestellt werden können, um vorherzusagen, an welchem Zeitpunkt der Flanke ein angeschlossenes Bauteil schalten wird.&lt;br /&gt;
&lt;br /&gt;
Ist dies nicht einstellbar, sind die Ergebnisse interpretierbedürftig!&lt;br /&gt;
&lt;br /&gt;
=== Digitalteil ===&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
== Selbstbau ==&lt;br /&gt;
=== Projekte ===&lt;br /&gt;
Siehe Seite [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70259</id>
		<title>Logikanalysator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70259"/>
		<updated>2012-12-26T18:02:26Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Analogteil */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Logikanalysator&#039;&#039;&#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Schaltungstechnik]].&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Digitale Signale werden mit ihren Zuständen 0/1 erfasst und auf einem internen oder externen Bildschirm (früher CRT, heute TFT) ausgeben. Oftmals verfügen auch [[Oszilloskop]]e über LA-Funktionen.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Logic Analyzer werden immer dann benutzt, wenn die Beobachtung der Signaländerungen nicht mehr optisch verfogbar ist und/oder die Gültigkeit von Signalen im Zusammenhang beurteilt werden muss, wie z.B. bei kompletten Bussen.&lt;br /&gt;
&lt;br /&gt;
=== Anschluss ===&lt;br /&gt;
Ein tpischer LA verfügt meist über eines oder mehrere Kabelbündel, mit denen Signale über Klemmen an Bauteilen oder Stiftleisten aufgenommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
=== Analogteil ===&lt;br /&gt;
Zur Anpassung an verschiedene Pegel benötigt auch ein digitales Gerät wie der LA einen Analogteil, der die HF-mässige Anpassung vollzieht und den erfassten Pegel dem Standard anpasst. Dazu muss die Schaltschwelle passend eingestellt werden können, um vorherzusagen, an welchem Zeitpunkt der Flanke ein angeschlossenes Bauteil schalten wird.&lt;br /&gt;
&lt;br /&gt;
Ist dies nicht einstellbar, sind die Ergebnisse interpretierbedürftig!&lt;br /&gt;
&lt;br /&gt;
=== Digitalteil ===&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
== Selbstbau ==&lt;br /&gt;
=== Projekte ===&lt;br /&gt;
Siehe Seite [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70258</id>
		<title>Logikanalysator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logikanalysator&amp;diff=70258"/>
		<updated>2012-12-26T18:00:19Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: Die Seite wurde neu angelegt: „Ein &amp;#039;&amp;#039;&amp;#039;Logikanalysator&amp;#039;&amp;#039;&amp;#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Sch…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Logikanalysator&#039;&#039;&#039; dient der Untersuchung und Funktion digitaler Schaltungen und deren Signale. Er ist eines der wichtigsten Messmittel der digitalen [[Schaltungstechnik]].&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Digitale Signale werden mit ihren Zuständen 0/1 erfasst und auf einem internen oder externen Bildschirm (früher CRT, heute TFT) ausgeben. Oftmals verfügen auch [[Oszilloskop]]e über LA-Funktionen.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Logic Analyzer werden immer dann benutzt, wenn die Beobachtung der Signaländerungen nicht mehr optisch verfogbar ist und/oder die Gültigkeit von Signalen im Zusammenhang beurteilt werden muss, wie z.B. bei kompletten Bussen.&lt;br /&gt;
&lt;br /&gt;
=== Anschluss ===&lt;br /&gt;
Ein tpischer LA verfügt meist über eines oder mehrere Kabelbündel, mit denen Signale über Klemmen an Bauteilen oder Stiftleisten aufgenommen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
=== Analogteil ===&lt;br /&gt;
=== Digitalteil ===&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
== Selbstbau ==&lt;br /&gt;
=== Projekte ===&lt;br /&gt;
Siehe Seite [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70257</id>
		<title>Logic Analyzer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70257"/>
		<updated>2012-12-26T17:52:20Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* In Planung: Logikanalysator mit Palm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite enthält eine Übersicht über verschiedene Logic Analyzer &#039;&#039;&#039;Selbstbau-Projekte&#039;&#039;&#039;. Zur genellen Funktion dieser Geräte, siehe die Seite [[Logikanalysator]].&lt;br /&gt;
&lt;br /&gt;
== AVR-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== LoLA ===&lt;br /&gt;
&lt;br /&gt;
* 2002 von A. Hinrichs&lt;br /&gt;
* AT90S1200 Controller with a 2k-RAM&lt;br /&gt;
* ASM&lt;br /&gt;
&lt;br /&gt;
LoLA is a 8-Bit Logicanalyzer. Internal sampletimes from 2µs to 16ms. Triggerword with don&#039;t cares. External clock or trigger on rising or falling edge. Timing and state with I2C-analysis. 2k memory, very low cost.&lt;br /&gt;
With Pulsegenerator. Programmable Ti and Tp 1us..8sec, Duty-Cycle, Period/Frequency, Continuous- and Burst-Mode. 16- and 32-bit Software for Windows&lt;br /&gt;
&lt;br /&gt;
[http://avrfreaks.net/index.php?module=FreaksAcademy&amp;amp;func=viewItem&amp;amp;item_type=project&amp;amp;item_id=47 Projektseite bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
===  AVR USB Logikanalysator ===&lt;br /&gt;
&lt;br /&gt;
* 2006 B. Sauter&lt;br /&gt;
* Mega 32 &amp;amp; USBN9604 &lt;br /&gt;
* 8-Bit&lt;br /&gt;
* 250kHz online, 1000 Samples @ 4MHz&lt;br /&gt;
* USB&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/48559&lt;br /&gt;
&lt;br /&gt;
=== Simple Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 8-channel&lt;br /&gt;
* 32kB SRAM&lt;br /&gt;
* RS232&lt;br /&gt;
* 2 MHz&lt;br /&gt;
* Software: Win GUI&lt;br /&gt;
&lt;br /&gt;
http://antoniak.ep.com.pl/index.php?id=sla&lt;br /&gt;
&lt;br /&gt;
=== SCANALOGIC ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 4 Million Samples per second&lt;br /&gt;
* RS232 (bzw. USB-RS232)&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Software (AVR und Windows): Closed Source?&lt;br /&gt;
* Basis: Atmega16 und NAND-Gate&lt;br /&gt;
* http://www.ikalogic.com/scanalogic_home.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2 Pro&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 20 Million Samples per second&lt;br /&gt;
* Maximum sampling buffer 256K&lt;br /&gt;
* Generator/Playback Modus&lt;br /&gt;
* USB HID mode&lt;br /&gt;
* Firmware upgrade feature&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Basis: Atmel AVR&lt;br /&gt;
* Aufgebaut und getestet&lt;br /&gt;
* http://www.ikalogic.com/scanalogic2/&lt;br /&gt;
&lt;br /&gt;
=== MiniLog ===&lt;br /&gt;
&lt;br /&gt;
Zur Zeit gibt es zwei Versionen, die sich hauptsächlich in der Samplerate und in der Speichergröße unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;50 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 4k Samplespeicher&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega644&lt;br /&gt;
* FT232 USB 115200 Baud&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;80 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 16k Samplespeicher (32k bei neuer Software)&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega88 / ATMega48&lt;br /&gt;
* FT232 USB 500000 Baud&lt;br /&gt;
&lt;br /&gt;
Weitere Infos und Diskussion:&lt;br /&gt;
* http://www.avr.roehres-home.de/logikanalyzer/index.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/141602&lt;br /&gt;
&lt;br /&gt;
== FPGA / CLPD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Deditec LAs sind keine Selbstbauprojekte, daher hier entfernt. Ggf. neuen Artikel aufmachen oder anderen, passenderen ergänzen. Danke.&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-500===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 500 MSamples/sec (bis 100 Samples/Sec)&lt;br /&gt;
* 4096 Samples Speichertiefe/Kanal&lt;br /&gt;
* 2 Trigger Ebene&lt;br /&gt;
* Logi+ Windows Software&lt;br /&gt;
* sehr kostengünstiges Einsteigermodell&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-250===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 250 MHz bis 100 Hz Sampling Rate&lt;br /&gt;
* 512 KSamples Speichertiefe/Kanal&lt;br /&gt;
* 1/8 .. 7/8 Pretrigger&lt;br /&gt;
* 2 Trigger Ebenen&lt;br /&gt;
* Windows Software Logi+&lt;br /&gt;
&lt;br /&gt;
[http://www.deditec.de/de/logikanalysatoren/prod.html Herstellerseite]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SUMP Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle bis 100 MHz, 16 Kanäle bei 200 MHz&lt;br /&gt;
* 200 MHz - 10 Hz Sampling Rate&lt;br /&gt;
* 256 KSamples Speicher (1 MByte)&lt;br /&gt;
* Ankopplung über RS232&lt;br /&gt;
* Java Software&lt;br /&gt;
&lt;br /&gt;
Der SUMP Logic Analyzer hat wahlweise einen einfachen Trigger (Rising/Falling mit Maskierung) oder einen komplexen 4stufigen Trigger, sowie einen einfachen zuschaltbaren Noise Filter, der Pulse kürzer als 1/100 MHz filtert um Crosstalk-Effekte in den Anschlussleitungen zu kompensieren. Der Speicher wird im Wartezustand als &amp;quot;Ringstack&amp;quot; kontinuierlich beschrieben. Dadurch können auch Daten von vor der Trigger-Auslösung ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Das Gerät nutzt das Xilinx Spartan 3 Starter Kit Board von Digilent (Kosten Stand Mai 2006: 100 - 150 Euro). Es muss lediglich der FPGA beschrieben und die Software eingerichtet werden. Die Software nutzt für den Zugriff auf die RS232 die RXTX Bibliothek, die für alle gängigen Betriebssysteme existiert.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ Projektseite bei sump.org]&lt;br /&gt;
* [http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy. The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the [[Logic_Analyzer#OpenBench_Logic_Sniffer|Open Workbench Logic Sniffer]]) work out of the box. It also serves as an example how easy it is to integrate new devices. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== BitHound Logic Analyzer ===&lt;br /&gt;
Hier handelt es sich um eine Erweiterung des SUMP auf einen Spartan-6. &lt;br /&gt;
Es gibt zwei Versionen; eine für das Xilinx-SP601 Development Board und eine für das Digilent ATLYS-Spartan-6 Board. &lt;br /&gt;
&lt;br /&gt;
Der Analyzer-Core ist (noch) derselbe wie beim SUMP, der Speicher ist nun jedoch 128MB gross und die Datenübertragung erfolgt per Ethernet zum ebenfalls leicht verbesserten JAVA-Client. &lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.bastli.ethz.ch/index.php?page=BitHoundEn Projektseite von www.bastli.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
=== eebit Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 65 KSamples Speicher pro Kanal (2 MByte)&lt;br /&gt;
* Ankopplung über ISA-Bus oder Parallelport&lt;br /&gt;
* 2 stufiger Trigger&lt;br /&gt;
* einfaches Windows-Programm zur Steuerung/Darstellung&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera FPGA und speichert die Daten in einem externen SRAM. Die Hardware existiert in 2 Varianten, einmal als PC/104-Karte und mit einem Parallelinterface.&lt;br /&gt;
&lt;br /&gt;
[http://www.freepcb.com/eebit/ Projektseite]&lt;br /&gt;
&lt;br /&gt;
=== miniLA ===&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Xilinx CPLD&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 128 kSamples Speicher&lt;br /&gt;
* Ankopplung über USB oder LPT (neuere Version von mockup: nur USB)&lt;br /&gt;
* 5V-tolerante Eingänge&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* 512 kSamples bzw. 1MSamples&lt;br /&gt;
* Ankoppelung über USB&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://minila.sourceforge.net Projektseite]&lt;br /&gt;
* [[MiniLA]] Artikel auf www.mikrocontroller.net&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* http://www.mikrocontroller.net/topic/174860 Forum&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Minila_Version_MockUp Artikel&lt;br /&gt;
&lt;br /&gt;
=== coolLA ===&lt;br /&gt;
&lt;br /&gt;
coolLA ist eine erweiterte Version des miniLA. Die wesentlichen Änderungen sind:&lt;br /&gt;
&lt;br /&gt;
* USB Stromversorgung mit galvanischer Trennung&lt;br /&gt;
* Einsatz einer Coolrunner II CPLD&lt;br /&gt;
* Time- und Stateanalyse umschaltbar zusammen im System mit angepasster Software&lt;br /&gt;
* 512k Samples Speicher 32 Bit&lt;br /&gt;
* integrierte Datenempfänger&lt;br /&gt;
* 40-poliger IDE Stecker Intronix LogicPort kompatibel&lt;br /&gt;
* passt in Elpac Gehäuse&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://coolla.freeunix.net Projektseite mit Bilder und Download]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/175219#1682430 Forumbeitrag] von Wolfgang R. (portside)&lt;br /&gt;
&lt;br /&gt;
=== lekernel&#039;s USB Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 24 Kanäle&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera Cyclone II FPGA. Alle Schaltpläne, VHDLs, Designer Dateien stehen zur Verfügung. Leider nur ein Quick+Dirty Linux Treiber erstmal da. &lt;br /&gt;
&lt;br /&gt;
[http://lekernel.net/scrapbook/ula.html Projektseite]&lt;br /&gt;
=== OpenBench Logic Sniffer ===&lt;br /&gt;
FPGA basierter LA, HW &amp;amp; SW ist offen (open source). Specs:&lt;br /&gt;
&lt;br /&gt;
* 70MHz+ sample speeds&lt;br /&gt;
** 200Msps captures up to 100MHz waveforms on 16 channels&lt;br /&gt;
** 100Msps captures up to 50MHz waveforms on 32 channels&lt;br /&gt;
* 32 channels&lt;br /&gt;
** 8 channels with 24K sample depth&lt;br /&gt;
** 16 channels with 12K sample depth&lt;br /&gt;
** 32 channels with 6K sample depth&lt;br /&gt;
* 16 buffered, 5volt tolerant channels&lt;br /&gt;
* USB interface, USB powered&lt;br /&gt;
Die Software hat Interpreter für RS232, SPI, I2C, 1-Wire und einen A/D-Wandler.&lt;br /&gt;
&lt;br /&gt;
http://www.gadgetfactory.net/gf/project/butterflylogic/&lt;br /&gt;
&lt;br /&gt;
Software in action:&lt;br /&gt;
* Overview and using RLE : [http://www.screencast.com/t/yWBdfwCYh6]&lt;br /&gt;
* Capturing &amp;amp; Decoding UART data: [http://www.screencast.com/t/MWM5MDUyNGIt]&lt;br /&gt;
&lt;br /&gt;
Eine fertige Platine gibts von www.Seeedstudio.com für 50$ oder in Deutschland bei http://www.watterott.com/de/Open-Logic-Sniffer für 45,22€ exkl. Versand (2.90 € UPS Standard).&lt;br /&gt;
&lt;br /&gt;
=== EjLA - Embedded jTAG Logic Analyzer ===&lt;br /&gt;
Dies ist ein kleiner Logicanalyzer der dafür gedacht ist, den (kommerziellen) Xilinx Chipscope Analyzer zu ersetzen. Daher verbietet die Lizenz auch&lt;br /&gt;
die kommerzielle Nutzung.&lt;br /&gt;
&lt;br /&gt;
Das EjLA Setup verwendet SUMP als Client-GUI am PC. Die Kommunikation erfolgt über jTAG und verwendet das Xilinx &amp;quot;impact&amp;quot; Programm. Daher sollte jedes Kabel, dass von Xilinx dafür unterstützt wird, auch mit EjLA laufen. Außerdem muss man beim Entwickeln nichts umstecken bzw. Pins &amp;quot;vorhalten&amp;quot; (man kann das ISE und Bitstream-download gleichzeitig mit der modifizierten SUMP Software zur Analyse verwenden). Um das zu realisieren, wird eine kleine&lt;br /&gt;
&amp;quot;server&amp;quot; Software verwendet, die zwischen dem SUMP-GUI und dem EjLA Core über&lt;br /&gt;
&amp;quot;impact&amp;quot; kommuniziert. Das ISE Setup wird dabei auch nicht verändert. Damit ist auch sichergestellt, dass SUMP kein wesentlicher Bestandteil von EjLA ist/wird und man stattdessen in Zukunft ggf. auch andere Clients verwenden kann. &lt;br /&gt;
&lt;br /&gt;
Die kleinste Core Version läßt noch mehr als genug Platz sogar auf einem kleinen xc3s100e FPGA und bietet einen LA mit ~500 bis 8000 Samples x 32 Kanäle Speichertiefe nur mit einem BRAM Block(!) Dies wird erreicht durch die Verwendung von einfacher Lauflängen-Kompression.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.pin4.at/pro_fpga.php#ejla EjLA Projektseite]&lt;br /&gt;
&lt;br /&gt;
== PIC-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== PIC Logicx ===&lt;br /&gt;
&lt;br /&gt;
[http://martin.hinner.info/electronics/piclogix/ PIC Logix] (GPL, optional Standalone VGA Ausgabe, PIC24 or dsPIC33)&lt;br /&gt;
&lt;br /&gt;
=== Logic Analyzer III (USB) ===&lt;br /&gt;
&lt;br /&gt;
[http://technology.niagarac.on.ca/people/mcsele/LogicAnalyzer.html Logic Analyzer III (USB)] uses a multithreaded Win-32 front-end and a native USB interface. It features a 20MS/s sample rate and a 4K sample depth. Zentrale Bauteile sind ein PIC18F4550 Mikrocontroller und ein AM7204 FIFO IC z.B. von AMD.&lt;br /&gt;
&lt;br /&gt;
=== pk2-la ===&lt;br /&gt;
&lt;br /&gt;
* Hardware: PICkit 2 Programmer Logic Tool Analyzer&lt;br /&gt;
** 3 Kanal bis 500 kHz&lt;br /&gt;
** http://www.microchip.com/pickit2&lt;br /&gt;
* Software: &lt;br /&gt;
** [http://pk2-la.sourceforge.net/ pk2-la]. The Microchip PICkit 2 has the ability to act as a logic analyzer and I/O probe. This project provides a reverse engineered libusb user space device driver and GUI to provide this functionality for users of unsupported operating systems. (Python, Lizenz: GPL)&lt;br /&gt;
&lt;br /&gt;
== Parallelport LA ==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Derartige Parallelport LAs sind z.B. bei der Samplerate durch die PC-Hardware und das PC OS im Vergleich zu höherwertigen LAs eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
* [http://tfla-01.berlios.de/ The Fabulous Logic Analyzer] (GPL, multiplatform, Simple [[I2C]] analyzer)&lt;br /&gt;
* [http://akikorhonen.org/projects.php?action=view&amp;amp;id=59 Parallel port logic analyzer]&lt;br /&gt;
* [http://uvasux.googlepages.com/simplelogicanalyser Simple Logic Analyser]&lt;br /&gt;
* [http://www.xs4all.nl/~jwasys/old/diy2.html A logic analyzer using the PC&#039;s parallel port] (Win32)&lt;br /&gt;
* [http://www.codeproject.com/KB/system/17ChannelLogicAnalyzer.aspx 17 Channel Logic Analyzer] By Elmue auf www.codeproject.com (Windows)&lt;br /&gt;
&lt;br /&gt;
== Open Source Software ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The [http://sigrok.org/wiki/Main_Page sigrok] project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the GNU GPL.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
sigrok supported hardware:&lt;br /&gt;
* Saleae Logic (supported)&lt;br /&gt;
* EE Electronics XLA/ESLA100 (supported)&lt;br /&gt;
* ASIX SIGMA (partially supported)&lt;br /&gt;
* Openbench Logic Sniffer (work in progress)&lt;br /&gt;
* ZEROPLUS Logic Cube LAP-C (work in progress)&lt;br /&gt;
* CWAV USBee SX (coming up)&lt;br /&gt;
* Braintechnology USB-LPS (planned)&lt;br /&gt;
* Buspirate (planned)&lt;br /&gt;
* Intronix Logicport (planned)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy.&lt;br /&gt;
&lt;br /&gt;
LogicAnalyzer main features:&lt;br /&gt;
* Platform independent ( LogicAnalyzer is built using Eclipse RCP, thus it&#039;s mostly platform independent. It also features a native and clean UI.)&lt;br /&gt;
* Rich set of tools ( Several tools come out of the box, such as frequency measurement, distance measurement and serial byte interpreter. LA also comes with an I2C protocol analyzer (SPI, as well as UART analyzer will follow).)&lt;br /&gt;
* SUMP integration ( The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the Open Workbench Logic Sniffer) work out of the box. It also serves as an example how easy it is to integrate new devices.)&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Logic-Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* [http://sigrok.org/wiki/Logic_Analyzer_Comparison sigrok: Logic Analyzer Comparison] (TODO: evtl. dort sowie hier Einträge synchronisieren)&lt;br /&gt;
&lt;br /&gt;
=== Isolation, galvanische Trennung vom PC ===&lt;br /&gt;
&lt;br /&gt;
Bei günstigen Geräten am USB-Anschluss ist oft die Masseleitung vom Testgerät über den Logic-Analyzer bis hin zum PC durchgeschleift. Das ist nicht immer wünschenswert und man möchte daher keine elektrische Verbindung.&lt;br /&gt;
Prinzipiell gibt es für die galvanische Trennung vom PC zwei Ansätze. Zum einen kann man die Eingänge des Logic Analyzers durch Übertrager derart gestalten, dass keine elektrische Verbindung zum Gerät besteht. Bei teuren Analyzern ist das meist eingebaut, manchmal sogar kanalweise. &lt;br /&gt;
Man kann auch den Logic-Analyzer direkt über einen USB-Isolator vom PC trennen. Dabei muss aber die maximale Übertragungsrate, der verfügbare Strom des USB-Isolators beachtet werden und die notwendige Mindestgeschwindigkeit zum Betrieb des Logic-Analyzers. Bringt das Gerät beispielsweise keinen Pufferspeicher mit, so wird mindestens die Abtastrate herabgesetzt oder der Betrieb am USB-Isolator sogar unmöglich. Hier kann man dann eine Isolation auf Eingangsseite des Logic-Analyzers nachrüsten.&lt;br /&gt;
&lt;br /&gt;
* [http://www.keinschnickschnack.de/?page_id=647 Projektseite: Isolation von 8 Kanälen durch Optokoppler an der Eingangsseite des Logic-Analyzers] (Bis 10MHz auf 8 Kanälen gleichzeitig)&lt;br /&gt;
* [http://www.elv.de/USB-galvanisch-getrennt-USB-Isolator-UI-100/x.aspx/cid_726/detail_30743 ELV: Isolator bis 12MBit Datendurchsatz am USB] (Full-Speed, kein HI-Speed)&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Mikrocontroller.net LA ===&lt;br /&gt;
&lt;br /&gt;
Hier entsteht langsam seit Mitte 2005 ein komplexer (FPGA, CLPD, AVR) Logic Analyser für recht gehobene Ansprüche, allerdings ist die Beteiligung seitdem etwas eingeschlafen:&lt;br /&gt;
&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Hardware|Hardware]]&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Software|Software]]&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Logikanalysator mit Palm ===&lt;br /&gt;
&lt;br /&gt;
In Planung, Brainstorming: [[Palm-Logicanalyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer]]&lt;br /&gt;
[[Category:Messtechnik]]&lt;br /&gt;
[[Category:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70256</id>
		<title>Logic Analyzer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70256"/>
		<updated>2012-12-26T17:51:25Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* In Planung: Logikanalysator mit Palm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite enthält eine Übersicht über verschiedene Logic Analyzer &#039;&#039;&#039;Selbstbau-Projekte&#039;&#039;&#039;. Zur genellen Funktion dieser Geräte, siehe die Seite [[Logikanalysator]].&lt;br /&gt;
&lt;br /&gt;
== AVR-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== LoLA ===&lt;br /&gt;
&lt;br /&gt;
* 2002 von A. Hinrichs&lt;br /&gt;
* AT90S1200 Controller with a 2k-RAM&lt;br /&gt;
* ASM&lt;br /&gt;
&lt;br /&gt;
LoLA is a 8-Bit Logicanalyzer. Internal sampletimes from 2µs to 16ms. Triggerword with don&#039;t cares. External clock or trigger on rising or falling edge. Timing and state with I2C-analysis. 2k memory, very low cost.&lt;br /&gt;
With Pulsegenerator. Programmable Ti and Tp 1us..8sec, Duty-Cycle, Period/Frequency, Continuous- and Burst-Mode. 16- and 32-bit Software for Windows&lt;br /&gt;
&lt;br /&gt;
[http://avrfreaks.net/index.php?module=FreaksAcademy&amp;amp;func=viewItem&amp;amp;item_type=project&amp;amp;item_id=47 Projektseite bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
===  AVR USB Logikanalysator ===&lt;br /&gt;
&lt;br /&gt;
* 2006 B. Sauter&lt;br /&gt;
* Mega 32 &amp;amp; USBN9604 &lt;br /&gt;
* 8-Bit&lt;br /&gt;
* 250kHz online, 1000 Samples @ 4MHz&lt;br /&gt;
* USB&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/48559&lt;br /&gt;
&lt;br /&gt;
=== Simple Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 8-channel&lt;br /&gt;
* 32kB SRAM&lt;br /&gt;
* RS232&lt;br /&gt;
* 2 MHz&lt;br /&gt;
* Software: Win GUI&lt;br /&gt;
&lt;br /&gt;
http://antoniak.ep.com.pl/index.php?id=sla&lt;br /&gt;
&lt;br /&gt;
=== SCANALOGIC ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 4 Million Samples per second&lt;br /&gt;
* RS232 (bzw. USB-RS232)&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Software (AVR und Windows): Closed Source?&lt;br /&gt;
* Basis: Atmega16 und NAND-Gate&lt;br /&gt;
* http://www.ikalogic.com/scanalogic_home.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2 Pro&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 20 Million Samples per second&lt;br /&gt;
* Maximum sampling buffer 256K&lt;br /&gt;
* Generator/Playback Modus&lt;br /&gt;
* USB HID mode&lt;br /&gt;
* Firmware upgrade feature&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Basis: Atmel AVR&lt;br /&gt;
* Aufgebaut und getestet&lt;br /&gt;
* http://www.ikalogic.com/scanalogic2/&lt;br /&gt;
&lt;br /&gt;
=== MiniLog ===&lt;br /&gt;
&lt;br /&gt;
Zur Zeit gibt es zwei Versionen, die sich hauptsächlich in der Samplerate und in der Speichergröße unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;50 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 4k Samplespeicher&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega644&lt;br /&gt;
* FT232 USB 115200 Baud&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;80 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 16k Samplespeicher (32k bei neuer Software)&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega88 / ATMega48&lt;br /&gt;
* FT232 USB 500000 Baud&lt;br /&gt;
&lt;br /&gt;
Weitere Infos und Diskussion:&lt;br /&gt;
* http://www.avr.roehres-home.de/logikanalyzer/index.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/141602&lt;br /&gt;
&lt;br /&gt;
== FPGA / CLPD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Deditec LAs sind keine Selbstbauprojekte, daher hier entfernt. Ggf. neuen Artikel aufmachen oder anderen, passenderen ergänzen. Danke.&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-500===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 500 MSamples/sec (bis 100 Samples/Sec)&lt;br /&gt;
* 4096 Samples Speichertiefe/Kanal&lt;br /&gt;
* 2 Trigger Ebene&lt;br /&gt;
* Logi+ Windows Software&lt;br /&gt;
* sehr kostengünstiges Einsteigermodell&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-250===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 250 MHz bis 100 Hz Sampling Rate&lt;br /&gt;
* 512 KSamples Speichertiefe/Kanal&lt;br /&gt;
* 1/8 .. 7/8 Pretrigger&lt;br /&gt;
* 2 Trigger Ebenen&lt;br /&gt;
* Windows Software Logi+&lt;br /&gt;
&lt;br /&gt;
[http://www.deditec.de/de/logikanalysatoren/prod.html Herstellerseite]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SUMP Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle bis 100 MHz, 16 Kanäle bei 200 MHz&lt;br /&gt;
* 200 MHz - 10 Hz Sampling Rate&lt;br /&gt;
* 256 KSamples Speicher (1 MByte)&lt;br /&gt;
* Ankopplung über RS232&lt;br /&gt;
* Java Software&lt;br /&gt;
&lt;br /&gt;
Der SUMP Logic Analyzer hat wahlweise einen einfachen Trigger (Rising/Falling mit Maskierung) oder einen komplexen 4stufigen Trigger, sowie einen einfachen zuschaltbaren Noise Filter, der Pulse kürzer als 1/100 MHz filtert um Crosstalk-Effekte in den Anschlussleitungen zu kompensieren. Der Speicher wird im Wartezustand als &amp;quot;Ringstack&amp;quot; kontinuierlich beschrieben. Dadurch können auch Daten von vor der Trigger-Auslösung ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Das Gerät nutzt das Xilinx Spartan 3 Starter Kit Board von Digilent (Kosten Stand Mai 2006: 100 - 150 Euro). Es muss lediglich der FPGA beschrieben und die Software eingerichtet werden. Die Software nutzt für den Zugriff auf die RS232 die RXTX Bibliothek, die für alle gängigen Betriebssysteme existiert.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ Projektseite bei sump.org]&lt;br /&gt;
* [http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy. The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the [[Logic_Analyzer#OpenBench_Logic_Sniffer|Open Workbench Logic Sniffer]]) work out of the box. It also serves as an example how easy it is to integrate new devices. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== BitHound Logic Analyzer ===&lt;br /&gt;
Hier handelt es sich um eine Erweiterung des SUMP auf einen Spartan-6. &lt;br /&gt;
Es gibt zwei Versionen; eine für das Xilinx-SP601 Development Board und eine für das Digilent ATLYS-Spartan-6 Board. &lt;br /&gt;
&lt;br /&gt;
Der Analyzer-Core ist (noch) derselbe wie beim SUMP, der Speicher ist nun jedoch 128MB gross und die Datenübertragung erfolgt per Ethernet zum ebenfalls leicht verbesserten JAVA-Client. &lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.bastli.ethz.ch/index.php?page=BitHoundEn Projektseite von www.bastli.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
=== eebit Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 65 KSamples Speicher pro Kanal (2 MByte)&lt;br /&gt;
* Ankopplung über ISA-Bus oder Parallelport&lt;br /&gt;
* 2 stufiger Trigger&lt;br /&gt;
* einfaches Windows-Programm zur Steuerung/Darstellung&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera FPGA und speichert die Daten in einem externen SRAM. Die Hardware existiert in 2 Varianten, einmal als PC/104-Karte und mit einem Parallelinterface.&lt;br /&gt;
&lt;br /&gt;
[http://www.freepcb.com/eebit/ Projektseite]&lt;br /&gt;
&lt;br /&gt;
=== miniLA ===&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Xilinx CPLD&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 128 kSamples Speicher&lt;br /&gt;
* Ankopplung über USB oder LPT (neuere Version von mockup: nur USB)&lt;br /&gt;
* 5V-tolerante Eingänge&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* 512 kSamples bzw. 1MSamples&lt;br /&gt;
* Ankoppelung über USB&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://minila.sourceforge.net Projektseite]&lt;br /&gt;
* [[MiniLA]] Artikel auf www.mikrocontroller.net&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* http://www.mikrocontroller.net/topic/174860 Forum&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Minila_Version_MockUp Artikel&lt;br /&gt;
&lt;br /&gt;
=== coolLA ===&lt;br /&gt;
&lt;br /&gt;
coolLA ist eine erweiterte Version des miniLA. Die wesentlichen Änderungen sind:&lt;br /&gt;
&lt;br /&gt;
* USB Stromversorgung mit galvanischer Trennung&lt;br /&gt;
* Einsatz einer Coolrunner II CPLD&lt;br /&gt;
* Time- und Stateanalyse umschaltbar zusammen im System mit angepasster Software&lt;br /&gt;
* 512k Samples Speicher 32 Bit&lt;br /&gt;
* integrierte Datenempfänger&lt;br /&gt;
* 40-poliger IDE Stecker Intronix LogicPort kompatibel&lt;br /&gt;
* passt in Elpac Gehäuse&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://coolla.freeunix.net Projektseite mit Bilder und Download]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/175219#1682430 Forumbeitrag] von Wolfgang R. (portside)&lt;br /&gt;
&lt;br /&gt;
=== lekernel&#039;s USB Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 24 Kanäle&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera Cyclone II FPGA. Alle Schaltpläne, VHDLs, Designer Dateien stehen zur Verfügung. Leider nur ein Quick+Dirty Linux Treiber erstmal da. &lt;br /&gt;
&lt;br /&gt;
[http://lekernel.net/scrapbook/ula.html Projektseite]&lt;br /&gt;
=== OpenBench Logic Sniffer ===&lt;br /&gt;
FPGA basierter LA, HW &amp;amp; SW ist offen (open source). Specs:&lt;br /&gt;
&lt;br /&gt;
* 70MHz+ sample speeds&lt;br /&gt;
** 200Msps captures up to 100MHz waveforms on 16 channels&lt;br /&gt;
** 100Msps captures up to 50MHz waveforms on 32 channels&lt;br /&gt;
* 32 channels&lt;br /&gt;
** 8 channels with 24K sample depth&lt;br /&gt;
** 16 channels with 12K sample depth&lt;br /&gt;
** 32 channels with 6K sample depth&lt;br /&gt;
* 16 buffered, 5volt tolerant channels&lt;br /&gt;
* USB interface, USB powered&lt;br /&gt;
Die Software hat Interpreter für RS232, SPI, I2C, 1-Wire und einen A/D-Wandler.&lt;br /&gt;
&lt;br /&gt;
http://www.gadgetfactory.net/gf/project/butterflylogic/&lt;br /&gt;
&lt;br /&gt;
Software in action:&lt;br /&gt;
* Overview and using RLE : [http://www.screencast.com/t/yWBdfwCYh6]&lt;br /&gt;
* Capturing &amp;amp; Decoding UART data: [http://www.screencast.com/t/MWM5MDUyNGIt]&lt;br /&gt;
&lt;br /&gt;
Eine fertige Platine gibts von www.Seeedstudio.com für 50$ oder in Deutschland bei http://www.watterott.com/de/Open-Logic-Sniffer für 45,22€ exkl. Versand (2.90 € UPS Standard).&lt;br /&gt;
&lt;br /&gt;
=== EjLA - Embedded jTAG Logic Analyzer ===&lt;br /&gt;
Dies ist ein kleiner Logicanalyzer der dafür gedacht ist, den (kommerziellen) Xilinx Chipscope Analyzer zu ersetzen. Daher verbietet die Lizenz auch&lt;br /&gt;
die kommerzielle Nutzung.&lt;br /&gt;
&lt;br /&gt;
Das EjLA Setup verwendet SUMP als Client-GUI am PC. Die Kommunikation erfolgt über jTAG und verwendet das Xilinx &amp;quot;impact&amp;quot; Programm. Daher sollte jedes Kabel, dass von Xilinx dafür unterstützt wird, auch mit EjLA laufen. Außerdem muss man beim Entwickeln nichts umstecken bzw. Pins &amp;quot;vorhalten&amp;quot; (man kann das ISE und Bitstream-download gleichzeitig mit der modifizierten SUMP Software zur Analyse verwenden). Um das zu realisieren, wird eine kleine&lt;br /&gt;
&amp;quot;server&amp;quot; Software verwendet, die zwischen dem SUMP-GUI und dem EjLA Core über&lt;br /&gt;
&amp;quot;impact&amp;quot; kommuniziert. Das ISE Setup wird dabei auch nicht verändert. Damit ist auch sichergestellt, dass SUMP kein wesentlicher Bestandteil von EjLA ist/wird und man stattdessen in Zukunft ggf. auch andere Clients verwenden kann. &lt;br /&gt;
&lt;br /&gt;
Die kleinste Core Version läßt noch mehr als genug Platz sogar auf einem kleinen xc3s100e FPGA und bietet einen LA mit ~500 bis 8000 Samples x 32 Kanäle Speichertiefe nur mit einem BRAM Block(!) Dies wird erreicht durch die Verwendung von einfacher Lauflängen-Kompression.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.pin4.at/pro_fpga.php#ejla EjLA Projektseite]&lt;br /&gt;
&lt;br /&gt;
== PIC-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== PIC Logicx ===&lt;br /&gt;
&lt;br /&gt;
[http://martin.hinner.info/electronics/piclogix/ PIC Logix] (GPL, optional Standalone VGA Ausgabe, PIC24 or dsPIC33)&lt;br /&gt;
&lt;br /&gt;
=== Logic Analyzer III (USB) ===&lt;br /&gt;
&lt;br /&gt;
[http://technology.niagarac.on.ca/people/mcsele/LogicAnalyzer.html Logic Analyzer III (USB)] uses a multithreaded Win-32 front-end and a native USB interface. It features a 20MS/s sample rate and a 4K sample depth. Zentrale Bauteile sind ein PIC18F4550 Mikrocontroller und ein AM7204 FIFO IC z.B. von AMD.&lt;br /&gt;
&lt;br /&gt;
=== pk2-la ===&lt;br /&gt;
&lt;br /&gt;
* Hardware: PICkit 2 Programmer Logic Tool Analyzer&lt;br /&gt;
** 3 Kanal bis 500 kHz&lt;br /&gt;
** http://www.microchip.com/pickit2&lt;br /&gt;
* Software: &lt;br /&gt;
** [http://pk2-la.sourceforge.net/ pk2-la]. The Microchip PICkit 2 has the ability to act as a logic analyzer and I/O probe. This project provides a reverse engineered libusb user space device driver and GUI to provide this functionality for users of unsupported operating systems. (Python, Lizenz: GPL)&lt;br /&gt;
&lt;br /&gt;
== Parallelport LA ==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Derartige Parallelport LAs sind z.B. bei der Samplerate durch die PC-Hardware und das PC OS im Vergleich zu höherwertigen LAs eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
* [http://tfla-01.berlios.de/ The Fabulous Logic Analyzer] (GPL, multiplatform, Simple [[I2C]] analyzer)&lt;br /&gt;
* [http://akikorhonen.org/projects.php?action=view&amp;amp;id=59 Parallel port logic analyzer]&lt;br /&gt;
* [http://uvasux.googlepages.com/simplelogicanalyser Simple Logic Analyser]&lt;br /&gt;
* [http://www.xs4all.nl/~jwasys/old/diy2.html A logic analyzer using the PC&#039;s parallel port] (Win32)&lt;br /&gt;
* [http://www.codeproject.com/KB/system/17ChannelLogicAnalyzer.aspx 17 Channel Logic Analyzer] By Elmue auf www.codeproject.com (Windows)&lt;br /&gt;
&lt;br /&gt;
== Open Source Software ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The [http://sigrok.org/wiki/Main_Page sigrok] project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the GNU GPL.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
sigrok supported hardware:&lt;br /&gt;
* Saleae Logic (supported)&lt;br /&gt;
* EE Electronics XLA/ESLA100 (supported)&lt;br /&gt;
* ASIX SIGMA (partially supported)&lt;br /&gt;
* Openbench Logic Sniffer (work in progress)&lt;br /&gt;
* ZEROPLUS Logic Cube LAP-C (work in progress)&lt;br /&gt;
* CWAV USBee SX (coming up)&lt;br /&gt;
* Braintechnology USB-LPS (planned)&lt;br /&gt;
* Buspirate (planned)&lt;br /&gt;
* Intronix Logicport (planned)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy.&lt;br /&gt;
&lt;br /&gt;
LogicAnalyzer main features:&lt;br /&gt;
* Platform independent ( LogicAnalyzer is built using Eclipse RCP, thus it&#039;s mostly platform independent. It also features a native and clean UI.)&lt;br /&gt;
* Rich set of tools ( Several tools come out of the box, such as frequency measurement, distance measurement and serial byte interpreter. LA also comes with an I2C protocol analyzer (SPI, as well as UART analyzer will follow).)&lt;br /&gt;
* SUMP integration ( The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the Open Workbench Logic Sniffer) work out of the box. It also serves as an example how easy it is to integrate new devices.)&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Logic-Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* [http://sigrok.org/wiki/Logic_Analyzer_Comparison sigrok: Logic Analyzer Comparison] (TODO: evtl. dort sowie hier Einträge synchronisieren)&lt;br /&gt;
&lt;br /&gt;
=== Isolation, galvanische Trennung vom PC ===&lt;br /&gt;
&lt;br /&gt;
Bei günstigen Geräten am USB-Anschluss ist oft die Masseleitung vom Testgerät über den Logic-Analyzer bis hin zum PC durchgeschleift. Das ist nicht immer wünschenswert und man möchte daher keine elektrische Verbindung.&lt;br /&gt;
Prinzipiell gibt es für die galvanische Trennung vom PC zwei Ansätze. Zum einen kann man die Eingänge des Logic Analyzers durch Übertrager derart gestalten, dass keine elektrische Verbindung zum Gerät besteht. Bei teuren Analyzern ist das meist eingebaut, manchmal sogar kanalweise. &lt;br /&gt;
Man kann auch den Logic-Analyzer direkt über einen USB-Isolator vom PC trennen. Dabei muss aber die maximale Übertragungsrate, der verfügbare Strom des USB-Isolators beachtet werden und die notwendige Mindestgeschwindigkeit zum Betrieb des Logic-Analyzers. Bringt das Gerät beispielsweise keinen Pufferspeicher mit, so wird mindestens die Abtastrate herabgesetzt oder der Betrieb am USB-Isolator sogar unmöglich. Hier kann man dann eine Isolation auf Eingangsseite des Logic-Analyzers nachrüsten.&lt;br /&gt;
&lt;br /&gt;
* [http://www.keinschnickschnack.de/?page_id=647 Projektseite: Isolation von 8 Kanälen durch Optokoppler an der Eingangsseite des Logic-Analyzers] (Bis 10MHz auf 8 Kanälen gleichzeitig)&lt;br /&gt;
* [http://www.elv.de/USB-galvanisch-getrennt-USB-Isolator-UI-100/x.aspx/cid_726/detail_30743 ELV: Isolator bis 12MBit Datendurchsatz am USB] (Full-Speed, kein HI-Speed)&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Mikrocontroller.net LA ===&lt;br /&gt;
&lt;br /&gt;
Hier entsteht langsam seit Mitte 2005 ein komplexer (FPGA, CLPD, AVR) Logic Analyser für recht gehobene Ansprüche, allerdings ist die Beteiligung seitdem etwas eingeschlafen:&lt;br /&gt;
&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Hardware|Hardware]]&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Software|Software]]&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Logikanalysator mit Palm ===&lt;br /&gt;
&lt;br /&gt;
In Planung, Brainstorming: [[Palm-Logicanalyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| Messtechnik| Signalverarbeitung ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70255</id>
		<title>Logic Analyzer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer&amp;diff=70255"/>
		<updated>2012-12-26T17:50:38Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite enthält eine Übersicht über verschiedene Logic Analyzer &#039;&#039;&#039;Selbstbau-Projekte&#039;&#039;&#039;. Zur genellen Funktion dieser Geräte, siehe die Seite [[Logikanalysator]].&lt;br /&gt;
&lt;br /&gt;
== AVR-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== LoLA ===&lt;br /&gt;
&lt;br /&gt;
* 2002 von A. Hinrichs&lt;br /&gt;
* AT90S1200 Controller with a 2k-RAM&lt;br /&gt;
* ASM&lt;br /&gt;
&lt;br /&gt;
LoLA is a 8-Bit Logicanalyzer. Internal sampletimes from 2µs to 16ms. Triggerword with don&#039;t cares. External clock or trigger on rising or falling edge. Timing and state with I2C-analysis. 2k memory, very low cost.&lt;br /&gt;
With Pulsegenerator. Programmable Ti and Tp 1us..8sec, Duty-Cycle, Period/Frequency, Continuous- and Burst-Mode. 16- and 32-bit Software for Windows&lt;br /&gt;
&lt;br /&gt;
[http://avrfreaks.net/index.php?module=FreaksAcademy&amp;amp;func=viewItem&amp;amp;item_type=project&amp;amp;item_id=47 Projektseite bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
===  AVR USB Logikanalysator ===&lt;br /&gt;
&lt;br /&gt;
* 2006 B. Sauter&lt;br /&gt;
* Mega 32 &amp;amp; USBN9604 &lt;br /&gt;
* 8-Bit&lt;br /&gt;
* 250kHz online, 1000 Samples @ 4MHz&lt;br /&gt;
* USB&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/48559&lt;br /&gt;
&lt;br /&gt;
=== Simple Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 8-channel&lt;br /&gt;
* 32kB SRAM&lt;br /&gt;
* RS232&lt;br /&gt;
* 2 MHz&lt;br /&gt;
* Software: Win GUI&lt;br /&gt;
&lt;br /&gt;
http://antoniak.ep.com.pl/index.php?id=sla&lt;br /&gt;
&lt;br /&gt;
=== SCANALOGIC ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 1&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 4 Million Samples per second&lt;br /&gt;
* RS232 (bzw. USB-RS232)&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Software (AVR und Windows): Closed Source?&lt;br /&gt;
* Basis: Atmega16 und NAND-Gate&lt;br /&gt;
* http://www.ikalogic.com/scanalogic_home.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2 Pro&#039;&#039;&#039;&lt;br /&gt;
* bis 4 Kanäle&lt;br /&gt;
* bis 20 Million Samples per second&lt;br /&gt;
* Maximum sampling buffer 256K&lt;br /&gt;
* Generator/Playback Modus&lt;br /&gt;
* USB HID mode&lt;br /&gt;
* Firmware upgrade feature&lt;br /&gt;
* Windows-Software (Visual Basic)&lt;br /&gt;
* Basis: Atmel AVR&lt;br /&gt;
* Aufgebaut und getestet&lt;br /&gt;
* http://www.ikalogic.com/scanalogic2/&lt;br /&gt;
&lt;br /&gt;
=== MiniLog ===&lt;br /&gt;
&lt;br /&gt;
Zur Zeit gibt es zwei Versionen, die sich hauptsächlich in der Samplerate und in der Speichergröße unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;50 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 4k Samplespeicher&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega644&lt;br /&gt;
* FT232 USB 115200 Baud&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;80 MSa/s Version&#039;&#039;&#039;&lt;br /&gt;
* 8 Kanäle&lt;br /&gt;
* 50 MSa/s&lt;br /&gt;
* 16k Samplespeicher (32k bei neuer Software)&lt;br /&gt;
* Trigger auf beliebige Pegelkombinationen &lt;br /&gt;
* Basis ATMega88 / ATMega48&lt;br /&gt;
* FT232 USB 500000 Baud&lt;br /&gt;
&lt;br /&gt;
Weitere Infos und Diskussion:&lt;br /&gt;
* http://www.avr.roehres-home.de/logikanalyzer/index.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/141602&lt;br /&gt;
&lt;br /&gt;
== FPGA / CLPD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Deditec LAs sind keine Selbstbauprojekte, daher hier entfernt. Ggf. neuen Artikel aufmachen oder anderen, passenderen ergänzen. Danke.&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-500===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 500 MSamples/sec (bis 100 Samples/Sec)&lt;br /&gt;
* 4096 Samples Speichertiefe/Kanal&lt;br /&gt;
* 2 Trigger Ebene&lt;br /&gt;
* Logi+ Windows Software&lt;br /&gt;
* sehr kostengünstiges Einsteigermodell&lt;br /&gt;
&lt;br /&gt;
=== Deditec Logicanalyzer USB-LOGI-250===&lt;br /&gt;
&lt;br /&gt;
* 36 Kanäle&lt;br /&gt;
* 250 MHz bis 100 Hz Sampling Rate&lt;br /&gt;
* 512 KSamples Speichertiefe/Kanal&lt;br /&gt;
* 1/8 .. 7/8 Pretrigger&lt;br /&gt;
* 2 Trigger Ebenen&lt;br /&gt;
* Windows Software Logi+&lt;br /&gt;
&lt;br /&gt;
[http://www.deditec.de/de/logikanalysatoren/prod.html Herstellerseite]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SUMP Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle bis 100 MHz, 16 Kanäle bei 200 MHz&lt;br /&gt;
* 200 MHz - 10 Hz Sampling Rate&lt;br /&gt;
* 256 KSamples Speicher (1 MByte)&lt;br /&gt;
* Ankopplung über RS232&lt;br /&gt;
* Java Software&lt;br /&gt;
&lt;br /&gt;
Der SUMP Logic Analyzer hat wahlweise einen einfachen Trigger (Rising/Falling mit Maskierung) oder einen komplexen 4stufigen Trigger, sowie einen einfachen zuschaltbaren Noise Filter, der Pulse kürzer als 1/100 MHz filtert um Crosstalk-Effekte in den Anschlussleitungen zu kompensieren. Der Speicher wird im Wartezustand als &amp;quot;Ringstack&amp;quot; kontinuierlich beschrieben. Dadurch können auch Daten von vor der Trigger-Auslösung ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Das Gerät nutzt das Xilinx Spartan 3 Starter Kit Board von Digilent (Kosten Stand Mai 2006: 100 - 150 Euro). Es muss lediglich der FPGA beschrieben und die Software eingerichtet werden. Die Software nutzt für den Zugriff auf die RS232 die RXTX Bibliothek, die für alle gängigen Betriebssysteme existiert.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ Projektseite bei sump.org]&lt;br /&gt;
* [http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy. The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the [[Logic_Analyzer#OpenBench_Logic_Sniffer|Open Workbench Logic Sniffer]]) work out of the box. It also serves as an example how easy it is to integrate new devices. (GPL)&lt;br /&gt;
&lt;br /&gt;
=== BitHound Logic Analyzer ===&lt;br /&gt;
Hier handelt es sich um eine Erweiterung des SUMP auf einen Spartan-6. &lt;br /&gt;
Es gibt zwei Versionen; eine für das Xilinx-SP601 Development Board und eine für das Digilent ATLYS-Spartan-6 Board. &lt;br /&gt;
&lt;br /&gt;
Der Analyzer-Core ist (noch) derselbe wie beim SUMP, der Speicher ist nun jedoch 128MB gross und die Datenübertragung erfolgt per Ethernet zum ebenfalls leicht verbesserten JAVA-Client. &lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.bastli.ethz.ch/index.php?page=BitHoundEn Projektseite von www.bastli.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
=== eebit Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 65 KSamples Speicher pro Kanal (2 MByte)&lt;br /&gt;
* Ankopplung über ISA-Bus oder Parallelport&lt;br /&gt;
* 2 stufiger Trigger&lt;br /&gt;
* einfaches Windows-Programm zur Steuerung/Darstellung&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera FPGA und speichert die Daten in einem externen SRAM. Die Hardware existiert in 2 Varianten, einmal als PC/104-Karte und mit einem Parallelinterface.&lt;br /&gt;
&lt;br /&gt;
[http://www.freepcb.com/eebit/ Projektseite]&lt;br /&gt;
&lt;br /&gt;
=== miniLA ===&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Xilinx CPLD&lt;br /&gt;
&lt;br /&gt;
* 32 Kanäle&lt;br /&gt;
* 100 MHz Sampling Rate&lt;br /&gt;
* 128 kSamples Speicher&lt;br /&gt;
* Ankopplung über USB oder LPT (neuere Version von mockup: nur USB)&lt;br /&gt;
* 5V-tolerante Eingänge&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* 512 kSamples bzw. 1MSamples&lt;br /&gt;
* Ankoppelung über USB&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://minila.sourceforge.net Projektseite]&lt;br /&gt;
* [[MiniLA]] Artikel auf www.mikrocontroller.net&lt;br /&gt;
&lt;br /&gt;
neuere Version von mockup: &lt;br /&gt;
* http://www.mikrocontroller.net/topic/174860 Forum&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Minila_Version_MockUp Artikel&lt;br /&gt;
&lt;br /&gt;
=== coolLA ===&lt;br /&gt;
&lt;br /&gt;
coolLA ist eine erweiterte Version des miniLA. Die wesentlichen Änderungen sind:&lt;br /&gt;
&lt;br /&gt;
* USB Stromversorgung mit galvanischer Trennung&lt;br /&gt;
* Einsatz einer Coolrunner II CPLD&lt;br /&gt;
* Time- und Stateanalyse umschaltbar zusammen im System mit angepasster Software&lt;br /&gt;
* 512k Samples Speicher 32 Bit&lt;br /&gt;
* integrierte Datenempfänger&lt;br /&gt;
* 40-poliger IDE Stecker Intronix LogicPort kompatibel&lt;br /&gt;
* passt in Elpac Gehäuse&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://coolla.freeunix.net Projektseite mit Bilder und Download]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/175219#1682430 Forumbeitrag] von Wolfgang R. (portside)&lt;br /&gt;
&lt;br /&gt;
=== lekernel&#039;s USB Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* 24 Kanäle&lt;br /&gt;
&lt;br /&gt;
Der LA basiert auf einem Altera Cyclone II FPGA. Alle Schaltpläne, VHDLs, Designer Dateien stehen zur Verfügung. Leider nur ein Quick+Dirty Linux Treiber erstmal da. &lt;br /&gt;
&lt;br /&gt;
[http://lekernel.net/scrapbook/ula.html Projektseite]&lt;br /&gt;
=== OpenBench Logic Sniffer ===&lt;br /&gt;
FPGA basierter LA, HW &amp;amp; SW ist offen (open source). Specs:&lt;br /&gt;
&lt;br /&gt;
* 70MHz+ sample speeds&lt;br /&gt;
** 200Msps captures up to 100MHz waveforms on 16 channels&lt;br /&gt;
** 100Msps captures up to 50MHz waveforms on 32 channels&lt;br /&gt;
* 32 channels&lt;br /&gt;
** 8 channels with 24K sample depth&lt;br /&gt;
** 16 channels with 12K sample depth&lt;br /&gt;
** 32 channels with 6K sample depth&lt;br /&gt;
* 16 buffered, 5volt tolerant channels&lt;br /&gt;
* USB interface, USB powered&lt;br /&gt;
Die Software hat Interpreter für RS232, SPI, I2C, 1-Wire und einen A/D-Wandler.&lt;br /&gt;
&lt;br /&gt;
http://www.gadgetfactory.net/gf/project/butterflylogic/&lt;br /&gt;
&lt;br /&gt;
Software in action:&lt;br /&gt;
* Overview and using RLE : [http://www.screencast.com/t/yWBdfwCYh6]&lt;br /&gt;
* Capturing &amp;amp; Decoding UART data: [http://www.screencast.com/t/MWM5MDUyNGIt]&lt;br /&gt;
&lt;br /&gt;
Eine fertige Platine gibts von www.Seeedstudio.com für 50$ oder in Deutschland bei http://www.watterott.com/de/Open-Logic-Sniffer für 45,22€ exkl. Versand (2.90 € UPS Standard).&lt;br /&gt;
&lt;br /&gt;
=== EjLA - Embedded jTAG Logic Analyzer ===&lt;br /&gt;
Dies ist ein kleiner Logicanalyzer der dafür gedacht ist, den (kommerziellen) Xilinx Chipscope Analyzer zu ersetzen. Daher verbietet die Lizenz auch&lt;br /&gt;
die kommerzielle Nutzung.&lt;br /&gt;
&lt;br /&gt;
Das EjLA Setup verwendet SUMP als Client-GUI am PC. Die Kommunikation erfolgt über jTAG und verwendet das Xilinx &amp;quot;impact&amp;quot; Programm. Daher sollte jedes Kabel, dass von Xilinx dafür unterstützt wird, auch mit EjLA laufen. Außerdem muss man beim Entwickeln nichts umstecken bzw. Pins &amp;quot;vorhalten&amp;quot; (man kann das ISE und Bitstream-download gleichzeitig mit der modifizierten SUMP Software zur Analyse verwenden). Um das zu realisieren, wird eine kleine&lt;br /&gt;
&amp;quot;server&amp;quot; Software verwendet, die zwischen dem SUMP-GUI und dem EjLA Core über&lt;br /&gt;
&amp;quot;impact&amp;quot; kommuniziert. Das ISE Setup wird dabei auch nicht verändert. Damit ist auch sichergestellt, dass SUMP kein wesentlicher Bestandteil von EjLA ist/wird und man stattdessen in Zukunft ggf. auch andere Clients verwenden kann. &lt;br /&gt;
&lt;br /&gt;
Die kleinste Core Version läßt noch mehr als genug Platz sogar auf einem kleinen xc3s100e FPGA und bietet einen LA mit ~500 bis 8000 Samples x 32 Kanäle Speichertiefe nur mit einem BRAM Block(!) Dies wird erreicht durch die Verwendung von einfacher Lauflängen-Kompression.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.pin4.at/pro_fpga.php#ejla EjLA Projektseite]&lt;br /&gt;
&lt;br /&gt;
== PIC-basiert ==&lt;br /&gt;
&lt;br /&gt;
=== PIC Logicx ===&lt;br /&gt;
&lt;br /&gt;
[http://martin.hinner.info/electronics/piclogix/ PIC Logix] (GPL, optional Standalone VGA Ausgabe, PIC24 or dsPIC33)&lt;br /&gt;
&lt;br /&gt;
=== Logic Analyzer III (USB) ===&lt;br /&gt;
&lt;br /&gt;
[http://technology.niagarac.on.ca/people/mcsele/LogicAnalyzer.html Logic Analyzer III (USB)] uses a multithreaded Win-32 front-end and a native USB interface. It features a 20MS/s sample rate and a 4K sample depth. Zentrale Bauteile sind ein PIC18F4550 Mikrocontroller und ein AM7204 FIFO IC z.B. von AMD.&lt;br /&gt;
&lt;br /&gt;
=== pk2-la ===&lt;br /&gt;
&lt;br /&gt;
* Hardware: PICkit 2 Programmer Logic Tool Analyzer&lt;br /&gt;
** 3 Kanal bis 500 kHz&lt;br /&gt;
** http://www.microchip.com/pickit2&lt;br /&gt;
* Software: &lt;br /&gt;
** [http://pk2-la.sourceforge.net/ pk2-la]. The Microchip PICkit 2 has the ability to act as a logic analyzer and I/O probe. This project provides a reverse engineered libusb user space device driver and GUI to provide this functionality for users of unsupported operating systems. (Python, Lizenz: GPL)&lt;br /&gt;
&lt;br /&gt;
== Parallelport LA ==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: Derartige Parallelport LAs sind z.B. bei der Samplerate durch die PC-Hardware und das PC OS im Vergleich zu höherwertigen LAs eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
* [http://tfla-01.berlios.de/ The Fabulous Logic Analyzer] (GPL, multiplatform, Simple [[I2C]] analyzer)&lt;br /&gt;
* [http://akikorhonen.org/projects.php?action=view&amp;amp;id=59 Parallel port logic analyzer]&lt;br /&gt;
* [http://uvasux.googlepages.com/simplelogicanalyser Simple Logic Analyser]&lt;br /&gt;
* [http://www.xs4all.nl/~jwasys/old/diy2.html A logic analyzer using the PC&#039;s parallel port] (Win32)&lt;br /&gt;
* [http://www.codeproject.com/KB/system/17ChannelLogicAnalyzer.aspx 17 Channel Logic Analyzer] By Elmue auf www.codeproject.com (Windows)&lt;br /&gt;
&lt;br /&gt;
== Open Source Software ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The [http://sigrok.org/wiki/Main_Page sigrok] project aims at creating a portable, cross-platform, Free/Libre/Open-Source logic analyzer software that supports various (usually USB-based) logic analyzer hardware products. The code is licensed under the terms of the GNU GPL.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
sigrok supported hardware:&lt;br /&gt;
* Saleae Logic (supported)&lt;br /&gt;
* EE Electronics XLA/ESLA100 (supported)&lt;br /&gt;
* ASIX SIGMA (partially supported)&lt;br /&gt;
* Openbench Logic Sniffer (work in progress)&lt;br /&gt;
* ZEROPLUS Logic Cube LAP-C (work in progress)&lt;br /&gt;
* CWAV USBee SX (coming up)&lt;br /&gt;
* Braintechnology USB-LPS (planned)&lt;br /&gt;
* Buspirate (planned)&lt;br /&gt;
* Intronix Logicport (planned)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[http://logicanalyzer.sourceforge.net/ LogicAnalyzer] is a framework as well as an application to operate a PC based logic analyzer. It&#039;s built using the Eclipse RCP and designed with extensibiliy in mind. Integrating devices, providing tools or creating completely new functionality is easy.&lt;br /&gt;
&lt;br /&gt;
LogicAnalyzer main features:&lt;br /&gt;
* Platform independent ( LogicAnalyzer is built using Eclipse RCP, thus it&#039;s mostly platform independent. It also features a native and clean UI.)&lt;br /&gt;
* Rich set of tools ( Several tools come out of the box, such as frequency measurement, distance measurement and serial byte interpreter. LA also comes with an I2C protocol analyzer (SPI, as well as UART analyzer will follow).)&lt;br /&gt;
* SUMP integration ( The most prominent OpenSource logic analyzer hardware (namely the SUMP Logic Analyzer - and derivates such as the Open Workbench Logic Sniffer) work out of the box. It also serves as an example how easy it is to integrate new devices.)&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Logic-Analyzer ===&lt;br /&gt;
&lt;br /&gt;
* [http://sigrok.org/wiki/Logic_Analyzer_Comparison sigrok: Logic Analyzer Comparison] (TODO: evtl. dort sowie hier Einträge synchronisieren)&lt;br /&gt;
&lt;br /&gt;
=== Isolation, galvanische Trennung vom PC ===&lt;br /&gt;
&lt;br /&gt;
Bei günstigen Geräten am USB-Anschluss ist oft die Masseleitung vom Testgerät über den Logic-Analyzer bis hin zum PC durchgeschleift. Das ist nicht immer wünschenswert und man möchte daher keine elektrische Verbindung.&lt;br /&gt;
Prinzipiell gibt es für die galvanische Trennung vom PC zwei Ansätze. Zum einen kann man die Eingänge des Logic Analyzers durch Übertrager derart gestalten, dass keine elektrische Verbindung zum Gerät besteht. Bei teuren Analyzern ist das meist eingebaut, manchmal sogar kanalweise. &lt;br /&gt;
Man kann auch den Logic-Analyzer direkt über einen USB-Isolator vom PC trennen. Dabei muss aber die maximale Übertragungsrate, der verfügbare Strom des USB-Isolators beachtet werden und die notwendige Mindestgeschwindigkeit zum Betrieb des Logic-Analyzers. Bringt das Gerät beispielsweise keinen Pufferspeicher mit, so wird mindestens die Abtastrate herabgesetzt oder der Betrieb am USB-Isolator sogar unmöglich. Hier kann man dann eine Isolation auf Eingangsseite des Logic-Analyzers nachrüsten.&lt;br /&gt;
&lt;br /&gt;
* [http://www.keinschnickschnack.de/?page_id=647 Projektseite: Isolation von 8 Kanälen durch Optokoppler an der Eingangsseite des Logic-Analyzers] (Bis 10MHz auf 8 Kanälen gleichzeitig)&lt;br /&gt;
* [http://www.elv.de/USB-galvanisch-getrennt-USB-Isolator-UI-100/x.aspx/cid_726/detail_30743 ELV: Isolator bis 12MBit Datendurchsatz am USB] (Full-Speed, kein HI-Speed)&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Mikrocontroller.net LA ===&lt;br /&gt;
&lt;br /&gt;
Hier entsteht langsam seit Mitte 2005 ein komplexer (FPGA, CLPD, AVR) Logic Analyser für recht gehobene Ansprüche, allerdings ist die Beteiligung seitdem etwas eingeschlafen:&lt;br /&gt;
&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Hardware|Hardware]]&lt;br /&gt;
* [[Logic Analyzer-Projekt: Ideen zur Software|Software]]&lt;br /&gt;
&lt;br /&gt;
=== In Planung: Logikanalysator mit Palm ===&lt;br /&gt;
&lt;br /&gt;
In Planung, Brainstorming: [[Palm-Logicanalyzer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Oszilloskop&amp;diff=70254</id>
		<title>Diskussion:Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Oszilloskop&amp;diff=70254"/>
		<updated>2012-12-26T17:45:11Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Unwürdig? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo,&lt;br /&gt;
könnte jemand das Bild, dass ich hinzugefügt (ganz unten) habe ein bisschen stauchen und vor allem mit einem kleinen Rahmen versehen, damit es zum Seitenlayout passt? Ich weiß nämlich weder wie ich ein hochgeladenes Bild wieder lösche noch wie das mit dem Rahmen geht...;-)&lt;br /&gt;
Danke&lt;br /&gt;
&lt;br /&gt;
Ist wohl schon erledigt, bei mir sehen die Bilder alle gut aus. [[Benutzer:Stefan|Stefan]] 20:23, 25. Mär. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie wäre es, den Meinungsabschnitt 1 aus dem Artikel herauszunehmen und z.B. in diesen Diskussionsteil zu stecken? &amp;quot;&amp;quot;besonders ekelhaft&amp;quot;, &amp;quot;Windmacher&amp;quot;, &amp;quot;Eh, macht mich mal ein Oszilloskop klar!&amp;quot; sind IMHO auch nicht angebracht. Jemand der den Artikel aufruft und liest, braucht kein Überbraten mit dem 3 Seiten Hammervorspann bevor er zu den gesuchten Infos kommt. Diejenigen, die im Forum so nervend fragen, rufen den Artikel sowieso nicht auf und lesen somit diesen Vorspann auch nicht. Ein kurzer Verweis auf die Diskussionsseite (FAQ xyz siehe Diskussionsseite) könnte den alten Text ersetzen. [[Benutzer:Stefan|Stefan]] 20:21, 25. Mär. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Sehe ich auch so. Das ist einfach zu subjektiv für einen Wiki-Artikel. --[[Benutzer:Andreas|andreas]] 20:41, 25. Mär. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Mir kommt es irgendwie so vor, als sei der gesamte Artikel (zumindest aber der 1. Abschnitt) von der Werbeabteilung eines namenhaften Oszi-Herstellers geschrieben, um die Konkurrenz zu diffarmieren. Offensichtlich will der Autor nicht wahr haben, dass es auch zum günstigen Preis bereits gute Oszilloskope gibt. Völlig außer acht gelassen wird, was der Anwender mit damit machen will (vielleicht arbeitet er nur mit niedrigen Frequenzen, dann ist die Bandbreite relativ egal). Auf jeden Fall fehlt die Angabe, wie teuer ein gutes Oszilloskop mindestens sein muss, wahrscheinlich aus dem Grunde, weil der Autor möglichst teure Geräte verkaufen will. (Für analoge Oszis gibt es diese Angabe, aber digitale werden nunmal immer wichtiger und da fehlt sie.) -- [[Benutzer:Paul k|Paul k]] 03:12, 6. Jul. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Gebraucht=&lt;br /&gt;
Einmal ratet ihr von Gebrauchten ab, weiter unten wird empfohlen, nur Topgeräte zu kaufen und dies aber &amp;quot;nur gebraucht. ???&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Unwürdig?=&lt;br /&gt;
Angeblich ist die &amp;quot;Datenauswertung mit Excel eines Ingenieurs unwürdig&amp;quot;. Dürfte ich dafür mal den Grunde erfahren? Wenn sich Leute in Excel vertippen, ist das deren Problem und wäre in MATLAB genau so falsch und unerkennbar. Wenn da 90% falsch sind, sind das Excels von BWLern...&lt;br /&gt;
:Jupsi. Mir ist zum Beispiel auch unverständlich, warum nun ausgerechnet Excel falsch rechnen soll und alle anderen Programme richtig. Der Prozessor ist doch für alle derselbe, oder? Wenn ein Fehler wie der [http://de.wikipedia.org/wiki/Pentium-FDIV-Bug Pentium Bug] auftritt, sind alle Programme gleichermaßen betroffen. -- [[Benutzer:Paul k|Paul k]] 23:09, 27. Aug. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Ich finde die Wortwahl einiger Artikel hier ohnehin etwas kindisch[[Spezial:Beiträge/87.167.118.115|87.167.118.115]] 11:57, 28. Aug. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Ich habe das gerade geändert. Falsch tippen kann man in Matkab auch und die 90% sind nicht repräsentativ. [[Benutzer:Elektromeister|Elektromeister]] 17:45, 26. Dez. 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Erweiterungen?=&lt;br /&gt;
Wie wäre es Artikel über Komponententester, Kanalerweiterung, Aktiver Tastkopf, Delay-line usw wie auch diverse Vorsätze (Triggern auf Fbas/i2c/...) oder ist&lt;br /&gt;
sowas dank günstigen 4-Kanal Digital-Oszilloskopen hinläufig ?&lt;br /&gt;
&lt;br /&gt;
=Sprache=&lt;br /&gt;
Das gehört schnell geändert. sieht nicht gerade nach seriöser Schreibe aus. Der Artikel klingt eher kins#disch!&lt;br /&gt;
&lt;br /&gt;
=Umsatzsteurr und Zoll=&lt;br /&gt;
Was soll das in diesem Artikel???????&lt;br /&gt;
&lt;br /&gt;
: Wollte ich auch gerade schreiben!&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70253</id>
		<title>Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70253"/>
		<updated>2012-12-26T17:44:01Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Datenauswertung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Oszilloskop&#039;&#039;&#039; dient zur grafischen Darstellung des Spannungsverlaufs eines oder mehrerer elektischen Signale in einem einstellbaren Zeitfenster. Es ist das wichtigste Werkzeug der Elektotechniker.&lt;br /&gt;
&lt;br /&gt;
== Anfragen bezüglich Kaufberatung im Forum ==&lt;br /&gt;
&lt;br /&gt;
=== Kritik an den Anfragen ===&lt;br /&gt;
Im Forum finden sich regelmäßig Anfragen nach individueller Beratung zum Oszilloskopkauf. Die Anzahl solcher Oszilloskop-Threads hat schon lange die 1000 überschritten. Sie sind langweilig, eine Qual und oft unnütz - besonders dann, wenn sich der Fragesteller offebar nicht mit den Grundlagen eines Oszilloskops und den wichtigsten Kennzahlen bekanntgemacht hat oder nicht einaml weiß, was er überhaupt messen will. Auch, wenn ein Fragesteller ein paar Grundlagen besitzt, hat er anscheinend meistens keine Lust, verständlich darzustellen, was er genau will und lässt sich stattdessen umstädnlich befragen.&lt;br /&gt;
&lt;br /&gt;
Den meisten regelmäßigen Forumsteilnehmern ist daher gründlich die Lust an Oszilloskop-Threads vergangen. Dort &amp;quot;diskutieren&amp;quot; eigentlich nur noch Trolle und anonyme Gäste, die oft genug nur Werbung über Billigangebote über die x-te Ausgabe einer billigen, als Oszilloskop bezeichneten Plastikkiste, einem suupertollen eBay-Schnäppchen oder angeblicher asiatischer Wundertüten.&lt;br /&gt;
&lt;br /&gt;
==== Links für Anfänger ====&lt;br /&gt;
Wer sich ernsthafte Beratung wüsncht und eine &amp;quot;sanfte&amp;quot; Einführung in das Thema sucht, kann sich die englischsprachige YouTube-Videos von AfroTechMods anschauen:&lt;br /&gt;
&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials/ http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials]&lt;br /&gt;
&lt;br /&gt;
Dazu passt auch sein Tutorial über Funktionsgeneratoren:&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial/ http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial].&lt;br /&gt;
&lt;br /&gt;
===Maßgeschneidert?===&lt;br /&gt;
Besonders die immer wiederkehrende Forderung, dass es unbedingt das maßgeschneiderte Oszilloskop zum Superpreis genau für den Fragesteller geben muss, ist sinnlos. Wer mit diesem Anspruch kommt, der wird enttäuscht werden. Das gibt es nicht, und gute Oszilloskope kosten Geld, da qualitativ hochwertige Geräte keine Massenware sind. Lediglich billige Geräte werden in grosser Zahl hergestellt und sind entsprechend preiswert, diese sind jedoch für anspruchsvoll Anweder meist untauglich, da genau an den wichtigen Dingen gespart und nur auf Optik gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
===Gebraucht ist auch keine Lösung===&lt;br /&gt;
Es gibt eine Reihe von gebrauchte Oszilloskopen- vorwiegend im Internet, von den die meisten billig sind. Da niemand per Ferndiagnose oder Blick in eine Glaskugel in ein gebrauchtes Gerät hineinsehen und etwas über den Zustand berichten kann, besteht immer das typische Risiko eines Kaufs asu zweiter Hand, das jeder selber tragen muss. Niemand im Forum kann und wird das jemandem abnehmen. &lt;br /&gt;
&lt;br /&gt;
Was man allgemein sagen kann, ist, dass man besser die Finger von Angeboten lassen sollte, wenn der Verkäufer mit den übliche Phrasen wie, &amp;quot;Dachbodenfund&amp;quot;, &amp;quot;Keine Ahnung davon&amp;quot;, &amp;quot;Keine Möglichkeit zu testen&amp;quot; kommt. Vorsicht ist auch bei dem beliebten Trick &amp;quot;Funktioniert, aber aus rechtlichen Gründen (Garantie) verkaufe ich es als defekt, für Bastler&amp;quot; gegeben. Man muss sich immer vor Augen führen, dass niemand ein gutes und wertvolles Gerät dieser Art zum Billigpreis abgegeben wird und dies schon garnicht über Internetplattformen, wo es kaum einen Markt für Topgeräte gibt. Gute gebrauchte Geräte gibt es von privat daher nur auf Elektronikbörsen zu entsprechenden Preisen.&lt;br /&gt;
&lt;br /&gt;
Es gibt demgemäss natürlich auch Geräte von seriösen Gebrauchthändlern mit Garantie - allerdings ebenso zu derartigen Preisen, dass dagegen der Kauf eines aktuellen Neugeräts ebenfalls attraktiv erscheint.&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen? ===&lt;br /&gt;
Eine Vorgehensweise, von der man auch abraten muss, ist die Frage nach Erfahrungen anderer Mitglieder! Die meisten Antworten kommen von Trollen und Posern, die eigentlich keine Ahnung haben. Die einen wollen als anonymer Gast mal wieder trollen, die anderen wollen nur mitteilen, dass Amateurfunker sowieso die besseren Menschen sind. Andere wiederum haben &amp;quot;zufällig&amp;quot; gerade *das* richtige Oszilloskop zu verkaufen. Dann gibt es noch die, die sich ihr eigenes Oszilloskop schönreden wollen, ihren Vorurteilen oder ihrem Fetisch frönen. Zum Beispiel&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Kauf ja kein Gerät aus Asien!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Unter LeCroy|Agilent|Yokogawa|Tektronix geht gar nichts!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Nur Gebrauchtgeräte lohnen sich!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hinweise wie &#039;&#039;mein vor 30 Jahren gekauftes Markengerät funktioniert noch heute tadellos&#039;&#039; sind ebenfalls ziemlich sinnlos. Der Hersteller wird dieses Gerät gar nicht mehr anbieten und er wird schon gar nicht mehr mit der gleichen Qualität fertigen, wie vor 30 Jahren. Dazu ist der Kostendruck zu hoch und Technologien haben sich geändert. Selten sind die neuen Technologien heute so robust, wie die vor 30 Jahren.&lt;br /&gt;
&lt;br /&gt;
Als Unerfahrener kann man daher aus den Antworten nicht herauslesen, ob sie wirklich auf Erfahrung beruhen. Man braucht also gewissermassen selbst Erfahrung, um die Erfahrungsberichte anderer richtig einzuordnen.&lt;br /&gt;
&lt;br /&gt;
Ein anderer Aspekt aus alten Threads ist, dass viele Fragesteller die Erfahrungen gar nicht zur Kenntnis nehmen wollen, wenn sie der eigenen Wunschvorstellung widersprechen. So etwas nennt man beratungsresistent. Da stellt sich schon mal heraus, dass der Fragesteller schon längst ein Gerät bestellt hat und jetzt gebauchpinselt werden will. Eine Zeitverschwendung für alle.&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit eigenen Geräten lassen bedingt den Schluss zu, welche&lt;br /&gt;
Marken grundsätzlich empfehlenswert sind, weil dort gegebenenfalls mehr auf Qualität geachtet wird.&lt;br /&gt;
&lt;br /&gt;
=== Zusatzkosten beim Kauf im Ausland ===&lt;br /&gt;
Beim Kauf eines scheinbar preisgünstigen Gerätes im Ausland ist Folgendes zu beachten:&lt;br /&gt;
&lt;br /&gt;
Versandkosten, Einfuhrumsatzsteuer, Zoll, e.v. Gebühr für den Paketdienst und die Gebühren für die  Währungsumrechnung sind Kosten, die bei vielen vermeintlichen Internet-Schnäppchen aus dem Ausland (besonders Nicht-EU) noch hinzukommen und bei plakativen Überschriften gerne &amp;quot;vergessen&amp;quot; oder ignoriert werden. Oft wird sich das Angebot selbst schöngeredet. Zudem sind das nicht einmmal alle Kosten, die man zu tragen hat. Zum Beispiel können für manche Zahlungsweisen weitere Gebühren hinzukommen oder Lagergebühren im Zolllager.&lt;br /&gt;
&lt;br /&gt;
Wer nicht vorher rechnet, hat nachher schnell mehr bezahlt als bei einem lokalen Händler. Siehe auch [http://www.zoll.de Zoll].&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist der deutsche Zoll nicht doof. Besonders wenn ein asiatischer Versender auf ein Paket bei der Zollerklärung &amp;quot;Geschenk, Wert $40&amp;quot; schreibt, dann kann man fast sicher sein, dass der deutsche Zoll sich das genauer ansieht. Die Ware landet im Zolllager und man darf den Kaufpreis nachweisen.&lt;br /&gt;
&lt;br /&gt;
Ebenso glaubt der Zoll nicht an kostenlosen Versand und nimmt regelmäßig ziemlich saftige Versandgebühren an, die dann versteuert werden&amp;lt;ref&amp;gt;Passiert das, kann man gegen den Steuerbescheid Widerspruch einlegen. Wie das geht sollte in einer Rechtsbehelfsbelehrung auf dem Steuerbescheid stehen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nochmal zum Mitschreiben, besonders bei Käufen von außerhalb des Zollgebiets der EU sollte man sich vorher mindestens über die folgenden Kosten informieren:&lt;br /&gt;
&lt;br /&gt;
* Versandkosten oder was der Zoll sich bei kostenlosem Versand ausdenkt&lt;br /&gt;
* Versandart (was durch die Post importiert wird, wird vom Zoll anders abgefertigt, als das, was von einem Paketdienst importiert wird)&lt;br /&gt;
* Einfuhrumsatzsteuer&lt;br /&gt;
* Zoll (bei der Warengruppe, in die Oszilloskope gehören, ist der zur Zeit wohl 0%. Das kann sich natürlich ändern)&lt;br /&gt;
* Gebühr Paketdienst. Paketdienste lassen sich die Zollanmeldung und den Papierkrieg zum Teil mit saftigen Gebühren bezahlen. Die sind nicht in den Versandkosten enthalten.&lt;br /&gt;
* Gebühr für Währungsumrechnung&lt;br /&gt;
* Bankgebühr für Zahlung ins Ausland&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
Ein Kauf eines PC-basierten Messinstruments mit Oszilloskopfunktion, das in Deutschland nicht erhältlich ist und einen Kaufwert von 719,- US Dollar in Taiwan hatte, wurde aufgrund der Umrechung mit einem Wert von 589,- Euro veranschlagt. An UST kamen 112,- und an Zollgebühren 46,- Euro hinzu. Zusammen mit dem Versand und Bankgebühren kostete das Gerät insgesamt 790,- Euro. Andere Geräte des Herstellers, die in Deutschland zu beschaffen sind, kosten als deutsches Exemplar kaum mehr, dafür hat man die volle Verbrauchergarantie. Diese sind also in der Regel vorzuziehen, wenn das Gerät in Deutschland beschaffbar ist.&lt;br /&gt;
&lt;br /&gt;
===Spielzeuge aller Art===&lt;br /&gt;
Offensichtlich scheint es gerade Mode zu werden, einen schwachbrüstigen Analog-Digital-Konverter hinter eine eher zufällig gewählte, krumme analoge Eingangsschaltung zu klemmen und an einen Mikrocontroller mit Graphik-LCD anzuschließen.  Das ganze wird als digitales Speicheroszilloskop (DSO) zum Sonderpreis verkauft. Je nach Hersteller wird so ein Gerät komplett ohne Gehäuse geliefert, was mit Hinblick auf die Sicherheit sehr fragwürdig ist, oder es kommt in einem lustig aufgemachten Plastikgehäuse in MP3-Player-Format daher, das auch keine großartige Isolation bietet. Hinzu kommen eindruckschindene Namen und Logos, die die Modernität und Qualität suggerieren sollen, oft noch unterstreichen durch die Nutzung von Open-Source-Kompatibiltät.&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu richtigen Oszilloskopen sind dies leider nur Spielzeuge und es nervt, diese Dinger immer wieder im Forum als das &amp;quot;Beste seit Erfindung von geschnitten Brot&amp;quot; vorgestellt zu bekommen. Ein Blick auf die technischen Daten dieser &amp;quot;Oszilloskope&amp;quot; (sofern die Daten überhaupt angegeben werden) reicht, um festzustellen, dass man ein Spielzeug vor sich hat. Schön für den, der spielen will, schlecht für den, der sicher messen will.&lt;br /&gt;
&lt;br /&gt;
Ebenso verrät ein Blick auf die Schaltung des Analogeingangs, ob man Qualität vor sich hat. Fehlende Spannungsfestigkeit und fehlende Frequenzkompensation des Eingangsverstärkers sind sichere Zeichen für Schund. Wenn es eine Verbindung zum PC gibt, aber diese nicht isoliert ist, ist das ein weiteres Zeichen für Scheinqualität.&lt;br /&gt;
&lt;br /&gt;
In [http://welecw2000a.sourceforge.net/docs/Hardware/GW_Instek_GDS-1152A.pdf] kann man das Innenleben eines richtigen DSO bewundern. Man vergleiche dies mit den Innenleben der Spielzeug-&amp;quot;DSO&amp;quot;s.&lt;br /&gt;
&lt;br /&gt;
Ein anderes, sicheres Zeichen eines Spielzeug-&amp;quot;DSOs&amp;quot; ist es, wenn irgendein Ding aus Abgreifklemmen und Klinkenstecker als &amp;quot;Tastkopf&amp;quot; mitgeliefert wird oder die Buchse für den Tastkopf aus einer Klinkenbuchse oder ähnlicher Niederfrequenz-Anschlusstechnik besteht.&lt;br /&gt;
&lt;br /&gt;
Fazit, wer ein Oszilloskop haben möchte, sollte sich das Geld für ein Spielzeug-&amp;quot;DSO&amp;quot; sparen.&lt;br /&gt;
&lt;br /&gt;
== Was messen Oszilloskope? ==&lt;br /&gt;
&lt;br /&gt;
Oszilloskope zeigen einen Spannungsverlauf über einen relativ kurzen Zeitraum an. Je besser das Oszilloskop, desto länger ist dieser kurze Zeitraum, beziehungsweise desto schneller darf das Signal sein. Darüber hinaus lassen sich andere Größen, zum Beispiel Ströme, anzeigen, wenn man zusätzlich entsprechende Wandler einsetzt, um aus ihnen eine Spannung zu erzeugen. Bei Mehrkanal-Oszilloskopen kann man üblicherweise auch eine Spannung über eine Spannung darstellen (XY-Modus).&lt;br /&gt;
&lt;br /&gt;
Als Kanal bezeichnet man bei einem Oszilloskop einen Eingang für eine Spannung. Die an den Kanäle anliegenden Spannungen können vom Oszilloskop einzeln oder gemeinsam angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich bieten moderne Oszilloskope die Möglichkeit, sich gewisse Kenngrößen der Spannungsverläufe anzeigen zu lassen. Gängige sind zum Beispiel die Anzeige von Spitzenspannung und Effektivwert einer Spannung, Frequenz/Periodendauer, Anstiegs- und Abfallzeiten, Tastverhältnis und so weiter. Darüber hinaus bieten gute Oszilloskope Positionsmarken (Cursor), mit denen man, durch eine Linie dargestellt, auf dem Bildschirm Positionen im Spannungsverlauf markieren kann. Zur Position zugehörige Werte (Zeit oder Spannung), sowie die Differenz dieser Werte zwischen zwei Poitionsmarken können abgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Besonders [[#Digitale_Tischoszilloskope|digitale Oszilloskope]] können relativ viele unterschiedliche Kenngrößen anzeigen, da sich viele dieser Größen mit einfachen Algorithmen aus den vom Oszilloskop im Speicher erfassten Daten berechnen lassen. Ebenso sind einfache mathematische Operationen möglich, etwa eine diskrete Fourier-Transformation oder die Summe oder Differenz der Spannungsverläufe von zwei Kanälen. Oszilloskope der Oberklasse bieten darüber hinaus ausgeklügelte Möglichkeiten der Signalanalyse. &lt;br /&gt;
&lt;br /&gt;
Bereits in der Unterklasse digitaler Oszilloskope ist heutzutage eine PC-Schnittstelle üblich. Beim Kauf sollte man darauf achten, dass das Protokoll der Schnittstelle dokumentiert ist. Sonst ist man auf proprietäre PC-Software des Herstellers angewiesen. Bei Oszilloskopen der Unterklasse wird zwar häufig kostenlos PC-Software mitgeliefert, doch leider sind diese Programme durchgehend von erschreckend schlechter Qualität. Bei Oszilloskopen der Oberklasse lassen sich die Hersteller ihre PC-Software gerne zusätzlich sehr teuer bezahlen.&lt;br /&gt;
&lt;br /&gt;
Für spezielle Anwendungen finden sich in manchen Oszilloskopen besondere Messfunktionen. Zum Beispiel go/no-go Messungen, mit denen eine Spannungsverlauf mit einem vorgegebenen Verlauf verglichen wird. Entspricht der Spannungsverlauf hinreichend dem vorgegebenen Verlauf wird ein &amp;quot;go&amp;quot; (alles ist OK) Signal ausgegeben. Weicht der Verlauf zu stark ab, ein &amp;quot;no go&amp;quot; (Spannung stimmt nicht) Signal.&lt;br /&gt;
&lt;br /&gt;
== Analoge Oszilloskope ==&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
[[Bild:Oszilloskop.png|thumb|right|300px|Hybrides Analog/Digital Oszilloskop]]&lt;br /&gt;
Bei analogen Oszilloskopen wird das darzustellende Signal nach der Verstärkung direkt zur Ablenkung eines Elektronenstrahls verwendet.&lt;br /&gt;
&lt;br /&gt;
Brauchbare analoge Oszilloskope findet man oft schon für ca. 50 Euro bei Online-Auktionen und Kleinanzeigenmärkten. Für 200-400 Euro bekommt man dort recht gute Profigeräte&amp;lt;ref&amp;gt;Ein Gerät, welche mit dem Attribut &#039;&#039;Profigerät&#039;&#039; beworben wird, ist normalerweise keins.&amp;lt;/ref&amp;gt;  mit 60-200 MHz Bandbreite. Brauchbare Neugeräte fangen bei 600 Euro an. Der Oszilloskopmarkt wird von einigen wenigen Marken dominiert. Im höherpreisigen Segment sind es vor allem HP (Agilent) und Tektronix, sowie Yokogawa und Lecroy. Hameg ist vor allem im mittleren Segment (500-1500 Euro) weit verbreitet. Man findet sie oft in Schule und Ausbildung. Preislich darunter finden sich diverse asiatische oder gelegentlich noch osteuropäische Hersteller von Analogoszilloskopen. Häufig treten diese Hersteller nicht unter eigenem Namen auf, sondern bieten ihre einfachen Geräte als OEM-Produkte an. &lt;br /&gt;
&lt;br /&gt;
Ganz einfache Geräte verfügen nur über einen Kanal&amp;lt;ref&amp;gt;Es gibt, beziehungsweise gab, nochmals einfachere Geräte, nämlich solche ohne Trigger. Die Zeiten solcher Gerät sind allerdings seit rund 50 Jahren vorbei. Daher sollte man den fehlenden Trigger nur bei historischen Gebrauchtgeräten finden.&amp;lt;/ref&amp;gt;. Damit ist es nicht möglich, zwei Signale in zeitliche Beziehung zu setzen. Dies ist jedoch oft wichtig. Deshalb verfügen heutzutage auch einfache Geräte meist über zwei Kanäle.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Bandbreite&#039;&#039;&#039; gibt Auskunft, welche Signal-Frequenzen das Oszilloskop noch verarbeiten kann. Bei angegebener Bandbreite fällt die Verstärkung des Oszilloskops um 3dB ab, ein Sinussignal wird dann nur noch mit ca. 70% der wahren Amplitude angezeigt. Um Signalverläufe noch vernünftig interpretieren zu können, kann man grob sagen, dass man Signale bis 1/10 der Bandbreite dargestellt bekommt. Ein Rechtecksignal nahe der Bandbreite würde z.&amp;amp;nbsp;B. nur noch als Sinus dargestellt werden &amp;lt;ref&amp;gt;Häufig wird von Anfängern bei der Bandbreitenbetrachtung vergessen, dass ein Rechtecksignal nicht aus einer einzigen Sinusschwingung der Frequenz f, sondern aus einer theoretisch unendlichen Summe von Signalen der Frequenzen f, 3 * f, 5 * f ... besteht. Für eine vernünftige Darstellung eines Rechtecksignals sollte die Oszilloskopbandbreite so groß sein, dass zumindest die ersten paar Oberwellen nicht zu stark gedämpft werden. Aus dieser Betrachtung ergeben sich Faustformeln, wie die, dass die Bandbreite eines Oszilloskops zehnmal (oder dreimal, oder fünfmal, je nachdem wie genau man messen möchte) größer sein sollte als die Grundfrequenz des Rechtecks.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beim Messen von Digitalsignalen ist man meist an der &#039;&#039;&#039;Anstiegszeit&#039;&#039;&#039; interessiert. Die Anstiegszeit gibt an, wie lange ein Rechtecksignal von 10-90% benötigt. Die Anstiegszeit des Oszilloskops gibt an, welche Anstiegszeit dargestellt wird, wenn man ein nahezu ideales Rechtecksignal mit annähernd Null Anstiegszeit anlegen würde. Man kann die Anstiegszeit direkt aus der Bandbreite berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{Osc} = \frac{0.35}{B}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_A&amp;lt;/math&amp;gt; : Anstiegszeit des Oszilloskops in Sekunden (s)&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, B&amp;lt;/math&amp;gt; : Bandbreite in Hertz (Hz)&lt;br /&gt;
&lt;br /&gt;
Legt man ein reales Rechtecksignal an das Oszilloskop an, dann wird die Anzeige umso mehr verfälscht, je näher die Anstiegszeit des Eingangssignals der Anstiegszeit des Oszilloskops kommt. Dabei gilt folgender Zusammenhang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_S = \sqrt{t_{ges}^2-t_{Osc}^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_S&amp;lt;/math&amp;gt;: Anstiegszeit des Eingangssignals&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{ges}&amp;lt;/math&amp;gt;: Angezeigte Anstiegszeit auf dem Oszilloskop&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{Osc}&amp;lt;/math&amp;gt;: Anstiegszeit des Oszilloskops&lt;br /&gt;
&lt;br /&gt;
Wenn man wirklich schnelle Signale messen will, spielt auch die Bandbreite des verwendeten Tastkopfes eine wichtige Rolle. Näheres dazu findet man [http://www.sigcon.com/Pubs/straight/probes.htm hier].&lt;br /&gt;
&lt;br /&gt;
Oszilloskope unterscheiden sich oft stark in den Triggerungsmöglichkeiten. Bei guten Geräten kann man z.&amp;amp;nbsp;B. die Triggerung variabel verzögern. Erst dadurch wird es möglich, dass man sich Signale genauer anschauen kann, die zeitlich weit hinter einem Triggerereignis kommen. Eine weitere Funktion bei höherklassigen Oszilloskopen ist eine zweite Zeitbasis. Mit dieser kann man in einen Ausschnitt des Messsignals hereinzoomen&amp;lt;ref&amp;gt;Die zweite Zeitbasis steuert einen zweiten Strahl (ähnlich wie einen separaten Kanal), der das gleiche Eingangssignal erhält. Die zweite Zeitbasis wird auf eine höhere Horizontalfrequenz eingestellt als die erste. Zusammen mit einer horizontalen Verschiebung der Darstellung kann man nun Ausschnitte des Signals durchfahren und vergrößert betrachten.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit Analog-Oszilloskopen kann man sich hauptsächlich periodische Signalverläufe anschauen, also solche, die zeitlich immer wiederkehrend sind. Denn nur so kann ein Signal immer wieder auf den Schirm &amp;quot;geschrieben&amp;quot; werden und erscheint als stehendes Bild. Aperiodische Signale, wie z.&amp;amp;nbsp;B. auf Datenübertragungsleitungen, sind damit nicht darstellbar. Sie laufen mit einem Strahldurchgang über den Schirm. In dieser kurzen Zeit ist es jedoch nur selten möglich, sie visuell aufzunehmen. Mit einer Digitalkamera kann man solche Signalverläufe mitunter trotzdem einfangen. Früher sehr hochpreisige, heute nicht mehr übliche Analog-Oszilloskope hatten eine eingebaute Speichermöglichkeit (Speicherröhre) für einmalige Signale. Diese Klasse von Analog-Oszilloskopen wurde durch digitale Speicheroszilloskope (DSOs) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Manche Analog-Oszilloskope bieten eine Möglichkeit, die Triggerung nur zu einem definiertem Zeitpunkt anzustoßen, somit kann auch der Anlaufstrom eines Motors mit einem Analog-Oszilloskop dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Speicheroszilloskope ===&lt;br /&gt;
Inzwischen eher selten sind analoge Speicheroszilloskope anzutreffen. Diese speichern im Gegensatz zu digitalen Speicheroszilloskopen nicht das Signal selbst, sondern das Bild auf der Röhre. Dies wird mit speziellen speichernden Bildröhren erreicht. Je nach Typ kann es mehrere getrennt betreibbare Bereiche geben, um beispielsweise 2 Bilder eines Signales zu unterschiedlichen Zeitpunkten darstellen zu können (z.B. Tektronix 549).&lt;br /&gt;
&lt;br /&gt;
Einige wenige dieser Oszilloskope waren sogar in der Lage, das aufgezeichnete Bild auf Papier auszugeben (z.B. &amp;quot;HP Model 175A&amp;quot; mit Modul 1784A).&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Analogoszilloskope ===&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Neugeräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;analogoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Röhre [cm]&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| generisches 10 MHz Oszilloskop unter Bezeichnungen wie C1-94, S1-94, OS10, AO-610, ST16, CS10, GOS-310, 72-6602, HUC70, CS1010&lt;br /&gt;
| -&lt;br /&gt;
| 130&lt;br /&gt;
| 1&lt;br /&gt;
| 10&lt;br /&gt;
| 4 − 4,8 × 6&lt;br /&gt;
| Seit Jahrzehnten von vielen No-Name Herstellern in unterschiedlichen Ausführungen und Bauformen im Angebot. Wenig empfehlenswert für µC-Arbeiten. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.atten.com.cn/english/products/rf_microwave/AT7328_40.htm Atten AT7328], CS-4128 und andere Bezeichnungen wie 100867.&lt;br /&gt;
| Atten&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| 20&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM 303-6&lt;br /&gt;
| Hameg&lt;br /&gt;
| 600&lt;br /&gt;
| 2&lt;br /&gt;
| 35&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digitale Speicheroszilloskope ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:tektronix.jpg|thumb|right|300px|Digitales Speicheroszilloskop vom Anfang des Jahrtausends]]&lt;br /&gt;
Ein digitales Speicheroszilloskop (englisch DSO, &#039;&#039;&#039;D&#039;&#039;&#039;igital &#039;&#039;&#039;S&#039;&#039;&#039;torage &#039;&#039;&#039;O&#039;&#039;&#039;scilloscope) digitalisiert das Eingangssignal mit einem Analog-Digital-Wandler und legt die Werte in einem Speicher ab. Der Vorteil daran ist, dass man auf diese Weise Momentaufnahmen eines Signals machen und damit einmalige (transiente) Ereignisse (Spikes, Datenübertragungen) erkennen und darstellen kann, was besonders bei digitalen Schaltungen, z.&amp;amp;nbsp;B. mit Mikrocontrollern, sehr nützlich ist. Weiterhin lässt sich das Signal &amp;quot;vermessen&amp;quot; (z.&amp;amp;nbsp;B. um die Baudrate einer Datenübertragung zu bestimmen), man kann die Frequenz und den Effektivwert anzeigen lassen, das Frequenzspektrum, und je nach Modell noch vieles mehr. Das Signal wird in S/W oder Farbe auf einem LCD dargestellt, lässt sich aber oft auch über einen angeschlossenen Drucker ausdrucken oder an den PC übermitteln.&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Parameter bei digitalen Oszilloskopen ist die &#039;&#039;&#039;Abtastrate&#039;&#039;&#039;, die angibt, mit welcher Geschwindigkeit das Eingangssignal digitalisiert wird. Um ein Signal mit einer bestimmten Frequenz vernünftig darstellen zu können, muss es mindestens mit der 10-fachen Frequenz abgetastet werden&amp;lt;ref&amp;gt;Dieser Anhaltswert liegt über der Nyquist-Frequenz (zweifache Frequenz), da man Abweichungen von der idealen Signalform sehen und beurteilen möchte.&lt;br /&gt;
&lt;br /&gt;
Die zehnfache Abtastfrequenz bedeutet, dass man 10 Messpunkte pro Signalperiode hat, was in einer 1:1 Darstellung auf dem Bildschirm gerade mal 10 nebeneinander liegenden Pixeln entspricht. Das ist immer noch sehr wenig, um ein Signal zu beurteilen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem sind die &#039;&#039;&#039;Speichertiefe&#039;&#039;&#039; und die &#039;&#039;&#039;Wandler-Auflösung&#039;&#039;&#039; interessant. Ein Oszilloskop, das mit acht Bit Auflösung abtastet und 2000*8 Bit Speicher hat, kann 2000 Samples abspeichern, was einer Darstellung von 2000*256 Pixeln entspricht. Acht Bit Auflösung ist heutzutage ein gängiger Wert, auch wenn er niedrig erscheint. Ein normales Oszilloskop ist kein Präzisionsmessgerät und acht Bit sind für die Darstellung auf den Displays normaler Oszilloskope ausreichend.   &lt;br /&gt;
&lt;br /&gt;
Bei der Wandlung und Speicherung gibt es unterschiedliche Verfahren: Ehemals günstige Oszilloskope wie die TDS1000-Serie von Tektronix verwenden &#039;&#039;&#039;CCD-Speicher&#039;&#039;&#039; (Eimerkettenspeicher, ein analoges Schieberegister); die Messwerte werden erst gespeichert, und dann digitalisiert. Nachteile dieser Vorgehensweise sind ein stärkeres Rauschen, die begrenzte Speichertiefe und Totzeiten, während der keine Eingangswerte aufgenommen werden. Diese entstehen, da das Wandeln aller Werte aus dem analogen Zwischenspeicher länger dauert als die Zeit zum Füllen dieses Speichers. Deshalb muss das Gerät bis zum Abschluss der Wandlung warten, bevor es den Speicher erneut füllt.&lt;br /&gt;
&lt;br /&gt;
Früher wandelten nur teurere Modelle in Echtzeit mit schnellen Flash-[[AD-Wandler]]n und speicherten die Messwerte direkt in einem schnellen RAM. Die Speichertiefe ist dabei praktisch unbegrenzt, allerdings sind Wandler sehr teuer, die mehrere GS/s schaffen. Durch einen Trick (mehrere verschachtelte langsame AD-Wandler) setzen sich AD-Wandler bei günstigen Modellen durch. Oszilloskope, die diesen Trick verwenden, erkennt man daran, dass die Abtastfrequenz mit der Anzahl der aktivierten Kanäle sinkt. Zum Beispiel, findet man Vierkanaloszilloskop mit vier Wandlern à 250 MS/s, die bei Benutzung nur eines Kanals 1 GS/s für diesen Kanal erreichen, bei Benutzung von zwei Kanäle 500 MS/s pro Kanal und bei Benutzung von drei oder vier Kanälen 250 MS/s pro Kanal.&lt;br /&gt;
&lt;br /&gt;
In den richtig schnellen Geräten (mehrere GHz Samplerate) ist ein ähnlicher Trick üblich. Dort sind in den verwendeten Wandlerschaltkreisen eine größere Anzahl Sample-and-Hold-Stufen und AD-Wandler integriert. Die Eingangsspannung wird dann zeitversetzt in den Sample-and-Hold-Stufen gespeichert und von den im Vergleich zur Samplerate langsameren AD-Wandlern umgesetzt. Die Ausgangslogik sorgt dann dafür, dass die Daten in der richtigen Reihenfolge ausgegeben werden. Ein Problem bei dieser Vorgehensweise sind unterschiedliche elektrische Eigenschaften der parallelen Wandlerstufen. &lt;br /&gt;
&lt;br /&gt;
Natürlich spielt der Verwendungszweck eine entscheidende Rolle bei der Auswahl. Auf dem Labortisch, wo meist nur kleine Spannungen mit einem gemeinsamen Massebezug vorkommen, werden andere Anforderungen an ein Oszilloskop gestellt, als z.&amp;amp;nbsp;B. im Servicebereich für Industriesteuerungsanlagen, Automatisierungstechnik, usw. Dort sind weniger hohe Abtastraten wichtig, sondern eher eine größere Anzahl Eingangskanäle, die galvanisch voneinander getrennt sind, Spannungsfestigkeit bis min. 500 Volt, sowie speziell bei Störungsanalysen, die Möglichkeit, komplexe Triggermuster einzustellen, und eine integrierte große Festplatte, um einzelne Ereignisse automatisiert über lange Zeiträume hinweg festhalten zu können. Ein Beispiel für so ein hochwertiges Gerät ist ein Yokogawa Scopecorder (DL708). Allerdings sind bei solchen Geräten die Preise nach oben hin offen.&lt;br /&gt;
&lt;br /&gt;
===  Digitale Tischoszilloskope ===&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
&lt;br /&gt;
DSO Tischoszilloskope sind die klassischen, in sich abgeschlossenen Geräte, die in der Gestaltung analogen Oszilloskopen ähneln. Daneben gibt es zum Beispiel auch PC DSOs. Viele Tischgeräte sind bereits so klein (geringe Tiefe) und leicht, dass sie zu Recht als tragbare Geräte bezeichnet werden. Beim Neukauf eines Oszilloskops sind diese Geräte die interessantesten.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile ist es üblich, dass man bereits bei Einsteigermodellen eingebaute USB oder RS-232 Schnittstellen findet und eine (häufig sehr simple) Windows-Software zur Bedienung vom PC aus oder zumindest zum Auslesen von Daten auf den PC. Ebenfalls häufig sind USB oder ähnliche Schnittstellen für USB-Memorysticks oder Speicherkarten zum Speichern von Messwerten, Screenshots und Konfigurationen. Ironischerweise sind Schnittstellen und Windows-Software bei Markengeräten häufig gesondert zu erwerben, während sie bei eher unbekannten Marken kostenlos mitgeliefert werden, wenn auch die Qualität der kostenlosen Software häufig zu wünschen übrig lässt. &lt;br /&gt;
&lt;br /&gt;
Beispiele für günstige Einstiegsmodelle sind einige, aber nicht alle, Geräte von Rigol, Hantek, Owon oder Atten. Für wenig Geld erhält man für einfache Anwendungen brauchbares Oszilloskop mit ein paar Highlights aber auch auffälligen Einschränkungen und Fehlern in der Hard- und Software. Viel oder überhaupt Service kann man von diesen Firmen für sein Geld nicht erwarten.&lt;br /&gt;
&lt;br /&gt;
Geräte von [http://www.instek.com/] sind etwas teurer. Geräte aus der GDS-1000A oder GDS-1000U Serie dürften zum Einstieg interessant sein.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für ein Einstiegsmodell war das [http://www.tek.com/site/ps/0,,40-15314-INTRO_EN,00.html TDS1002] von Tektronix (ca. 1200 Euro). Dazu muss man allerdings sagen, dass Tektronix die aktuelle Entwicklung etwas verschlafen hat. Der nur 2 kByte große Speicher ist einfach nicht mehr zeitgemäß. Geräte der [http://www.home.agilent.com/agilent/product.jspx?nid=-33575.0&amp;amp;cc=DE&amp;amp;lc=ger&amp;amp;pageMode=OV Agilent InfiniiVision 2000X Serie] beginnen in einem ähnlichen Preisbereich aber mit wesentlich mehr Features.&lt;br /&gt;
&lt;br /&gt;
==== Vergleichstabelle digitale Tischoszilloskope ====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;digitaloszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=78 DSO5102B]&lt;br /&gt;
| [http://www.hantek.com.cn/english/ Hantek]&lt;br /&gt;
| mit sehr viel Glück auf eBay 390 + Zoll + Umsatzsteuer ... 520&lt;br /&gt;
| 2&lt;br /&gt;
| 500/1000&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800 x 480, 7&amp;quot; (die auch genutzt werden)&lt;br /&gt;
| 1 x USB Geräte- und 1 x USB Host-Schnittstelle&lt;br /&gt;
| Beliebt, da es einen Hack auf 200 MHz gibt. Ebenso diverse Hacks an der Hardware. Für ein Niedrigpreis-Produkt übliche und verzeihbare Hardware- und Firmware-Macken. Auch als Tekway DST1102B oder Protek 3110 im Handel.&lt;br /&gt;
|-&lt;br /&gt;
| DSO3062A||Agilent||800||2||500 ||60||8||4k||320x240||USB||weitgehend baugleich mit Rigol DS5000&lt;br /&gt;
|-&lt;br /&gt;
| InfiniiVision 2000 X Serie||Agilent|| 950 - 2600 (MSO) ||2 - 4||1 G/Kanal. Bei Benutzung der Hälfte aller Kanäle 2G/Kanal|| 70 - 200 || 8 || 100k || 800 x 480, 8,5&amp;quot;|| ||Markengeräte mit exzellentem Preis-Leistungs-Verhältnis. Software-Aufrüstbar (Funktionsgenerator, Protokoll-Dekoder, usw.)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products_ds1000d.aspx DS1000 Serie]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| 600 - 1650&lt;br /&gt;
| 2&lt;br /&gt;
| 400/200&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 25-100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol DS1052E]]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| ab 260 Euro + Zoll + Umsatzsteuer (ebay China)&lt;br /&gt;
| 2&lt;br /&gt;
| 1000/500&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 50 (100=DS1102E)&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator = DS1052D (DS1102D). Im Netz kursieren diverse, mehr oder weniger ernst zu nehmende Anleitungen, wie man ein DS1052E per Software auf ein DS1102E umrüsten kann.&lt;br /&gt;
|-&lt;br /&gt;
| Owon PDS Serie&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 299,- (PDS5022S); 495,- (PDS6062T); 570,- (PDS7102T)&lt;br /&gt;
| 2&lt;br /&gt;
| 100 - 500&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 5k pro Kanal&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB, seriell incl.&lt;br /&gt;
| Qualität entspricht Preis. Relativ unausgewogenes Verhältnis von Bandbreite zu Samplingrate. Geräte mit einem &#039;S&#039; am Ende der Typenbezeichnung haben ein STN LCD mit niedriger Qualität.&amp;lt;br&amp;gt;nur Real-Time Sampling&lt;br /&gt;
|-&lt;br /&gt;
| [http://owon.com.cn/eng/smartDS.asp Owon SDS Serie]&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 400 (SDS7102)&lt;br /&gt;
| 2&lt;br /&gt;
| 500 M - 3.2 G&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 10M/Kanal&lt;br /&gt;
| 800 x 600, 8&amp;quot;&lt;br /&gt;
| USB Host und Slave, seriell incl., Ethernet, VGA&lt;br /&gt;
| Deutliche Verbesserung gegenüber der alten PDS-Serie. Beeindruckende Speichertiefe (10M) und Bildschirm (8&amp;quot;). Für ein Niedrigpreis-Produkt übliche Hardware- und Firmware-Macken. Neuere Geräte mit verbessertem Hardwaredesign, Firmware wird regelmäßig aktualisiert, menülastige, gewöhnugsbedürftige Bedienung. Akkubetrieb optional&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000 Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 350 - 550&amp;lt;br&amp;gt;(Conrad: 475 - 950)&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 4k&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| Von Conrad teurer als DSO-4000 Serie erhältlich.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000&#039;&#039;&#039;A&#039;&#039;&#039; Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 500 - ?&lt;br /&gt;
| 2&lt;br /&gt;
| bis 1GS/s&lt;br /&gt;
| 60 - 150&lt;br /&gt;
| 8&lt;br /&gt;
| bis 2M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| [http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.instek.com/html/en/products-l.asp?p1sn=17&amp;amp;p2sn=41 GW Instek GDS-2000 Serie]&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 850 - 1800&lt;br /&gt;
| 2 - 4&lt;br /&gt;
| 1000&lt;br /&gt;
| 60 - 200&lt;br /&gt;
| 8&lt;br /&gt;
| max. 5000 (alle Kanäle benutzt) / 25000 (ein Kanal in Benutzung)&lt;br /&gt;
| 320x234&lt;br /&gt;
| Inkl. USB (Geräte-Modus zum PC, zwei weitere USB-Buchsen Host-Modus für eine Speicherkarte oder Drucker), RS-232&lt;br /&gt;
| Weitgehend baugleich mit Conrad Voltcraft DSO-8000 Serie. Vier-Kanal Versionen haben keinen externen Trigger und weniger Trigger-Funktionen.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| TDS-1002B&lt;br /&gt;
| Tektronix&lt;br /&gt;
| 1100&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 2.5k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verhältnismäßig starkes Rauschen, siehe Text oben&lt;br /&gt;
|-&lt;br /&gt;
| WaveJet 3xx&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 2800..8000 (brutto)&lt;br /&gt;
| 2 oder 4&lt;br /&gt;
| 1000/2000&lt;br /&gt;
| 100/200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 500k&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verfügbar z.&amp;amp;nbsp;B. bei Farnell&lt;br /&gt;
|-&lt;br /&gt;
| WaveAce Serie&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 1000 - 3500&lt;br /&gt;
| 2&lt;br /&gt;
| 250 - 2000&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 4k - 8k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB (Geräte- und Host-Modus), RS-232(?)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dlm2000.de DLM20XX]&lt;br /&gt;
| YOKOGAWA &lt;br /&gt;
| 3300..8000 (brutto)&lt;br /&gt;
| 2 oder 4 (3+1) wobei 1 wahlweise 8Kanal Digital ist&lt;br /&gt;
| 2500 (1250)&lt;br /&gt;
| 200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 12,5MPts&lt;br /&gt;
| 1024x768&lt;br /&gt;
| USB, Ethernet, Browsersteuerung inkl.&lt;br /&gt;
| Vertrieb vom Hersteller direkt!&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UT2025B.html UNI-T UT2025B] / Voltcraft DSO-1022 M&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 290 - 356&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 512k/Kanal&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 320x240 (Monochrom)&lt;br /&gt;
| USB, RS-232.&lt;br /&gt;
| Als UT2025&#039;&#039;&#039;C&#039;&#039;&#039; mit Farbdisplay. UT2000 Serie 25-200MHz, 2CH 250MSa/s bis 1GSa/s&amp;lt;br&amp;gt;wenig Rauschen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UTD2052CEL.html UTD2052CEL]&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 369,-&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 50&lt;br /&gt;
| 8&lt;br /&gt;
| 2x600k &#039;&#039;recording length&#039;&#039;;&amp;lt;br&amp;gt;25k &#039;&#039;saving depth&#039;&#039; ein Kanal;&amp;lt;br&amp;gt;12,5k &#039;&#039;memory depth&#039;&#039; zwei Kanäle&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 800 x 480&amp;lt;br&amp;gt;Der Displaycontroller faßt immer 2x2 Pixel zusammen, dadurch reduziert sich die Auflösung real auf 400 x 240&amp;lt;br&amp;gt;(Menü nimmt relativ viel Platz auf dem Bildschirm ein)&lt;br /&gt;
| USB&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM2008&lt;br /&gt;
| [http://www.hameg.com Hameg]&lt;br /&gt;
| 2000&lt;br /&gt;
| 2&lt;br /&gt;
| 2GSa/s(1CH)1GSa/s(2CH)&lt;br /&gt;
| 200&lt;br /&gt;
| 8&lt;br /&gt;
| 4048k&lt;br /&gt;
| Röhre 8x10cm&lt;br /&gt;
| USB für Speicherstick (vorne), USB/RS232 für PC (hinten), &lt;br /&gt;
| 4 Logikkanäle nachrüstbar, Ethernet/USB nachrüstbar&lt;br /&gt;
|-&lt;br /&gt;
| PT 1200&lt;br /&gt;
| [http://www.PEAKTECH.de Peaktech]&lt;br /&gt;
| ca. 360&lt;br /&gt;
| 2&lt;br /&gt;
| 100MSa/s(1CH)100MSa/s(2CH)&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 6k pro Kanal&lt;br /&gt;
| Farb LCD 7,8&amp;quot; 640x480&lt;br /&gt;
| USB für PC (hinten) &lt;br /&gt;
| Im Original vermutlich ein Owon PDS5022S. Optional: Akkupack 7,4 V ~ 8000 mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Marken, die gelegentlich auf dem deutschen Markt auftauchen, häufig über eBay, sind &lt;br /&gt;
&lt;br /&gt;
* GAOtek&lt;br /&gt;
* Hangzhou Jingce (JC)&lt;br /&gt;
* Tonghui&lt;br /&gt;
* Ypioneer&lt;br /&gt;
* Jiangsu Lvyang&lt;br /&gt;
* Siglent (Zweitmarke von Atten)&lt;br /&gt;
&lt;br /&gt;
Über deren Qualität hört man wenig oder gar nichts.&lt;br /&gt;
&lt;br /&gt;
=== PC-Oszilloskope ===&lt;br /&gt;
==== PC-Zusätze ====&lt;br /&gt;
===== Allgemeines &amp;amp; Beachtenswertes =====&lt;br /&gt;
&lt;br /&gt;
PC-Oszilloskope / PC-Zusätze sind im Prinzip digitale Speicheroszilloskope, mit der Besonderheit, dass sie die Daten nicht selbst anzeigen, sondern an einen PC übermitteln. Beim Kauf eines PC-Oszilloskops sollte man besonders vorsichtig sein, da viele Angebote irreführende Informationen enthalten. Sehr beliebt ist z.&amp;amp;nbsp;B. die Werbung mit der Analogbandbreite, also die Bandbreite die der Analogteil der Schaltung (Eingangsverstärker) verarbeiten kann. Wenn hier 100 MHz angegeben sind bedeutet das aber nicht, dass sich auch wirklich Signale bis 100 MHz darstellen lassen; wenn der Wandler nur mit 40 MS/s abtastet ist das Oszilloskop gerade noch bis 4 MHz verwendbar. Ebenso sollte man nur die Echtzeit- oder Realtime-Abtastrate beachten, eine manchmal ebenfalls angegebene &amp;quot;Äquivalent-Abtastrate&amp;quot; ist nur bei periodischen Signalen zu gebrauchen und damit im Umfeld von Mikrocontrollern meist wertlos.&lt;br /&gt;
&lt;br /&gt;
Die Wahl zwischen einem Tischoszilloskop und einem PC-Zusatz ist nicht nur eine Geld-, Leistungs- oder Qualitätsfrage. Ein Tischgerät lässt sich anders bedienen (echte Knöpfe, sicherer Stand) und belegt nicht den PC oder Laptop. Erfahrene Entwickler ziehen ein separates Gerät einem PC-Zusatz vor. Zum Teil ist dies eine Generationsfrage.&lt;br /&gt;
&lt;br /&gt;
Hinzu kommt, dass billige PC-Oszilloskope meist keine galvanische Trennung an ihrer USB-Schnittstelle besitzen. Ein Fehler bei einer Messung kann daher nicht nur das Oszilloskop, sondern gleich den PC mit beschädigen. Das gleiche Problem kann man übrigens auch bei einfachen Tischoszilloskopen mit PC-Schnittstelle haben. Allerdings kann man Tischgeräte auch ohne die PC-Verbindung betreiben, PC-Oszilloskope nicht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich wird geraten, das Oszilloskop, egal ob Tischgerät oder PC-Zusatz, immer über einen &amp;quot;self powered&amp;quot; USB-Hub (einer mit eigenem Netzteil) mit dem PC zu verbinden. Ob ein solcher Hub als Schutzmaßnahme geeignet ist, besonders zum Personenschutz, sei dahingestellt. Schaden sollte er nicht.&lt;br /&gt;
&lt;br /&gt;
Besonders zu beachten ist die PC-Software. Nicht nur, ob sie zum Zeitpunkt des Kaufs wenigstens grundsätzlichen Ansprüchen genügt, sondern auch, ob der Hersteller vermutlich willens und in der Lage ist, die Software über viele Jahre zu warten. Stichwort Investitionssicherheit. Ohne Wartung kann eine Inkompatibilität in der Software zum nächste Windows Service-Pack oder zur nächste Windows-Version das Gerät völlig entwerten.&lt;br /&gt;
&lt;br /&gt;
Leider ist es so, dass es fast keine freie [[Oszilloskop#Software|Oszilloskopsoftware]] gibt. Die Protokolle zwischen Oszilloskop-Vorsätzen und Computer sind meist proprietär, und selten hat sich ein Entwickler freier Software die Mühe gemacht, ein Protokoll zu entschlüsseln. Noch seltener ist es, dass auf dieser Basis eine brauchbare oder gar gute Software geschrieben wurde. So ist ein Ausweichen auf freie Software kaum möglich, sollte der Hersteller die Wartung aufgeben. Man ist im Normalfall auf Gedeih und Verderb dem Hersteller ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
===== Vergleichstabelle PC-Zusätze =====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pczusatzoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Sample&amp;amp;shy;rate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Band&amp;amp;shy;breite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auf&amp;amp;shy;lösung [Bit]&lt;br /&gt;
! Speicher&amp;amp;shy;tiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Inter&amp;amp;shy;face&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.elandigitalsystems.com/support/usbtmfaq/software.php USBscope50]&lt;br /&gt;
| Elan Digital Systems / dt. Vertrieb Hacker&lt;br /&gt;
| 249&lt;br /&gt;
| 1 (-4)&lt;br /&gt;
| 50 / 1000&lt;br /&gt;
| 10 / 75&lt;br /&gt;
| 8&lt;br /&gt;
| 3k pro Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| CAT II, 300V galv. Trennung zu USB, OpenSource SDK, Java, Linux, LabView&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2104&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 185&lt;br /&gt;
| 1&lt;br /&gt;
| 50&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
| 8K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2105&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 290&lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 24K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2205&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 350&lt;br /&gt;
| 2&lt;br /&gt;
| 200&lt;br /&gt;
| 25&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 16K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=62 DSO-2090 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| 1 Kanal: 100 / 2 Kanäle: 50&lt;br /&gt;
| 40&lt;br /&gt;
| 8&lt;br /&gt;
| 1 Kanal: 64K / 2 Kanäle: 32K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Wenige Vorteile gegenüber einem Tischgerät. Analogbandbreite bei der Samplingrate nicht ausnutzbar. Kleiner Eingangsspannungsbereich. Unter diversen anderen Namen erhältlich.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=63 DSO-2150 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| max. 150&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-32K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=64 DSO-2250 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.  &lt;br /&gt;
| 220&lt;br /&gt;
| 2&lt;br /&gt;
| max. 250&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-512K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| Mephisto Scope 1 (UM202)&lt;br /&gt;
| Meilhaus&lt;br /&gt;
| 333&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 16&lt;br /&gt;
| 256K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
| 5 in 1,&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Voltmeter,&lt;br /&gt;
Datenlogger analog und digital,&lt;br /&gt;
Digital-I/O&lt;br /&gt;
|-&lt;br /&gt;
| MSO-19&lt;br /&gt;
| Link Instruments Inc.&lt;br /&gt;
| 172&lt;br /&gt;
| 1&lt;br /&gt;
| 200&lt;br /&gt;
| 60&lt;br /&gt;
| ??&lt;br /&gt;
| 1K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
|&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Pattern Generator,&lt;br /&gt;
TDR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Soundkarten-Oszilloskope ====&lt;br /&gt;
[[Bild:Soundoszi.JPG|thumb|right|300px|Soundkarten Oszilloskop]]&lt;br /&gt;
Wem ein wirklich einfaches Oszilloskop für kleine Frequenzen (bis etwa 20 kHz) ausreicht, bspw. um die Kommunikation am I2C-Bus zu analysieren, kann dazu die Soundkarte des PC benutzen.&lt;br /&gt;
Allerdings eignet sich eine Soundkarte nicht dazu, Gleichspannungen zu messen, zu niederfrequente Signale können daher nicht damit erfasst werden: Im Screenshot nebenan erkennt man das z.&amp;amp;nbsp;B. an der fallenden Gerade am Schluss (obwohl der tatsächliche Signalpegel konstant oben bleibt). Auch ist hier besondere Vorsicht geboten, da Soundkarten nur für geringe Spannungen ausgelegt sind und bei einer zu hohen Eingangsspannung möglicherweise der ganze PC beschädigt wird. Daher ist eine Vorschaltung mit Spannungsbegrenzung (ca 0,7V) nötig. &lt;br /&gt;
&lt;br /&gt;
Der Vorteil der Soundkartennutzung ist, dass es sich dank des PCs um eine Art  Speicheroszilloskop handelt und die Daten zum Beispiel in Excel analysiert werden können.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scheidig.de/Deutsch/Download/SpekOszi/info.htm Hardy u. Karola Scheidig] verschiedene Programme zum Messen mit der Soundkarte.&lt;br /&gt;
* [http://www.sillanumsoft.org/ Visual Analyser] von Alfredo Accattatis und der University of Rome Tor Vergata, &amp;quot;Donateware&amp;quot; &lt;br /&gt;
* [http://www.zeitnitz.de/Christian/scope_en Soundcard Oscilloscope für Windows] von Christian Zeitnitz, kostenlos für Privatanwendung&lt;br /&gt;
* [http://www.qsl.net/dl4yhf/spectra1.html Spectrum Lab von DL4YHF]&lt;br /&gt;
* [http://w5big.com/spectrogram.htm Spectrogram] von R.S. Horne, ältere Version kostenlos&lt;br /&gt;
* [http://www.audiotester.de/ Audiotester 30-Tage-Version kostenlos]&lt;br /&gt;
* [http://www.dasylab.com/ DasyLab] Eingeschränkte Version (Soundkarte und serielle Schnittstelle) als Beilage zum Buch &amp;quot;Signale-Prozesse-Systeme&amp;quot; ISBN 9783642018633&lt;br /&gt;
* [http://www.zelscope.com/ Zelscope] von Constantin Zeldovich 14-Tage Evaluationsversion&lt;br /&gt;
* [http://www.dxzone.com/catalog/Software/Spectrum_analyzers/ Linksammlung]&lt;br /&gt;
==== Grafikkarten-Oszilloskope ====&lt;br /&gt;
Videokarten, die über einen analogen Input verfügen, stellen ebenfalls eine Alternative zu käuflichen Oszilloskopen dar, da sie 3kanalig Frequenzen bis rund 180 MHz verarbeiten können. Die digitale Auflösung liegt meist bei 8 Bit maximal, was für einfache Anzeigen jedoch reicht, wenn die Aussteuerung entsprechend ist. Durch Übersampeln lässt sich die Auflösung wie gehabt steigern, indem man z.B. je 4 Werte softwareseitig zusammenfasst und damit bis zu 2 Bit an Auflösung gewinnt. Bei 16 werten kann man in der Regel statistische 2-3 Bit erwarten und erhält eine Güte von ca 10 Bit bei 10MHz.&lt;br /&gt;
&lt;br /&gt;
=== Selbstbau ===&lt;br /&gt;
&lt;br /&gt;
Selbstbau eines solchen Gerätes erspart wie fast immer in solchen Fällen kein Geld, sofern man nicht eine Spezialfunktion benötigt, die im Markt nicht beschaffbar ist. Der Spaß liegt als wieder im Bauen selbst.&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse preiswerte Bausätze für Spielzeug-Oszilloskope. Die Ergebnisse nach dem Zusammenbau sind als Oszilloskop wenig brauchbar. &lt;br /&gt;
&lt;br /&gt;
Daneben findet man nur sehr wenige Selbstbau-Projekte deren Ergebnisse überzeugen. Einige interessante Projekte sind [http://www.mikrocontroller.net/topic/228997?goto=new#2308320]n und [http://www.ssalewski.de/DAD.html.de]. Dazu sei allerdings gesagt, dass der Aufwand an Material und Messmitteln schnell die Kosten für ein fertiges Oszilloskop überschreitet.&lt;br /&gt;
&lt;br /&gt;
=== Umbau ===&lt;br /&gt;
Sofern man tatsächlich etwas benötigt, was nicht käuflich zu erwerben ist, kann der Kauf und Umbau eines verhandenen Gerätes sinnvoll sein. &lt;br /&gt;
&lt;br /&gt;
Auf eBay werden immer noch die Oszilloskope der früheren Firma Wittig (heute Welec), wie zum Beispiel das W2012A, angeboten. Als Alternative zu der fehlerträchtigen Orginalfirmware ist mittlerweile eine Open-Source Variante verfügbar die kontinuierlich weiterentwickelt wird. Ebenfalls wird an Hardware Erweiterungen gearbeitet die die Qualität des Oszilloskops deutlich steigern. Wer sich nicht sicher ist ob das Gerät seinen Ansprüchen genügt sollte bei den Entwicklern nachfragen. [http://sourceforge.net/apps/trac/welecw2000a/wiki] Auch hier ist der Weg das Ziel.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR_Softwarepool#Oszilloskop|AVR Softwarepool: Oszilloskop]]&lt;br /&gt;
* [[Einfaches Oszilloskop mit Bascom-AVR]]&lt;br /&gt;
* [[USB_Oszilloskop]]&lt;br /&gt;
* [[Logic_Analyzer]]&lt;br /&gt;
* [[LCS-1M - Ein einfaches, preiswertes, mikrokontrollergesteuertes Zweikanal-Oszilloskop zum Selberbauen]] ([[Picaxe]])&lt;br /&gt;
&lt;br /&gt;
== Links &amp;amp; Literatur ==&lt;br /&gt;
* [http://www.elektronikpraxis.vogel.de/index.cfm?pid=9681 Online-Dossier Grundlagen digitaler Oszilloskope. ] Veröffentlicht auf Elektronikpraxis online&lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/XYZs/03W_8605_3.pdf XYZs of Oscilloscopes Primer]. Tektronix 03W-8605-3. 20091. Grundlagen digitaler Oszilloskope und das messen mit ihnen, wobei die Tektronix-Produktpalette im Vordergrund steht.  &lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/ABCsProbes/60W_6053_9.pdf ABCs of Probes Primer]. Tektronix 60W-6053-9. 2009. Die Grundlagen von Tastköpfen, natürlich am Beispiel von Tektronixs Tastköpfen.&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/1?filter=oszi*+-oszillator Forum-Beiträge zum Thema Oszilloskop] (Kaufberatung, Anwendung)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/3?filter=oszi*+-oszillator Beiträge im Markt-Forum]&lt;br /&gt;
* [http://www.virtuelles-oszilloskop.de/ Ein virtuelles interaktives Oszilloskop] ala HAMEG HM203-6 20 MHz zum Üben (Seite auf [http://www.virtuelles-oszilloskop.com Englisch])&lt;br /&gt;
* [http://www.eosystems.ro/eoscope/eoscope_en.htm Selbstbau-DSO 40MSPS]&lt;br /&gt;
* [http://www.sigcon.com/Pubs/straight/probes.htm Probing High-Speed Digital Designs], Originally published in [http://www.elecdesign.com/ Electronic Design Magazine], March, 1997&lt;br /&gt;
* [http://hackedgadgets.com/2007/12/10/oscilloscope-tutorials/ Oscilloscope Tutorials] Linkliste bei hackedgadgets.com&lt;br /&gt;
* [http://www.eevblog.com/2011/03/30/eevblog-159-oscilloscope-trigger-holdoff-tutorial/ EEVBlog #159] Videotutorial von Dave Jones zu &#039;&#039;&#039;Trigger Holdoff&#039;&#039;&#039;, (engl.)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/167705#1602827 WinXP Software für OsziFox/ProbeScope] von  Micha B. (chameo)&lt;br /&gt;
&lt;br /&gt;
* [http://users.physik.fu-berlin.de/~jtt/fsc2.phtml fsc2] is a program running under GNU/Linux for controlling spectrometers. Supported devices include digitizing oscilloscopes too:&lt;br /&gt;
** Tektronix Digitizing Oscilloscope TDS520, TDS520A, TDS520C, TDS540, TDS744A and TDS754A&lt;br /&gt;
** LeCroy Digitizing Oscilloscope 9400, 9410, 9420, 9424, 9424e and 9450(A)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope Waverunner and Waverunner-2 (LT224, LT 262, LT264, LT342, LT344, LT354, LT362, LT364, LT372, LT374, LT584, 44(M)Xi, 62X1, 64(M)Xi, 104(M)Xi, 204(M)Xi)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope WaveSurfer (422, 424, 432, 434, 452 and 454)&lt;br /&gt;
&lt;br /&gt;
* [http://xoscope.sourceforge.net/ xoscope, oscope] is a digital oscilloscope using input from a sound card or EsounD and/or a ProbeScope/osziFOX and Bitscope hardware. Includes 8 signal displays, variable time scale, math,memory, measurements, and file save/load. (Linux, GPL)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mtoussaint.de/qtdso.html QtDSO] is a frontend for the Velleman PCS64i digital oscilloscope (Anm.: Velleman nicht mehr unterstützt) It provides a fully featured oscillocope mode (including XY  plot and math) and a highly configurable spectrum analyzer mode. Für &#039;&#039;&#039;Digitalmultimeter&#039;&#039;&#039; gibt es vom gleichen Autor [http://www.mtoussaint.de/qtdmm.html QtDMM] und [http://www.mtoussaint.de/qtdmm2.html QtDMM2].&lt;br /&gt;
&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html Osqoop] est un oscilloscope logiciel sous licence libre. Il permet de travailler sur un nombre arbitraire de canaux et des acquisitions de longue durée. Wiki description: [http://gitorious.org/osqoop Osqoop] is a multi-platform open source software oscilloscope based on Qt 4. It connects to various hardware data sources such as the sound input or a dedicated USB board.&lt;br /&gt;
&lt;br /&gt;
*[http://code.google.com/p/gds2000tools/ gds2000tools] ist eine Linux-Software für GW-Instek GDS-2000 und andere GW-Instek Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/xoscillo/ Xoscillo] - A software oscilloscope that acquires data using an Arduino or a Parallax (more platforms to come). (Lizenz: CC-BY-NC-SA 3.0; Windows and Linux (needs mono))&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/oscope2100/ Oscope 2100] Linux software für Hantek DSO-2100.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/openhantek/ OpenHantek] Linux Software für Hantek (Voltcraft/Darkwire/Protek/Acetech) DSO-2090.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/dsoda/ Digital Soda] DSO-2250 Software.&lt;br /&gt;
&lt;br /&gt;
* [http://owondriver.sourceforge.net/ Owon Driver, Ownon Dump] Linux-Treiber für Owon-Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [http://foss.doredevelopment.dk/wiki/Lxi-control Lxi-Control] Kommandozeilen-Applikation zur Fernsteuerung von Geräten mit LXI-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://gpib-utils.sourceforge.net/ gpib-util] Linux Kommandozeilen-Applikation, unterstützt diverse Oszilloskope (und andere Geräte) mit GPIB-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/vxi11/ VXI11] Bibliothek und Programme für Geräte mit VXI-11 Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/wfmreader/ Linux WFM Datenformat-Leser].&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
&lt;br /&gt;
Bei Oszilloskopen (DSOs), die es erlauben, die gemessenen Daten zu einem PC zu übertragen, kann man die Messwerte auf dem PC weiter auswerten. Zum Beispiel ein Signal demodulieren, filtern oder dekodieren. Grundsätzlich ist die Auswertung in jeder Programmiersprache möglich. Programmiersprachen für numerische Berechnungen eignen sich jedoch besonders.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com Matlab] und Clones wie [http://www.scilab.org/ SciLab] oder [http://www.gnu.org/software/octave/ GNU Octave]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com/matlabcentral/fileexchange/?term=Oscilloscope Matlabcentral Fileexchange, Suche nach &#039;&#039;Oscilloscope&#039;&#039;] Auf Matlabcentral Fileexchange finden sich auch MatLab Lese- und Auswertungsfunktionen für diverse Oszilloskope. Hinweis: Die von MatLab für die Kommunikation mit einem Oszilloskop verwendeten Toolboxen und Funktionen fehlen häufig bei den Clones wie GNU Octave. Man ist hier auf das original MatLab angewiesen.&lt;br /&gt;
&lt;br /&gt;
* Eines Ingenieurs angeblich unwürdig&amp;lt;ref&amp;gt;Es ist sehr einfach Fehler in Tabellenkalkulationen zu machen, die typischerweise lange unentdeckt bleiben. [http://www.eusprig.org/ Untersuchungen] haben gezeigt, dass bereits dann bis zu 90% aller Tabellenkalkulationsblätter fehlerhaft sind, wenn es nur um einfache mathematische Grundoperationen (Addieren, Subtrahieren, Multiplizieren, Dividieren) geht.&amp;lt;/ref&amp;gt; sind Microsoft Excel oder andere Tabellenkalkulationen. Trotzdem sind sie zur Datenauswertung populär und auch geeignet, wenn sie richtig gehandhabt werden.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70252</id>
		<title>Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70252"/>
		<updated>2012-12-26T17:41:14Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Selbstbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Oszilloskop&#039;&#039;&#039; dient zur grafischen Darstellung des Spannungsverlaufs eines oder mehrerer elektischen Signale in einem einstellbaren Zeitfenster. Es ist das wichtigste Werkzeug der Elektotechniker.&lt;br /&gt;
&lt;br /&gt;
== Anfragen bezüglich Kaufberatung im Forum ==&lt;br /&gt;
&lt;br /&gt;
=== Kritik an den Anfragen ===&lt;br /&gt;
Im Forum finden sich regelmäßig Anfragen nach individueller Beratung zum Oszilloskopkauf. Die Anzahl solcher Oszilloskop-Threads hat schon lange die 1000 überschritten. Sie sind langweilig, eine Qual und oft unnütz - besonders dann, wenn sich der Fragesteller offebar nicht mit den Grundlagen eines Oszilloskops und den wichtigsten Kennzahlen bekanntgemacht hat oder nicht einaml weiß, was er überhaupt messen will. Auch, wenn ein Fragesteller ein paar Grundlagen besitzt, hat er anscheinend meistens keine Lust, verständlich darzustellen, was er genau will und lässt sich stattdessen umstädnlich befragen.&lt;br /&gt;
&lt;br /&gt;
Den meisten regelmäßigen Forumsteilnehmern ist daher gründlich die Lust an Oszilloskop-Threads vergangen. Dort &amp;quot;diskutieren&amp;quot; eigentlich nur noch Trolle und anonyme Gäste, die oft genug nur Werbung über Billigangebote über die x-te Ausgabe einer billigen, als Oszilloskop bezeichneten Plastikkiste, einem suupertollen eBay-Schnäppchen oder angeblicher asiatischer Wundertüten.&lt;br /&gt;
&lt;br /&gt;
==== Links für Anfänger ====&lt;br /&gt;
Wer sich ernsthafte Beratung wüsncht und eine &amp;quot;sanfte&amp;quot; Einführung in das Thema sucht, kann sich die englischsprachige YouTube-Videos von AfroTechMods anschauen:&lt;br /&gt;
&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials/ http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials]&lt;br /&gt;
&lt;br /&gt;
Dazu passt auch sein Tutorial über Funktionsgeneratoren:&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial/ http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial].&lt;br /&gt;
&lt;br /&gt;
===Maßgeschneidert?===&lt;br /&gt;
Besonders die immer wiederkehrende Forderung, dass es unbedingt das maßgeschneiderte Oszilloskop zum Superpreis genau für den Fragesteller geben muss, ist sinnlos. Wer mit diesem Anspruch kommt, der wird enttäuscht werden. Das gibt es nicht, und gute Oszilloskope kosten Geld, da qualitativ hochwertige Geräte keine Massenware sind. Lediglich billige Geräte werden in grosser Zahl hergestellt und sind entsprechend preiswert, diese sind jedoch für anspruchsvoll Anweder meist untauglich, da genau an den wichtigen Dingen gespart und nur auf Optik gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
===Gebraucht ist auch keine Lösung===&lt;br /&gt;
Es gibt eine Reihe von gebrauchte Oszilloskopen- vorwiegend im Internet, von den die meisten billig sind. Da niemand per Ferndiagnose oder Blick in eine Glaskugel in ein gebrauchtes Gerät hineinsehen und etwas über den Zustand berichten kann, besteht immer das typische Risiko eines Kaufs asu zweiter Hand, das jeder selber tragen muss. Niemand im Forum kann und wird das jemandem abnehmen. &lt;br /&gt;
&lt;br /&gt;
Was man allgemein sagen kann, ist, dass man besser die Finger von Angeboten lassen sollte, wenn der Verkäufer mit den übliche Phrasen wie, &amp;quot;Dachbodenfund&amp;quot;, &amp;quot;Keine Ahnung davon&amp;quot;, &amp;quot;Keine Möglichkeit zu testen&amp;quot; kommt. Vorsicht ist auch bei dem beliebten Trick &amp;quot;Funktioniert, aber aus rechtlichen Gründen (Garantie) verkaufe ich es als defekt, für Bastler&amp;quot; gegeben. Man muss sich immer vor Augen führen, dass niemand ein gutes und wertvolles Gerät dieser Art zum Billigpreis abgegeben wird und dies schon garnicht über Internetplattformen, wo es kaum einen Markt für Topgeräte gibt. Gute gebrauchte Geräte gibt es von privat daher nur auf Elektronikbörsen zu entsprechenden Preisen.&lt;br /&gt;
&lt;br /&gt;
Es gibt demgemäss natürlich auch Geräte von seriösen Gebrauchthändlern mit Garantie - allerdings ebenso zu derartigen Preisen, dass dagegen der Kauf eines aktuellen Neugeräts ebenfalls attraktiv erscheint.&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen? ===&lt;br /&gt;
Eine Vorgehensweise, von der man auch abraten muss, ist die Frage nach Erfahrungen anderer Mitglieder! Die meisten Antworten kommen von Trollen und Posern, die eigentlich keine Ahnung haben. Die einen wollen als anonymer Gast mal wieder trollen, die anderen wollen nur mitteilen, dass Amateurfunker sowieso die besseren Menschen sind. Andere wiederum haben &amp;quot;zufällig&amp;quot; gerade *das* richtige Oszilloskop zu verkaufen. Dann gibt es noch die, die sich ihr eigenes Oszilloskop schönreden wollen, ihren Vorurteilen oder ihrem Fetisch frönen. Zum Beispiel&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Kauf ja kein Gerät aus Asien!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Unter LeCroy|Agilent|Yokogawa|Tektronix geht gar nichts!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Nur Gebrauchtgeräte lohnen sich!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hinweise wie &#039;&#039;mein vor 30 Jahren gekauftes Markengerät funktioniert noch heute tadellos&#039;&#039; sind ebenfalls ziemlich sinnlos. Der Hersteller wird dieses Gerät gar nicht mehr anbieten und er wird schon gar nicht mehr mit der gleichen Qualität fertigen, wie vor 30 Jahren. Dazu ist der Kostendruck zu hoch und Technologien haben sich geändert. Selten sind die neuen Technologien heute so robust, wie die vor 30 Jahren.&lt;br /&gt;
&lt;br /&gt;
Als Unerfahrener kann man daher aus den Antworten nicht herauslesen, ob sie wirklich auf Erfahrung beruhen. Man braucht also gewissermassen selbst Erfahrung, um die Erfahrungsberichte anderer richtig einzuordnen.&lt;br /&gt;
&lt;br /&gt;
Ein anderer Aspekt aus alten Threads ist, dass viele Fragesteller die Erfahrungen gar nicht zur Kenntnis nehmen wollen, wenn sie der eigenen Wunschvorstellung widersprechen. So etwas nennt man beratungsresistent. Da stellt sich schon mal heraus, dass der Fragesteller schon längst ein Gerät bestellt hat und jetzt gebauchpinselt werden will. Eine Zeitverschwendung für alle.&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit eigenen Geräten lassen bedingt den Schluss zu, welche&lt;br /&gt;
Marken grundsätzlich empfehlenswert sind, weil dort gegebenenfalls mehr auf Qualität geachtet wird.&lt;br /&gt;
&lt;br /&gt;
=== Zusatzkosten beim Kauf im Ausland ===&lt;br /&gt;
Beim Kauf eines scheinbar preisgünstigen Gerätes im Ausland ist Folgendes zu beachten:&lt;br /&gt;
&lt;br /&gt;
Versandkosten, Einfuhrumsatzsteuer, Zoll, e.v. Gebühr für den Paketdienst und die Gebühren für die  Währungsumrechnung sind Kosten, die bei vielen vermeintlichen Internet-Schnäppchen aus dem Ausland (besonders Nicht-EU) noch hinzukommen und bei plakativen Überschriften gerne &amp;quot;vergessen&amp;quot; oder ignoriert werden. Oft wird sich das Angebot selbst schöngeredet. Zudem sind das nicht einmmal alle Kosten, die man zu tragen hat. Zum Beispiel können für manche Zahlungsweisen weitere Gebühren hinzukommen oder Lagergebühren im Zolllager.&lt;br /&gt;
&lt;br /&gt;
Wer nicht vorher rechnet, hat nachher schnell mehr bezahlt als bei einem lokalen Händler. Siehe auch [http://www.zoll.de Zoll].&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist der deutsche Zoll nicht doof. Besonders wenn ein asiatischer Versender auf ein Paket bei der Zollerklärung &amp;quot;Geschenk, Wert $40&amp;quot; schreibt, dann kann man fast sicher sein, dass der deutsche Zoll sich das genauer ansieht. Die Ware landet im Zolllager und man darf den Kaufpreis nachweisen.&lt;br /&gt;
&lt;br /&gt;
Ebenso glaubt der Zoll nicht an kostenlosen Versand und nimmt regelmäßig ziemlich saftige Versandgebühren an, die dann versteuert werden&amp;lt;ref&amp;gt;Passiert das, kann man gegen den Steuerbescheid Widerspruch einlegen. Wie das geht sollte in einer Rechtsbehelfsbelehrung auf dem Steuerbescheid stehen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nochmal zum Mitschreiben, besonders bei Käufen von außerhalb des Zollgebiets der EU sollte man sich vorher mindestens über die folgenden Kosten informieren:&lt;br /&gt;
&lt;br /&gt;
* Versandkosten oder was der Zoll sich bei kostenlosem Versand ausdenkt&lt;br /&gt;
* Versandart (was durch die Post importiert wird, wird vom Zoll anders abgefertigt, als das, was von einem Paketdienst importiert wird)&lt;br /&gt;
* Einfuhrumsatzsteuer&lt;br /&gt;
* Zoll (bei der Warengruppe, in die Oszilloskope gehören, ist der zur Zeit wohl 0%. Das kann sich natürlich ändern)&lt;br /&gt;
* Gebühr Paketdienst. Paketdienste lassen sich die Zollanmeldung und den Papierkrieg zum Teil mit saftigen Gebühren bezahlen. Die sind nicht in den Versandkosten enthalten.&lt;br /&gt;
* Gebühr für Währungsumrechnung&lt;br /&gt;
* Bankgebühr für Zahlung ins Ausland&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
Ein Kauf eines PC-basierten Messinstruments mit Oszilloskopfunktion, das in Deutschland nicht erhältlich ist und einen Kaufwert von 719,- US Dollar in Taiwan hatte, wurde aufgrund der Umrechung mit einem Wert von 589,- Euro veranschlagt. An UST kamen 112,- und an Zollgebühren 46,- Euro hinzu. Zusammen mit dem Versand und Bankgebühren kostete das Gerät insgesamt 790,- Euro. Andere Geräte des Herstellers, die in Deutschland zu beschaffen sind, kosten als deutsches Exemplar kaum mehr, dafür hat man die volle Verbrauchergarantie. Diese sind also in der Regel vorzuziehen, wenn das Gerät in Deutschland beschaffbar ist.&lt;br /&gt;
&lt;br /&gt;
===Spielzeuge aller Art===&lt;br /&gt;
Offensichtlich scheint es gerade Mode zu werden, einen schwachbrüstigen Analog-Digital-Konverter hinter eine eher zufällig gewählte, krumme analoge Eingangsschaltung zu klemmen und an einen Mikrocontroller mit Graphik-LCD anzuschließen.  Das ganze wird als digitales Speicheroszilloskop (DSO) zum Sonderpreis verkauft. Je nach Hersteller wird so ein Gerät komplett ohne Gehäuse geliefert, was mit Hinblick auf die Sicherheit sehr fragwürdig ist, oder es kommt in einem lustig aufgemachten Plastikgehäuse in MP3-Player-Format daher, das auch keine großartige Isolation bietet. Hinzu kommen eindruckschindene Namen und Logos, die die Modernität und Qualität suggerieren sollen, oft noch unterstreichen durch die Nutzung von Open-Source-Kompatibiltät.&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu richtigen Oszilloskopen sind dies leider nur Spielzeuge und es nervt, diese Dinger immer wieder im Forum als das &amp;quot;Beste seit Erfindung von geschnitten Brot&amp;quot; vorgestellt zu bekommen. Ein Blick auf die technischen Daten dieser &amp;quot;Oszilloskope&amp;quot; (sofern die Daten überhaupt angegeben werden) reicht, um festzustellen, dass man ein Spielzeug vor sich hat. Schön für den, der spielen will, schlecht für den, der sicher messen will.&lt;br /&gt;
&lt;br /&gt;
Ebenso verrät ein Blick auf die Schaltung des Analogeingangs, ob man Qualität vor sich hat. Fehlende Spannungsfestigkeit und fehlende Frequenzkompensation des Eingangsverstärkers sind sichere Zeichen für Schund. Wenn es eine Verbindung zum PC gibt, aber diese nicht isoliert ist, ist das ein weiteres Zeichen für Scheinqualität.&lt;br /&gt;
&lt;br /&gt;
In [http://welecw2000a.sourceforge.net/docs/Hardware/GW_Instek_GDS-1152A.pdf] kann man das Innenleben eines richtigen DSO bewundern. Man vergleiche dies mit den Innenleben der Spielzeug-&amp;quot;DSO&amp;quot;s.&lt;br /&gt;
&lt;br /&gt;
Ein anderes, sicheres Zeichen eines Spielzeug-&amp;quot;DSOs&amp;quot; ist es, wenn irgendein Ding aus Abgreifklemmen und Klinkenstecker als &amp;quot;Tastkopf&amp;quot; mitgeliefert wird oder die Buchse für den Tastkopf aus einer Klinkenbuchse oder ähnlicher Niederfrequenz-Anschlusstechnik besteht.&lt;br /&gt;
&lt;br /&gt;
Fazit, wer ein Oszilloskop haben möchte, sollte sich das Geld für ein Spielzeug-&amp;quot;DSO&amp;quot; sparen.&lt;br /&gt;
&lt;br /&gt;
== Was messen Oszilloskope? ==&lt;br /&gt;
&lt;br /&gt;
Oszilloskope zeigen einen Spannungsverlauf über einen relativ kurzen Zeitraum an. Je besser das Oszilloskop, desto länger ist dieser kurze Zeitraum, beziehungsweise desto schneller darf das Signal sein. Darüber hinaus lassen sich andere Größen, zum Beispiel Ströme, anzeigen, wenn man zusätzlich entsprechende Wandler einsetzt, um aus ihnen eine Spannung zu erzeugen. Bei Mehrkanal-Oszilloskopen kann man üblicherweise auch eine Spannung über eine Spannung darstellen (XY-Modus).&lt;br /&gt;
&lt;br /&gt;
Als Kanal bezeichnet man bei einem Oszilloskop einen Eingang für eine Spannung. Die an den Kanäle anliegenden Spannungen können vom Oszilloskop einzeln oder gemeinsam angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich bieten moderne Oszilloskope die Möglichkeit, sich gewisse Kenngrößen der Spannungsverläufe anzeigen zu lassen. Gängige sind zum Beispiel die Anzeige von Spitzenspannung und Effektivwert einer Spannung, Frequenz/Periodendauer, Anstiegs- und Abfallzeiten, Tastverhältnis und so weiter. Darüber hinaus bieten gute Oszilloskope Positionsmarken (Cursor), mit denen man, durch eine Linie dargestellt, auf dem Bildschirm Positionen im Spannungsverlauf markieren kann. Zur Position zugehörige Werte (Zeit oder Spannung), sowie die Differenz dieser Werte zwischen zwei Poitionsmarken können abgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Besonders [[#Digitale_Tischoszilloskope|digitale Oszilloskope]] können relativ viele unterschiedliche Kenngrößen anzeigen, da sich viele dieser Größen mit einfachen Algorithmen aus den vom Oszilloskop im Speicher erfassten Daten berechnen lassen. Ebenso sind einfache mathematische Operationen möglich, etwa eine diskrete Fourier-Transformation oder die Summe oder Differenz der Spannungsverläufe von zwei Kanälen. Oszilloskope der Oberklasse bieten darüber hinaus ausgeklügelte Möglichkeiten der Signalanalyse. &lt;br /&gt;
&lt;br /&gt;
Bereits in der Unterklasse digitaler Oszilloskope ist heutzutage eine PC-Schnittstelle üblich. Beim Kauf sollte man darauf achten, dass das Protokoll der Schnittstelle dokumentiert ist. Sonst ist man auf proprietäre PC-Software des Herstellers angewiesen. Bei Oszilloskopen der Unterklasse wird zwar häufig kostenlos PC-Software mitgeliefert, doch leider sind diese Programme durchgehend von erschreckend schlechter Qualität. Bei Oszilloskopen der Oberklasse lassen sich die Hersteller ihre PC-Software gerne zusätzlich sehr teuer bezahlen.&lt;br /&gt;
&lt;br /&gt;
Für spezielle Anwendungen finden sich in manchen Oszilloskopen besondere Messfunktionen. Zum Beispiel go/no-go Messungen, mit denen eine Spannungsverlauf mit einem vorgegebenen Verlauf verglichen wird. Entspricht der Spannungsverlauf hinreichend dem vorgegebenen Verlauf wird ein &amp;quot;go&amp;quot; (alles ist OK) Signal ausgegeben. Weicht der Verlauf zu stark ab, ein &amp;quot;no go&amp;quot; (Spannung stimmt nicht) Signal.&lt;br /&gt;
&lt;br /&gt;
== Analoge Oszilloskope ==&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
[[Bild:Oszilloskop.png|thumb|right|300px|Hybrides Analog/Digital Oszilloskop]]&lt;br /&gt;
Bei analogen Oszilloskopen wird das darzustellende Signal nach der Verstärkung direkt zur Ablenkung eines Elektronenstrahls verwendet.&lt;br /&gt;
&lt;br /&gt;
Brauchbare analoge Oszilloskope findet man oft schon für ca. 50 Euro bei Online-Auktionen und Kleinanzeigenmärkten. Für 200-400 Euro bekommt man dort recht gute Profigeräte&amp;lt;ref&amp;gt;Ein Gerät, welche mit dem Attribut &#039;&#039;Profigerät&#039;&#039; beworben wird, ist normalerweise keins.&amp;lt;/ref&amp;gt;  mit 60-200 MHz Bandbreite. Brauchbare Neugeräte fangen bei 600 Euro an. Der Oszilloskopmarkt wird von einigen wenigen Marken dominiert. Im höherpreisigen Segment sind es vor allem HP (Agilent) und Tektronix, sowie Yokogawa und Lecroy. Hameg ist vor allem im mittleren Segment (500-1500 Euro) weit verbreitet. Man findet sie oft in Schule und Ausbildung. Preislich darunter finden sich diverse asiatische oder gelegentlich noch osteuropäische Hersteller von Analogoszilloskopen. Häufig treten diese Hersteller nicht unter eigenem Namen auf, sondern bieten ihre einfachen Geräte als OEM-Produkte an. &lt;br /&gt;
&lt;br /&gt;
Ganz einfache Geräte verfügen nur über einen Kanal&amp;lt;ref&amp;gt;Es gibt, beziehungsweise gab, nochmals einfachere Geräte, nämlich solche ohne Trigger. Die Zeiten solcher Gerät sind allerdings seit rund 50 Jahren vorbei. Daher sollte man den fehlenden Trigger nur bei historischen Gebrauchtgeräten finden.&amp;lt;/ref&amp;gt;. Damit ist es nicht möglich, zwei Signale in zeitliche Beziehung zu setzen. Dies ist jedoch oft wichtig. Deshalb verfügen heutzutage auch einfache Geräte meist über zwei Kanäle.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Bandbreite&#039;&#039;&#039; gibt Auskunft, welche Signal-Frequenzen das Oszilloskop noch verarbeiten kann. Bei angegebener Bandbreite fällt die Verstärkung des Oszilloskops um 3dB ab, ein Sinussignal wird dann nur noch mit ca. 70% der wahren Amplitude angezeigt. Um Signalverläufe noch vernünftig interpretieren zu können, kann man grob sagen, dass man Signale bis 1/10 der Bandbreite dargestellt bekommt. Ein Rechtecksignal nahe der Bandbreite würde z.&amp;amp;nbsp;B. nur noch als Sinus dargestellt werden &amp;lt;ref&amp;gt;Häufig wird von Anfängern bei der Bandbreitenbetrachtung vergessen, dass ein Rechtecksignal nicht aus einer einzigen Sinusschwingung der Frequenz f, sondern aus einer theoretisch unendlichen Summe von Signalen der Frequenzen f, 3 * f, 5 * f ... besteht. Für eine vernünftige Darstellung eines Rechtecksignals sollte die Oszilloskopbandbreite so groß sein, dass zumindest die ersten paar Oberwellen nicht zu stark gedämpft werden. Aus dieser Betrachtung ergeben sich Faustformeln, wie die, dass die Bandbreite eines Oszilloskops zehnmal (oder dreimal, oder fünfmal, je nachdem wie genau man messen möchte) größer sein sollte als die Grundfrequenz des Rechtecks.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beim Messen von Digitalsignalen ist man meist an der &#039;&#039;&#039;Anstiegszeit&#039;&#039;&#039; interessiert. Die Anstiegszeit gibt an, wie lange ein Rechtecksignal von 10-90% benötigt. Die Anstiegszeit des Oszilloskops gibt an, welche Anstiegszeit dargestellt wird, wenn man ein nahezu ideales Rechtecksignal mit annähernd Null Anstiegszeit anlegen würde. Man kann die Anstiegszeit direkt aus der Bandbreite berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{Osc} = \frac{0.35}{B}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_A&amp;lt;/math&amp;gt; : Anstiegszeit des Oszilloskops in Sekunden (s)&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, B&amp;lt;/math&amp;gt; : Bandbreite in Hertz (Hz)&lt;br /&gt;
&lt;br /&gt;
Legt man ein reales Rechtecksignal an das Oszilloskop an, dann wird die Anzeige umso mehr verfälscht, je näher die Anstiegszeit des Eingangssignals der Anstiegszeit des Oszilloskops kommt. Dabei gilt folgender Zusammenhang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_S = \sqrt{t_{ges}^2-t_{Osc}^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_S&amp;lt;/math&amp;gt;: Anstiegszeit des Eingangssignals&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{ges}&amp;lt;/math&amp;gt;: Angezeigte Anstiegszeit auf dem Oszilloskop&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{Osc}&amp;lt;/math&amp;gt;: Anstiegszeit des Oszilloskops&lt;br /&gt;
&lt;br /&gt;
Wenn man wirklich schnelle Signale messen will, spielt auch die Bandbreite des verwendeten Tastkopfes eine wichtige Rolle. Näheres dazu findet man [http://www.sigcon.com/Pubs/straight/probes.htm hier].&lt;br /&gt;
&lt;br /&gt;
Oszilloskope unterscheiden sich oft stark in den Triggerungsmöglichkeiten. Bei guten Geräten kann man z.&amp;amp;nbsp;B. die Triggerung variabel verzögern. Erst dadurch wird es möglich, dass man sich Signale genauer anschauen kann, die zeitlich weit hinter einem Triggerereignis kommen. Eine weitere Funktion bei höherklassigen Oszilloskopen ist eine zweite Zeitbasis. Mit dieser kann man in einen Ausschnitt des Messsignals hereinzoomen&amp;lt;ref&amp;gt;Die zweite Zeitbasis steuert einen zweiten Strahl (ähnlich wie einen separaten Kanal), der das gleiche Eingangssignal erhält. Die zweite Zeitbasis wird auf eine höhere Horizontalfrequenz eingestellt als die erste. Zusammen mit einer horizontalen Verschiebung der Darstellung kann man nun Ausschnitte des Signals durchfahren und vergrößert betrachten.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit Analog-Oszilloskopen kann man sich hauptsächlich periodische Signalverläufe anschauen, also solche, die zeitlich immer wiederkehrend sind. Denn nur so kann ein Signal immer wieder auf den Schirm &amp;quot;geschrieben&amp;quot; werden und erscheint als stehendes Bild. Aperiodische Signale, wie z.&amp;amp;nbsp;B. auf Datenübertragungsleitungen, sind damit nicht darstellbar. Sie laufen mit einem Strahldurchgang über den Schirm. In dieser kurzen Zeit ist es jedoch nur selten möglich, sie visuell aufzunehmen. Mit einer Digitalkamera kann man solche Signalverläufe mitunter trotzdem einfangen. Früher sehr hochpreisige, heute nicht mehr übliche Analog-Oszilloskope hatten eine eingebaute Speichermöglichkeit (Speicherröhre) für einmalige Signale. Diese Klasse von Analog-Oszilloskopen wurde durch digitale Speicheroszilloskope (DSOs) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Manche Analog-Oszilloskope bieten eine Möglichkeit, die Triggerung nur zu einem definiertem Zeitpunkt anzustoßen, somit kann auch der Anlaufstrom eines Motors mit einem Analog-Oszilloskop dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Speicheroszilloskope ===&lt;br /&gt;
Inzwischen eher selten sind analoge Speicheroszilloskope anzutreffen. Diese speichern im Gegensatz zu digitalen Speicheroszilloskopen nicht das Signal selbst, sondern das Bild auf der Röhre. Dies wird mit speziellen speichernden Bildröhren erreicht. Je nach Typ kann es mehrere getrennt betreibbare Bereiche geben, um beispielsweise 2 Bilder eines Signales zu unterschiedlichen Zeitpunkten darstellen zu können (z.B. Tektronix 549).&lt;br /&gt;
&lt;br /&gt;
Einige wenige dieser Oszilloskope waren sogar in der Lage, das aufgezeichnete Bild auf Papier auszugeben (z.B. &amp;quot;HP Model 175A&amp;quot; mit Modul 1784A).&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Analogoszilloskope ===&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Neugeräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;analogoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Röhre [cm]&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| generisches 10 MHz Oszilloskop unter Bezeichnungen wie C1-94, S1-94, OS10, AO-610, ST16, CS10, GOS-310, 72-6602, HUC70, CS1010&lt;br /&gt;
| -&lt;br /&gt;
| 130&lt;br /&gt;
| 1&lt;br /&gt;
| 10&lt;br /&gt;
| 4 − 4,8 × 6&lt;br /&gt;
| Seit Jahrzehnten von vielen No-Name Herstellern in unterschiedlichen Ausführungen und Bauformen im Angebot. Wenig empfehlenswert für µC-Arbeiten. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.atten.com.cn/english/products/rf_microwave/AT7328_40.htm Atten AT7328], CS-4128 und andere Bezeichnungen wie 100867.&lt;br /&gt;
| Atten&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| 20&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM 303-6&lt;br /&gt;
| Hameg&lt;br /&gt;
| 600&lt;br /&gt;
| 2&lt;br /&gt;
| 35&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digitale Speicheroszilloskope ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:tektronix.jpg|thumb|right|300px|Digitales Speicheroszilloskop vom Anfang des Jahrtausends]]&lt;br /&gt;
Ein digitales Speicheroszilloskop (englisch DSO, &#039;&#039;&#039;D&#039;&#039;&#039;igital &#039;&#039;&#039;S&#039;&#039;&#039;torage &#039;&#039;&#039;O&#039;&#039;&#039;scilloscope) digitalisiert das Eingangssignal mit einem Analog-Digital-Wandler und legt die Werte in einem Speicher ab. Der Vorteil daran ist, dass man auf diese Weise Momentaufnahmen eines Signals machen und damit einmalige (transiente) Ereignisse (Spikes, Datenübertragungen) erkennen und darstellen kann, was besonders bei digitalen Schaltungen, z.&amp;amp;nbsp;B. mit Mikrocontrollern, sehr nützlich ist. Weiterhin lässt sich das Signal &amp;quot;vermessen&amp;quot; (z.&amp;amp;nbsp;B. um die Baudrate einer Datenübertragung zu bestimmen), man kann die Frequenz und den Effektivwert anzeigen lassen, das Frequenzspektrum, und je nach Modell noch vieles mehr. Das Signal wird in S/W oder Farbe auf einem LCD dargestellt, lässt sich aber oft auch über einen angeschlossenen Drucker ausdrucken oder an den PC übermitteln.&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Parameter bei digitalen Oszilloskopen ist die &#039;&#039;&#039;Abtastrate&#039;&#039;&#039;, die angibt, mit welcher Geschwindigkeit das Eingangssignal digitalisiert wird. Um ein Signal mit einer bestimmten Frequenz vernünftig darstellen zu können, muss es mindestens mit der 10-fachen Frequenz abgetastet werden&amp;lt;ref&amp;gt;Dieser Anhaltswert liegt über der Nyquist-Frequenz (zweifache Frequenz), da man Abweichungen von der idealen Signalform sehen und beurteilen möchte.&lt;br /&gt;
&lt;br /&gt;
Die zehnfache Abtastfrequenz bedeutet, dass man 10 Messpunkte pro Signalperiode hat, was in einer 1:1 Darstellung auf dem Bildschirm gerade mal 10 nebeneinander liegenden Pixeln entspricht. Das ist immer noch sehr wenig, um ein Signal zu beurteilen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem sind die &#039;&#039;&#039;Speichertiefe&#039;&#039;&#039; und die &#039;&#039;&#039;Wandler-Auflösung&#039;&#039;&#039; interessant. Ein Oszilloskop, das mit acht Bit Auflösung abtastet und 2000*8 Bit Speicher hat, kann 2000 Samples abspeichern, was einer Darstellung von 2000*256 Pixeln entspricht. Acht Bit Auflösung ist heutzutage ein gängiger Wert, auch wenn er niedrig erscheint. Ein normales Oszilloskop ist kein Präzisionsmessgerät und acht Bit sind für die Darstellung auf den Displays normaler Oszilloskope ausreichend.   &lt;br /&gt;
&lt;br /&gt;
Bei der Wandlung und Speicherung gibt es unterschiedliche Verfahren: Ehemals günstige Oszilloskope wie die TDS1000-Serie von Tektronix verwenden &#039;&#039;&#039;CCD-Speicher&#039;&#039;&#039; (Eimerkettenspeicher, ein analoges Schieberegister); die Messwerte werden erst gespeichert, und dann digitalisiert. Nachteile dieser Vorgehensweise sind ein stärkeres Rauschen, die begrenzte Speichertiefe und Totzeiten, während der keine Eingangswerte aufgenommen werden. Diese entstehen, da das Wandeln aller Werte aus dem analogen Zwischenspeicher länger dauert als die Zeit zum Füllen dieses Speichers. Deshalb muss das Gerät bis zum Abschluss der Wandlung warten, bevor es den Speicher erneut füllt.&lt;br /&gt;
&lt;br /&gt;
Früher wandelten nur teurere Modelle in Echtzeit mit schnellen Flash-[[AD-Wandler]]n und speicherten die Messwerte direkt in einem schnellen RAM. Die Speichertiefe ist dabei praktisch unbegrenzt, allerdings sind Wandler sehr teuer, die mehrere GS/s schaffen. Durch einen Trick (mehrere verschachtelte langsame AD-Wandler) setzen sich AD-Wandler bei günstigen Modellen durch. Oszilloskope, die diesen Trick verwenden, erkennt man daran, dass die Abtastfrequenz mit der Anzahl der aktivierten Kanäle sinkt. Zum Beispiel, findet man Vierkanaloszilloskop mit vier Wandlern à 250 MS/s, die bei Benutzung nur eines Kanals 1 GS/s für diesen Kanal erreichen, bei Benutzung von zwei Kanäle 500 MS/s pro Kanal und bei Benutzung von drei oder vier Kanälen 250 MS/s pro Kanal.&lt;br /&gt;
&lt;br /&gt;
In den richtig schnellen Geräten (mehrere GHz Samplerate) ist ein ähnlicher Trick üblich. Dort sind in den verwendeten Wandlerschaltkreisen eine größere Anzahl Sample-and-Hold-Stufen und AD-Wandler integriert. Die Eingangsspannung wird dann zeitversetzt in den Sample-and-Hold-Stufen gespeichert und von den im Vergleich zur Samplerate langsameren AD-Wandlern umgesetzt. Die Ausgangslogik sorgt dann dafür, dass die Daten in der richtigen Reihenfolge ausgegeben werden. Ein Problem bei dieser Vorgehensweise sind unterschiedliche elektrische Eigenschaften der parallelen Wandlerstufen. &lt;br /&gt;
&lt;br /&gt;
Natürlich spielt der Verwendungszweck eine entscheidende Rolle bei der Auswahl. Auf dem Labortisch, wo meist nur kleine Spannungen mit einem gemeinsamen Massebezug vorkommen, werden andere Anforderungen an ein Oszilloskop gestellt, als z.&amp;amp;nbsp;B. im Servicebereich für Industriesteuerungsanlagen, Automatisierungstechnik, usw. Dort sind weniger hohe Abtastraten wichtig, sondern eher eine größere Anzahl Eingangskanäle, die galvanisch voneinander getrennt sind, Spannungsfestigkeit bis min. 500 Volt, sowie speziell bei Störungsanalysen, die Möglichkeit, komplexe Triggermuster einzustellen, und eine integrierte große Festplatte, um einzelne Ereignisse automatisiert über lange Zeiträume hinweg festhalten zu können. Ein Beispiel für so ein hochwertiges Gerät ist ein Yokogawa Scopecorder (DL708). Allerdings sind bei solchen Geräten die Preise nach oben hin offen.&lt;br /&gt;
&lt;br /&gt;
===  Digitale Tischoszilloskope ===&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
&lt;br /&gt;
DSO Tischoszilloskope sind die klassischen, in sich abgeschlossenen Geräte, die in der Gestaltung analogen Oszilloskopen ähneln. Daneben gibt es zum Beispiel auch PC DSOs. Viele Tischgeräte sind bereits so klein (geringe Tiefe) und leicht, dass sie zu Recht als tragbare Geräte bezeichnet werden. Beim Neukauf eines Oszilloskops sind diese Geräte die interessantesten.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile ist es üblich, dass man bereits bei Einsteigermodellen eingebaute USB oder RS-232 Schnittstellen findet und eine (häufig sehr simple) Windows-Software zur Bedienung vom PC aus oder zumindest zum Auslesen von Daten auf den PC. Ebenfalls häufig sind USB oder ähnliche Schnittstellen für USB-Memorysticks oder Speicherkarten zum Speichern von Messwerten, Screenshots und Konfigurationen. Ironischerweise sind Schnittstellen und Windows-Software bei Markengeräten häufig gesondert zu erwerben, während sie bei eher unbekannten Marken kostenlos mitgeliefert werden, wenn auch die Qualität der kostenlosen Software häufig zu wünschen übrig lässt. &lt;br /&gt;
&lt;br /&gt;
Beispiele für günstige Einstiegsmodelle sind einige, aber nicht alle, Geräte von Rigol, Hantek, Owon oder Atten. Für wenig Geld erhält man für einfache Anwendungen brauchbares Oszilloskop mit ein paar Highlights aber auch auffälligen Einschränkungen und Fehlern in der Hard- und Software. Viel oder überhaupt Service kann man von diesen Firmen für sein Geld nicht erwarten.&lt;br /&gt;
&lt;br /&gt;
Geräte von [http://www.instek.com/] sind etwas teurer. Geräte aus der GDS-1000A oder GDS-1000U Serie dürften zum Einstieg interessant sein.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für ein Einstiegsmodell war das [http://www.tek.com/site/ps/0,,40-15314-INTRO_EN,00.html TDS1002] von Tektronix (ca. 1200 Euro). Dazu muss man allerdings sagen, dass Tektronix die aktuelle Entwicklung etwas verschlafen hat. Der nur 2 kByte große Speicher ist einfach nicht mehr zeitgemäß. Geräte der [http://www.home.agilent.com/agilent/product.jspx?nid=-33575.0&amp;amp;cc=DE&amp;amp;lc=ger&amp;amp;pageMode=OV Agilent InfiniiVision 2000X Serie] beginnen in einem ähnlichen Preisbereich aber mit wesentlich mehr Features.&lt;br /&gt;
&lt;br /&gt;
==== Vergleichstabelle digitale Tischoszilloskope ====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;digitaloszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=78 DSO5102B]&lt;br /&gt;
| [http://www.hantek.com.cn/english/ Hantek]&lt;br /&gt;
| mit sehr viel Glück auf eBay 390 + Zoll + Umsatzsteuer ... 520&lt;br /&gt;
| 2&lt;br /&gt;
| 500/1000&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800 x 480, 7&amp;quot; (die auch genutzt werden)&lt;br /&gt;
| 1 x USB Geräte- und 1 x USB Host-Schnittstelle&lt;br /&gt;
| Beliebt, da es einen Hack auf 200 MHz gibt. Ebenso diverse Hacks an der Hardware. Für ein Niedrigpreis-Produkt übliche und verzeihbare Hardware- und Firmware-Macken. Auch als Tekway DST1102B oder Protek 3110 im Handel.&lt;br /&gt;
|-&lt;br /&gt;
| DSO3062A||Agilent||800||2||500 ||60||8||4k||320x240||USB||weitgehend baugleich mit Rigol DS5000&lt;br /&gt;
|-&lt;br /&gt;
| InfiniiVision 2000 X Serie||Agilent|| 950 - 2600 (MSO) ||2 - 4||1 G/Kanal. Bei Benutzung der Hälfte aller Kanäle 2G/Kanal|| 70 - 200 || 8 || 100k || 800 x 480, 8,5&amp;quot;|| ||Markengeräte mit exzellentem Preis-Leistungs-Verhältnis. Software-Aufrüstbar (Funktionsgenerator, Protokoll-Dekoder, usw.)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products_ds1000d.aspx DS1000 Serie]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| 600 - 1650&lt;br /&gt;
| 2&lt;br /&gt;
| 400/200&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 25-100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol DS1052E]]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| ab 260 Euro + Zoll + Umsatzsteuer (ebay China)&lt;br /&gt;
| 2&lt;br /&gt;
| 1000/500&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 50 (100=DS1102E)&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator = DS1052D (DS1102D). Im Netz kursieren diverse, mehr oder weniger ernst zu nehmende Anleitungen, wie man ein DS1052E per Software auf ein DS1102E umrüsten kann.&lt;br /&gt;
|-&lt;br /&gt;
| Owon PDS Serie&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 299,- (PDS5022S); 495,- (PDS6062T); 570,- (PDS7102T)&lt;br /&gt;
| 2&lt;br /&gt;
| 100 - 500&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 5k pro Kanal&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB, seriell incl.&lt;br /&gt;
| Qualität entspricht Preis. Relativ unausgewogenes Verhältnis von Bandbreite zu Samplingrate. Geräte mit einem &#039;S&#039; am Ende der Typenbezeichnung haben ein STN LCD mit niedriger Qualität.&amp;lt;br&amp;gt;nur Real-Time Sampling&lt;br /&gt;
|-&lt;br /&gt;
| [http://owon.com.cn/eng/smartDS.asp Owon SDS Serie]&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 400 (SDS7102)&lt;br /&gt;
| 2&lt;br /&gt;
| 500 M - 3.2 G&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 10M/Kanal&lt;br /&gt;
| 800 x 600, 8&amp;quot;&lt;br /&gt;
| USB Host und Slave, seriell incl., Ethernet, VGA&lt;br /&gt;
| Deutliche Verbesserung gegenüber der alten PDS-Serie. Beeindruckende Speichertiefe (10M) und Bildschirm (8&amp;quot;). Für ein Niedrigpreis-Produkt übliche Hardware- und Firmware-Macken. Neuere Geräte mit verbessertem Hardwaredesign, Firmware wird regelmäßig aktualisiert, menülastige, gewöhnugsbedürftige Bedienung. Akkubetrieb optional&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000 Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 350 - 550&amp;lt;br&amp;gt;(Conrad: 475 - 950)&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 4k&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| Von Conrad teurer als DSO-4000 Serie erhältlich.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000&#039;&#039;&#039;A&#039;&#039;&#039; Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 500 - ?&lt;br /&gt;
| 2&lt;br /&gt;
| bis 1GS/s&lt;br /&gt;
| 60 - 150&lt;br /&gt;
| 8&lt;br /&gt;
| bis 2M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| [http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.instek.com/html/en/products-l.asp?p1sn=17&amp;amp;p2sn=41 GW Instek GDS-2000 Serie]&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 850 - 1800&lt;br /&gt;
| 2 - 4&lt;br /&gt;
| 1000&lt;br /&gt;
| 60 - 200&lt;br /&gt;
| 8&lt;br /&gt;
| max. 5000 (alle Kanäle benutzt) / 25000 (ein Kanal in Benutzung)&lt;br /&gt;
| 320x234&lt;br /&gt;
| Inkl. USB (Geräte-Modus zum PC, zwei weitere USB-Buchsen Host-Modus für eine Speicherkarte oder Drucker), RS-232&lt;br /&gt;
| Weitgehend baugleich mit Conrad Voltcraft DSO-8000 Serie. Vier-Kanal Versionen haben keinen externen Trigger und weniger Trigger-Funktionen.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| TDS-1002B&lt;br /&gt;
| Tektronix&lt;br /&gt;
| 1100&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 2.5k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verhältnismäßig starkes Rauschen, siehe Text oben&lt;br /&gt;
|-&lt;br /&gt;
| WaveJet 3xx&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 2800..8000 (brutto)&lt;br /&gt;
| 2 oder 4&lt;br /&gt;
| 1000/2000&lt;br /&gt;
| 100/200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 500k&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verfügbar z.&amp;amp;nbsp;B. bei Farnell&lt;br /&gt;
|-&lt;br /&gt;
| WaveAce Serie&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 1000 - 3500&lt;br /&gt;
| 2&lt;br /&gt;
| 250 - 2000&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 4k - 8k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB (Geräte- und Host-Modus), RS-232(?)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dlm2000.de DLM20XX]&lt;br /&gt;
| YOKOGAWA &lt;br /&gt;
| 3300..8000 (brutto)&lt;br /&gt;
| 2 oder 4 (3+1) wobei 1 wahlweise 8Kanal Digital ist&lt;br /&gt;
| 2500 (1250)&lt;br /&gt;
| 200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 12,5MPts&lt;br /&gt;
| 1024x768&lt;br /&gt;
| USB, Ethernet, Browsersteuerung inkl.&lt;br /&gt;
| Vertrieb vom Hersteller direkt!&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UT2025B.html UNI-T UT2025B] / Voltcraft DSO-1022 M&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 290 - 356&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 512k/Kanal&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 320x240 (Monochrom)&lt;br /&gt;
| USB, RS-232.&lt;br /&gt;
| Als UT2025&#039;&#039;&#039;C&#039;&#039;&#039; mit Farbdisplay. UT2000 Serie 25-200MHz, 2CH 250MSa/s bis 1GSa/s&amp;lt;br&amp;gt;wenig Rauschen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UTD2052CEL.html UTD2052CEL]&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 369,-&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 50&lt;br /&gt;
| 8&lt;br /&gt;
| 2x600k &#039;&#039;recording length&#039;&#039;;&amp;lt;br&amp;gt;25k &#039;&#039;saving depth&#039;&#039; ein Kanal;&amp;lt;br&amp;gt;12,5k &#039;&#039;memory depth&#039;&#039; zwei Kanäle&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 800 x 480&amp;lt;br&amp;gt;Der Displaycontroller faßt immer 2x2 Pixel zusammen, dadurch reduziert sich die Auflösung real auf 400 x 240&amp;lt;br&amp;gt;(Menü nimmt relativ viel Platz auf dem Bildschirm ein)&lt;br /&gt;
| USB&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM2008&lt;br /&gt;
| [http://www.hameg.com Hameg]&lt;br /&gt;
| 2000&lt;br /&gt;
| 2&lt;br /&gt;
| 2GSa/s(1CH)1GSa/s(2CH)&lt;br /&gt;
| 200&lt;br /&gt;
| 8&lt;br /&gt;
| 4048k&lt;br /&gt;
| Röhre 8x10cm&lt;br /&gt;
| USB für Speicherstick (vorne), USB/RS232 für PC (hinten), &lt;br /&gt;
| 4 Logikkanäle nachrüstbar, Ethernet/USB nachrüstbar&lt;br /&gt;
|-&lt;br /&gt;
| PT 1200&lt;br /&gt;
| [http://www.PEAKTECH.de Peaktech]&lt;br /&gt;
| ca. 360&lt;br /&gt;
| 2&lt;br /&gt;
| 100MSa/s(1CH)100MSa/s(2CH)&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 6k pro Kanal&lt;br /&gt;
| Farb LCD 7,8&amp;quot; 640x480&lt;br /&gt;
| USB für PC (hinten) &lt;br /&gt;
| Im Original vermutlich ein Owon PDS5022S. Optional: Akkupack 7,4 V ~ 8000 mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Marken, die gelegentlich auf dem deutschen Markt auftauchen, häufig über eBay, sind &lt;br /&gt;
&lt;br /&gt;
* GAOtek&lt;br /&gt;
* Hangzhou Jingce (JC)&lt;br /&gt;
* Tonghui&lt;br /&gt;
* Ypioneer&lt;br /&gt;
* Jiangsu Lvyang&lt;br /&gt;
* Siglent (Zweitmarke von Atten)&lt;br /&gt;
&lt;br /&gt;
Über deren Qualität hört man wenig oder gar nichts.&lt;br /&gt;
&lt;br /&gt;
=== PC-Oszilloskope ===&lt;br /&gt;
==== PC-Zusätze ====&lt;br /&gt;
===== Allgemeines &amp;amp; Beachtenswertes =====&lt;br /&gt;
&lt;br /&gt;
PC-Oszilloskope / PC-Zusätze sind im Prinzip digitale Speicheroszilloskope, mit der Besonderheit, dass sie die Daten nicht selbst anzeigen, sondern an einen PC übermitteln. Beim Kauf eines PC-Oszilloskops sollte man besonders vorsichtig sein, da viele Angebote irreführende Informationen enthalten. Sehr beliebt ist z.&amp;amp;nbsp;B. die Werbung mit der Analogbandbreite, also die Bandbreite die der Analogteil der Schaltung (Eingangsverstärker) verarbeiten kann. Wenn hier 100 MHz angegeben sind bedeutet das aber nicht, dass sich auch wirklich Signale bis 100 MHz darstellen lassen; wenn der Wandler nur mit 40 MS/s abtastet ist das Oszilloskop gerade noch bis 4 MHz verwendbar. Ebenso sollte man nur die Echtzeit- oder Realtime-Abtastrate beachten, eine manchmal ebenfalls angegebene &amp;quot;Äquivalent-Abtastrate&amp;quot; ist nur bei periodischen Signalen zu gebrauchen und damit im Umfeld von Mikrocontrollern meist wertlos.&lt;br /&gt;
&lt;br /&gt;
Die Wahl zwischen einem Tischoszilloskop und einem PC-Zusatz ist nicht nur eine Geld-, Leistungs- oder Qualitätsfrage. Ein Tischgerät lässt sich anders bedienen (echte Knöpfe, sicherer Stand) und belegt nicht den PC oder Laptop. Erfahrene Entwickler ziehen ein separates Gerät einem PC-Zusatz vor. Zum Teil ist dies eine Generationsfrage.&lt;br /&gt;
&lt;br /&gt;
Hinzu kommt, dass billige PC-Oszilloskope meist keine galvanische Trennung an ihrer USB-Schnittstelle besitzen. Ein Fehler bei einer Messung kann daher nicht nur das Oszilloskop, sondern gleich den PC mit beschädigen. Das gleiche Problem kann man übrigens auch bei einfachen Tischoszilloskopen mit PC-Schnittstelle haben. Allerdings kann man Tischgeräte auch ohne die PC-Verbindung betreiben, PC-Oszilloskope nicht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich wird geraten, das Oszilloskop, egal ob Tischgerät oder PC-Zusatz, immer über einen &amp;quot;self powered&amp;quot; USB-Hub (einer mit eigenem Netzteil) mit dem PC zu verbinden. Ob ein solcher Hub als Schutzmaßnahme geeignet ist, besonders zum Personenschutz, sei dahingestellt. Schaden sollte er nicht.&lt;br /&gt;
&lt;br /&gt;
Besonders zu beachten ist die PC-Software. Nicht nur, ob sie zum Zeitpunkt des Kaufs wenigstens grundsätzlichen Ansprüchen genügt, sondern auch, ob der Hersteller vermutlich willens und in der Lage ist, die Software über viele Jahre zu warten. Stichwort Investitionssicherheit. Ohne Wartung kann eine Inkompatibilität in der Software zum nächste Windows Service-Pack oder zur nächste Windows-Version das Gerät völlig entwerten.&lt;br /&gt;
&lt;br /&gt;
Leider ist es so, dass es fast keine freie [[Oszilloskop#Software|Oszilloskopsoftware]] gibt. Die Protokolle zwischen Oszilloskop-Vorsätzen und Computer sind meist proprietär, und selten hat sich ein Entwickler freier Software die Mühe gemacht, ein Protokoll zu entschlüsseln. Noch seltener ist es, dass auf dieser Basis eine brauchbare oder gar gute Software geschrieben wurde. So ist ein Ausweichen auf freie Software kaum möglich, sollte der Hersteller die Wartung aufgeben. Man ist im Normalfall auf Gedeih und Verderb dem Hersteller ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
===== Vergleichstabelle PC-Zusätze =====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pczusatzoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Sample&amp;amp;shy;rate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Band&amp;amp;shy;breite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auf&amp;amp;shy;lösung [Bit]&lt;br /&gt;
! Speicher&amp;amp;shy;tiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Inter&amp;amp;shy;face&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.elandigitalsystems.com/support/usbtmfaq/software.php USBscope50]&lt;br /&gt;
| Elan Digital Systems / dt. Vertrieb Hacker&lt;br /&gt;
| 249&lt;br /&gt;
| 1 (-4)&lt;br /&gt;
| 50 / 1000&lt;br /&gt;
| 10 / 75&lt;br /&gt;
| 8&lt;br /&gt;
| 3k pro Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| CAT II, 300V galv. Trennung zu USB, OpenSource SDK, Java, Linux, LabView&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2104&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 185&lt;br /&gt;
| 1&lt;br /&gt;
| 50&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
| 8K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2105&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 290&lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 24K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2205&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 350&lt;br /&gt;
| 2&lt;br /&gt;
| 200&lt;br /&gt;
| 25&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 16K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=62 DSO-2090 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| 1 Kanal: 100 / 2 Kanäle: 50&lt;br /&gt;
| 40&lt;br /&gt;
| 8&lt;br /&gt;
| 1 Kanal: 64K / 2 Kanäle: 32K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Wenige Vorteile gegenüber einem Tischgerät. Analogbandbreite bei der Samplingrate nicht ausnutzbar. Kleiner Eingangsspannungsbereich. Unter diversen anderen Namen erhältlich.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=63 DSO-2150 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| max. 150&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-32K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=64 DSO-2250 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.  &lt;br /&gt;
| 220&lt;br /&gt;
| 2&lt;br /&gt;
| max. 250&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-512K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| Mephisto Scope 1 (UM202)&lt;br /&gt;
| Meilhaus&lt;br /&gt;
| 333&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 16&lt;br /&gt;
| 256K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
| 5 in 1,&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Voltmeter,&lt;br /&gt;
Datenlogger analog und digital,&lt;br /&gt;
Digital-I/O&lt;br /&gt;
|-&lt;br /&gt;
| MSO-19&lt;br /&gt;
| Link Instruments Inc.&lt;br /&gt;
| 172&lt;br /&gt;
| 1&lt;br /&gt;
| 200&lt;br /&gt;
| 60&lt;br /&gt;
| ??&lt;br /&gt;
| 1K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
|&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Pattern Generator,&lt;br /&gt;
TDR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Soundkarten-Oszilloskope ====&lt;br /&gt;
[[Bild:Soundoszi.JPG|thumb|right|300px|Soundkarten Oszilloskop]]&lt;br /&gt;
Wem ein wirklich einfaches Oszilloskop für kleine Frequenzen (bis etwa 20 kHz) ausreicht, bspw. um die Kommunikation am I2C-Bus zu analysieren, kann dazu die Soundkarte des PC benutzen.&lt;br /&gt;
Allerdings eignet sich eine Soundkarte nicht dazu, Gleichspannungen zu messen, zu niederfrequente Signale können daher nicht damit erfasst werden: Im Screenshot nebenan erkennt man das z.&amp;amp;nbsp;B. an der fallenden Gerade am Schluss (obwohl der tatsächliche Signalpegel konstant oben bleibt). Auch ist hier besondere Vorsicht geboten, da Soundkarten nur für geringe Spannungen ausgelegt sind und bei einer zu hohen Eingangsspannung möglicherweise der ganze PC beschädigt wird. Daher ist eine Vorschaltung mit Spannungsbegrenzung (ca 0,7V) nötig. &lt;br /&gt;
&lt;br /&gt;
Der Vorteil der Soundkartennutzung ist, dass es sich dank des PCs um eine Art  Speicheroszilloskop handelt und die Daten zum Beispiel in Excel analysiert werden können.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scheidig.de/Deutsch/Download/SpekOszi/info.htm Hardy u. Karola Scheidig] verschiedene Programme zum Messen mit der Soundkarte.&lt;br /&gt;
* [http://www.sillanumsoft.org/ Visual Analyser] von Alfredo Accattatis und der University of Rome Tor Vergata, &amp;quot;Donateware&amp;quot; &lt;br /&gt;
* [http://www.zeitnitz.de/Christian/scope_en Soundcard Oscilloscope für Windows] von Christian Zeitnitz, kostenlos für Privatanwendung&lt;br /&gt;
* [http://www.qsl.net/dl4yhf/spectra1.html Spectrum Lab von DL4YHF]&lt;br /&gt;
* [http://w5big.com/spectrogram.htm Spectrogram] von R.S. Horne, ältere Version kostenlos&lt;br /&gt;
* [http://www.audiotester.de/ Audiotester 30-Tage-Version kostenlos]&lt;br /&gt;
* [http://www.dasylab.com/ DasyLab] Eingeschränkte Version (Soundkarte und serielle Schnittstelle) als Beilage zum Buch &amp;quot;Signale-Prozesse-Systeme&amp;quot; ISBN 9783642018633&lt;br /&gt;
* [http://www.zelscope.com/ Zelscope] von Constantin Zeldovich 14-Tage Evaluationsversion&lt;br /&gt;
* [http://www.dxzone.com/catalog/Software/Spectrum_analyzers/ Linksammlung]&lt;br /&gt;
==== Grafikkarten-Oszilloskope ====&lt;br /&gt;
Videokarten, die über einen analogen Input verfügen, stellen ebenfalls eine Alternative zu käuflichen Oszilloskopen dar, da sie 3kanalig Frequenzen bis rund 180 MHz verarbeiten können. Die digitale Auflösung liegt meist bei 8 Bit maximal, was für einfache Anzeigen jedoch reicht, wenn die Aussteuerung entsprechend ist. Durch Übersampeln lässt sich die Auflösung wie gehabt steigern, indem man z.B. je 4 Werte softwareseitig zusammenfasst und damit bis zu 2 Bit an Auflösung gewinnt. Bei 16 werten kann man in der Regel statistische 2-3 Bit erwarten und erhält eine Güte von ca 10 Bit bei 10MHz.&lt;br /&gt;
&lt;br /&gt;
=== Selbstbau ===&lt;br /&gt;
&lt;br /&gt;
Selbstbau eines solchen Gerätes erspart wie fast immer in solchen Fällen kein Geld, sofern man nicht eine Spezialfunktion benötigt, die im Markt nicht beschaffbar ist. Der Spaß liegt als wieder im Bauen selbst.&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse preiswerte Bausätze für Spielzeug-Oszilloskope. Die Ergebnisse nach dem Zusammenbau sind als Oszilloskop wenig brauchbar. &lt;br /&gt;
&lt;br /&gt;
Daneben findet man nur sehr wenige Selbstbau-Projekte deren Ergebnisse überzeugen. Einige interessante Projekte sind [http://www.mikrocontroller.net/topic/228997?goto=new#2308320]n und [http://www.ssalewski.de/DAD.html.de]. Dazu sei allerdings gesagt, dass der Aufwand an Material und Messmitteln schnell die Kosten für ein fertiges Oszilloskop überschreitet.&lt;br /&gt;
&lt;br /&gt;
=== Umbau ===&lt;br /&gt;
Sofern man tatsächlich etwas benötigt, was nicht käuflich zu erwerben ist, kann der Kauf und Umbau eines verhandenen Gerätes sinnvoll sein. &lt;br /&gt;
&lt;br /&gt;
Auf eBay werden immer noch die Oszilloskope der früheren Firma Wittig (heute Welec), wie zum Beispiel das W2012A, angeboten. Als Alternative zu der fehlerträchtigen Orginalfirmware ist mittlerweile eine Open-Source Variante verfügbar die kontinuierlich weiterentwickelt wird. Ebenfalls wird an Hardware Erweiterungen gearbeitet die die Qualität des Oszilloskops deutlich steigern. Wer sich nicht sicher ist ob das Gerät seinen Ansprüchen genügt sollte bei den Entwicklern nachfragen. [http://sourceforge.net/apps/trac/welecw2000a/wiki] Auch hier ist der Weg das Ziel.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR_Softwarepool#Oszilloskop|AVR Softwarepool: Oszilloskop]]&lt;br /&gt;
* [[Einfaches Oszilloskop mit Bascom-AVR]]&lt;br /&gt;
* [[USB_Oszilloskop]]&lt;br /&gt;
* [[Logic_Analyzer]]&lt;br /&gt;
* [[LCS-1M - Ein einfaches, preiswertes, mikrokontrollergesteuertes Zweikanal-Oszilloskop zum Selberbauen]] ([[Picaxe]])&lt;br /&gt;
&lt;br /&gt;
== Links &amp;amp; Literatur ==&lt;br /&gt;
* [http://www.elektronikpraxis.vogel.de/index.cfm?pid=9681 Online-Dossier Grundlagen digitaler Oszilloskope. ] Veröffentlicht auf Elektronikpraxis online&lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/XYZs/03W_8605_3.pdf XYZs of Oscilloscopes Primer]. Tektronix 03W-8605-3. 20091. Grundlagen digitaler Oszilloskope und das messen mit ihnen, wobei die Tektronix-Produktpalette im Vordergrund steht.  &lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/ABCsProbes/60W_6053_9.pdf ABCs of Probes Primer]. Tektronix 60W-6053-9. 2009. Die Grundlagen von Tastköpfen, natürlich am Beispiel von Tektronixs Tastköpfen.&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/1?filter=oszi*+-oszillator Forum-Beiträge zum Thema Oszilloskop] (Kaufberatung, Anwendung)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/3?filter=oszi*+-oszillator Beiträge im Markt-Forum]&lt;br /&gt;
* [http://www.virtuelles-oszilloskop.de/ Ein virtuelles interaktives Oszilloskop] ala HAMEG HM203-6 20 MHz zum Üben (Seite auf [http://www.virtuelles-oszilloskop.com Englisch])&lt;br /&gt;
* [http://www.eosystems.ro/eoscope/eoscope_en.htm Selbstbau-DSO 40MSPS]&lt;br /&gt;
* [http://www.sigcon.com/Pubs/straight/probes.htm Probing High-Speed Digital Designs], Originally published in [http://www.elecdesign.com/ Electronic Design Magazine], March, 1997&lt;br /&gt;
* [http://hackedgadgets.com/2007/12/10/oscilloscope-tutorials/ Oscilloscope Tutorials] Linkliste bei hackedgadgets.com&lt;br /&gt;
* [http://www.eevblog.com/2011/03/30/eevblog-159-oscilloscope-trigger-holdoff-tutorial/ EEVBlog #159] Videotutorial von Dave Jones zu &#039;&#039;&#039;Trigger Holdoff&#039;&#039;&#039;, (engl.)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/167705#1602827 WinXP Software für OsziFox/ProbeScope] von  Micha B. (chameo)&lt;br /&gt;
&lt;br /&gt;
* [http://users.physik.fu-berlin.de/~jtt/fsc2.phtml fsc2] is a program running under GNU/Linux for controlling spectrometers. Supported devices include digitizing oscilloscopes too:&lt;br /&gt;
** Tektronix Digitizing Oscilloscope TDS520, TDS520A, TDS520C, TDS540, TDS744A and TDS754A&lt;br /&gt;
** LeCroy Digitizing Oscilloscope 9400, 9410, 9420, 9424, 9424e and 9450(A)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope Waverunner and Waverunner-2 (LT224, LT 262, LT264, LT342, LT344, LT354, LT362, LT364, LT372, LT374, LT584, 44(M)Xi, 62X1, 64(M)Xi, 104(M)Xi, 204(M)Xi)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope WaveSurfer (422, 424, 432, 434, 452 and 454)&lt;br /&gt;
&lt;br /&gt;
* [http://xoscope.sourceforge.net/ xoscope, oscope] is a digital oscilloscope using input from a sound card or EsounD and/or a ProbeScope/osziFOX and Bitscope hardware. Includes 8 signal displays, variable time scale, math,memory, measurements, and file save/load. (Linux, GPL)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mtoussaint.de/qtdso.html QtDSO] is a frontend for the Velleman PCS64i digital oscilloscope (Anm.: Velleman nicht mehr unterstützt) It provides a fully featured oscillocope mode (including XY  plot and math) and a highly configurable spectrum analyzer mode. Für &#039;&#039;&#039;Digitalmultimeter&#039;&#039;&#039; gibt es vom gleichen Autor [http://www.mtoussaint.de/qtdmm.html QtDMM] und [http://www.mtoussaint.de/qtdmm2.html QtDMM2].&lt;br /&gt;
&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html Osqoop] est un oscilloscope logiciel sous licence libre. Il permet de travailler sur un nombre arbitraire de canaux et des acquisitions de longue durée. Wiki description: [http://gitorious.org/osqoop Osqoop] is a multi-platform open source software oscilloscope based on Qt 4. It connects to various hardware data sources such as the sound input or a dedicated USB board.&lt;br /&gt;
&lt;br /&gt;
*[http://code.google.com/p/gds2000tools/ gds2000tools] ist eine Linux-Software für GW-Instek GDS-2000 und andere GW-Instek Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/xoscillo/ Xoscillo] - A software oscilloscope that acquires data using an Arduino or a Parallax (more platforms to come). (Lizenz: CC-BY-NC-SA 3.0; Windows and Linux (needs mono))&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/oscope2100/ Oscope 2100] Linux software für Hantek DSO-2100.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/openhantek/ OpenHantek] Linux Software für Hantek (Voltcraft/Darkwire/Protek/Acetech) DSO-2090.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/dsoda/ Digital Soda] DSO-2250 Software.&lt;br /&gt;
&lt;br /&gt;
* [http://owondriver.sourceforge.net/ Owon Driver, Ownon Dump] Linux-Treiber für Owon-Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [http://foss.doredevelopment.dk/wiki/Lxi-control Lxi-Control] Kommandozeilen-Applikation zur Fernsteuerung von Geräten mit LXI-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://gpib-utils.sourceforge.net/ gpib-util] Linux Kommandozeilen-Applikation, unterstützt diverse Oszilloskope (und andere Geräte) mit GPIB-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/vxi11/ VXI11] Bibliothek und Programme für Geräte mit VXI-11 Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/wfmreader/ Linux WFM Datenformat-Leser].&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
&lt;br /&gt;
Bei Oszilloskopen (DSOs), die es erlauben, die gemessenen Daten zu einem PC zu übertragen, kann man die Messwerte auf dem PC weiter auswerten. Zum Beispiel ein Signal demodulieren, filtern oder dekodieren. Grundsätzlich ist die Auswertung in jeder Programmiersprache möglich. Programmiersprachen für numerische Berechnungen eignen sich jedoch besonders.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com Matlab] und Clones wie [http://www.scilab.org/ SciLab] oder [http://www.gnu.org/software/octave/ GNU Octave]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com/matlabcentral/fileexchange/?term=Oscilloscope Matlabcentral Fileexchange, Suche nach &#039;&#039;Oscilloscope&#039;&#039;] Auf Matlabcentral Fileexchange finden sich auch MatLab Lese- und Auswertungsfunktionen für diverse Oszilloskope. Hinweis: Die von MatLab für die Kommunikation mit einem Oszilloskop verwendeten Toolboxen und Funktionen fehlen häufig bei den Clones wie GNU Octave. Man ist hier auf das original MatLab angewiesen.&lt;br /&gt;
&lt;br /&gt;
* Eines Ingenieurs unwürdig&amp;lt;ref&amp;gt;Es ist sehr einfach Fehler in Tabellenkalkulationen zu machen, die typischerweise lange unentdeckt bleiben. [http://www.eusprig.org/ Untersuchungen] haben gezeigt, dass bereits dann bis zu 90% aller Tabellenkalkulationsblätter fehlerhaft sind, wenn es nur um einfache mathematische Grundoperationen (Addieren, Subtrahieren, Multiplizieren, Dividieren) geht.&amp;lt;/ref&amp;gt; sind Microsoft Excel oder andere Tabellenkalkulationen. Trotzdem sind sie zur Datenauswertung populär.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70251</id>
		<title>Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=70251"/>
		<updated>2012-12-26T17:37:36Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: Einleitung weniger reissereisch - Wikitauglich!!!!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Oszilloskop&#039;&#039;&#039; dient zur grafischen Darstellung des Spannungsverlaufs eines oder mehrerer elektischen Signale in einem einstellbaren Zeitfenster. Es ist das wichtigste Werkzeug der Elektotechniker.&lt;br /&gt;
&lt;br /&gt;
== Anfragen bezüglich Kaufberatung im Forum ==&lt;br /&gt;
&lt;br /&gt;
=== Kritik an den Anfragen ===&lt;br /&gt;
Im Forum finden sich regelmäßig Anfragen nach individueller Beratung zum Oszilloskopkauf. Die Anzahl solcher Oszilloskop-Threads hat schon lange die 1000 überschritten. Sie sind langweilig, eine Qual und oft unnütz - besonders dann, wenn sich der Fragesteller offebar nicht mit den Grundlagen eines Oszilloskops und den wichtigsten Kennzahlen bekanntgemacht hat oder nicht einaml weiß, was er überhaupt messen will. Auch, wenn ein Fragesteller ein paar Grundlagen besitzt, hat er anscheinend meistens keine Lust, verständlich darzustellen, was er genau will und lässt sich stattdessen umstädnlich befragen.&lt;br /&gt;
&lt;br /&gt;
Den meisten regelmäßigen Forumsteilnehmern ist daher gründlich die Lust an Oszilloskop-Threads vergangen. Dort &amp;quot;diskutieren&amp;quot; eigentlich nur noch Trolle und anonyme Gäste, die oft genug nur Werbung über Billigangebote über die x-te Ausgabe einer billigen, als Oszilloskop bezeichneten Plastikkiste, einem suupertollen eBay-Schnäppchen oder angeblicher asiatischer Wundertüten.&lt;br /&gt;
&lt;br /&gt;
==== Links für Anfänger ====&lt;br /&gt;
Wer sich ernsthafte Beratung wüsncht und eine &amp;quot;sanfte&amp;quot; Einführung in das Thema sucht, kann sich die englischsprachige YouTube-Videos von AfroTechMods anschauen:&lt;br /&gt;
&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials/ http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials]&lt;br /&gt;
&lt;br /&gt;
Dazu passt auch sein Tutorial über Funktionsgeneratoren:&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial/ http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial].&lt;br /&gt;
&lt;br /&gt;
===Maßgeschneidert?===&lt;br /&gt;
Besonders die immer wiederkehrende Forderung, dass es unbedingt das maßgeschneiderte Oszilloskop zum Superpreis genau für den Fragesteller geben muss, ist sinnlos. Wer mit diesem Anspruch kommt, der wird enttäuscht werden. Das gibt es nicht, und gute Oszilloskope kosten Geld, da qualitativ hochwertige Geräte keine Massenware sind. Lediglich billige Geräte werden in grosser Zahl hergestellt und sind entsprechend preiswert, diese sind jedoch für anspruchsvoll Anweder meist untauglich, da genau an den wichtigen Dingen gespart und nur auf Optik gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
===Gebraucht ist auch keine Lösung===&lt;br /&gt;
Es gibt eine Reihe von gebrauchte Oszilloskopen- vorwiegend im Internet, von den die meisten billig sind. Da niemand per Ferndiagnose oder Blick in eine Glaskugel in ein gebrauchtes Gerät hineinsehen und etwas über den Zustand berichten kann, besteht immer das typische Risiko eines Kaufs asu zweiter Hand, das jeder selber tragen muss. Niemand im Forum kann und wird das jemandem abnehmen. &lt;br /&gt;
&lt;br /&gt;
Was man allgemein sagen kann, ist, dass man besser die Finger von Angeboten lassen sollte, wenn der Verkäufer mit den übliche Phrasen wie, &amp;quot;Dachbodenfund&amp;quot;, &amp;quot;Keine Ahnung davon&amp;quot;, &amp;quot;Keine Möglichkeit zu testen&amp;quot; kommt. Vorsicht ist auch bei dem beliebten Trick &amp;quot;Funktioniert, aber aus rechtlichen Gründen (Garantie) verkaufe ich es als defekt, für Bastler&amp;quot; gegeben. Man muss sich immer vor Augen führen, dass niemand ein gutes und wertvolles Gerät dieser Art zum Billigpreis abgegeben wird und dies schon garnicht über Internetplattformen, wo es kaum einen Markt für Topgeräte gibt. Gute gebrauchte Geräte gibt es von privat daher nur auf Elektronikbörsen zu entsprechenden Preisen.&lt;br /&gt;
&lt;br /&gt;
Es gibt demgemäss natürlich auch Geräte von seriösen Gebrauchthändlern mit Garantie - allerdings ebenso zu derartigen Preisen, dass dagegen der Kauf eines aktuellen Neugeräts ebenfalls attraktiv erscheint.&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen? ===&lt;br /&gt;
Eine Vorgehensweise, von der man auch abraten muss, ist die Frage nach Erfahrungen anderer Mitglieder! Die meisten Antworten kommen von Trollen und Posern, die eigentlich keine Ahnung haben. Die einen wollen als anonymer Gast mal wieder trollen, die anderen wollen nur mitteilen, dass Amateurfunker sowieso die besseren Menschen sind. Andere wiederum haben &amp;quot;zufällig&amp;quot; gerade *das* richtige Oszilloskop zu verkaufen. Dann gibt es noch die, die sich ihr eigenes Oszilloskop schönreden wollen, ihren Vorurteilen oder ihrem Fetisch frönen. Zum Beispiel&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Kauf ja kein Gerät aus Asien!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Unter LeCroy|Agilent|Yokogawa|Tektronix geht gar nichts!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Nur Gebrauchtgeräte lohnen sich!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hinweise wie &#039;&#039;mein vor 30 Jahren gekauftes Markengerät funktioniert noch heute tadellos&#039;&#039; sind ebenfalls ziemlich sinnlos. Der Hersteller wird dieses Gerät gar nicht mehr anbieten und er wird schon gar nicht mehr mit der gleichen Qualität fertigen, wie vor 30 Jahren. Dazu ist der Kostendruck zu hoch und Technologien haben sich geändert. Selten sind die neuen Technologien heute so robust, wie die vor 30 Jahren.&lt;br /&gt;
&lt;br /&gt;
Als Unerfahrener kann man daher aus den Antworten nicht herauslesen, ob sie wirklich auf Erfahrung beruhen. Man braucht also gewissermassen selbst Erfahrung, um die Erfahrungsberichte anderer richtig einzuordnen.&lt;br /&gt;
&lt;br /&gt;
Ein anderer Aspekt aus alten Threads ist, dass viele Fragesteller die Erfahrungen gar nicht zur Kenntnis nehmen wollen, wenn sie der eigenen Wunschvorstellung widersprechen. So etwas nennt man beratungsresistent. Da stellt sich schon mal heraus, dass der Fragesteller schon längst ein Gerät bestellt hat und jetzt gebauchpinselt werden will. Eine Zeitverschwendung für alle.&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit eigenen Geräten lassen bedingt den Schluss zu, welche&lt;br /&gt;
Marken grundsätzlich empfehlenswert sind, weil dort gegebenenfalls mehr auf Qualität geachtet wird.&lt;br /&gt;
&lt;br /&gt;
=== Zusatzkosten beim Kauf im Ausland ===&lt;br /&gt;
Beim Kauf eines scheinbar preisgünstigen Gerätes im Ausland ist Folgendes zu beachten:&lt;br /&gt;
&lt;br /&gt;
Versandkosten, Einfuhrumsatzsteuer, Zoll, e.v. Gebühr für den Paketdienst und die Gebühren für die  Währungsumrechnung sind Kosten, die bei vielen vermeintlichen Internet-Schnäppchen aus dem Ausland (besonders Nicht-EU) noch hinzukommen und bei plakativen Überschriften gerne &amp;quot;vergessen&amp;quot; oder ignoriert werden. Oft wird sich das Angebot selbst schöngeredet. Zudem sind das nicht einmmal alle Kosten, die man zu tragen hat. Zum Beispiel können für manche Zahlungsweisen weitere Gebühren hinzukommen oder Lagergebühren im Zolllager.&lt;br /&gt;
&lt;br /&gt;
Wer nicht vorher rechnet, hat nachher schnell mehr bezahlt als bei einem lokalen Händler. Siehe auch [http://www.zoll.de Zoll].&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist der deutsche Zoll nicht doof. Besonders wenn ein asiatischer Versender auf ein Paket bei der Zollerklärung &amp;quot;Geschenk, Wert $40&amp;quot; schreibt, dann kann man fast sicher sein, dass der deutsche Zoll sich das genauer ansieht. Die Ware landet im Zolllager und man darf den Kaufpreis nachweisen.&lt;br /&gt;
&lt;br /&gt;
Ebenso glaubt der Zoll nicht an kostenlosen Versand und nimmt regelmäßig ziemlich saftige Versandgebühren an, die dann versteuert werden&amp;lt;ref&amp;gt;Passiert das, kann man gegen den Steuerbescheid Widerspruch einlegen. Wie das geht sollte in einer Rechtsbehelfsbelehrung auf dem Steuerbescheid stehen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nochmal zum Mitschreiben, besonders bei Käufen von außerhalb des Zollgebiets der EU sollte man sich vorher mindestens über die folgenden Kosten informieren:&lt;br /&gt;
&lt;br /&gt;
* Versandkosten oder was der Zoll sich bei kostenlosem Versand ausdenkt&lt;br /&gt;
* Versandart (was durch die Post importiert wird, wird vom Zoll anders abgefertigt, als das, was von einem Paketdienst importiert wird)&lt;br /&gt;
* Einfuhrumsatzsteuer&lt;br /&gt;
* Zoll (bei der Warengruppe, in die Oszilloskope gehören, ist der zur Zeit wohl 0%. Das kann sich natürlich ändern)&lt;br /&gt;
* Gebühr Paketdienst. Paketdienste lassen sich die Zollanmeldung und den Papierkrieg zum Teil mit saftigen Gebühren bezahlen. Die sind nicht in den Versandkosten enthalten.&lt;br /&gt;
* Gebühr für Währungsumrechnung&lt;br /&gt;
* Bankgebühr für Zahlung ins Ausland&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
Ein Kauf eines PC-basierten Messinstruments mit Oszilloskopfunktion, das in Deutschland nicht erhältlich ist und einen Kaufwert von 719,- US Dollar in Taiwan hatte, wurde aufgrund der Umrechung mit einem Wert von 589,- Euro veranschlagt. An UST kamen 112,- und an Zollgebühren 46,- Euro hinzu. Zusammen mit dem Versand und Bankgebühren kostete das Gerät insgesamt 790,- Euro. Andere Geräte des Herstellers, die in Deutschland zu beschaffen sind, kosten als deutsches Exemplar kaum mehr, dafür hat man die volle Verbrauchergarantie. Diese sind also in der Regel vorzuziehen, wenn das Gerät in Deutschland beschaffbar ist.&lt;br /&gt;
&lt;br /&gt;
===Spielzeuge aller Art===&lt;br /&gt;
Offensichtlich scheint es gerade Mode zu werden, einen schwachbrüstigen Analog-Digital-Konverter hinter eine eher zufällig gewählte, krumme analoge Eingangsschaltung zu klemmen und an einen Mikrocontroller mit Graphik-LCD anzuschließen.  Das ganze wird als digitales Speicheroszilloskop (DSO) zum Sonderpreis verkauft. Je nach Hersteller wird so ein Gerät komplett ohne Gehäuse geliefert, was mit Hinblick auf die Sicherheit sehr fragwürdig ist, oder es kommt in einem lustig aufgemachten Plastikgehäuse in MP3-Player-Format daher, das auch keine großartige Isolation bietet. Hinzu kommen eindruckschindene Namen und Logos, die die Modernität und Qualität suggerieren sollen, oft noch unterstreichen durch die Nutzung von Open-Source-Kompatibiltät.&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu richtigen Oszilloskopen sind dies leider nur Spielzeuge und es nervt, diese Dinger immer wieder im Forum als das &amp;quot;Beste seit Erfindung von geschnitten Brot&amp;quot; vorgestellt zu bekommen. Ein Blick auf die technischen Daten dieser &amp;quot;Oszilloskope&amp;quot; (sofern die Daten überhaupt angegeben werden) reicht, um festzustellen, dass man ein Spielzeug vor sich hat. Schön für den, der spielen will, schlecht für den, der sicher messen will.&lt;br /&gt;
&lt;br /&gt;
Ebenso verrät ein Blick auf die Schaltung des Analogeingangs, ob man Qualität vor sich hat. Fehlende Spannungsfestigkeit und fehlende Frequenzkompensation des Eingangsverstärkers sind sichere Zeichen für Schund. Wenn es eine Verbindung zum PC gibt, aber diese nicht isoliert ist, ist das ein weiteres Zeichen für Scheinqualität.&lt;br /&gt;
&lt;br /&gt;
In [http://welecw2000a.sourceforge.net/docs/Hardware/GW_Instek_GDS-1152A.pdf] kann man das Innenleben eines richtigen DSO bewundern. Man vergleiche dies mit den Innenleben der Spielzeug-&amp;quot;DSO&amp;quot;s.&lt;br /&gt;
&lt;br /&gt;
Ein anderes, sicheres Zeichen eines Spielzeug-&amp;quot;DSOs&amp;quot; ist es, wenn irgendein Ding aus Abgreifklemmen und Klinkenstecker als &amp;quot;Tastkopf&amp;quot; mitgeliefert wird oder die Buchse für den Tastkopf aus einer Klinkenbuchse oder ähnlicher Niederfrequenz-Anschlusstechnik besteht.&lt;br /&gt;
&lt;br /&gt;
Fazit, wer ein Oszilloskop haben möchte, sollte sich das Geld für ein Spielzeug-&amp;quot;DSO&amp;quot; sparen.&lt;br /&gt;
&lt;br /&gt;
== Was messen Oszilloskope? ==&lt;br /&gt;
&lt;br /&gt;
Oszilloskope zeigen einen Spannungsverlauf über einen relativ kurzen Zeitraum an. Je besser das Oszilloskop, desto länger ist dieser kurze Zeitraum, beziehungsweise desto schneller darf das Signal sein. Darüber hinaus lassen sich andere Größen, zum Beispiel Ströme, anzeigen, wenn man zusätzlich entsprechende Wandler einsetzt, um aus ihnen eine Spannung zu erzeugen. Bei Mehrkanal-Oszilloskopen kann man üblicherweise auch eine Spannung über eine Spannung darstellen (XY-Modus).&lt;br /&gt;
&lt;br /&gt;
Als Kanal bezeichnet man bei einem Oszilloskop einen Eingang für eine Spannung. Die an den Kanäle anliegenden Spannungen können vom Oszilloskop einzeln oder gemeinsam angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich bieten moderne Oszilloskope die Möglichkeit, sich gewisse Kenngrößen der Spannungsverläufe anzeigen zu lassen. Gängige sind zum Beispiel die Anzeige von Spitzenspannung und Effektivwert einer Spannung, Frequenz/Periodendauer, Anstiegs- und Abfallzeiten, Tastverhältnis und so weiter. Darüber hinaus bieten gute Oszilloskope Positionsmarken (Cursor), mit denen man, durch eine Linie dargestellt, auf dem Bildschirm Positionen im Spannungsverlauf markieren kann. Zur Position zugehörige Werte (Zeit oder Spannung), sowie die Differenz dieser Werte zwischen zwei Poitionsmarken können abgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Besonders [[#Digitale_Tischoszilloskope|digitale Oszilloskope]] können relativ viele unterschiedliche Kenngrößen anzeigen, da sich viele dieser Größen mit einfachen Algorithmen aus den vom Oszilloskop im Speicher erfassten Daten berechnen lassen. Ebenso sind einfache mathematische Operationen möglich, etwa eine diskrete Fourier-Transformation oder die Summe oder Differenz der Spannungsverläufe von zwei Kanälen. Oszilloskope der Oberklasse bieten darüber hinaus ausgeklügelte Möglichkeiten der Signalanalyse. &lt;br /&gt;
&lt;br /&gt;
Bereits in der Unterklasse digitaler Oszilloskope ist heutzutage eine PC-Schnittstelle üblich. Beim Kauf sollte man darauf achten, dass das Protokoll der Schnittstelle dokumentiert ist. Sonst ist man auf proprietäre PC-Software des Herstellers angewiesen. Bei Oszilloskopen der Unterklasse wird zwar häufig kostenlos PC-Software mitgeliefert, doch leider sind diese Programme durchgehend von erschreckend schlechter Qualität. Bei Oszilloskopen der Oberklasse lassen sich die Hersteller ihre PC-Software gerne zusätzlich sehr teuer bezahlen.&lt;br /&gt;
&lt;br /&gt;
Für spezielle Anwendungen finden sich in manchen Oszilloskopen besondere Messfunktionen. Zum Beispiel go/no-go Messungen, mit denen eine Spannungsverlauf mit einem vorgegebenen Verlauf verglichen wird. Entspricht der Spannungsverlauf hinreichend dem vorgegebenen Verlauf wird ein &amp;quot;go&amp;quot; (alles ist OK) Signal ausgegeben. Weicht der Verlauf zu stark ab, ein &amp;quot;no go&amp;quot; (Spannung stimmt nicht) Signal.&lt;br /&gt;
&lt;br /&gt;
== Analoge Oszilloskope ==&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
[[Bild:Oszilloskop.png|thumb|right|300px|Hybrides Analog/Digital Oszilloskop]]&lt;br /&gt;
Bei analogen Oszilloskopen wird das darzustellende Signal nach der Verstärkung direkt zur Ablenkung eines Elektronenstrahls verwendet.&lt;br /&gt;
&lt;br /&gt;
Brauchbare analoge Oszilloskope findet man oft schon für ca. 50 Euro bei Online-Auktionen und Kleinanzeigenmärkten. Für 200-400 Euro bekommt man dort recht gute Profigeräte&amp;lt;ref&amp;gt;Ein Gerät, welche mit dem Attribut &#039;&#039;Profigerät&#039;&#039; beworben wird, ist normalerweise keins.&amp;lt;/ref&amp;gt;  mit 60-200 MHz Bandbreite. Brauchbare Neugeräte fangen bei 600 Euro an. Der Oszilloskopmarkt wird von einigen wenigen Marken dominiert. Im höherpreisigen Segment sind es vor allem HP (Agilent) und Tektronix, sowie Yokogawa und Lecroy. Hameg ist vor allem im mittleren Segment (500-1500 Euro) weit verbreitet. Man findet sie oft in Schule und Ausbildung. Preislich darunter finden sich diverse asiatische oder gelegentlich noch osteuropäische Hersteller von Analogoszilloskopen. Häufig treten diese Hersteller nicht unter eigenem Namen auf, sondern bieten ihre einfachen Geräte als OEM-Produkte an. &lt;br /&gt;
&lt;br /&gt;
Ganz einfache Geräte verfügen nur über einen Kanal&amp;lt;ref&amp;gt;Es gibt, beziehungsweise gab, nochmals einfachere Geräte, nämlich solche ohne Trigger. Die Zeiten solcher Gerät sind allerdings seit rund 50 Jahren vorbei. Daher sollte man den fehlenden Trigger nur bei historischen Gebrauchtgeräten finden.&amp;lt;/ref&amp;gt;. Damit ist es nicht möglich, zwei Signale in zeitliche Beziehung zu setzen. Dies ist jedoch oft wichtig. Deshalb verfügen heutzutage auch einfache Geräte meist über zwei Kanäle.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Bandbreite&#039;&#039;&#039; gibt Auskunft, welche Signal-Frequenzen das Oszilloskop noch verarbeiten kann. Bei angegebener Bandbreite fällt die Verstärkung des Oszilloskops um 3dB ab, ein Sinussignal wird dann nur noch mit ca. 70% der wahren Amplitude angezeigt. Um Signalverläufe noch vernünftig interpretieren zu können, kann man grob sagen, dass man Signale bis 1/10 der Bandbreite dargestellt bekommt. Ein Rechtecksignal nahe der Bandbreite würde z.&amp;amp;nbsp;B. nur noch als Sinus dargestellt werden &amp;lt;ref&amp;gt;Häufig wird von Anfängern bei der Bandbreitenbetrachtung vergessen, dass ein Rechtecksignal nicht aus einer einzigen Sinusschwingung der Frequenz f, sondern aus einer theoretisch unendlichen Summe von Signalen der Frequenzen f, 3 * f, 5 * f ... besteht. Für eine vernünftige Darstellung eines Rechtecksignals sollte die Oszilloskopbandbreite so groß sein, dass zumindest die ersten paar Oberwellen nicht zu stark gedämpft werden. Aus dieser Betrachtung ergeben sich Faustformeln, wie die, dass die Bandbreite eines Oszilloskops zehnmal (oder dreimal, oder fünfmal, je nachdem wie genau man messen möchte) größer sein sollte als die Grundfrequenz des Rechtecks.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beim Messen von Digitalsignalen ist man meist an der &#039;&#039;&#039;Anstiegszeit&#039;&#039;&#039; interessiert. Die Anstiegszeit gibt an, wie lange ein Rechtecksignal von 10-90% benötigt. Die Anstiegszeit des Oszilloskops gibt an, welche Anstiegszeit dargestellt wird, wenn man ein nahezu ideales Rechtecksignal mit annähernd Null Anstiegszeit anlegen würde. Man kann die Anstiegszeit direkt aus der Bandbreite berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{Osc} = \frac{0.35}{B}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_A&amp;lt;/math&amp;gt; : Anstiegszeit des Oszilloskops in Sekunden (s)&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, B&amp;lt;/math&amp;gt; : Bandbreite in Hertz (Hz)&lt;br /&gt;
&lt;br /&gt;
Legt man ein reales Rechtecksignal an das Oszilloskop an, dann wird die Anzeige umso mehr verfälscht, je näher die Anstiegszeit des Eingangssignals der Anstiegszeit des Oszilloskops kommt. Dabei gilt folgender Zusammenhang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_S = \sqrt{t_{ges}^2-t_{Osc}^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_S&amp;lt;/math&amp;gt;: Anstiegszeit des Eingangssignals&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{ges}&amp;lt;/math&amp;gt;: Angezeigte Anstiegszeit auf dem Oszilloskop&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{Osc}&amp;lt;/math&amp;gt;: Anstiegszeit des Oszilloskops&lt;br /&gt;
&lt;br /&gt;
Wenn man wirklich schnelle Signale messen will, spielt auch die Bandbreite des verwendeten Tastkopfes eine wichtige Rolle. Näheres dazu findet man [http://www.sigcon.com/Pubs/straight/probes.htm hier].&lt;br /&gt;
&lt;br /&gt;
Oszilloskope unterscheiden sich oft stark in den Triggerungsmöglichkeiten. Bei guten Geräten kann man z.&amp;amp;nbsp;B. die Triggerung variabel verzögern. Erst dadurch wird es möglich, dass man sich Signale genauer anschauen kann, die zeitlich weit hinter einem Triggerereignis kommen. Eine weitere Funktion bei höherklassigen Oszilloskopen ist eine zweite Zeitbasis. Mit dieser kann man in einen Ausschnitt des Messsignals hereinzoomen&amp;lt;ref&amp;gt;Die zweite Zeitbasis steuert einen zweiten Strahl (ähnlich wie einen separaten Kanal), der das gleiche Eingangssignal erhält. Die zweite Zeitbasis wird auf eine höhere Horizontalfrequenz eingestellt als die erste. Zusammen mit einer horizontalen Verschiebung der Darstellung kann man nun Ausschnitte des Signals durchfahren und vergrößert betrachten.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit Analog-Oszilloskopen kann man sich hauptsächlich periodische Signalverläufe anschauen, also solche, die zeitlich immer wiederkehrend sind. Denn nur so kann ein Signal immer wieder auf den Schirm &amp;quot;geschrieben&amp;quot; werden und erscheint als stehendes Bild. Aperiodische Signale, wie z.&amp;amp;nbsp;B. auf Datenübertragungsleitungen, sind damit nicht darstellbar. Sie laufen mit einem Strahldurchgang über den Schirm. In dieser kurzen Zeit ist es jedoch nur selten möglich, sie visuell aufzunehmen. Mit einer Digitalkamera kann man solche Signalverläufe mitunter trotzdem einfangen. Früher sehr hochpreisige, heute nicht mehr übliche Analog-Oszilloskope hatten eine eingebaute Speichermöglichkeit (Speicherröhre) für einmalige Signale. Diese Klasse von Analog-Oszilloskopen wurde durch digitale Speicheroszilloskope (DSOs) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Manche Analog-Oszilloskope bieten eine Möglichkeit, die Triggerung nur zu einem definiertem Zeitpunkt anzustoßen, somit kann auch der Anlaufstrom eines Motors mit einem Analog-Oszilloskop dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Speicheroszilloskope ===&lt;br /&gt;
Inzwischen eher selten sind analoge Speicheroszilloskope anzutreffen. Diese speichern im Gegensatz zu digitalen Speicheroszilloskopen nicht das Signal selbst, sondern das Bild auf der Röhre. Dies wird mit speziellen speichernden Bildröhren erreicht. Je nach Typ kann es mehrere getrennt betreibbare Bereiche geben, um beispielsweise 2 Bilder eines Signales zu unterschiedlichen Zeitpunkten darstellen zu können (z.B. Tektronix 549).&lt;br /&gt;
&lt;br /&gt;
Einige wenige dieser Oszilloskope waren sogar in der Lage, das aufgezeichnete Bild auf Papier auszugeben (z.B. &amp;quot;HP Model 175A&amp;quot; mit Modul 1784A).&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Analogoszilloskope ===&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Neugeräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;analogoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Röhre [cm]&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| generisches 10 MHz Oszilloskop unter Bezeichnungen wie C1-94, S1-94, OS10, AO-610, ST16, CS10, GOS-310, 72-6602, HUC70, CS1010&lt;br /&gt;
| -&lt;br /&gt;
| 130&lt;br /&gt;
| 1&lt;br /&gt;
| 10&lt;br /&gt;
| 4 − 4,8 × 6&lt;br /&gt;
| Seit Jahrzehnten von vielen No-Name Herstellern in unterschiedlichen Ausführungen und Bauformen im Angebot. Wenig empfehlenswert für µC-Arbeiten. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.atten.com.cn/english/products/rf_microwave/AT7328_40.htm Atten AT7328], CS-4128 und andere Bezeichnungen wie 100867.&lt;br /&gt;
| Atten&lt;br /&gt;
| 250&lt;br /&gt;
| 2&lt;br /&gt;
| 20&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM 303-6&lt;br /&gt;
| Hameg&lt;br /&gt;
| 600&lt;br /&gt;
| 2&lt;br /&gt;
| 35&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digitale Speicheroszilloskope ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:tektronix.jpg|thumb|right|300px|Digitales Speicheroszilloskop vom Anfang des Jahrtausends]]&lt;br /&gt;
Ein digitales Speicheroszilloskop (englisch DSO, &#039;&#039;&#039;D&#039;&#039;&#039;igital &#039;&#039;&#039;S&#039;&#039;&#039;torage &#039;&#039;&#039;O&#039;&#039;&#039;scilloscope) digitalisiert das Eingangssignal mit einem Analog-Digital-Wandler und legt die Werte in einem Speicher ab. Der Vorteil daran ist, dass man auf diese Weise Momentaufnahmen eines Signals machen und damit einmalige (transiente) Ereignisse (Spikes, Datenübertragungen) erkennen und darstellen kann, was besonders bei digitalen Schaltungen, z.&amp;amp;nbsp;B. mit Mikrocontrollern, sehr nützlich ist. Weiterhin lässt sich das Signal &amp;quot;vermessen&amp;quot; (z.&amp;amp;nbsp;B. um die Baudrate einer Datenübertragung zu bestimmen), man kann die Frequenz und den Effektivwert anzeigen lassen, das Frequenzspektrum, und je nach Modell noch vieles mehr. Das Signal wird in S/W oder Farbe auf einem LCD dargestellt, lässt sich aber oft auch über einen angeschlossenen Drucker ausdrucken oder an den PC übermitteln.&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Parameter bei digitalen Oszilloskopen ist die &#039;&#039;&#039;Abtastrate&#039;&#039;&#039;, die angibt, mit welcher Geschwindigkeit das Eingangssignal digitalisiert wird. Um ein Signal mit einer bestimmten Frequenz vernünftig darstellen zu können, muss es mindestens mit der 10-fachen Frequenz abgetastet werden&amp;lt;ref&amp;gt;Dieser Anhaltswert liegt über der Nyquist-Frequenz (zweifache Frequenz), da man Abweichungen von der idealen Signalform sehen und beurteilen möchte.&lt;br /&gt;
&lt;br /&gt;
Die zehnfache Abtastfrequenz bedeutet, dass man 10 Messpunkte pro Signalperiode hat, was in einer 1:1 Darstellung auf dem Bildschirm gerade mal 10 nebeneinander liegenden Pixeln entspricht. Das ist immer noch sehr wenig, um ein Signal zu beurteilen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem sind die &#039;&#039;&#039;Speichertiefe&#039;&#039;&#039; und die &#039;&#039;&#039;Wandler-Auflösung&#039;&#039;&#039; interessant. Ein Oszilloskop, das mit acht Bit Auflösung abtastet und 2000*8 Bit Speicher hat, kann 2000 Samples abspeichern, was einer Darstellung von 2000*256 Pixeln entspricht. Acht Bit Auflösung ist heutzutage ein gängiger Wert, auch wenn er niedrig erscheint. Ein normales Oszilloskop ist kein Präzisionsmessgerät und acht Bit sind für die Darstellung auf den Displays normaler Oszilloskope ausreichend.   &lt;br /&gt;
&lt;br /&gt;
Bei der Wandlung und Speicherung gibt es unterschiedliche Verfahren: Ehemals günstige Oszilloskope wie die TDS1000-Serie von Tektronix verwenden &#039;&#039;&#039;CCD-Speicher&#039;&#039;&#039; (Eimerkettenspeicher, ein analoges Schieberegister); die Messwerte werden erst gespeichert, und dann digitalisiert. Nachteile dieser Vorgehensweise sind ein stärkeres Rauschen, die begrenzte Speichertiefe und Totzeiten, während der keine Eingangswerte aufgenommen werden. Diese entstehen, da das Wandeln aller Werte aus dem analogen Zwischenspeicher länger dauert als die Zeit zum Füllen dieses Speichers. Deshalb muss das Gerät bis zum Abschluss der Wandlung warten, bevor es den Speicher erneut füllt.&lt;br /&gt;
&lt;br /&gt;
Früher wandelten nur teurere Modelle in Echtzeit mit schnellen Flash-[[AD-Wandler]]n und speicherten die Messwerte direkt in einem schnellen RAM. Die Speichertiefe ist dabei praktisch unbegrenzt, allerdings sind Wandler sehr teuer, die mehrere GS/s schaffen. Durch einen Trick (mehrere verschachtelte langsame AD-Wandler) setzen sich AD-Wandler bei günstigen Modellen durch. Oszilloskope, die diesen Trick verwenden, erkennt man daran, dass die Abtastfrequenz mit der Anzahl der aktivierten Kanäle sinkt. Zum Beispiel, findet man Vierkanaloszilloskop mit vier Wandlern à 250 MS/s, die bei Benutzung nur eines Kanals 1 GS/s für diesen Kanal erreichen, bei Benutzung von zwei Kanäle 500 MS/s pro Kanal und bei Benutzung von drei oder vier Kanälen 250 MS/s pro Kanal.&lt;br /&gt;
&lt;br /&gt;
In den richtig schnellen Geräten (mehrere GHz Samplerate) ist ein ähnlicher Trick üblich. Dort sind in den verwendeten Wandlerschaltkreisen eine größere Anzahl Sample-and-Hold-Stufen und AD-Wandler integriert. Die Eingangsspannung wird dann zeitversetzt in den Sample-and-Hold-Stufen gespeichert und von den im Vergleich zur Samplerate langsameren AD-Wandlern umgesetzt. Die Ausgangslogik sorgt dann dafür, dass die Daten in der richtigen Reihenfolge ausgegeben werden. Ein Problem bei dieser Vorgehensweise sind unterschiedliche elektrische Eigenschaften der parallelen Wandlerstufen. &lt;br /&gt;
&lt;br /&gt;
Natürlich spielt der Verwendungszweck eine entscheidende Rolle bei der Auswahl. Auf dem Labortisch, wo meist nur kleine Spannungen mit einem gemeinsamen Massebezug vorkommen, werden andere Anforderungen an ein Oszilloskop gestellt, als z.&amp;amp;nbsp;B. im Servicebereich für Industriesteuerungsanlagen, Automatisierungstechnik, usw. Dort sind weniger hohe Abtastraten wichtig, sondern eher eine größere Anzahl Eingangskanäle, die galvanisch voneinander getrennt sind, Spannungsfestigkeit bis min. 500 Volt, sowie speziell bei Störungsanalysen, die Möglichkeit, komplexe Triggermuster einzustellen, und eine integrierte große Festplatte, um einzelne Ereignisse automatisiert über lange Zeiträume hinweg festhalten zu können. Ein Beispiel für so ein hochwertiges Gerät ist ein Yokogawa Scopecorder (DL708). Allerdings sind bei solchen Geräten die Preise nach oben hin offen.&lt;br /&gt;
&lt;br /&gt;
===  Digitale Tischoszilloskope ===&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
&lt;br /&gt;
DSO Tischoszilloskope sind die klassischen, in sich abgeschlossenen Geräte, die in der Gestaltung analogen Oszilloskopen ähneln. Daneben gibt es zum Beispiel auch PC DSOs. Viele Tischgeräte sind bereits so klein (geringe Tiefe) und leicht, dass sie zu Recht als tragbare Geräte bezeichnet werden. Beim Neukauf eines Oszilloskops sind diese Geräte die interessantesten.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile ist es üblich, dass man bereits bei Einsteigermodellen eingebaute USB oder RS-232 Schnittstellen findet und eine (häufig sehr simple) Windows-Software zur Bedienung vom PC aus oder zumindest zum Auslesen von Daten auf den PC. Ebenfalls häufig sind USB oder ähnliche Schnittstellen für USB-Memorysticks oder Speicherkarten zum Speichern von Messwerten, Screenshots und Konfigurationen. Ironischerweise sind Schnittstellen und Windows-Software bei Markengeräten häufig gesondert zu erwerben, während sie bei eher unbekannten Marken kostenlos mitgeliefert werden, wenn auch die Qualität der kostenlosen Software häufig zu wünschen übrig lässt. &lt;br /&gt;
&lt;br /&gt;
Beispiele für günstige Einstiegsmodelle sind einige, aber nicht alle, Geräte von Rigol, Hantek, Owon oder Atten. Für wenig Geld erhält man für einfache Anwendungen brauchbares Oszilloskop mit ein paar Highlights aber auch auffälligen Einschränkungen und Fehlern in der Hard- und Software. Viel oder überhaupt Service kann man von diesen Firmen für sein Geld nicht erwarten.&lt;br /&gt;
&lt;br /&gt;
Geräte von [http://www.instek.com/] sind etwas teurer. Geräte aus der GDS-1000A oder GDS-1000U Serie dürften zum Einstieg interessant sein.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für ein Einstiegsmodell war das [http://www.tek.com/site/ps/0,,40-15314-INTRO_EN,00.html TDS1002] von Tektronix (ca. 1200 Euro). Dazu muss man allerdings sagen, dass Tektronix die aktuelle Entwicklung etwas verschlafen hat. Der nur 2 kByte große Speicher ist einfach nicht mehr zeitgemäß. Geräte der [http://www.home.agilent.com/agilent/product.jspx?nid=-33575.0&amp;amp;cc=DE&amp;amp;lc=ger&amp;amp;pageMode=OV Agilent InfiniiVision 2000X Serie] beginnen in einem ähnlichen Preisbereich aber mit wesentlich mehr Features.&lt;br /&gt;
&lt;br /&gt;
==== Vergleichstabelle digitale Tischoszilloskope ====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;digitaloszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=78 DSO5102B]&lt;br /&gt;
| [http://www.hantek.com.cn/english/ Hantek]&lt;br /&gt;
| mit sehr viel Glück auf eBay 390 + Zoll + Umsatzsteuer ... 520&lt;br /&gt;
| 2&lt;br /&gt;
| 500/1000&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800 x 480, 7&amp;quot; (die auch genutzt werden)&lt;br /&gt;
| 1 x USB Geräte- und 1 x USB Host-Schnittstelle&lt;br /&gt;
| Beliebt, da es einen Hack auf 200 MHz gibt. Ebenso diverse Hacks an der Hardware. Für ein Niedrigpreis-Produkt übliche und verzeihbare Hardware- und Firmware-Macken. Auch als Tekway DST1102B oder Protek 3110 im Handel.&lt;br /&gt;
|-&lt;br /&gt;
| DSO3062A||Agilent||800||2||500 ||60||8||4k||320x240||USB||weitgehend baugleich mit Rigol DS5000&lt;br /&gt;
|-&lt;br /&gt;
| InfiniiVision 2000 X Serie||Agilent|| 950 - 2600 (MSO) ||2 - 4||1 G/Kanal. Bei Benutzung der Hälfte aller Kanäle 2G/Kanal|| 70 - 200 || 8 || 100k || 800 x 480, 8,5&amp;quot;|| ||Markengeräte mit exzellentem Preis-Leistungs-Verhältnis. Software-Aufrüstbar (Funktionsgenerator, Protokoll-Dekoder, usw.)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products_ds1000d.aspx DS1000 Serie]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| 600 - 1650&lt;br /&gt;
| 2&lt;br /&gt;
| 400/200&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 25-100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator&lt;br /&gt;
|-&lt;br /&gt;
| [[Rigol DS1052E]]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| ab 260 Euro + Zoll + Umsatzsteuer (ebay China)&lt;br /&gt;
| 2&lt;br /&gt;
| 1000/500&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 50 (100=DS1102E)&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB, seriell&lt;br /&gt;
| optional 16-Kanal Logikanalysator = DS1052D (DS1102D). Im Netz kursieren diverse, mehr oder weniger ernst zu nehmende Anleitungen, wie man ein DS1052E per Software auf ein DS1102E umrüsten kann.&lt;br /&gt;
|-&lt;br /&gt;
| Owon PDS Serie&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 299,- (PDS5022S); 495,- (PDS6062T); 570,- (PDS7102T)&lt;br /&gt;
| 2&lt;br /&gt;
| 100 - 500&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 5k pro Kanal&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB, seriell incl.&lt;br /&gt;
| Qualität entspricht Preis. Relativ unausgewogenes Verhältnis von Bandbreite zu Samplingrate. Geräte mit einem &#039;S&#039; am Ende der Typenbezeichnung haben ein STN LCD mit niedriger Qualität.&amp;lt;br&amp;gt;nur Real-Time Sampling&lt;br /&gt;
|-&lt;br /&gt;
| [http://owon.com.cn/eng/smartDS.asp Owon SDS Serie]&lt;br /&gt;
| Owon, alias Xiamen Lilliput Technology Co., Ltd&lt;br /&gt;
| 400 (SDS7102)&lt;br /&gt;
| 2&lt;br /&gt;
| 500 M - 3.2 G&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 10M/Kanal&lt;br /&gt;
| 800 x 600, 8&amp;quot;&lt;br /&gt;
| USB Host und Slave, seriell incl., Ethernet, VGA&lt;br /&gt;
| Deutliche Verbesserung gegenüber der alten PDS-Serie. Beeindruckende Speichertiefe (10M) und Bildschirm (8&amp;quot;). Für ein Niedrigpreis-Produkt übliche Hardware- und Firmware-Macken. Neuere Geräte mit verbessertem Hardwaredesign, Firmware wird regelmäßig aktualisiert, menülastige, gewöhnugsbedürftige Bedienung. Akkubetrieb optional&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000 Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 350 - 550&amp;lt;br&amp;gt;(Conrad: 475 - 950)&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25 - 100&lt;br /&gt;
| 8&lt;br /&gt;
| 4k&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| Von Conrad teurer als DSO-4000 Serie erhältlich.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| GW Instek GDS-1000&#039;&#039;&#039;A&#039;&#039;&#039; Serie&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 500 - ?&lt;br /&gt;
| 2&lt;br /&gt;
| bis 1GS/s&lt;br /&gt;
| 60 - 150&lt;br /&gt;
| 8&lt;br /&gt;
| bis 2M&lt;br /&gt;
| 320x234&lt;br /&gt;
| USB (Geräte-Modus, kein Host-Modus), SD Kartenslot&lt;br /&gt;
| [http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Samplerate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auflösung [Bit]&lt;br /&gt;
! Speichertiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Interface&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.instek.com/html/en/products-l.asp?p1sn=17&amp;amp;p2sn=41 GW Instek GDS-2000 Serie]&lt;br /&gt;
| [http://www.instek.com/html/en/index-e.asp GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 850 - 1800&lt;br /&gt;
| 2 - 4&lt;br /&gt;
| 1000&lt;br /&gt;
| 60 - 200&lt;br /&gt;
| 8&lt;br /&gt;
| max. 5000 (alle Kanäle benutzt) / 25000 (ein Kanal in Benutzung)&lt;br /&gt;
| 320x234&lt;br /&gt;
| Inkl. USB (Geräte-Modus zum PC, zwei weitere USB-Buchsen Host-Modus für eine Speicherkarte oder Drucker), RS-232&lt;br /&gt;
| Weitgehend baugleich mit Conrad Voltcraft DSO-8000 Serie. Vier-Kanal Versionen haben keinen externen Trigger und weniger Trigger-Funktionen.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| TDS-1002B&lt;br /&gt;
| Tektronix&lt;br /&gt;
| 1100&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 2.5k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verhältnismäßig starkes Rauschen, siehe Text oben&lt;br /&gt;
|-&lt;br /&gt;
| WaveJet 3xx&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 2800..8000 (brutto)&lt;br /&gt;
| 2 oder 4&lt;br /&gt;
| 1000/2000&lt;br /&gt;
| 100/200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 500k&lt;br /&gt;
| 640x480&lt;br /&gt;
| USB inkl.&lt;br /&gt;
| verfügbar z.&amp;amp;nbsp;B. bei Farnell&lt;br /&gt;
|-&lt;br /&gt;
| WaveAce Serie&lt;br /&gt;
| LeCroy &lt;br /&gt;
| 1000 - 3500&lt;br /&gt;
| 2&lt;br /&gt;
| 250 - 2000&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 4k - 8k&lt;br /&gt;
| 320x240&lt;br /&gt;
| USB (Geräte- und Host-Modus), RS-232(?)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dlm2000.de DLM20XX]&lt;br /&gt;
| YOKOGAWA &lt;br /&gt;
| 3300..8000 (brutto)&lt;br /&gt;
| 2 oder 4 (3+1) wobei 1 wahlweise 8Kanal Digital ist&lt;br /&gt;
| 2500 (1250)&lt;br /&gt;
| 200/350/500&lt;br /&gt;
| 8&lt;br /&gt;
| 12,5MPts&lt;br /&gt;
| 1024x768&lt;br /&gt;
| USB, Ethernet, Browsersteuerung inkl.&lt;br /&gt;
| Vertrieb vom Hersteller direkt!&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UT2025B.html UNI-T UT2025B] / Voltcraft DSO-1022 M&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 290 - 356&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 512k/Kanal&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 320x240 (Monochrom)&lt;br /&gt;
| USB, RS-232.&lt;br /&gt;
| Als UT2025&#039;&#039;&#039;C&#039;&#039;&#039; mit Farbdisplay. UT2000 Serie 25-200MHz, 2CH 250MSa/s bis 1GSa/s&amp;lt;br&amp;gt;wenig Rauschen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UTD2052CEL.html UTD2052CEL]&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 369,-&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 50&lt;br /&gt;
| 8&lt;br /&gt;
| 2x600k &#039;&#039;recording length&#039;&#039;;&amp;lt;br&amp;gt;25k &#039;&#039;saving depth&#039;&#039; ein Kanal;&amp;lt;br&amp;gt;12,5k &#039;&#039;memory depth&#039;&#039; zwei Kanäle&amp;lt;ref&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 800 x 480&amp;lt;br&amp;gt;Der Displaycontroller faßt immer 2x2 Pixel zusammen, dadurch reduziert sich die Auflösung real auf 400 x 240&amp;lt;br&amp;gt;(Menü nimmt relativ viel Platz auf dem Bildschirm ein)&lt;br /&gt;
| USB&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| HM2008&lt;br /&gt;
| [http://www.hameg.com Hameg]&lt;br /&gt;
| 2000&lt;br /&gt;
| 2&lt;br /&gt;
| 2GSa/s(1CH)1GSa/s(2CH)&lt;br /&gt;
| 200&lt;br /&gt;
| 8&lt;br /&gt;
| 4048k&lt;br /&gt;
| Röhre 8x10cm&lt;br /&gt;
| USB für Speicherstick (vorne), USB/RS232 für PC (hinten), &lt;br /&gt;
| 4 Logikkanäle nachrüstbar, Ethernet/USB nachrüstbar&lt;br /&gt;
|-&lt;br /&gt;
| PT 1200&lt;br /&gt;
| [http://www.PEAKTECH.de Peaktech]&lt;br /&gt;
| ca. 360&lt;br /&gt;
| 2&lt;br /&gt;
| 100MSa/s(1CH)100MSa/s(2CH)&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 6k pro Kanal&lt;br /&gt;
| Farb LCD 7,8&amp;quot; 640x480&lt;br /&gt;
| USB für PC (hinten) &lt;br /&gt;
| Im Original vermutlich ein Owon PDS5022S. Optional: Akkupack 7,4 V ~ 8000 mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Marken, die gelegentlich auf dem deutschen Markt auftauchen, häufig über eBay, sind &lt;br /&gt;
&lt;br /&gt;
* GAOtek&lt;br /&gt;
* Hangzhou Jingce (JC)&lt;br /&gt;
* Tonghui&lt;br /&gt;
* Ypioneer&lt;br /&gt;
* Jiangsu Lvyang&lt;br /&gt;
* Siglent (Zweitmarke von Atten)&lt;br /&gt;
&lt;br /&gt;
Über deren Qualität hört man wenig oder gar nichts.&lt;br /&gt;
&lt;br /&gt;
=== PC-Oszilloskope ===&lt;br /&gt;
==== PC-Zusätze ====&lt;br /&gt;
===== Allgemeines &amp;amp; Beachtenswertes =====&lt;br /&gt;
&lt;br /&gt;
PC-Oszilloskope / PC-Zusätze sind im Prinzip digitale Speicheroszilloskope, mit der Besonderheit, dass sie die Daten nicht selbst anzeigen, sondern an einen PC übermitteln. Beim Kauf eines PC-Oszilloskops sollte man besonders vorsichtig sein, da viele Angebote irreführende Informationen enthalten. Sehr beliebt ist z.&amp;amp;nbsp;B. die Werbung mit der Analogbandbreite, also die Bandbreite die der Analogteil der Schaltung (Eingangsverstärker) verarbeiten kann. Wenn hier 100 MHz angegeben sind bedeutet das aber nicht, dass sich auch wirklich Signale bis 100 MHz darstellen lassen; wenn der Wandler nur mit 40 MS/s abtastet ist das Oszilloskop gerade noch bis 4 MHz verwendbar. Ebenso sollte man nur die Echtzeit- oder Realtime-Abtastrate beachten, eine manchmal ebenfalls angegebene &amp;quot;Äquivalent-Abtastrate&amp;quot; ist nur bei periodischen Signalen zu gebrauchen und damit im Umfeld von Mikrocontrollern meist wertlos.&lt;br /&gt;
&lt;br /&gt;
Die Wahl zwischen einem Tischoszilloskop und einem PC-Zusatz ist nicht nur eine Geld-, Leistungs- oder Qualitätsfrage. Ein Tischgerät lässt sich anders bedienen (echte Knöpfe, sicherer Stand) und belegt nicht den PC oder Laptop. Erfahrene Entwickler ziehen ein separates Gerät einem PC-Zusatz vor. Zum Teil ist dies eine Generationsfrage.&lt;br /&gt;
&lt;br /&gt;
Hinzu kommt, dass billige PC-Oszilloskope meist keine galvanische Trennung an ihrer USB-Schnittstelle besitzen. Ein Fehler bei einer Messung kann daher nicht nur das Oszilloskop, sondern gleich den PC mit beschädigen. Das gleiche Problem kann man übrigens auch bei einfachen Tischoszilloskopen mit PC-Schnittstelle haben. Allerdings kann man Tischgeräte auch ohne die PC-Verbindung betreiben, PC-Oszilloskope nicht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich wird geraten, das Oszilloskop, egal ob Tischgerät oder PC-Zusatz, immer über einen &amp;quot;self powered&amp;quot; USB-Hub (einer mit eigenem Netzteil) mit dem PC zu verbinden. Ob ein solcher Hub als Schutzmaßnahme geeignet ist, besonders zum Personenschutz, sei dahingestellt. Schaden sollte er nicht.&lt;br /&gt;
&lt;br /&gt;
Besonders zu beachten ist die PC-Software. Nicht nur, ob sie zum Zeitpunkt des Kaufs wenigstens grundsätzlichen Ansprüchen genügt, sondern auch, ob der Hersteller vermutlich willens und in der Lage ist, die Software über viele Jahre zu warten. Stichwort Investitionssicherheit. Ohne Wartung kann eine Inkompatibilität in der Software zum nächste Windows Service-Pack oder zur nächste Windows-Version das Gerät völlig entwerten.&lt;br /&gt;
&lt;br /&gt;
Leider ist es so, dass es fast keine freie [[Oszilloskop#Software|Oszilloskopsoftware]] gibt. Die Protokolle zwischen Oszilloskop-Vorsätzen und Computer sind meist proprietär, und selten hat sich ein Entwickler freier Software die Mühe gemacht, ein Protokoll zu entschlüsseln. Noch seltener ist es, dass auf dieser Basis eine brauchbare oder gar gute Software geschrieben wurde. So ist ein Ausweichen auf freie Software kaum möglich, sollte der Hersteller die Wartung aufgeben. Man ist im Normalfall auf Gedeih und Verderb dem Hersteller ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
===== Vergleichstabelle PC-Zusätze =====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;sortable&amp;quot; id=&amp;quot;pczusatzoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Sample&amp;amp;shy;rate &amp;lt;BR/&amp;gt;[MS/s]&lt;br /&gt;
! Band&amp;amp;shy;breite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Auf&amp;amp;shy;lösung [Bit]&lt;br /&gt;
! Speicher&amp;amp;shy;tiefe [Samples]&lt;br /&gt;
! Display&lt;br /&gt;
! PC-Inter&amp;amp;shy;face&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.elandigitalsystems.com/support/usbtmfaq/software.php USBscope50]&lt;br /&gt;
| Elan Digital Systems / dt. Vertrieb Hacker&lt;br /&gt;
| 249&lt;br /&gt;
| 1 (-4)&lt;br /&gt;
| 50 / 1000&lt;br /&gt;
| 10 / 75&lt;br /&gt;
| 8&lt;br /&gt;
| 3k pro Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| CAT II, 300V galv. Trennung zu USB, OpenSource SDK, Java, Linux, LabView&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2104&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 185&lt;br /&gt;
| 1&lt;br /&gt;
| 50&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
| 8K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope PS 2105&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 290&lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 24K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2205&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 350&lt;br /&gt;
| 2&lt;br /&gt;
| 200&lt;br /&gt;
| 25&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 16K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=62 DSO-2090 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| 1 Kanal: 100 / 2 Kanäle: 50&lt;br /&gt;
| 40&lt;br /&gt;
| 8&lt;br /&gt;
| 1 Kanal: 64K / 2 Kanäle: 32K&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB &lt;br /&gt;
| Wenige Vorteile gegenüber einem Tischgerät. Analogbandbreite bei der Samplingrate nicht ausnutzbar. Kleiner Eingangsspannungsbereich. Unter diversen anderen Namen erhältlich.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=63 DSO-2150 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| max. 150&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-32K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=64 DSO-2250 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.  &lt;br /&gt;
| 220&lt;br /&gt;
| 2&lt;br /&gt;
| max. 250&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-512K/Kanal&lt;br /&gt;
| auf dem PC&lt;br /&gt;
| USB&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| Mephisto Scope 1 (UM202)&lt;br /&gt;
| Meilhaus&lt;br /&gt;
| 333&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 16&lt;br /&gt;
| 256K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
| 5 in 1,&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Voltmeter,&lt;br /&gt;
Datenlogger analog und digital,&lt;br /&gt;
Digital-I/O&lt;br /&gt;
|-&lt;br /&gt;
| MSO-19&lt;br /&gt;
| Link Instruments Inc.&lt;br /&gt;
| 172&lt;br /&gt;
| 1&lt;br /&gt;
| 200&lt;br /&gt;
| 60&lt;br /&gt;
| ??&lt;br /&gt;
| 1K&lt;br /&gt;
| ..&lt;br /&gt;
| USB&lt;br /&gt;
|&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Pattern Generator,&lt;br /&gt;
TDR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Soundkarten-Oszilloskope ====&lt;br /&gt;
[[Bild:Soundoszi.JPG|thumb|right|300px|Soundkarten Oszilloskop]]&lt;br /&gt;
Wem ein wirklich einfaches Oszilloskop für kleine Frequenzen (bis etwa 20 kHz) ausreicht, bspw. um die Kommunikation am I2C-Bus zu analysieren, kann dazu die Soundkarte des PC benutzen.&lt;br /&gt;
Allerdings eignet sich eine Soundkarte nicht dazu, Gleichspannungen zu messen, zu niederfrequente Signale können daher nicht damit erfasst werden: Im Screenshot nebenan erkennt man das z.&amp;amp;nbsp;B. an der fallenden Gerade am Schluss (obwohl der tatsächliche Signalpegel konstant oben bleibt). Auch ist hier besondere Vorsicht geboten, da Soundkarten nur für geringe Spannungen ausgelegt sind und bei einer zu hohen Eingangsspannung möglicherweise der ganze PC beschädigt wird. Daher ist eine Vorschaltung mit Spannungsbegrenzung (ca 0,7V) nötig. &lt;br /&gt;
&lt;br /&gt;
Der Vorteil der Soundkartennutzung ist, dass es sich dank des PCs um eine Art  Speicheroszilloskop handelt und die Daten zum Beispiel in Excel analysiert werden können.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scheidig.de/Deutsch/Download/SpekOszi/info.htm Hardy u. Karola Scheidig] verschiedene Programme zum Messen mit der Soundkarte.&lt;br /&gt;
* [http://www.sillanumsoft.org/ Visual Analyser] von Alfredo Accattatis und der University of Rome Tor Vergata, &amp;quot;Donateware&amp;quot; &lt;br /&gt;
* [http://www.zeitnitz.de/Christian/scope_en Soundcard Oscilloscope für Windows] von Christian Zeitnitz, kostenlos für Privatanwendung&lt;br /&gt;
* [http://www.qsl.net/dl4yhf/spectra1.html Spectrum Lab von DL4YHF]&lt;br /&gt;
* [http://w5big.com/spectrogram.htm Spectrogram] von R.S. Horne, ältere Version kostenlos&lt;br /&gt;
* [http://www.audiotester.de/ Audiotester 30-Tage-Version kostenlos]&lt;br /&gt;
* [http://www.dasylab.com/ DasyLab] Eingeschränkte Version (Soundkarte und serielle Schnittstelle) als Beilage zum Buch &amp;quot;Signale-Prozesse-Systeme&amp;quot; ISBN 9783642018633&lt;br /&gt;
* [http://www.zelscope.com/ Zelscope] von Constantin Zeldovich 14-Tage Evaluationsversion&lt;br /&gt;
* [http://www.dxzone.com/catalog/Software/Spectrum_analyzers/ Linksammlung]&lt;br /&gt;
==== Grafikkarten-Oszilloskope ====&lt;br /&gt;
Videokarten, die über einen analogen Input verfügen, stellen ebenfalls eine Alternative zu käuflichen Oszilloskopen dar, da sie 3kanalig Frequenzen bis rund 180 MHz verarbeiten können. Die digitale Auflösung liegt meist bei 8 Bit maximal, was für einfache Anzeigen jedoch reicht, wenn die Aussteuerung entsprechend ist. Durch Übersampeln lässt sich die Auflösung wie gehabt steigern, indem man z.B. je 4 Werte softwareseitig zusammenfasst und damit bis zu 2 Bit an Auflösung gewinnt. Bei 16 werten kann man in der Regel statistische 2-3 Bit erwarten und erhält eine Güte von ca 10 Bit bei 10MHz.&lt;br /&gt;
&lt;br /&gt;
=== Selbstbau ===&lt;br /&gt;
&lt;br /&gt;
Selbstbau spart kein Geld. Der Spaß liegt im Bauen.&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse preiswerte Bausätze für Spielzeug-Oszilloskope. Die Ergebnisse nach dem Zusammenbau sind als Oszilloskop wenig brauchbar. &lt;br /&gt;
&lt;br /&gt;
Daneben findet man nur sehr wenige Selbstbau-Projekte deren Ergebnisse überzeugen. Einige interessante Projekte sind [http://www.mikrocontroller.net/topic/228997?goto=new#2308320]n und [http://www.ssalewski.de/DAD.html.de]. Dazu sei allerdings gesagt, dass der Aufwand an Material und Messmitteln schnell die Kosten für ein fertiges Oszilloskop überschreitet.&lt;br /&gt;
&lt;br /&gt;
Auf eBay werden immer noch die Oszilloskope der früheren Firma Wittig (heute Welec), wie zum Beispiel das W2012A, angeboten. Als Alternative zu der fehlerträchtigen Orginalfirmware ist mittlerweile eine Open-Source Variante verfügbar die kontinuierlich weiterentwickelt wird. Ebenfalls wird an Hardware Erweiterungen gearbeitet die die Qualität des Oszilloskops deutlich steigern. Wer sich nicht sicher ist ob das Gerät seinen Ansprüchen genügt sollte bei den Entwicklern nachfragen. [http://sourceforge.net/apps/trac/welecw2000a/wiki] Auch hier ist der Weg das Ziel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR_Softwarepool#Oszilloskop|AVR Softwarepool: Oszilloskop]]&lt;br /&gt;
* [[Einfaches Oszilloskop mit Bascom-AVR]]&lt;br /&gt;
* [[USB_Oszilloskop]]&lt;br /&gt;
* [[Logic_Analyzer]]&lt;br /&gt;
* [[LCS-1M - Ein einfaches, preiswertes, mikrokontrollergesteuertes Zweikanal-Oszilloskop zum Selberbauen]] ([[Picaxe]])&lt;br /&gt;
&lt;br /&gt;
== Links &amp;amp; Literatur ==&lt;br /&gt;
* [http://www.elektronikpraxis.vogel.de/index.cfm?pid=9681 Online-Dossier Grundlagen digitaler Oszilloskope. ] Veröffentlicht auf Elektronikpraxis online&lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/XYZs/03W_8605_3.pdf XYZs of Oscilloscopes Primer]. Tektronix 03W-8605-3. 20091. Grundlagen digitaler Oszilloskope und das messen mit ihnen, wobei die Tektronix-Produktpalette im Vordergrund steht.  &lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/ABCsProbes/60W_6053_9.pdf ABCs of Probes Primer]. Tektronix 60W-6053-9. 2009. Die Grundlagen von Tastköpfen, natürlich am Beispiel von Tektronixs Tastköpfen.&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/1?filter=oszi*+-oszillator Forum-Beiträge zum Thema Oszilloskop] (Kaufberatung, Anwendung)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/3?filter=oszi*+-oszillator Beiträge im Markt-Forum]&lt;br /&gt;
* [http://www.virtuelles-oszilloskop.de/ Ein virtuelles interaktives Oszilloskop] ala HAMEG HM203-6 20 MHz zum Üben (Seite auf [http://www.virtuelles-oszilloskop.com Englisch])&lt;br /&gt;
* [http://www.eosystems.ro/eoscope/eoscope_en.htm Selbstbau-DSO 40MSPS]&lt;br /&gt;
* [http://www.sigcon.com/Pubs/straight/probes.htm Probing High-Speed Digital Designs], Originally published in [http://www.elecdesign.com/ Electronic Design Magazine], March, 1997&lt;br /&gt;
* [http://hackedgadgets.com/2007/12/10/oscilloscope-tutorials/ Oscilloscope Tutorials] Linkliste bei hackedgadgets.com&lt;br /&gt;
* [http://www.eevblog.com/2011/03/30/eevblog-159-oscilloscope-trigger-holdoff-tutorial/ EEVBlog #159] Videotutorial von Dave Jones zu &#039;&#039;&#039;Trigger Holdoff&#039;&#039;&#039;, (engl.)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/167705#1602827 WinXP Software für OsziFox/ProbeScope] von  Micha B. (chameo)&lt;br /&gt;
&lt;br /&gt;
* [http://users.physik.fu-berlin.de/~jtt/fsc2.phtml fsc2] is a program running under GNU/Linux for controlling spectrometers. Supported devices include digitizing oscilloscopes too:&lt;br /&gt;
** Tektronix Digitizing Oscilloscope TDS520, TDS520A, TDS520C, TDS540, TDS744A and TDS754A&lt;br /&gt;
** LeCroy Digitizing Oscilloscope 9400, 9410, 9420, 9424, 9424e and 9450(A)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope Waverunner and Waverunner-2 (LT224, LT 262, LT264, LT342, LT344, LT354, LT362, LT364, LT372, LT374, LT584, 44(M)Xi, 62X1, 64(M)Xi, 104(M)Xi, 204(M)Xi)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope WaveSurfer (422, 424, 432, 434, 452 and 454)&lt;br /&gt;
&lt;br /&gt;
* [http://xoscope.sourceforge.net/ xoscope, oscope] is a digital oscilloscope using input from a sound card or EsounD and/or a ProbeScope/osziFOX and Bitscope hardware. Includes 8 signal displays, variable time scale, math,memory, measurements, and file save/load. (Linux, GPL)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mtoussaint.de/qtdso.html QtDSO] is a frontend for the Velleman PCS64i digital oscilloscope (Anm.: Velleman nicht mehr unterstützt) It provides a fully featured oscillocope mode (including XY  plot and math) and a highly configurable spectrum analyzer mode. Für &#039;&#039;&#039;Digitalmultimeter&#039;&#039;&#039; gibt es vom gleichen Autor [http://www.mtoussaint.de/qtdmm.html QtDMM] und [http://www.mtoussaint.de/qtdmm2.html QtDMM2].&lt;br /&gt;
&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html Osqoop] est un oscilloscope logiciel sous licence libre. Il permet de travailler sur un nombre arbitraire de canaux et des acquisitions de longue durée. Wiki description: [http://gitorious.org/osqoop Osqoop] is a multi-platform open source software oscilloscope based on Qt 4. It connects to various hardware data sources such as the sound input or a dedicated USB board.&lt;br /&gt;
&lt;br /&gt;
*[http://code.google.com/p/gds2000tools/ gds2000tools] ist eine Linux-Software für GW-Instek GDS-2000 und andere GW-Instek Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/xoscillo/ Xoscillo] - A software oscilloscope that acquires data using an Arduino or a Parallax (more platforms to come). (Lizenz: CC-BY-NC-SA 3.0; Windows and Linux (needs mono))&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/oscope2100/ Oscope 2100] Linux software für Hantek DSO-2100.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/openhantek/ OpenHantek] Linux Software für Hantek (Voltcraft/Darkwire/Protek/Acetech) DSO-2090.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/dsoda/ Digital Soda] DSO-2250 Software.&lt;br /&gt;
&lt;br /&gt;
* [http://owondriver.sourceforge.net/ Owon Driver, Ownon Dump] Linux-Treiber für Owon-Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [http://foss.doredevelopment.dk/wiki/Lxi-control Lxi-Control] Kommandozeilen-Applikation zur Fernsteuerung von Geräten mit LXI-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://gpib-utils.sourceforge.net/ gpib-util] Linux Kommandozeilen-Applikation, unterstützt diverse Oszilloskope (und andere Geräte) mit GPIB-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/vxi11/ VXI11] Bibliothek und Programme für Geräte mit VXI-11 Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/wfmreader/ Linux WFM Datenformat-Leser].&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
&lt;br /&gt;
Bei Oszilloskopen (DSOs), die es erlauben, die gemessenen Daten zu einem PC zu übertragen, kann man die Messwerte auf dem PC weiter auswerten. Zum Beispiel ein Signal demodulieren, filtern oder dekodieren. Grundsätzlich ist die Auswertung in jeder Programmiersprache möglich. Programmiersprachen für numerische Berechnungen eignen sich jedoch besonders.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com Matlab] und Clones wie [http://www.scilab.org/ SciLab] oder [http://www.gnu.org/software/octave/ GNU Octave]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com/matlabcentral/fileexchange/?term=Oscilloscope Matlabcentral Fileexchange, Suche nach &#039;&#039;Oscilloscope&#039;&#039;] Auf Matlabcentral Fileexchange finden sich auch MatLab Lese- und Auswertungsfunktionen für diverse Oszilloskope. Hinweis: Die von MatLab für die Kommunikation mit einem Oszilloskop verwendeten Toolboxen und Funktionen fehlen häufig bei den Clones wie GNU Octave. Man ist hier auf das original MatLab angewiesen.&lt;br /&gt;
&lt;br /&gt;
* Eines Ingenieurs unwürdig&amp;lt;ref&amp;gt;Es ist sehr einfach Fehler in Tabellenkalkulationen zu machen, die typischerweise lange unentdeckt bleiben. [http://www.eusprig.org/ Untersuchungen] haben gezeigt, dass bereits dann bis zu 90% aller Tabellenkalkulationsblätter fehlerhaft sind, wenn es nur um einfache mathematische Grundoperationen (Addieren, Subtrahieren, Multiplizieren, Dividieren) geht.&amp;lt;/ref&amp;gt; sind Microsoft Excel oder andere Tabellenkalkulationen. Trotzdem sind sie zur Datenauswertung populär.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70249</id>
		<title>Pegelwandler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70249"/>
		<updated>2012-12-26T17:06:15Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Steuerleitung zwischen uC und FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Dies ist die erste aufgeräumte Version. Sicher nicht die letzte.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-375051.html &amp;quot;Stein des Anstosses&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=pegelwand*+levelsh*&amp;amp;x=0&amp;amp;y=0 Suche in den Forenartikel]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Pegelwandeln (engl. level shifting) wird oft notwendig, wenn Systeme mit unterschiedlicher Ausgangs- und Eingangsspannungen (z.&amp;amp;nbsp;B. Versorgungs- oder Logikspannungen) miteinander verbunden werden sollen. Das vielleicht bekannteste Beispiel ist die Umsetzung von 0V/5V [[TTL]] Logikpegeln auf die -12V/12V Pegel einer seriellen [[RS232]] Schnittstelle. Die Probleme beim Pegelwandeln können sein:&lt;br /&gt;
&lt;br /&gt;
# Überlastung einer oder beider Seiten, bis hin zur Zerstörung&lt;br /&gt;
# Inkompatible Logikpegel und daraus resultierendes Nichtfunktionieren der Schaltung, oder noch schlimmer, sporadische Fehlfunktionen&lt;br /&gt;
# Verzögerungen der Signale durch die Pegelwandlung und daraus resultierende maximale Signalfrequenzen&lt;br /&gt;
&lt;br /&gt;
=== Überlastung ===&lt;br /&gt;
&lt;br /&gt;
Das Erzeugen von verschiedenen Versorgungsspannungen ist ziemlich einfach, aber man muss sicher gehen, daß man die Signalpegel der Bauteile auf Toleranz überprüft. Wenn z.B. ein 5V Bauteil ein Signal an ein 3V Bauteil schickt, können beide Bauteile beschädigt werden. Vor allem für neue ICs ist es ein Problem mit &amp;quot;hohen&amp;quot; Spannungen wie 5V zu arbeiten. Auf Grund der immer kleineren Schaltkreisstrukturen (der aktuelle Pentium wird mit 45nm Technologie hergestellt!) werden auch die Abstände und Schichtdicken immer geringer. Das reduziert natürlich auch die Spannungs- und Stromfestigkeit der Transistoren auf dem IC. Neue ICs vertragen deshalb meist nur noch 3.3V, teilweise sogar weniger! Die Überlastung erfolgt durch zu hohe Spannung und dadurch mehr oder weniger langsame Zerstörung des ICs.&lt;br /&gt;
&lt;br /&gt;
=== Schutzdioden ===&lt;br /&gt;
&lt;br /&gt;
Hauptursache Nummer zwei für Überlastung von ICs mit verschiedenen Betriebsspannungen sind die in nahezu allen ICs integrierten Schutzdioden. Deren Aufgabe ist es in Normalfall, elektrostatische Entladungen auf eine sichere, niedrige Spannung zu begrenzen. Die Entladungen geschehen durch unsachgemässe Handhabung und Transport von ICs, z.&amp;amp;nbsp;B. wenn jemand über einen Kunstfaserteppich läuft, sich dabei elektrostatisch auflädt und einen IC anfasst, oder wenn Bauteile in einem Gerät eingebaut sind und der Anwender berührt offen liegende Kontakte (RS232 Eingang, USB-Stick, PCI-Steckkarten beim Einbau etc.). Auch elektrostatische Entladungen / EMV können Ursache zu hoher Pegel auf den Leitungen sind.&lt;br /&gt;
&lt;br /&gt;
Die Schutzdioden beginnen, Strom zu leiten, wenn die Eingangsspannung ca. 300mV-600mV über VCC ansteigt oder entsprechend unter GND absinkt. Im Normalbetrieb sollten die Schutzdioden keinen Strom leiten. Manchmal kann man sie aber zur Spannungsbegrenzung missbrauchen, siehe [[#STEP-DOWN:_5V_-.3E_3.3V | Spannungsherabsetzung mit Vorwiderstand]].&lt;br /&gt;
&lt;br /&gt;
Besonderes Augenmerk ist hierbei auf die optimale Dimensionierung des R zu legen, um sicherzustellen, dass kein zu hoher Strom über die Schutzdioden abgeführt werden muss. Je nach Chip-Type und Ausgang halten diese zwsichen 100uA und 10mA aus.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_schutzdioden.png]]&lt;br /&gt;
&lt;br /&gt;
=== 5V tolerante Eingänge ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;5-Volt-tolerant&amp;lt;/i&amp;gt; bedeutet, dass 3-Volt-Bausteine ohne Probleme von einem 5-Volt-Baustein angesteuert werden dürfen.&lt;br /&gt;
&lt;br /&gt;
Viele Bauteile mit einer Betriebsspannung von 3 V verfügen über 5-V-tolerante Eingänge. Man sollte aber grundsätzlich im Datenblatt dies nachschauen, bevor die Schaltung aufgebaut wird. Sind sie es nicht, so ist ein &amp;lt;b&amp;gt;Pegelwandler&amp;lt;/b&amp;gt; auf den Verbindungsleitungen zwischen den Bauteilen notwendig. Ein Pegelwandler kann eine einfache Zener-Diode mit einem Widerstand sein, es kann aber auch ein eigens dafür vorgesehener IC sein. Sind die Signalwege bidirektional, so wird man meist die Lösung mit einem eigenen IC bevorzugen.&lt;br /&gt;
&lt;br /&gt;
[[AVR]]s sind generell &#039;&#039;&#039;nicht&#039;&#039;&#039; 5-V-tolerant, wenn sie mit 3,3 V betrieben werden! Die absolute obere Grenze für Eingangsspannungen liegt bei Vcc + 0,5 V. Zu finden in den elektrischen Spezifikationen im Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Ob ein Bauteil 5-V-tolerant ist und unter welchen Betriebsbedingungen das gilt, steht im Datenblatt des betreffenden Bauteils vom betreffenden Hersteller. Wenn es auf diese Eigenschaft ankommt, lieber genau bei Lieferanten nachsehen, von welchem Hersteller die Bauteile kommen.&lt;br /&gt;
&lt;br /&gt;
Vorsicht bei:&lt;br /&gt;
&lt;br /&gt;
* 74&#039;&#039;&#039;LVX&#039;&#039;&#039;xxxx und 74&#039;&#039;&#039;LCX&#039;&#039;&#039;xxxx (245, 244, 240 ...) an Vcc = 3,3 V.&amp;lt;br&amp;gt;&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Nicht alle 74LVX sind für 5 V -&amp;gt; 3,3 V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität von Logikpegeln ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://www.interfacebus.com/Design_Translation.html&lt;br /&gt;
&lt;br /&gt;
Verschiedene Mikroprozessoren haben eigene elektrische Kenndaten für HIGH und LOW Pegel, die abhängig von der Versorgungsspannung sind, z.&amp;amp;nbsp;B. der [[R8C]]:&lt;br /&gt;
&lt;br /&gt;
* HIGH grösser 0,8 * Vcc&lt;br /&gt;
* LOW kleiner 0,2 * Vcc&lt;br /&gt;
&lt;br /&gt;
Man muss die Spannungen der Aus- und Eingänge vergleichen. Wenn es um ein Hobbyprojekt geht, kann man einfach messen. Wenn es um eine kommerzielle Anwendung geht, die man verkaufen will, sollte man besser die Spezifikationen der ICs studieren.&lt;br /&gt;
&lt;br /&gt;
== UNIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
=== 1,8 V -&amp;gt; 5 V ===&lt;br /&gt;
&lt;br /&gt;
* Die besondere Eigenschaft der alten TTL Schaltkreise, nämlich dass Strom bei LOW &#039;&#039;&#039;aus&#039;&#039;&#039; dem Eingang in den treibenden Ausgang fliesst kann man sich zu nutze machen, wie die nachfolgende Schaltung zeigt. In dieser wird der HIGH-Pegel des 1,8-V-Signals durch eine Schottkydiode um ca. 0,3 V auf 2,1 V erhöht. Damit ist man fast offiziell im HIGH-Bereich für TTL (Schaltschwelle 1,4 V, HIGH &amp;gt; 2,0 V). Der LOW-Pegel wird auf ca. 0,3 V erhöht, was voll den TTL-Richtlinien entspricht. Als Schaltkreisfamilie &#039;&#039;&#039;muss&#039;&#039;&#039; ein [[74xx|TTL-Typ]] eingesetzt werdem, also LS, F, AS oder ähnlich. CMOS-Typen wie HC, LVC etc. funktionieren &#039;&#039;&#039;nicht&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_LS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Diese Schaltung entspricht bei HIGH ungefähr einem offenen TTL-Eingang, was zwar meistens funktioniert, aber etwas störempfindlich sein kann. Davon wurde in der TTL-Ära stets abgeraten. Zudem ist der Pegelwechsel LOW nach HIGH durch den niedrigen Strom eher langsam. Man kann das jedoch mit einem Pullup-Widerstand absichern. Dann sind auch Gatter der 74HCT-Reihe einsetzbar.&lt;br /&gt;
&lt;br /&gt;
=== 3.3V -&amp;gt; 5V ===&lt;br /&gt;
&lt;br /&gt;
* 3.3V Pegel werden bei TTL kompatiblen Eingängen richtig erkannt (Schaltschwelle 1,4V). Es ist kein Pegelwandler erforderlich. Direkte Verbindung.&lt;br /&gt;
&lt;br /&gt;
* 5V CMOS Eingänge haben typisch eine minimale Eingangsspannug für HIGH (&amp;lt;math&amp;gt;V_{IH}&amp;lt;/math&amp;gt;) von 0.6 * VCC = 0.6 * 5V = 3V. Das kann ein 3.3V CMOS Ausgang direkt treiben, allerdings kann sich das Zeitverhalten dadurch etwas ändern weil der HIGH Pegel später erkannt wird. Vorsicht! Viele 5V CMOS ICs wollen für HIGH offiziell mindestens 0.7V * VCC = 3.5V oder manche auch 0.8 * VCC = 4.0V! Das geht dann offiziell nicht mehr mit einem 3.3V Ausgang! Für Hobbyzwecke kann man das aber ggf. probieren.&lt;br /&gt;
&lt;br /&gt;
* 3.3V [[Ausgangsstufen_Logik-ICs | Open Collector]] nach 5V (TTL oder CMOS): Einfach einen Pull-Up Widerstand hinzufügen und gut. Allerdings verbraucht der Pull-Up Widerstand bei LOW relativ viel Strom und kann bei HIGH nicht allzuviel Strom liefern. Die Schaltgeschwindigkeit von LOW nach HIGH wird durch die Grösse des Pull-Ups bestimmt.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
* 3,3V auf echte 5V (CMOS) geht am einfachsten mit einem Baustein der HCT Familie (NICHT HC !). Diese haben TTL-compatible Eingänge und echte CMOS Ausgänge&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator in nichtinvertierender Schaltung benutzen (LM339/393). Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_comp_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 74HCTxxx (245, 244, 240 ...)&lt;br /&gt;
* 74HCT125: OE Pins auf Masse und dann das Signal einfach anschließen.&lt;br /&gt;
* SN74LVC07AD&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 9..15V ===&lt;br /&gt;
&lt;br /&gt;
* Am einfachsten geht das mit einem Open Collector Ausgang, einfach einen Pull-Up hinzufügen (an die hohe Spannung) und fertig.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-12.png]]&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator benutzen. Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator. Wenn nur zwei Signale pegelgewandlet werden müssen bietet sich der LM393 an, ein Doppelkomparator mit Open Collector Ausgang, mit dem man auf einen beliebigen Pegel ausgeben kann. Der LM339 ist ein Vierfachkomparator mit den gleichen Eigenschaften. Wenn wenig Platz vorhanden ist, dann ist der TL311 im winzigen SOT-23 Gehäuse sehr empfehlenswert. Bei jedem Komparator kann auch einfach eine Invertierung gemacht werden, einfach die Eingänge + und - vertauschen. Diese Komparatoren eignen sich bis ca. 1 MHz.&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/praxis/bausatz_pegelwandler-mit-transistoren.htm Pegelwandler mit Transistor, invertierend]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_inv.png]]&lt;br /&gt;
&lt;br /&gt;
* Pegelwandler mit Transistor, nicht invertierend&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_ni.png]]&lt;br /&gt;
&lt;br /&gt;
Die Idee ist einfach. Wenn der Ausgang des 5V Gatters auf HIGH ist dann ist der Transistor ausgeschaltet, der Pull-Up Widerstand R7 zieht den Ausgang auf +12V. Ist der Ausgang des 5V Gatters auf LOW ist, dann ist er vollkommen durchgesteuert und der Ausgang nahe 0V (je nach Typ ca. 300mV). Der Vorteil ist hier erhöhte Störsicherheit im Gegensatz zur einfachen Ansteuerung der Basis über einen Vorwiderstand. Ausserdem wird dadurch nicht die Logik invertiert. Nachteilig ist der geringe Strom, der bei HIGH zur Verfügung steht (typisch 100&amp;amp;mu;A). Diese Schaltung ist die seltene Anwendung einer Basisschaltung für digitale Signale.&lt;br /&gt;
&lt;br /&gt;
* Wenn mehr Geschwindigkeit, Ausgangsstrom und weniger Stromverbrauch nötig ist, dann muss ein spezieller Baustein her, wie z.&amp;amp;nbsp;B.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
** [[Mosfet-Übersicht#Mosfet-Treiber|MOSFET-Treiber]] z.B. ICL7667&lt;br /&gt;
** [[H-Brücken Übersicht | Motortreiber]] ICs: (z.&amp;amp;nbsp;B. L293, L298, UCC27325 und deren Verwandte), wenns nicht zu schnell ist (einige Dutzend kHz)&lt;br /&gt;
** CD40109, bei Reichelt verfügbar&lt;br /&gt;
** HEF4104, 4fach LOW-HIGH Pegelwandler mit normalen und invertierten Augängen sowie Tristate. Um ggf. sicherzustellen, dass wie im Datenblatt beschrieben immer VDDI &amp;lt;= VDDO ist, kann man einfach eine Diode von VDDO nach VDDI schalten (z.&amp;amp;nbsp;B. Schottky SB120, aber auch 1N4148 &amp;amp; Co sollte problemlos funktionieren)&lt;br /&gt;
** CMOS 4504, 6fach LOW-HIGH/HIGH-LOW 3-20V Pegelwandler, TTL/CMOS (umschaltbar) =&amp;gt; CMOS, kein Reihenfolge von Vcc/Vee erforderlich (Bezugsquelle: CSD)&lt;br /&gt;
** MAX232, der braucht nur 5V Versorgungsspannung. Allerdings ist der Ausgangswiderstand relativ hoch (ca. 300Ω) und man kann nur ca. 5mA Ausgangstrom liefern. Die Ausgangsspannung beträgt maximal 10V.&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Zuerst sollte man prüfen, ob die Eingänge 5V tolerant sind. Dann kann man die ICs direkt verbinden. Sehr schnell und billig!&lt;br /&gt;
&lt;br /&gt;
* Wenn die Eingänge nicht 5V tolerant sind und es trotzdem schnell sein soll, muss ein Gatter aus der LVC oder AHC Familie dazwischen geschaltet werden. Bei 3V Betriebsspannung kann man problemlos 5V an den Eingang anlegen. Der Baustein 74HC4050 erlaubt per Definition eine Pegelwandlung bis etwa 15V (siehe Datenblatt). Beide Anordungen verbrauchen auch sehr wenig Ruhestrom.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* 74LVC245A (&#039;A&#039; ist wichtig, I/Os 5V-tolerant)&lt;br /&gt;
:* 74LVC245DW &lt;br /&gt;
:* 74LVT245 &lt;br /&gt;
:* 74LVXxxx (245, 244, 240 ...) an Vcc=3,3V. Achtung: Nicht alle 74LVX sind für 5V -&amp;gt; 3,3V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
:** 74LVX04 &lt;br /&gt;
:** 74LVX244 (Fairchild)&lt;br /&gt;
:** 74LVX245 (nicht von Reichelt, nicht 5V tolerant)&lt;br /&gt;
:** bei TI heissen die 74LVX... nur 74LV...&lt;br /&gt;
&lt;br /&gt;
:* 74HC4050 (bis 15V Step Down Pegelwandlung laut Datenblatt, bei Reichelt in DIP und SO erhältlich)&lt;br /&gt;
:* MAX3373/MAX3375&lt;br /&gt;
:* NC7SZ08 oder andere aus derselben Serie. CMOS-Logik mit 5V-toleranten Eingängen, recht flott und braucht dank SOT-23 auch wenig Platz auf dem Print&lt;br /&gt;
&lt;br /&gt;
* 5V Open Collector auf 3.3V Eingang. Einfach einen Pull-Up hinzufügen (Pull-Up liegt auf 3.3V). Nachteilig ist der relativ hohe Stromverbrauch bei LOW, die begrenzte Geschwindigkeit bei hochohmigen Pull-Ups und der relativ geringe Ausgangsstrom bei HIGH (abhängig vom Pull-Up).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* Spannungsteiler mit 680Ω und 1kOhm. Der Nachteil dieser Lösung ist der relativ hohe Stromverbrauch (~3mA), der relativ geringe Ausgangsstrom (mehr als 200..300uA sollte man da nicht rausziehen) und die relativ geringe Geschwindigkeit (ca. 10 MHz).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_st_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* 1 kOhm Vorwiderstand. Dadurch wird der Strom vom 5V Ausgang in die 3.3V Versorgung durch die internen Schutzdioden auf ca. 1mA begrenzt. Diese Lösung ist auch relativ langsam (ca. 5MHz). Ggf. kann man den Vorwiderstand auf 100Ω reduzieren, das erhöht dann wieder die Geschwindigkeit. Aufpassen, einige ICs vertragen nur 1mA oder weniger durch die Schutzdioden! Ausserdem muss man aufpassen, das jetzt von der 5V Seite Strom in die 3.3V Versorgung eingespeist wird. Besonders in Schaltungen mit sehr niedrigem Stromverbrauch kann das zum Problem werden, wenn weniger Strom verbraucht wird als über die Vorwiderstände eingespeist wird. Dann nimmt es meist der Spannungsregler für 3.3V übel wenn jemand &amp;quot;schiebt&amp;quot;, sprich, Strom einspeist. Denn die allermeisten Spannungsregler können nur Strom liefern (source), aber keinen Strom aufnehmen (sink). Es gibt 4-fach-Diodennetzwerke, die die internen Schutzdioden entlasten können (Schottkydioden mit kleinerer Flusspannung von ~0,3V als die internen Silizizumdioden mit ~0,7V), außerdem ist teilweise noch eine [[Diode#Z-Diode|Zenerdiode]] enthalten, die ggf. den überschüssig eingespeisten Strom aufnehmen kann. &lt;br /&gt;
&lt;br /&gt;
[[bild:pw_vw_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Mindestens für 74HC(T) Gatter ist dokumentiert (Philips 74HC/T High-Speed CMOS User Guide), dass auch schon geringer Strom durch die internen Schutzdioden zu einer unerwünschten Kopplung von Eingängen führen kann, d.h. der Strom fliesst zu einem anderen Eingang wieder hinaus. Sind also andere Eingänge ebenso hochohmig angeschlossen, kann dieser Querstrom zu Fehlfunktion führen.&lt;br /&gt;
&lt;br /&gt;
== BIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
Für bidirektionale Busse gibt es spezielle Pegelwandler mit 2 Versorgungsspannungen. Allerdings brauchen die meist ein Signal zur Richtungsumschaltung. Auch muss man die Reihenfolge der Versorgungsspannungen beim Einschalten beachten. Aktive bidirektionale Pegelwandler OHNE Steuereingang zur Richtungsumschaltung sind mit Vorsicht zu geniessen, denn die brauchen teilweise kurzzeitig einen relativ hohen Strom, um die Eingänge zu treiben.&lt;br /&gt;
&lt;br /&gt;
=== 5V &amp;lt;-&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Wenn die 5V Seite TTL-kompatible Eingänge hat kann wieder der Spannungsteiler oder Vorwiderstand wie bei der unidirektionalen Anpassung verwendet werden (mit all seinen Vor- und Nachteilen).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SN74CB3T3306&lt;br /&gt;
* SN74CBTD3861 (10 Bit,flow through, Betrieb mit 5 Volt)&lt;br /&gt;
* MAX1741 &lt;br /&gt;
* MAX3378E &lt;br /&gt;
* 74AHC126 s.u.&lt;br /&gt;
* ST2378 (bei CSD erhältlich, 3.5 eur, leider TSSOP)&lt;br /&gt;
* TXS0104E (TI: 4-BIT BIDIRECTIONAL VOLTAGE-LEVEL TRANSLATOR FOR OPEN-DRAIN AND PUSH-PULL APPLICATIONS)&lt;br /&gt;
* SN74LVC07A&lt;br /&gt;
&lt;br /&gt;
=== 1,65V...5,5V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74LVC1T45&lt;br /&gt;
* SN74LVC2T45&lt;br /&gt;
* SN74LVC(H)8T245&lt;br /&gt;
* SN74LVC(H)16T245&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* TXB0101&lt;br /&gt;
* TXB0102&lt;br /&gt;
* TXB0104&lt;br /&gt;
* TXB0106&lt;br /&gt;
* TXB0108&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,2V...3,6V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74AVC(H)1T45&lt;br /&gt;
* SN74AVC(H)2T45&lt;br /&gt;
* SN74AVC(H)4T245&lt;br /&gt;
* SN74AVC(H)8T245&lt;br /&gt;
* SN74AVC(H)16T245&lt;br /&gt;
* SN74AVC(H)20T245&lt;br /&gt;
* SN74AVC(H)24T245&lt;br /&gt;
* SN74AVC(H)32T245&lt;br /&gt;
&lt;br /&gt;
=== 1,5V...3,6V &amp;lt;-&amp;gt; 1,5V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* 74LVC4245A&lt;br /&gt;
&lt;br /&gt;
== Mit galvanischer Trennung ==&lt;br /&gt;
&lt;br /&gt;
* [[Optokoppler]]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_opto.png]]&lt;br /&gt;
&lt;br /&gt;
* GMR-Koppler von der Firma NVE &lt;br /&gt;
* iCoupler Technologie von der Firma Analog Devices&lt;br /&gt;
* [[Kapazitiver Koppler]]&lt;br /&gt;
&lt;br /&gt;
Lit.: &#039;&#039;Galvanische Trennung: Optokoppler, GMR-Koppler oder iCoupler?&#039;&#039;, Siegfried W. Best, Redaktion elektronik industrie, [http://www.elektronik-industrie.de/ei/11,2003/article/2f0082f824c.html elektronik industrie 11-2003, S. 22ff.]&lt;br /&gt;
&lt;br /&gt;
== Praktische Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Einfaches RS232-Interface ===&lt;br /&gt;
&lt;br /&gt;
[http://web.archive.org/web/20050122013618/http://www.henrik-reimers.de/control/rs232interface.gif Erfolgreicher Einsatz bis 19200 Baud und bis zu 10 m Leitungslänge]&lt;br /&gt;
&lt;br /&gt;
Beschränkungen:&lt;br /&gt;
&lt;br /&gt;
* ggf. Platzbedarf&lt;br /&gt;
* Geschwindigkeit s.o.&lt;br /&gt;
&lt;br /&gt;
Beispiel: http://www.hagtech.com/pdf/translator.pdf&lt;br /&gt;
&lt;br /&gt;
=== [[I2C]]-Bus: gemeinsam 3.3V und 5V ===&lt;br /&gt;
&lt;br /&gt;
* [[MSP430]] an 3,3V/5V: http://www-s.ti.com/sc/psheets/slaa148/slaa148.pdf&lt;br /&gt;
&lt;br /&gt;
* Philips [http://www.nxp.com/documents/data_sheet/PCA9515.pdf PCA9515]: I2C Puffer mit Pegelwandlung. Der PCA9515 ist ein I2C-Bus Repeater, welcher I2C Busse mit verschiedenen Spannungen isoliert. Verfügbar bei Reichelt und DigiKey.&lt;br /&gt;
&lt;br /&gt;
* [http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf Philips AN97055 Bi-directional level shifter for I²C-bus and other systems]&lt;br /&gt;
&lt;br /&gt;
* Bevor man ein Philips I2C Chip auswählt sollte man prüfen ob er verfügbar ist und auch das verfügbare Gehäuse wählen. Man sollte auch überlegen ob ein Puffer wirklich gebraucht wird. Wenn man echte I2C ICs mit 5V betreibt, dann sind die Eingänge vom Typ Schmitt Trigger CMOS (z.&amp;amp;nbsp;B. PCF8574). Dann müssen 3.3V Pegel auf 5V umgesetzt werden. Wenn man jedoch SMBUS Ics verwendet (z.&amp;amp;nbsp;B. ADT7461, Silabs 8051) dann sind die Schwellspannungen TTL kompatibel und es ist keine Anpassung notwendig. Für neue Pegelwandler sollte man hier nachschauen. http://www.bus-buffer.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/article/CA193193.html &amp;quot;Two-transistor circuit replaces IC&amp;quot;]. Für diese Anwendung kann ENABLE direkt mit 3.3V verbunden werden. Es ist eigentlich nur dazu da, den ICs &amp;quot;hot-swappable&amp;quot; zu machen (kann unter Spannung gesteckt und getrennt werden). Es geht sogar mit nur einem [[Transistor]] [http://www.mikrocontroller.net/topic/92447 siehe Forum]. Man sollte beachten, daß die Schaltung sowohl für SCL als auch SDA benötigt wird. &lt;br /&gt;
* Noch einfachere Lösungen mit nur einem MOSFET und zwei Pull-Up Widerständen pro Leitung sind in den folgenden Links zu finden. Vielleicht ist es sogar noch billiger Bipolartransistoren zu verwenden.&lt;br /&gt;
** http://www.semiconductors.philips.com/markets/mms/protocols/i2c/facts/#levelshifting&lt;br /&gt;
** http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf (Kapitel 18), bei der Berechnung der erreichbaren Geschwindigkeit dürfen die parasitären Kapazitäten der FETs nicht ignoriert werden&lt;br /&gt;
&lt;br /&gt;
=== Auswählbare Pegel ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ein CMOS Logikpegel zwischen 1,8V, 2,5V und 3,3V (abhängig von der Anwendung) muss auf 5V CMOS Logikpegel gewandelt werden. Es geht nur um diese Richtung mit maximal 8MHz. Es gibt die Stromversorgung für alle Pegel. Ein normaler Komparator wie LM311 ist nicht möglich, da er beim Betrieb mit 5V Versorgunsspannung erst ab 1V zu schalten anfängt. Meine Idee ist die Verwendung eines High Speed OPVs mit R2R Eingang, z.&amp;amp;nbsp;B. LMH6645.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* Man könnte einen ultra-low threshold N-Kanal MOSFET nehmen und als Open Drain mit einem Pull-Up nach 5V betreiben, BSH103 könnte passen (Schwellspannung ~0,4V).&lt;br /&gt;
* High-Speed Single Supply Komparator wie z.&amp;amp;nbsp;B. [http://www-s.ti.com/sc/ds/tl712.pdf TL712] .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ich suchen einen IC, welcher eine Pegelwandlung von 3,3V nach 1,8V, 2,0V oder 5V ermöglicht und während des Betriebs umgeschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* So ein IC ist der Linear [http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1007,C1071,P1601 LTC1555L-1.8] . &lt;br /&gt;
&lt;br /&gt;
=== AVR SPI (SDC/MMC)===&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;bidirektionalen Betrieb&#039;&#039;&#039; zwischen 5V-AVR und 3,3V-Geräten und anders herum gibt es den Level-Translator &#039;&#039;&#039;MAX3378E&#039;&#039;&#039; von Maxim.&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenrichtung am SPI im Zielsystem festgelegt ist, reichen &#039;&#039;&#039;unidirektionale Bausteine&#039;&#039;&#039;:&lt;br /&gt;
* 3x von 5V nach 3,3V und 1x von 3,3V nach 5V: &#039;&#039;&#039;MAX3392E&#039;&#039;&#039;&lt;br /&gt;
* 1x von 5V nach 3,3V und 3x von 3,3V nach 5V: &#039;&#039;&#039;MAX3390E&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zum Anschließen einer SDC/MMC an einen 5V-AVR eignen sich somit der MAX3978E und der MAX3392E. Beide sind u.A. im winzigen TSSOP-14-Gehäuse verfügbar, nehmen sehr wenig Energie auf und eignen sich auch für andere Spannungen. Mit 3,3 und 5V beträgt die garantierte Übertragungsrate 8Mbps.&lt;br /&gt;
&lt;br /&gt;
* [http://datasheets.maxim-ic.com/en/ds/MAX3372E-MAX3393E.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit zum Übersetzen zwischen 3,3 und 5V liegt in der Verwendung des &#039;&#039;&#039;74LVC245&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
5V-AVR an eine MMC (ohne Level-Shifter-Baustein):&lt;br /&gt;
* [http://www.microsyl.com/index.php/2010/03/24/led-sign-with-mmc-memory-card/ Projektseite] &lt;br /&gt;
* [http://www.microsyl.com/projects/ledsign/ledsign1.pdf Schaltplan]&lt;br /&gt;
&lt;br /&gt;
=== µC &amp;lt;-&amp;gt; Parallelport ([[ISP]]-Dongle, [[JTAG]] Wiggler, ...) ===&lt;br /&gt;
&lt;br /&gt;
Dieser Schaltplan funktioniert auch bei 3.3V wenn man einen 74&amp;lt;B&amp;gt;HC&amp;lt;/B&amp;gt;244 anstatt eines 74&amp;lt;B&amp;gt;LS&amp;lt;/B&amp;gt;244 verwendet: [http://www.epanorama.net/circuits/parallel_output.html Parallel port interfacing made easy: Simple circuits and programs to show how to use PC parallel port output capabilities].&lt;br /&gt;
&lt;br /&gt;
=== Doppeltes Leitungspaar RX/TX 5V/3,3V ===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.hackaday.com/2008/06/19/sparkfuns-logic-level-converter/ SparkFun&#039;s Logic Level Converter] ist eine Baugruppe mit MOSFETs [http://www.fairchildsemi.com/pf/BS/BSS138.html BSS138] für die Pegelwandlung von 5V auf 3,3V. 5V/2,8V und 5V/1,8V sind ebenfalls machbar.&lt;br /&gt;
&lt;br /&gt;
=== Steuerleitung zwischen uC und FPGA ===&lt;br /&gt;
Oftmals werden PLDs oder FPGAs per Microcontroller-Platine angesteuert. Ältere Typen laufen meist als 5V oder sitzen in 5V-kompatiblen Platinen. Sollen moderne FPGAs angesteuert werden, trifft man fast immer auf 3,3V-Typen, bzw muss sogar 2,5V / 1,8V-Bänke beschalten, wenn nur noch dort Pins frei sind. Die 5V sind also im Extremfall auf 1,8V herabzusetzen, was bei einem maximal zulässigen Diodenstrom von 3mA (Beispiel Xilnx) einen Mindestwiderstand von ca 1kOhm erfordert. Die resultierende maximale Schaltfrequenz liegt dann bei einem typischen FPGA-Eingang bei etwa &amp;lt;500kHz. Soll der Eingang aus Belastungsgründen nicht mit mehr, als 0,3mA belastet werden, müsste der Widerstand auf 10k steigen, wodurch die Frequenz auf 1/10 sinkt. Zudem ist der Eingang dann störempfindlicher. Daher ist es besser, man schaltet dem Eingang eine zusätztliche Z-Diode bei und dimensioniert den R so, dass die Strombelastbarkeit des Mircocontrollers ausgelastet wird.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist es, die Spannung mit einer Diode in Vorwärtsrichtung herabzusetzen. Dann muss jedoch der Vorwiderstand noch exakter toleriert werden und auch Abweichungen der Spannung (Welligkeit) berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Umgekehrt ist es oft nötig, dass Bausteine einen fremden Chip treiben müssen, dessen Eingang bereits mit einem pull-up versehen ist. Über diesen wird dann stets ein Strom in die Schutzdioode eingeprägt, auch wenn der Ausgang auf high geht. Soll z.B. von einem PLD oder einem FPGA aus eine Mikrocontrollerplatine bedient werden, die über einen pull-up von 1k verfügt, würden immer ca 1mA in die Schutzdiode eingeprägt. Hier kann eine Diode helfen, die Spannung genügend herabzusetzen, um den Ausgang zu schützen und dennoch die Funktion zu erhalten, dann beim Schalten des GND nun keine 0,3V mehr erzielt werden, sondern geschätzte 1V, was aber meistens für das Erkennen einer &#039;0&#039; noch sicher reicht.&lt;br /&gt;
&lt;br /&gt;
= Bauteile =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;74ALVC164245&#039;&#039;&#039; - &#039;&#039;16bit dual supply translating transceiver&#039;&#039;. Eine Seite von 1.5V bis 3.6V, die andere von 1.5 bis 5.5V.&lt;br /&gt;
* &#039;&#039;&#039;74LVX573&#039;&#039;&#039; (unidirektional, Latch, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX245&#039;&#039;&#039; (bidirektional, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX125&#039;&#039;&#039; - &#039;&#039;Low Voltage Quad Buffer with 3-STATE Outputs&#039;&#039;. http://www.fairchildsemi.com/pf/74/74LVX125.html&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC2T45&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC8T245&#039;&#039;&#039; - &#039;&#039;8-Bit Dual-Supply Bus Transceiver with Configurable Voltage Translation and Three-State Outputs&#039;&#039;. http://focus.ti.com/docs/prod/folders/print/sn74lvc8t245.html&lt;br /&gt;
* &#039;&#039;&#039;74LCX244MSA&#039;&#039;&#039; von Fairchild.&lt;br /&gt;
* &#039;&#039;&#039;MAX3377&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAX3000&#039;&#039;&#039; 8-Kanal bidirektioneler Pegelwandler ohne Richtungsumschaltung&lt;br /&gt;
* &#039;&#039;&#039;ADG3308&#039;&#039;&#039; 8-Kanal bi-dir. Pegelwandler ohne Richtungsumschaltung, 1,15V..5,5V, 50MBps&lt;br /&gt;
&lt;br /&gt;
Vierfachdioden im kleinen 6-poligen SMD-Gehäuse:&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/12635/dsilc6-4xx.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/11599.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/6477/dalc208.pdf&lt;br /&gt;
* [http://www.diodes.com/datasheets/ds30195.pdf QSBT40, vierfach Schottky Terminator für Datenleitungen]&lt;br /&gt;
* [http://www.littlefuse.com/data/en/Data_Sheets/SP724Lead_Free.pdf SP724, Siliziumschutzarray]&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
&lt;br /&gt;
* Holmes D., [http://delphys.net/d.holmes/hardware/levelshift.html Bi-directional level-shift with MOSFETs]&lt;br /&gt;
* Gaurang Kavaiya, [http://www.edn.com/contents/images/6335309.pdf Don’t pay for level translators in systems using multiple power-supply voltages], EDN, MAY 25, 2006, 81-86 (PDF)&lt;br /&gt;
* [http://www.elektronik-kompendium.de/public/schaerer/scf3_lc.htm Einfacher Pegelwandler im ELKO]&lt;br /&gt;
* [http://www.prog-link.com/dcf77/dcf77-17.html Pegelwandler für DFC77 Module]&lt;br /&gt;
* [http://elektronik.kai-uwe-schmidt.de/index.php?page=mp3_blueschaltung Pegelwandler für [[I2C]] Bus in einem MP3 Player]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment.php/256452/levelshifter.pdf Application Note von Philips, I2C Pegelwandler]&lt;br /&gt;
* [http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf I2C Spezifikation]  &lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-234277.html#new Forumsbeitrag zum Thema 1,8V-5V Pegelwandler] &lt;br /&gt;
* [http://www.st.com/stonline/products/literature/ds/5186/74lcx16245.pdf 74LCX16245, 16 Bit Pegelwandler]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/buffers/ LVC Logikfamilie]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/transceivers/ LVC Tranceiver]&lt;br /&gt;
* [http://www.leg-gmbh.de/html/signalanpassung.html Pegelwandler für die Automatisierungstechnik]&lt;br /&gt;
* [http://www.microchip.com/stellent/groups/techpub_sg/documents/devicedoc/en026368.pdf 3V Tips ‘n Tricks] (PDF) von Microchip&lt;br /&gt;
* [http://www.ti.com/lit/an/slaa148/slaa148.pdf Interfacing the 3-V MSP430 to 5-V Circuits] (PDF) von Texas Instruments&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Kategorie:Datenübertragung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70248</id>
		<title>Pegelwandler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70248"/>
		<updated>2012-12-26T16:55:03Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* 2 Leitungspaare RX/TX 5V/3,3V */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Dies ist die erste aufgeräumte Version. Sicher nicht die letzte.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-375051.html &amp;quot;Stein des Anstosses&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=pegelwand*+levelsh*&amp;amp;x=0&amp;amp;y=0 Suche in den Forenartikel]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Pegelwandeln (engl. level shifting) wird oft notwendig, wenn Systeme mit unterschiedlicher Ausgangs- und Eingangsspannungen (z.&amp;amp;nbsp;B. Versorgungs- oder Logikspannungen) miteinander verbunden werden sollen. Das vielleicht bekannteste Beispiel ist die Umsetzung von 0V/5V [[TTL]] Logikpegeln auf die -12V/12V Pegel einer seriellen [[RS232]] Schnittstelle. Die Probleme beim Pegelwandeln können sein:&lt;br /&gt;
&lt;br /&gt;
# Überlastung einer oder beider Seiten, bis hin zur Zerstörung&lt;br /&gt;
# Inkompatible Logikpegel und daraus resultierendes Nichtfunktionieren der Schaltung, oder noch schlimmer, sporadische Fehlfunktionen&lt;br /&gt;
# Verzögerungen der Signale durch die Pegelwandlung und daraus resultierende maximale Signalfrequenzen&lt;br /&gt;
&lt;br /&gt;
=== Überlastung ===&lt;br /&gt;
&lt;br /&gt;
Das Erzeugen von verschiedenen Versorgungsspannungen ist ziemlich einfach, aber man muss sicher gehen, daß man die Signalpegel der Bauteile auf Toleranz überprüft. Wenn z.B. ein 5V Bauteil ein Signal an ein 3V Bauteil schickt, können beide Bauteile beschädigt werden. Vor allem für neue ICs ist es ein Problem mit &amp;quot;hohen&amp;quot; Spannungen wie 5V zu arbeiten. Auf Grund der immer kleineren Schaltkreisstrukturen (der aktuelle Pentium wird mit 45nm Technologie hergestellt!) werden auch die Abstände und Schichtdicken immer geringer. Das reduziert natürlich auch die Spannungs- und Stromfestigkeit der Transistoren auf dem IC. Neue ICs vertragen deshalb meist nur noch 3.3V, teilweise sogar weniger! Die Überlastung erfolgt durch zu hohe Spannung und dadurch mehr oder weniger langsame Zerstörung des ICs.&lt;br /&gt;
&lt;br /&gt;
=== Schutzdioden ===&lt;br /&gt;
&lt;br /&gt;
Hauptursache Nummer zwei für Überlastung von ICs mit verschiedenen Betriebsspannungen sind die in nahezu allen ICs integrierten Schutzdioden. Deren Aufgabe ist es in Normalfall, elektrostatische Entladungen auf eine sichere, niedrige Spannung zu begrenzen. Die Entladungen geschehen durch unsachgemässe Handhabung und Transport von ICs, z.&amp;amp;nbsp;B. wenn jemand über einen Kunstfaserteppich läuft, sich dabei elektrostatisch auflädt und einen IC anfasst, oder wenn Bauteile in einem Gerät eingebaut sind und der Anwender berührt offen liegende Kontakte (RS232 Eingang, USB-Stick, PCI-Steckkarten beim Einbau etc.). Auch elektrostatische Entladungen / EMV können Ursache zu hoher Pegel auf den Leitungen sind.&lt;br /&gt;
&lt;br /&gt;
Die Schutzdioden beginnen, Strom zu leiten, wenn die Eingangsspannung ca. 300mV-600mV über VCC ansteigt oder entsprechend unter GND absinkt. Im Normalbetrieb sollten die Schutzdioden keinen Strom leiten. Manchmal kann man sie aber zur Spannungsbegrenzung missbrauchen, siehe [[#STEP-DOWN:_5V_-.3E_3.3V | Spannungsherabsetzung mit Vorwiderstand]].&lt;br /&gt;
&lt;br /&gt;
Besonderes Augenmerk ist hierbei auf die optimale Dimensionierung des R zu legen, um sicherzustellen, dass kein zu hoher Strom über die Schutzdioden abgeführt werden muss. Je nach Chip-Type und Ausgang halten diese zwsichen 100uA und 10mA aus.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_schutzdioden.png]]&lt;br /&gt;
&lt;br /&gt;
=== 5V tolerante Eingänge ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;5-Volt-tolerant&amp;lt;/i&amp;gt; bedeutet, dass 3-Volt-Bausteine ohne Probleme von einem 5-Volt-Baustein angesteuert werden dürfen.&lt;br /&gt;
&lt;br /&gt;
Viele Bauteile mit einer Betriebsspannung von 3 V verfügen über 5-V-tolerante Eingänge. Man sollte aber grundsätzlich im Datenblatt dies nachschauen, bevor die Schaltung aufgebaut wird. Sind sie es nicht, so ist ein &amp;lt;b&amp;gt;Pegelwandler&amp;lt;/b&amp;gt; auf den Verbindungsleitungen zwischen den Bauteilen notwendig. Ein Pegelwandler kann eine einfache Zener-Diode mit einem Widerstand sein, es kann aber auch ein eigens dafür vorgesehener IC sein. Sind die Signalwege bidirektional, so wird man meist die Lösung mit einem eigenen IC bevorzugen.&lt;br /&gt;
&lt;br /&gt;
[[AVR]]s sind generell &#039;&#039;&#039;nicht&#039;&#039;&#039; 5-V-tolerant, wenn sie mit 3,3 V betrieben werden! Die absolute obere Grenze für Eingangsspannungen liegt bei Vcc + 0,5 V. Zu finden in den elektrischen Spezifikationen im Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Ob ein Bauteil 5-V-tolerant ist und unter welchen Betriebsbedingungen das gilt, steht im Datenblatt des betreffenden Bauteils vom betreffenden Hersteller. Wenn es auf diese Eigenschaft ankommt, lieber genau bei Lieferanten nachsehen, von welchem Hersteller die Bauteile kommen.&lt;br /&gt;
&lt;br /&gt;
Vorsicht bei:&lt;br /&gt;
&lt;br /&gt;
* 74&#039;&#039;&#039;LVX&#039;&#039;&#039;xxxx und 74&#039;&#039;&#039;LCX&#039;&#039;&#039;xxxx (245, 244, 240 ...) an Vcc = 3,3 V.&amp;lt;br&amp;gt;&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Nicht alle 74LVX sind für 5 V -&amp;gt; 3,3 V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität von Logikpegeln ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://www.interfacebus.com/Design_Translation.html&lt;br /&gt;
&lt;br /&gt;
Verschiedene Mikroprozessoren haben eigene elektrische Kenndaten für HIGH und LOW Pegel, die abhängig von der Versorgungsspannung sind, z.&amp;amp;nbsp;B. der [[R8C]]:&lt;br /&gt;
&lt;br /&gt;
* HIGH grösser 0,8 * Vcc&lt;br /&gt;
* LOW kleiner 0,2 * Vcc&lt;br /&gt;
&lt;br /&gt;
Man muss die Spannungen der Aus- und Eingänge vergleichen. Wenn es um ein Hobbyprojekt geht, kann man einfach messen. Wenn es um eine kommerzielle Anwendung geht, die man verkaufen will, sollte man besser die Spezifikationen der ICs studieren.&lt;br /&gt;
&lt;br /&gt;
== UNIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
=== 1,8 V -&amp;gt; 5 V ===&lt;br /&gt;
&lt;br /&gt;
* Die besondere Eigenschaft der alten TTL Schaltkreise, nämlich dass Strom bei LOW &#039;&#039;&#039;aus&#039;&#039;&#039; dem Eingang in den treibenden Ausgang fliesst kann man sich zu nutze machen, wie die nachfolgende Schaltung zeigt. In dieser wird der HIGH-Pegel des 1,8-V-Signals durch eine Schottkydiode um ca. 0,3 V auf 2,1 V erhöht. Damit ist man fast offiziell im HIGH-Bereich für TTL (Schaltschwelle 1,4 V, HIGH &amp;gt; 2,0 V). Der LOW-Pegel wird auf ca. 0,3 V erhöht, was voll den TTL-Richtlinien entspricht. Als Schaltkreisfamilie &#039;&#039;&#039;muss&#039;&#039;&#039; ein [[74xx|TTL-Typ]] eingesetzt werdem, also LS, F, AS oder ähnlich. CMOS-Typen wie HC, LVC etc. funktionieren &#039;&#039;&#039;nicht&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_LS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Diese Schaltung entspricht bei HIGH ungefähr einem offenen TTL-Eingang, was zwar meistens funktioniert, aber etwas störempfindlich sein kann. Davon wurde in der TTL-Ära stets abgeraten. Zudem ist der Pegelwechsel LOW nach HIGH durch den niedrigen Strom eher langsam. Man kann das jedoch mit einem Pullup-Widerstand absichern. Dann sind auch Gatter der 74HCT-Reihe einsetzbar.&lt;br /&gt;
&lt;br /&gt;
=== 3.3V -&amp;gt; 5V ===&lt;br /&gt;
&lt;br /&gt;
* 3.3V Pegel werden bei TTL kompatiblen Eingängen richtig erkannt (Schaltschwelle 1,4V). Es ist kein Pegelwandler erforderlich. Direkte Verbindung.&lt;br /&gt;
&lt;br /&gt;
* 5V CMOS Eingänge haben typisch eine minimale Eingangsspannug für HIGH (&amp;lt;math&amp;gt;V_{IH}&amp;lt;/math&amp;gt;) von 0.6 * VCC = 0.6 * 5V = 3V. Das kann ein 3.3V CMOS Ausgang direkt treiben, allerdings kann sich das Zeitverhalten dadurch etwas ändern weil der HIGH Pegel später erkannt wird. Vorsicht! Viele 5V CMOS ICs wollen für HIGH offiziell mindestens 0.7V * VCC = 3.5V oder manche auch 0.8 * VCC = 4.0V! Das geht dann offiziell nicht mehr mit einem 3.3V Ausgang! Für Hobbyzwecke kann man das aber ggf. probieren.&lt;br /&gt;
&lt;br /&gt;
* 3.3V [[Ausgangsstufen_Logik-ICs | Open Collector]] nach 5V (TTL oder CMOS): Einfach einen Pull-Up Widerstand hinzufügen und gut. Allerdings verbraucht der Pull-Up Widerstand bei LOW relativ viel Strom und kann bei HIGH nicht allzuviel Strom liefern. Die Schaltgeschwindigkeit von LOW nach HIGH wird durch die Grösse des Pull-Ups bestimmt.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
* 3,3V auf echte 5V (CMOS) geht am einfachsten mit einem Baustein der HCT Familie (NICHT HC !). Diese haben TTL-compatible Eingänge und echte CMOS Ausgänge&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator in nichtinvertierender Schaltung benutzen (LM339/393). Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_comp_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 74HCTxxx (245, 244, 240 ...)&lt;br /&gt;
* 74HCT125: OE Pins auf Masse und dann das Signal einfach anschließen.&lt;br /&gt;
* SN74LVC07AD&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 9..15V ===&lt;br /&gt;
&lt;br /&gt;
* Am einfachsten geht das mit einem Open Collector Ausgang, einfach einen Pull-Up hinzufügen (an die hohe Spannung) und fertig.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-12.png]]&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator benutzen. Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator. Wenn nur zwei Signale pegelgewandlet werden müssen bietet sich der LM393 an, ein Doppelkomparator mit Open Collector Ausgang, mit dem man auf einen beliebigen Pegel ausgeben kann. Der LM339 ist ein Vierfachkomparator mit den gleichen Eigenschaften. Wenn wenig Platz vorhanden ist, dann ist der TL311 im winzigen SOT-23 Gehäuse sehr empfehlenswert. Bei jedem Komparator kann auch einfach eine Invertierung gemacht werden, einfach die Eingänge + und - vertauschen. Diese Komparatoren eignen sich bis ca. 1 MHz.&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/praxis/bausatz_pegelwandler-mit-transistoren.htm Pegelwandler mit Transistor, invertierend]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_inv.png]]&lt;br /&gt;
&lt;br /&gt;
* Pegelwandler mit Transistor, nicht invertierend&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_ni.png]]&lt;br /&gt;
&lt;br /&gt;
Die Idee ist einfach. Wenn der Ausgang des 5V Gatters auf HIGH ist dann ist der Transistor ausgeschaltet, der Pull-Up Widerstand R7 zieht den Ausgang auf +12V. Ist der Ausgang des 5V Gatters auf LOW ist, dann ist er vollkommen durchgesteuert und der Ausgang nahe 0V (je nach Typ ca. 300mV). Der Vorteil ist hier erhöhte Störsicherheit im Gegensatz zur einfachen Ansteuerung der Basis über einen Vorwiderstand. Ausserdem wird dadurch nicht die Logik invertiert. Nachteilig ist der geringe Strom, der bei HIGH zur Verfügung steht (typisch 100&amp;amp;mu;A). Diese Schaltung ist die seltene Anwendung einer Basisschaltung für digitale Signale.&lt;br /&gt;
&lt;br /&gt;
* Wenn mehr Geschwindigkeit, Ausgangsstrom und weniger Stromverbrauch nötig ist, dann muss ein spezieller Baustein her, wie z.&amp;amp;nbsp;B.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
** [[Mosfet-Übersicht#Mosfet-Treiber|MOSFET-Treiber]] z.B. ICL7667&lt;br /&gt;
** [[H-Brücken Übersicht | Motortreiber]] ICs: (z.&amp;amp;nbsp;B. L293, L298, UCC27325 und deren Verwandte), wenns nicht zu schnell ist (einige Dutzend kHz)&lt;br /&gt;
** CD40109, bei Reichelt verfügbar&lt;br /&gt;
** HEF4104, 4fach LOW-HIGH Pegelwandler mit normalen und invertierten Augängen sowie Tristate. Um ggf. sicherzustellen, dass wie im Datenblatt beschrieben immer VDDI &amp;lt;= VDDO ist, kann man einfach eine Diode von VDDO nach VDDI schalten (z.&amp;amp;nbsp;B. Schottky SB120, aber auch 1N4148 &amp;amp; Co sollte problemlos funktionieren)&lt;br /&gt;
** CMOS 4504, 6fach LOW-HIGH/HIGH-LOW 3-20V Pegelwandler, TTL/CMOS (umschaltbar) =&amp;gt; CMOS, kein Reihenfolge von Vcc/Vee erforderlich (Bezugsquelle: CSD)&lt;br /&gt;
** MAX232, der braucht nur 5V Versorgungsspannung. Allerdings ist der Ausgangswiderstand relativ hoch (ca. 300Ω) und man kann nur ca. 5mA Ausgangstrom liefern. Die Ausgangsspannung beträgt maximal 10V.&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Zuerst sollte man prüfen, ob die Eingänge 5V tolerant sind. Dann kann man die ICs direkt verbinden. Sehr schnell und billig!&lt;br /&gt;
&lt;br /&gt;
* Wenn die Eingänge nicht 5V tolerant sind und es trotzdem schnell sein soll, muss ein Gatter aus der LVC oder AHC Familie dazwischen geschaltet werden. Bei 3V Betriebsspannung kann man problemlos 5V an den Eingang anlegen. Der Baustein 74HC4050 erlaubt per Definition eine Pegelwandlung bis etwa 15V (siehe Datenblatt). Beide Anordungen verbrauchen auch sehr wenig Ruhestrom.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* 74LVC245A (&#039;A&#039; ist wichtig, I/Os 5V-tolerant)&lt;br /&gt;
:* 74LVC245DW &lt;br /&gt;
:* 74LVT245 &lt;br /&gt;
:* 74LVXxxx (245, 244, 240 ...) an Vcc=3,3V. Achtung: Nicht alle 74LVX sind für 5V -&amp;gt; 3,3V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
:** 74LVX04 &lt;br /&gt;
:** 74LVX244 (Fairchild)&lt;br /&gt;
:** 74LVX245 (nicht von Reichelt, nicht 5V tolerant)&lt;br /&gt;
:** bei TI heissen die 74LVX... nur 74LV...&lt;br /&gt;
&lt;br /&gt;
:* 74HC4050 (bis 15V Step Down Pegelwandlung laut Datenblatt, bei Reichelt in DIP und SO erhältlich)&lt;br /&gt;
:* MAX3373/MAX3375&lt;br /&gt;
:* NC7SZ08 oder andere aus derselben Serie. CMOS-Logik mit 5V-toleranten Eingängen, recht flott und braucht dank SOT-23 auch wenig Platz auf dem Print&lt;br /&gt;
&lt;br /&gt;
* 5V Open Collector auf 3.3V Eingang. Einfach einen Pull-Up hinzufügen (Pull-Up liegt auf 3.3V). Nachteilig ist der relativ hohe Stromverbrauch bei LOW, die begrenzte Geschwindigkeit bei hochohmigen Pull-Ups und der relativ geringe Ausgangsstrom bei HIGH (abhängig vom Pull-Up).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* Spannungsteiler mit 680Ω und 1kOhm. Der Nachteil dieser Lösung ist der relativ hohe Stromverbrauch (~3mA), der relativ geringe Ausgangsstrom (mehr als 200..300uA sollte man da nicht rausziehen) und die relativ geringe Geschwindigkeit (ca. 10 MHz).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_st_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* 1 kOhm Vorwiderstand. Dadurch wird der Strom vom 5V Ausgang in die 3.3V Versorgung durch die internen Schutzdioden auf ca. 1mA begrenzt. Diese Lösung ist auch relativ langsam (ca. 5MHz). Ggf. kann man den Vorwiderstand auf 100Ω reduzieren, das erhöht dann wieder die Geschwindigkeit. Aufpassen, einige ICs vertragen nur 1mA oder weniger durch die Schutzdioden! Ausserdem muss man aufpassen, das jetzt von der 5V Seite Strom in die 3.3V Versorgung eingespeist wird. Besonders in Schaltungen mit sehr niedrigem Stromverbrauch kann das zum Problem werden, wenn weniger Strom verbraucht wird als über die Vorwiderstände eingespeist wird. Dann nimmt es meist der Spannungsregler für 3.3V übel wenn jemand &amp;quot;schiebt&amp;quot;, sprich, Strom einspeist. Denn die allermeisten Spannungsregler können nur Strom liefern (source), aber keinen Strom aufnehmen (sink). Es gibt 4-fach-Diodennetzwerke, die die internen Schutzdioden entlasten können (Schottkydioden mit kleinerer Flusspannung von ~0,3V als die internen Silizizumdioden mit ~0,7V), außerdem ist teilweise noch eine [[Diode#Z-Diode|Zenerdiode]] enthalten, die ggf. den überschüssig eingespeisten Strom aufnehmen kann. &lt;br /&gt;
&lt;br /&gt;
[[bild:pw_vw_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Mindestens für 74HC(T) Gatter ist dokumentiert (Philips 74HC/T High-Speed CMOS User Guide), dass auch schon geringer Strom durch die internen Schutzdioden zu einer unerwünschten Kopplung von Eingängen führen kann, d.h. der Strom fliesst zu einem anderen Eingang wieder hinaus. Sind also andere Eingänge ebenso hochohmig angeschlossen, kann dieser Querstrom zu Fehlfunktion führen.&lt;br /&gt;
&lt;br /&gt;
== BIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
Für bidirektionale Busse gibt es spezielle Pegelwandler mit 2 Versorgungsspannungen. Allerdings brauchen die meist ein Signal zur Richtungsumschaltung. Auch muss man die Reihenfolge der Versorgungsspannungen beim Einschalten beachten. Aktive bidirektionale Pegelwandler OHNE Steuereingang zur Richtungsumschaltung sind mit Vorsicht zu geniessen, denn die brauchen teilweise kurzzeitig einen relativ hohen Strom, um die Eingänge zu treiben.&lt;br /&gt;
&lt;br /&gt;
=== 5V &amp;lt;-&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Wenn die 5V Seite TTL-kompatible Eingänge hat kann wieder der Spannungsteiler oder Vorwiderstand wie bei der unidirektionalen Anpassung verwendet werden (mit all seinen Vor- und Nachteilen).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SN74CB3T3306&lt;br /&gt;
* SN74CBTD3861 (10 Bit,flow through, Betrieb mit 5 Volt)&lt;br /&gt;
* MAX1741 &lt;br /&gt;
* MAX3378E &lt;br /&gt;
* 74AHC126 s.u.&lt;br /&gt;
* ST2378 (bei CSD erhältlich, 3.5 eur, leider TSSOP)&lt;br /&gt;
* TXS0104E (TI: 4-BIT BIDIRECTIONAL VOLTAGE-LEVEL TRANSLATOR FOR OPEN-DRAIN AND PUSH-PULL APPLICATIONS)&lt;br /&gt;
* SN74LVC07A&lt;br /&gt;
&lt;br /&gt;
=== 1,65V...5,5V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74LVC1T45&lt;br /&gt;
* SN74LVC2T45&lt;br /&gt;
* SN74LVC(H)8T245&lt;br /&gt;
* SN74LVC(H)16T245&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* TXB0101&lt;br /&gt;
* TXB0102&lt;br /&gt;
* TXB0104&lt;br /&gt;
* TXB0106&lt;br /&gt;
* TXB0108&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,2V...3,6V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74AVC(H)1T45&lt;br /&gt;
* SN74AVC(H)2T45&lt;br /&gt;
* SN74AVC(H)4T245&lt;br /&gt;
* SN74AVC(H)8T245&lt;br /&gt;
* SN74AVC(H)16T245&lt;br /&gt;
* SN74AVC(H)20T245&lt;br /&gt;
* SN74AVC(H)24T245&lt;br /&gt;
* SN74AVC(H)32T245&lt;br /&gt;
&lt;br /&gt;
=== 1,5V...3,6V &amp;lt;-&amp;gt; 1,5V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* 74LVC4245A&lt;br /&gt;
&lt;br /&gt;
== Mit galvanischer Trennung ==&lt;br /&gt;
&lt;br /&gt;
* [[Optokoppler]]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_opto.png]]&lt;br /&gt;
&lt;br /&gt;
* GMR-Koppler von der Firma NVE &lt;br /&gt;
* iCoupler Technologie von der Firma Analog Devices&lt;br /&gt;
* [[Kapazitiver Koppler]]&lt;br /&gt;
&lt;br /&gt;
Lit.: &#039;&#039;Galvanische Trennung: Optokoppler, GMR-Koppler oder iCoupler?&#039;&#039;, Siegfried W. Best, Redaktion elektronik industrie, [http://www.elektronik-industrie.de/ei/11,2003/article/2f0082f824c.html elektronik industrie 11-2003, S. 22ff.]&lt;br /&gt;
&lt;br /&gt;
== Praktische Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Einfaches RS232-Interface ===&lt;br /&gt;
&lt;br /&gt;
[http://web.archive.org/web/20050122013618/http://www.henrik-reimers.de/control/rs232interface.gif Erfolgreicher Einsatz bis 19200 Baud und bis zu 10 m Leitungslänge]&lt;br /&gt;
&lt;br /&gt;
Beschränkungen:&lt;br /&gt;
&lt;br /&gt;
* ggf. Platzbedarf&lt;br /&gt;
* Geschwindigkeit s.o.&lt;br /&gt;
&lt;br /&gt;
Beispiel: http://www.hagtech.com/pdf/translator.pdf&lt;br /&gt;
&lt;br /&gt;
=== [[I2C]]-Bus: gemeinsam 3.3V und 5V ===&lt;br /&gt;
&lt;br /&gt;
* [[MSP430]] an 3,3V/5V: http://www-s.ti.com/sc/psheets/slaa148/slaa148.pdf&lt;br /&gt;
&lt;br /&gt;
* Philips [http://www.nxp.com/documents/data_sheet/PCA9515.pdf PCA9515]: I2C Puffer mit Pegelwandlung. Der PCA9515 ist ein I2C-Bus Repeater, welcher I2C Busse mit verschiedenen Spannungen isoliert. Verfügbar bei Reichelt und DigiKey.&lt;br /&gt;
&lt;br /&gt;
* [http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf Philips AN97055 Bi-directional level shifter for I²C-bus and other systems]&lt;br /&gt;
&lt;br /&gt;
* Bevor man ein Philips I2C Chip auswählt sollte man prüfen ob er verfügbar ist und auch das verfügbare Gehäuse wählen. Man sollte auch überlegen ob ein Puffer wirklich gebraucht wird. Wenn man echte I2C ICs mit 5V betreibt, dann sind die Eingänge vom Typ Schmitt Trigger CMOS (z.&amp;amp;nbsp;B. PCF8574). Dann müssen 3.3V Pegel auf 5V umgesetzt werden. Wenn man jedoch SMBUS Ics verwendet (z.&amp;amp;nbsp;B. ADT7461, Silabs 8051) dann sind die Schwellspannungen TTL kompatibel und es ist keine Anpassung notwendig. Für neue Pegelwandler sollte man hier nachschauen. http://www.bus-buffer.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/article/CA193193.html &amp;quot;Two-transistor circuit replaces IC&amp;quot;]. Für diese Anwendung kann ENABLE direkt mit 3.3V verbunden werden. Es ist eigentlich nur dazu da, den ICs &amp;quot;hot-swappable&amp;quot; zu machen (kann unter Spannung gesteckt und getrennt werden). Es geht sogar mit nur einem [[Transistor]] [http://www.mikrocontroller.net/topic/92447 siehe Forum]. Man sollte beachten, daß die Schaltung sowohl für SCL als auch SDA benötigt wird. &lt;br /&gt;
* Noch einfachere Lösungen mit nur einem MOSFET und zwei Pull-Up Widerständen pro Leitung sind in den folgenden Links zu finden. Vielleicht ist es sogar noch billiger Bipolartransistoren zu verwenden.&lt;br /&gt;
** http://www.semiconductors.philips.com/markets/mms/protocols/i2c/facts/#levelshifting&lt;br /&gt;
** http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf (Kapitel 18), bei der Berechnung der erreichbaren Geschwindigkeit dürfen die parasitären Kapazitäten der FETs nicht ignoriert werden&lt;br /&gt;
&lt;br /&gt;
=== Auswählbare Pegel ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ein CMOS Logikpegel zwischen 1,8V, 2,5V und 3,3V (abhängig von der Anwendung) muss auf 5V CMOS Logikpegel gewandelt werden. Es geht nur um diese Richtung mit maximal 8MHz. Es gibt die Stromversorgung für alle Pegel. Ein normaler Komparator wie LM311 ist nicht möglich, da er beim Betrieb mit 5V Versorgunsspannung erst ab 1V zu schalten anfängt. Meine Idee ist die Verwendung eines High Speed OPVs mit R2R Eingang, z.&amp;amp;nbsp;B. LMH6645.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* Man könnte einen ultra-low threshold N-Kanal MOSFET nehmen und als Open Drain mit einem Pull-Up nach 5V betreiben, BSH103 könnte passen (Schwellspannung ~0,4V).&lt;br /&gt;
* High-Speed Single Supply Komparator wie z.&amp;amp;nbsp;B. [http://www-s.ti.com/sc/ds/tl712.pdf TL712] .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ich suchen einen IC, welcher eine Pegelwandlung von 3,3V nach 1,8V, 2,0V oder 5V ermöglicht und während des Betriebs umgeschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* So ein IC ist der Linear [http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1007,C1071,P1601 LTC1555L-1.8] . &lt;br /&gt;
&lt;br /&gt;
=== AVR SPI (SDC/MMC)===&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;bidirektionalen Betrieb&#039;&#039;&#039; zwischen 5V-AVR und 3,3V-Geräten und anders herum gibt es den Level-Translator &#039;&#039;&#039;MAX3378E&#039;&#039;&#039; von Maxim.&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenrichtung am SPI im Zielsystem festgelegt ist, reichen &#039;&#039;&#039;unidirektionale Bausteine&#039;&#039;&#039;:&lt;br /&gt;
* 3x von 5V nach 3,3V und 1x von 3,3V nach 5V: &#039;&#039;&#039;MAX3392E&#039;&#039;&#039;&lt;br /&gt;
* 1x von 5V nach 3,3V und 3x von 3,3V nach 5V: &#039;&#039;&#039;MAX3390E&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zum Anschließen einer SDC/MMC an einen 5V-AVR eignen sich somit der MAX3978E und der MAX3392E. Beide sind u.A. im winzigen TSSOP-14-Gehäuse verfügbar, nehmen sehr wenig Energie auf und eignen sich auch für andere Spannungen. Mit 3,3 und 5V beträgt die garantierte Übertragungsrate 8Mbps.&lt;br /&gt;
&lt;br /&gt;
* [http://datasheets.maxim-ic.com/en/ds/MAX3372E-MAX3393E.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit zum Übersetzen zwischen 3,3 und 5V liegt in der Verwendung des &#039;&#039;&#039;74LVC245&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
5V-AVR an eine MMC (ohne Level-Shifter-Baustein):&lt;br /&gt;
* [http://www.microsyl.com/index.php/2010/03/24/led-sign-with-mmc-memory-card/ Projektseite] &lt;br /&gt;
* [http://www.microsyl.com/projects/ledsign/ledsign1.pdf Schaltplan]&lt;br /&gt;
&lt;br /&gt;
=== µC &amp;lt;-&amp;gt; Parallelport ([[ISP]]-Dongle, [[JTAG]] Wiggler, ...) ===&lt;br /&gt;
&lt;br /&gt;
Dieser Schaltplan funktioniert auch bei 3.3V wenn man einen 74&amp;lt;B&amp;gt;HC&amp;lt;/B&amp;gt;244 anstatt eines 74&amp;lt;B&amp;gt;LS&amp;lt;/B&amp;gt;244 verwendet: [http://www.epanorama.net/circuits/parallel_output.html Parallel port interfacing made easy: Simple circuits and programs to show how to use PC parallel port output capabilities].&lt;br /&gt;
&lt;br /&gt;
=== Doppeltes Leitungspaar RX/TX 5V/3,3V ===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.hackaday.com/2008/06/19/sparkfuns-logic-level-converter/ SparkFun&#039;s Logic Level Converter] ist eine Baugruppe mit MOSFETs [http://www.fairchildsemi.com/pf/BS/BSS138.html BSS138] für die Pegelwandlung von 5V auf 3,3V. 5V/2,8V und 5V/1,8V sind ebenfalls machbar.&lt;br /&gt;
&lt;br /&gt;
=== Steuerleitung zwischen uC und FPGA ===&lt;br /&gt;
Oftmals werden PLDs oder FPGAs per Microcontroller-Platine angesteuert. Ältere Typen laufen meist als 5V oder sitzen in 5V-kompatiblen Platinen. Sollen moderne FPGAs angesteuert werden, trifft man fast immer auf 3,3V-Typen, bzw muss sogar 2,5V / 1,8V-Bänke beschalten, wenn nur noch dort Pins frei sind. Die 5V sind also im Extremfall auf 1,8V herabzusetzen, was bei einem maximal zulässigen Diodenstrom von 3mA (Beispiel Xilnx) einen Mindestwiderstand von ca 1kOhm erfordert. Die resultierende maximale Schaltfrequenz liegt dann bei einem typischen FPGA-Eingang bei etwa &amp;lt;500kHz. Soll der Eingang aus Belastungsgründen nicht mit mehr, als 0,3mA belastet werden, müsste der Widerstand auf 10k steigen, wodurch die Frequenz auf 1/10 sinkt. Zudem ist der Eingang dann störempfindlicher. Daher ist es besser, man schaltet dem Eingang eine zusätztliche Z-Diode bei und dimensioniert den R so, dass die Strombelastbarkeit des Mircocontrollers ausgelastet wird.&lt;br /&gt;
&lt;br /&gt;
= Bauteile =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;74ALVC164245&#039;&#039;&#039; - &#039;&#039;16bit dual supply translating transceiver&#039;&#039;. Eine Seite von 1.5V bis 3.6V, die andere von 1.5 bis 5.5V.&lt;br /&gt;
* &#039;&#039;&#039;74LVX573&#039;&#039;&#039; (unidirektional, Latch, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX245&#039;&#039;&#039; (bidirektional, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX125&#039;&#039;&#039; - &#039;&#039;Low Voltage Quad Buffer with 3-STATE Outputs&#039;&#039;. http://www.fairchildsemi.com/pf/74/74LVX125.html&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC2T45&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC8T245&#039;&#039;&#039; - &#039;&#039;8-Bit Dual-Supply Bus Transceiver with Configurable Voltage Translation and Three-State Outputs&#039;&#039;. http://focus.ti.com/docs/prod/folders/print/sn74lvc8t245.html&lt;br /&gt;
* &#039;&#039;&#039;74LCX244MSA&#039;&#039;&#039; von Fairchild.&lt;br /&gt;
* &#039;&#039;&#039;MAX3377&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAX3000&#039;&#039;&#039; 8-Kanal bidirektioneler Pegelwandler ohne Richtungsumschaltung&lt;br /&gt;
* &#039;&#039;&#039;ADG3308&#039;&#039;&#039; 8-Kanal bi-dir. Pegelwandler ohne Richtungsumschaltung, 1,15V..5,5V, 50MBps&lt;br /&gt;
&lt;br /&gt;
Vierfachdioden im kleinen 6-poligen SMD-Gehäuse:&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/12635/dsilc6-4xx.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/11599.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/6477/dalc208.pdf&lt;br /&gt;
* [http://www.diodes.com/datasheets/ds30195.pdf QSBT40, vierfach Schottky Terminator für Datenleitungen]&lt;br /&gt;
* [http://www.littlefuse.com/data/en/Data_Sheets/SP724Lead_Free.pdf SP724, Siliziumschutzarray]&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
&lt;br /&gt;
* Holmes D., [http://delphys.net/d.holmes/hardware/levelshift.html Bi-directional level-shift with MOSFETs]&lt;br /&gt;
* Gaurang Kavaiya, [http://www.edn.com/contents/images/6335309.pdf Don’t pay for level translators in systems using multiple power-supply voltages], EDN, MAY 25, 2006, 81-86 (PDF)&lt;br /&gt;
* [http://www.elektronik-kompendium.de/public/schaerer/scf3_lc.htm Einfacher Pegelwandler im ELKO]&lt;br /&gt;
* [http://www.prog-link.com/dcf77/dcf77-17.html Pegelwandler für DFC77 Module]&lt;br /&gt;
* [http://elektronik.kai-uwe-schmidt.de/index.php?page=mp3_blueschaltung Pegelwandler für [[I2C]] Bus in einem MP3 Player]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment.php/256452/levelshifter.pdf Application Note von Philips, I2C Pegelwandler]&lt;br /&gt;
* [http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf I2C Spezifikation]  &lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-234277.html#new Forumsbeitrag zum Thema 1,8V-5V Pegelwandler] &lt;br /&gt;
* [http://www.st.com/stonline/products/literature/ds/5186/74lcx16245.pdf 74LCX16245, 16 Bit Pegelwandler]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/buffers/ LVC Logikfamilie]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/transceivers/ LVC Tranceiver]&lt;br /&gt;
* [http://www.leg-gmbh.de/html/signalanpassung.html Pegelwandler für die Automatisierungstechnik]&lt;br /&gt;
* [http://www.microchip.com/stellent/groups/techpub_sg/documents/devicedoc/en026368.pdf 3V Tips ‘n Tricks] (PDF) von Microchip&lt;br /&gt;
* [http://www.ti.com/lit/an/slaa148/slaa148.pdf Interfacing the 3-V MSP430 to 5-V Circuits] (PDF) von Texas Instruments&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Kategorie:Datenübertragung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70247</id>
		<title>Pegelwandler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Pegelwandler&amp;diff=70247"/>
		<updated>2012-12-26T16:42:14Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Dies ist die erste aufgeräumte Version. Sicher nicht die letzte.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-375051.html &amp;quot;Stein des Anstosses&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=pegelwand*+levelsh*&amp;amp;x=0&amp;amp;y=0 Suche in den Forenartikel]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Pegelwandeln (engl. level shifting) wird oft notwendig, wenn Systeme mit unterschiedlicher Ausgangs- und Eingangsspannungen (z.&amp;amp;nbsp;B. Versorgungs- oder Logikspannungen) miteinander verbunden werden sollen. Das vielleicht bekannteste Beispiel ist die Umsetzung von 0V/5V [[TTL]] Logikpegeln auf die -12V/12V Pegel einer seriellen [[RS232]] Schnittstelle. Die Probleme beim Pegelwandeln können sein:&lt;br /&gt;
&lt;br /&gt;
# Überlastung einer oder beider Seiten, bis hin zur Zerstörung&lt;br /&gt;
# Inkompatible Logikpegel und daraus resultierendes Nichtfunktionieren der Schaltung, oder noch schlimmer, sporadische Fehlfunktionen&lt;br /&gt;
# Verzögerungen der Signale durch die Pegelwandlung und daraus resultierende maximale Signalfrequenzen&lt;br /&gt;
&lt;br /&gt;
=== Überlastung ===&lt;br /&gt;
&lt;br /&gt;
Das Erzeugen von verschiedenen Versorgungsspannungen ist ziemlich einfach, aber man muss sicher gehen, daß man die Signalpegel der Bauteile auf Toleranz überprüft. Wenn z.B. ein 5V Bauteil ein Signal an ein 3V Bauteil schickt, können beide Bauteile beschädigt werden. Vor allem für neue ICs ist es ein Problem mit &amp;quot;hohen&amp;quot; Spannungen wie 5V zu arbeiten. Auf Grund der immer kleineren Schaltkreisstrukturen (der aktuelle Pentium wird mit 45nm Technologie hergestellt!) werden auch die Abstände und Schichtdicken immer geringer. Das reduziert natürlich auch die Spannungs- und Stromfestigkeit der Transistoren auf dem IC. Neue ICs vertragen deshalb meist nur noch 3.3V, teilweise sogar weniger! Die Überlastung erfolgt durch zu hohe Spannung und dadurch mehr oder weniger langsame Zerstörung des ICs.&lt;br /&gt;
&lt;br /&gt;
=== Schutzdioden ===&lt;br /&gt;
&lt;br /&gt;
Hauptursache Nummer zwei für Überlastung von ICs mit verschiedenen Betriebsspannungen sind die in nahezu allen ICs integrierten Schutzdioden. Deren Aufgabe ist es in Normalfall, elektrostatische Entladungen auf eine sichere, niedrige Spannung zu begrenzen. Die Entladungen geschehen durch unsachgemässe Handhabung und Transport von ICs, z.&amp;amp;nbsp;B. wenn jemand über einen Kunstfaserteppich läuft, sich dabei elektrostatisch auflädt und einen IC anfasst, oder wenn Bauteile in einem Gerät eingebaut sind und der Anwender berührt offen liegende Kontakte (RS232 Eingang, USB-Stick, PCI-Steckkarten beim Einbau etc.). Auch elektrostatische Entladungen / EMV können Ursache zu hoher Pegel auf den Leitungen sind.&lt;br /&gt;
&lt;br /&gt;
Die Schutzdioden beginnen, Strom zu leiten, wenn die Eingangsspannung ca. 300mV-600mV über VCC ansteigt oder entsprechend unter GND absinkt. Im Normalbetrieb sollten die Schutzdioden keinen Strom leiten. Manchmal kann man sie aber zur Spannungsbegrenzung missbrauchen, siehe [[#STEP-DOWN:_5V_-.3E_3.3V | Spannungsherabsetzung mit Vorwiderstand]].&lt;br /&gt;
&lt;br /&gt;
Besonderes Augenmerk ist hierbei auf die optimale Dimensionierung des R zu legen, um sicherzustellen, dass kein zu hoher Strom über die Schutzdioden abgeführt werden muss. Je nach Chip-Type und Ausgang halten diese zwsichen 100uA und 10mA aus.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_schutzdioden.png]]&lt;br /&gt;
&lt;br /&gt;
=== 5V tolerante Eingänge ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;5-Volt-tolerant&amp;lt;/i&amp;gt; bedeutet, dass 3-Volt-Bausteine ohne Probleme von einem 5-Volt-Baustein angesteuert werden dürfen.&lt;br /&gt;
&lt;br /&gt;
Viele Bauteile mit einer Betriebsspannung von 3 V verfügen über 5-V-tolerante Eingänge. Man sollte aber grundsätzlich im Datenblatt dies nachschauen, bevor die Schaltung aufgebaut wird. Sind sie es nicht, so ist ein &amp;lt;b&amp;gt;Pegelwandler&amp;lt;/b&amp;gt; auf den Verbindungsleitungen zwischen den Bauteilen notwendig. Ein Pegelwandler kann eine einfache Zener-Diode mit einem Widerstand sein, es kann aber auch ein eigens dafür vorgesehener IC sein. Sind die Signalwege bidirektional, so wird man meist die Lösung mit einem eigenen IC bevorzugen.&lt;br /&gt;
&lt;br /&gt;
[[AVR]]s sind generell &#039;&#039;&#039;nicht&#039;&#039;&#039; 5-V-tolerant, wenn sie mit 3,3 V betrieben werden! Die absolute obere Grenze für Eingangsspannungen liegt bei Vcc + 0,5 V. Zu finden in den elektrischen Spezifikationen im Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Ob ein Bauteil 5-V-tolerant ist und unter welchen Betriebsbedingungen das gilt, steht im Datenblatt des betreffenden Bauteils vom betreffenden Hersteller. Wenn es auf diese Eigenschaft ankommt, lieber genau bei Lieferanten nachsehen, von welchem Hersteller die Bauteile kommen.&lt;br /&gt;
&lt;br /&gt;
Vorsicht bei:&lt;br /&gt;
&lt;br /&gt;
* 74&#039;&#039;&#039;LVX&#039;&#039;&#039;xxxx und 74&#039;&#039;&#039;LCX&#039;&#039;&#039;xxxx (245, 244, 240 ...) an Vcc = 3,3 V.&amp;lt;br&amp;gt;&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Nicht alle 74LVX sind für 5 V -&amp;gt; 3,3 V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität von Logikpegeln ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://www.interfacebus.com/Design_Translation.html&lt;br /&gt;
&lt;br /&gt;
Verschiedene Mikroprozessoren haben eigene elektrische Kenndaten für HIGH und LOW Pegel, die abhängig von der Versorgungsspannung sind, z.&amp;amp;nbsp;B. der [[R8C]]:&lt;br /&gt;
&lt;br /&gt;
* HIGH grösser 0,8 * Vcc&lt;br /&gt;
* LOW kleiner 0,2 * Vcc&lt;br /&gt;
&lt;br /&gt;
Man muss die Spannungen der Aus- und Eingänge vergleichen. Wenn es um ein Hobbyprojekt geht, kann man einfach messen. Wenn es um eine kommerzielle Anwendung geht, die man verkaufen will, sollte man besser die Spezifikationen der ICs studieren.&lt;br /&gt;
&lt;br /&gt;
== UNIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
=== 1,8 V -&amp;gt; 5 V ===&lt;br /&gt;
&lt;br /&gt;
* Die besondere Eigenschaft der alten TTL Schaltkreise, nämlich dass Strom bei LOW &#039;&#039;&#039;aus&#039;&#039;&#039; dem Eingang in den treibenden Ausgang fliesst kann man sich zu nutze machen, wie die nachfolgende Schaltung zeigt. In dieser wird der HIGH-Pegel des 1,8-V-Signals durch eine Schottkydiode um ca. 0,3 V auf 2,1 V erhöht. Damit ist man fast offiziell im HIGH-Bereich für TTL (Schaltschwelle 1,4 V, HIGH &amp;gt; 2,0 V). Der LOW-Pegel wird auf ca. 0,3 V erhöht, was voll den TTL-Richtlinien entspricht. Als Schaltkreisfamilie &#039;&#039;&#039;muss&#039;&#039;&#039; ein [[74xx|TTL-Typ]] eingesetzt werdem, also LS, F, AS oder ähnlich. CMOS-Typen wie HC, LVC etc. funktionieren &#039;&#039;&#039;nicht&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_LS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=FF0000&amp;gt;Achtung&amp;lt;/font&amp;gt;: Diese Schaltung entspricht bei HIGH ungefähr einem offenen TTL-Eingang, was zwar meistens funktioniert, aber etwas störempfindlich sein kann. Davon wurde in der TTL-Ära stets abgeraten. Zudem ist der Pegelwechsel LOW nach HIGH durch den niedrigen Strom eher langsam. Man kann das jedoch mit einem Pullup-Widerstand absichern. Dann sind auch Gatter der 74HCT-Reihe einsetzbar.&lt;br /&gt;
&lt;br /&gt;
=== 3.3V -&amp;gt; 5V ===&lt;br /&gt;
&lt;br /&gt;
* 3.3V Pegel werden bei TTL kompatiblen Eingängen richtig erkannt (Schaltschwelle 1,4V). Es ist kein Pegelwandler erforderlich. Direkte Verbindung.&lt;br /&gt;
&lt;br /&gt;
* 5V CMOS Eingänge haben typisch eine minimale Eingangsspannug für HIGH (&amp;lt;math&amp;gt;V_{IH}&amp;lt;/math&amp;gt;) von 0.6 * VCC = 0.6 * 5V = 3V. Das kann ein 3.3V CMOS Ausgang direkt treiben, allerdings kann sich das Zeitverhalten dadurch etwas ändern weil der HIGH Pegel später erkannt wird. Vorsicht! Viele 5V CMOS ICs wollen für HIGH offiziell mindestens 0.7V * VCC = 3.5V oder manche auch 0.8 * VCC = 4.0V! Das geht dann offiziell nicht mehr mit einem 3.3V Ausgang! Für Hobbyzwecke kann man das aber ggf. probieren.&lt;br /&gt;
&lt;br /&gt;
* 3.3V [[Ausgangsstufen_Logik-ICs | Open Collector]] nach 5V (TTL oder CMOS): Einfach einen Pull-Up Widerstand hinzufügen und gut. Allerdings verbraucht der Pull-Up Widerstand bei LOW relativ viel Strom und kann bei HIGH nicht allzuviel Strom liefern. Die Schaltgeschwindigkeit von LOW nach HIGH wird durch die Grösse des Pull-Ups bestimmt.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
* 3,3V auf echte 5V (CMOS) geht am einfachsten mit einem Baustein der HCT Familie (NICHT HC !). Diese haben TTL-compatible Eingänge und echte CMOS Ausgänge&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator in nichtinvertierender Schaltung benutzen (LM339/393). Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_comp_3-5.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 74HCTxxx (245, 244, 240 ...)&lt;br /&gt;
* 74HCT125: OE Pins auf Masse und dann das Signal einfach anschließen.&lt;br /&gt;
* SN74LVC07AD&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 9..15V ===&lt;br /&gt;
&lt;br /&gt;
* Am einfachsten geht das mit einem Open Collector Ausgang, einfach einen Pull-Up hinzufügen (an die hohe Spannung) und fertig.&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-12.png]]&lt;br /&gt;
&lt;br /&gt;
* Man kann einen Komparator benutzen. Allerdings ist diese Lösung meist relativ langsam, abhängig vom verwendeten Komparator. Wenn nur zwei Signale pegelgewandlet werden müssen bietet sich der LM393 an, ein Doppelkomparator mit Open Collector Ausgang, mit dem man auf einen beliebigen Pegel ausgeben kann. Der LM339 ist ein Vierfachkomparator mit den gleichen Eigenschaften. Wenn wenig Platz vorhanden ist, dann ist der TL311 im winzigen SOT-23 Gehäuse sehr empfehlenswert. Bei jedem Komparator kann auch einfach eine Invertierung gemacht werden, einfach die Eingänge + und - vertauschen. Diese Komparatoren eignen sich bis ca. 1 MHz.&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/praxis/bausatz_pegelwandler-mit-transistoren.htm Pegelwandler mit Transistor, invertierend]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_inv.png]]&lt;br /&gt;
&lt;br /&gt;
* Pegelwandler mit Transistor, nicht invertierend&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_trans_ni.png]]&lt;br /&gt;
&lt;br /&gt;
Die Idee ist einfach. Wenn der Ausgang des 5V Gatters auf HIGH ist dann ist der Transistor ausgeschaltet, der Pull-Up Widerstand R7 zieht den Ausgang auf +12V. Ist der Ausgang des 5V Gatters auf LOW ist, dann ist er vollkommen durchgesteuert und der Ausgang nahe 0V (je nach Typ ca. 300mV). Der Vorteil ist hier erhöhte Störsicherheit im Gegensatz zur einfachen Ansteuerung der Basis über einen Vorwiderstand. Ausserdem wird dadurch nicht die Logik invertiert. Nachteilig ist der geringe Strom, der bei HIGH zur Verfügung steht (typisch 100&amp;amp;mu;A). Diese Schaltung ist die seltene Anwendung einer Basisschaltung für digitale Signale.&lt;br /&gt;
&lt;br /&gt;
* Wenn mehr Geschwindigkeit, Ausgangsstrom und weniger Stromverbrauch nötig ist, dann muss ein spezieller Baustein her, wie z.&amp;amp;nbsp;B.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
** [[Mosfet-Übersicht#Mosfet-Treiber|MOSFET-Treiber]] z.B. ICL7667&lt;br /&gt;
** [[H-Brücken Übersicht | Motortreiber]] ICs: (z.&amp;amp;nbsp;B. L293, L298, UCC27325 und deren Verwandte), wenns nicht zu schnell ist (einige Dutzend kHz)&lt;br /&gt;
** CD40109, bei Reichelt verfügbar&lt;br /&gt;
** HEF4104, 4fach LOW-HIGH Pegelwandler mit normalen und invertierten Augängen sowie Tristate. Um ggf. sicherzustellen, dass wie im Datenblatt beschrieben immer VDDI &amp;lt;= VDDO ist, kann man einfach eine Diode von VDDO nach VDDI schalten (z.&amp;amp;nbsp;B. Schottky SB120, aber auch 1N4148 &amp;amp; Co sollte problemlos funktionieren)&lt;br /&gt;
** CMOS 4504, 6fach LOW-HIGH/HIGH-LOW 3-20V Pegelwandler, TTL/CMOS (umschaltbar) =&amp;gt; CMOS, kein Reihenfolge von Vcc/Vee erforderlich (Bezugsquelle: CSD)&lt;br /&gt;
** MAX232, der braucht nur 5V Versorgungsspannung. Allerdings ist der Ausgangswiderstand relativ hoch (ca. 300Ω) und man kann nur ca. 5mA Ausgangstrom liefern. Die Ausgangsspannung beträgt maximal 10V.&lt;br /&gt;
&lt;br /&gt;
=== 5V -&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Zuerst sollte man prüfen, ob die Eingänge 5V tolerant sind. Dann kann man die ICs direkt verbinden. Sehr schnell und billig!&lt;br /&gt;
&lt;br /&gt;
* Wenn die Eingänge nicht 5V tolerant sind und es trotzdem schnell sein soll, muss ein Gatter aus der LVC oder AHC Familie dazwischen geschaltet werden. Bei 3V Betriebsspannung kann man problemlos 5V an den Eingang anlegen. Der Baustein 74HC4050 erlaubt per Definition eine Pegelwandlung bis etwa 15V (siehe Datenblatt). Beide Anordungen verbrauchen auch sehr wenig Ruhestrom.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:* 74LVC245A (&#039;A&#039; ist wichtig, I/Os 5V-tolerant)&lt;br /&gt;
:* 74LVC245DW &lt;br /&gt;
:* 74LVT245 &lt;br /&gt;
:* 74LVXxxx (245, 244, 240 ...) an Vcc=3,3V. Achtung: Nicht alle 74LVX sind für 5V -&amp;gt; 3,3V geeignet, da jeder Hersteller die ICs anders baut!&lt;br /&gt;
:** 74LVX04 &lt;br /&gt;
:** 74LVX244 (Fairchild)&lt;br /&gt;
:** 74LVX245 (nicht von Reichelt, nicht 5V tolerant)&lt;br /&gt;
:** bei TI heissen die 74LVX... nur 74LV...&lt;br /&gt;
&lt;br /&gt;
:* 74HC4050 (bis 15V Step Down Pegelwandlung laut Datenblatt, bei Reichelt in DIP und SO erhältlich)&lt;br /&gt;
:* MAX3373/MAX3375&lt;br /&gt;
:* NC7SZ08 oder andere aus derselben Serie. CMOS-Logik mit 5V-toleranten Eingängen, recht flott und braucht dank SOT-23 auch wenig Platz auf dem Print&lt;br /&gt;
&lt;br /&gt;
* 5V Open Collector auf 3.3V Eingang. Einfach einen Pull-Up hinzufügen (Pull-Up liegt auf 3.3V). Nachteilig ist der relativ hohe Stromverbrauch bei LOW, die begrenzte Geschwindigkeit bei hochohmigen Pull-Ups und der relativ geringe Ausgangsstrom bei HIGH (abhängig vom Pull-Up).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_oc_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* Spannungsteiler mit 680Ω und 1kOhm. Der Nachteil dieser Lösung ist der relativ hohe Stromverbrauch (~3mA), der relativ geringe Ausgangsstrom (mehr als 200..300uA sollte man da nicht rausziehen) und die relativ geringe Geschwindigkeit (ca. 10 MHz).&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_st_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
* 1 kOhm Vorwiderstand. Dadurch wird der Strom vom 5V Ausgang in die 3.3V Versorgung durch die internen Schutzdioden auf ca. 1mA begrenzt. Diese Lösung ist auch relativ langsam (ca. 5MHz). Ggf. kann man den Vorwiderstand auf 100Ω reduzieren, das erhöht dann wieder die Geschwindigkeit. Aufpassen, einige ICs vertragen nur 1mA oder weniger durch die Schutzdioden! Ausserdem muss man aufpassen, das jetzt von der 5V Seite Strom in die 3.3V Versorgung eingespeist wird. Besonders in Schaltungen mit sehr niedrigem Stromverbrauch kann das zum Problem werden, wenn weniger Strom verbraucht wird als über die Vorwiderstände eingespeist wird. Dann nimmt es meist der Spannungsregler für 3.3V übel wenn jemand &amp;quot;schiebt&amp;quot;, sprich, Strom einspeist. Denn die allermeisten Spannungsregler können nur Strom liefern (source), aber keinen Strom aufnehmen (sink). Es gibt 4-fach-Diodennetzwerke, die die internen Schutzdioden entlasten können (Schottkydioden mit kleinerer Flusspannung von ~0,3V als die internen Silizizumdioden mit ~0,7V), außerdem ist teilweise noch eine [[Diode#Z-Diode|Zenerdiode]] enthalten, die ggf. den überschüssig eingespeisten Strom aufnehmen kann. &lt;br /&gt;
&lt;br /&gt;
[[bild:pw_vw_5-3.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Mindestens für 74HC(T) Gatter ist dokumentiert (Philips 74HC/T High-Speed CMOS User Guide), dass auch schon geringer Strom durch die internen Schutzdioden zu einer unerwünschten Kopplung von Eingängen führen kann, d.h. der Strom fliesst zu einem anderen Eingang wieder hinaus. Sind also andere Eingänge ebenso hochohmig angeschlossen, kann dieser Querstrom zu Fehlfunktion führen.&lt;br /&gt;
&lt;br /&gt;
== BIDIREKTIONAL ==&lt;br /&gt;
&lt;br /&gt;
Für bidirektionale Busse gibt es spezielle Pegelwandler mit 2 Versorgungsspannungen. Allerdings brauchen die meist ein Signal zur Richtungsumschaltung. Auch muss man die Reihenfolge der Versorgungsspannungen beim Einschalten beachten. Aktive bidirektionale Pegelwandler OHNE Steuereingang zur Richtungsumschaltung sind mit Vorsicht zu geniessen, denn die brauchen teilweise kurzzeitig einen relativ hohen Strom, um die Eingänge zu treiben.&lt;br /&gt;
&lt;br /&gt;
=== 5V &amp;lt;-&amp;gt; 3.3V ===&lt;br /&gt;
&lt;br /&gt;
* Wenn die 5V Seite TTL-kompatible Eingänge hat kann wieder der Spannungsteiler oder Vorwiderstand wie bei der unidirektionalen Anpassung verwendet werden (mit all seinen Vor- und Nachteilen).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SN74CB3T3306&lt;br /&gt;
* SN74CBTD3861 (10 Bit,flow through, Betrieb mit 5 Volt)&lt;br /&gt;
* MAX1741 &lt;br /&gt;
* MAX3378E &lt;br /&gt;
* 74AHC126 s.u.&lt;br /&gt;
* ST2378 (bei CSD erhältlich, 3.5 eur, leider TSSOP)&lt;br /&gt;
* TXS0104E (TI: 4-BIT BIDIRECTIONAL VOLTAGE-LEVEL TRANSLATOR FOR OPEN-DRAIN AND PUSH-PULL APPLICATIONS)&lt;br /&gt;
* SN74LVC07A&lt;br /&gt;
&lt;br /&gt;
=== 1,65V...5,5V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74LVC1T45&lt;br /&gt;
* SN74LVC2T45&lt;br /&gt;
* SN74LVC(H)8T245&lt;br /&gt;
* SN74LVC(H)16T245&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,65V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* TXB0101&lt;br /&gt;
* TXB0102&lt;br /&gt;
* TXB0104&lt;br /&gt;
* TXB0106&lt;br /&gt;
* TXB0108&lt;br /&gt;
&lt;br /&gt;
=== 1,2V...3,6V &amp;lt;-&amp;gt; 1,2V...3,6V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* SN74AVC(H)1T45&lt;br /&gt;
* SN74AVC(H)2T45&lt;br /&gt;
* SN74AVC(H)4T245&lt;br /&gt;
* SN74AVC(H)8T245&lt;br /&gt;
* SN74AVC(H)16T245&lt;br /&gt;
* SN74AVC(H)20T245&lt;br /&gt;
* SN74AVC(H)24T245&lt;br /&gt;
* SN74AVC(H)32T245&lt;br /&gt;
&lt;br /&gt;
=== 1,5V...3,6V &amp;lt;-&amp;gt; 1,5V...5,5V ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bauteile&#039;&#039;&#039;&lt;br /&gt;
* 74LVC4245A&lt;br /&gt;
&lt;br /&gt;
== Mit galvanischer Trennung ==&lt;br /&gt;
&lt;br /&gt;
* [[Optokoppler]]&lt;br /&gt;
&lt;br /&gt;
[[bild:pw_opto.png]]&lt;br /&gt;
&lt;br /&gt;
* GMR-Koppler von der Firma NVE &lt;br /&gt;
* iCoupler Technologie von der Firma Analog Devices&lt;br /&gt;
* [[Kapazitiver Koppler]]&lt;br /&gt;
&lt;br /&gt;
Lit.: &#039;&#039;Galvanische Trennung: Optokoppler, GMR-Koppler oder iCoupler?&#039;&#039;, Siegfried W. Best, Redaktion elektronik industrie, [http://www.elektronik-industrie.de/ei/11,2003/article/2f0082f824c.html elektronik industrie 11-2003, S. 22ff.]&lt;br /&gt;
&lt;br /&gt;
== Praktische Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Einfaches RS232-Interface ===&lt;br /&gt;
&lt;br /&gt;
[http://web.archive.org/web/20050122013618/http://www.henrik-reimers.de/control/rs232interface.gif Erfolgreicher Einsatz bis 19200 Baud und bis zu 10 m Leitungslänge]&lt;br /&gt;
&lt;br /&gt;
Beschränkungen:&lt;br /&gt;
&lt;br /&gt;
* ggf. Platzbedarf&lt;br /&gt;
* Geschwindigkeit s.o.&lt;br /&gt;
&lt;br /&gt;
Beispiel: http://www.hagtech.com/pdf/translator.pdf&lt;br /&gt;
&lt;br /&gt;
=== [[I2C]]-Bus: gemeinsam 3.3V und 5V ===&lt;br /&gt;
&lt;br /&gt;
* [[MSP430]] an 3,3V/5V: http://www-s.ti.com/sc/psheets/slaa148/slaa148.pdf&lt;br /&gt;
&lt;br /&gt;
* Philips [http://www.nxp.com/documents/data_sheet/PCA9515.pdf PCA9515]: I2C Puffer mit Pegelwandlung. Der PCA9515 ist ein I2C-Bus Repeater, welcher I2C Busse mit verschiedenen Spannungen isoliert. Verfügbar bei Reichelt und DigiKey.&lt;br /&gt;
&lt;br /&gt;
* [http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf Philips AN97055 Bi-directional level shifter for I²C-bus and other systems]&lt;br /&gt;
&lt;br /&gt;
* Bevor man ein Philips I2C Chip auswählt sollte man prüfen ob er verfügbar ist und auch das verfügbare Gehäuse wählen. Man sollte auch überlegen ob ein Puffer wirklich gebraucht wird. Wenn man echte I2C ICs mit 5V betreibt, dann sind die Eingänge vom Typ Schmitt Trigger CMOS (z.&amp;amp;nbsp;B. PCF8574). Dann müssen 3.3V Pegel auf 5V umgesetzt werden. Wenn man jedoch SMBUS Ics verwendet (z.&amp;amp;nbsp;B. ADT7461, Silabs 8051) dann sind die Schwellspannungen TTL kompatibel und es ist keine Anpassung notwendig. Für neue Pegelwandler sollte man hier nachschauen. http://www.bus-buffer.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.edn.com/article/CA193193.html &amp;quot;Two-transistor circuit replaces IC&amp;quot;]. Für diese Anwendung kann ENABLE direkt mit 3.3V verbunden werden. Es ist eigentlich nur dazu da, den ICs &amp;quot;hot-swappable&amp;quot; zu machen (kann unter Spannung gesteckt und getrennt werden). Es geht sogar mit nur einem [[Transistor]] [http://www.mikrocontroller.net/topic/92447 siehe Forum]. Man sollte beachten, daß die Schaltung sowohl für SCL als auch SDA benötigt wird. &lt;br /&gt;
* Noch einfachere Lösungen mit nur einem MOSFET und zwei Pull-Up Widerständen pro Leitung sind in den folgenden Links zu finden. Vielleicht ist es sogar noch billiger Bipolartransistoren zu verwenden.&lt;br /&gt;
** http://www.semiconductors.philips.com/markets/mms/protocols/i2c/facts/#levelshifting&lt;br /&gt;
** http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf (Kapitel 18), bei der Berechnung der erreichbaren Geschwindigkeit dürfen die parasitären Kapazitäten der FETs nicht ignoriert werden&lt;br /&gt;
&lt;br /&gt;
=== Auswählbare Pegel ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ein CMOS Logikpegel zwischen 1,8V, 2,5V und 3,3V (abhängig von der Anwendung) muss auf 5V CMOS Logikpegel gewandelt werden. Es geht nur um diese Richtung mit maximal 8MHz. Es gibt die Stromversorgung für alle Pegel. Ein normaler Komparator wie LM311 ist nicht möglich, da er beim Betrieb mit 5V Versorgunsspannung erst ab 1V zu schalten anfängt. Meine Idee ist die Verwendung eines High Speed OPVs mit R2R Eingang, z.&amp;amp;nbsp;B. LMH6645.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* Man könnte einen ultra-low threshold N-Kanal MOSFET nehmen und als Open Drain mit einem Pull-Up nach 5V betreiben, BSH103 könnte passen (Schwellspannung ~0,4V).&lt;br /&gt;
* High-Speed Single Supply Komparator wie z.&amp;amp;nbsp;B. [http://www-s.ti.com/sc/ds/tl712.pdf TL712] .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frage:&#039;&#039;&#039;&lt;br /&gt;
Ich suchen einen IC, welcher eine Pegelwandlung von 3,3V nach 1,8V, 2,0V oder 5V ermöglicht und während des Betriebs umgeschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antworten:&#039;&#039;&#039;&lt;br /&gt;
* So ein IC ist der Linear [http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1007,C1071,P1601 LTC1555L-1.8] . &lt;br /&gt;
&lt;br /&gt;
=== AVR SPI (SDC/MMC)===&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;bidirektionalen Betrieb&#039;&#039;&#039; zwischen 5V-AVR und 3,3V-Geräten und anders herum gibt es den Level-Translator &#039;&#039;&#039;MAX3378E&#039;&#039;&#039; von Maxim.&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenrichtung am SPI im Zielsystem festgelegt ist, reichen &#039;&#039;&#039;unidirektionale Bausteine&#039;&#039;&#039;:&lt;br /&gt;
* 3x von 5V nach 3,3V und 1x von 3,3V nach 5V: &#039;&#039;&#039;MAX3392E&#039;&#039;&#039;&lt;br /&gt;
* 1x von 5V nach 3,3V und 3x von 3,3V nach 5V: &#039;&#039;&#039;MAX3390E&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zum Anschließen einer SDC/MMC an einen 5V-AVR eignen sich somit der MAX3978E und der MAX3392E. Beide sind u.A. im winzigen TSSOP-14-Gehäuse verfügbar, nehmen sehr wenig Energie auf und eignen sich auch für andere Spannungen. Mit 3,3 und 5V beträgt die garantierte Übertragungsrate 8Mbps.&lt;br /&gt;
&lt;br /&gt;
* [http://datasheets.maxim-ic.com/en/ds/MAX3372E-MAX3393E.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit zum Übersetzen zwischen 3,3 und 5V liegt in der Verwendung des &#039;&#039;&#039;74LVC245&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
5V-AVR an eine MMC (ohne Level-Shifter-Baustein):&lt;br /&gt;
* [http://www.microsyl.com/index.php/2010/03/24/led-sign-with-mmc-memory-card/ Projektseite] &lt;br /&gt;
* [http://www.microsyl.com/projects/ledsign/ledsign1.pdf Schaltplan]&lt;br /&gt;
&lt;br /&gt;
=== µC &amp;lt;-&amp;gt; Parallelport ([[ISP]]-Dongle, [[JTAG]] Wiggler, ...) ===&lt;br /&gt;
&lt;br /&gt;
Dieser Schaltplan funktioniert auch bei 3.3V wenn man einen 74&amp;lt;B&amp;gt;HC&amp;lt;/B&amp;gt;244 anstatt eines 74&amp;lt;B&amp;gt;LS&amp;lt;/B&amp;gt;244 verwendet: [http://www.epanorama.net/circuits/parallel_output.html Parallel port interfacing made easy: Simple circuits and programs to show how to use PC parallel port output capabilities].&lt;br /&gt;
&lt;br /&gt;
=== 2 Leitungspaare RX/TX 5V/3,3V ===&lt;br /&gt;
&lt;br /&gt;
Der [http://www.hackaday.com/2008/06/19/sparkfuns-logic-level-converter/ SparkFun&#039;s Logic Level Converter] ist eine Baugruppe mit MOSFETs [http://www.fairchildsemi.com/pf/BS/BSS138.html BSS138] für die Pegelwandlung von 5V auf 3,3V. 5V/2,8V und 5V/1,8V sind ebenfalls machbar.&lt;br /&gt;
&lt;br /&gt;
= Bauteile =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;74ALVC164245&#039;&#039;&#039; - &#039;&#039;16bit dual supply translating transceiver&#039;&#039;. Eine Seite von 1.5V bis 3.6V, die andere von 1.5 bis 5.5V.&lt;br /&gt;
* &#039;&#039;&#039;74LVX573&#039;&#039;&#039; (unidirektional, Latch, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX245&#039;&#039;&#039; (bidirektional, nicht alle Hersteller bauen diesen 5V tolerant!)&lt;br /&gt;
* &#039;&#039;&#039;74LVX125&#039;&#039;&#039; - &#039;&#039;Low Voltage Quad Buffer with 3-STATE Outputs&#039;&#039;. http://www.fairchildsemi.com/pf/74/74LVX125.html&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC2T45&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SN74LVC8T245&#039;&#039;&#039; - &#039;&#039;8-Bit Dual-Supply Bus Transceiver with Configurable Voltage Translation and Three-State Outputs&#039;&#039;. http://focus.ti.com/docs/prod/folders/print/sn74lvc8t245.html&lt;br /&gt;
* &#039;&#039;&#039;74LCX244MSA&#039;&#039;&#039; von Fairchild.&lt;br /&gt;
* &#039;&#039;&#039;MAX3377&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAX3000&#039;&#039;&#039; 8-Kanal bidirektioneler Pegelwandler ohne Richtungsumschaltung&lt;br /&gt;
* &#039;&#039;&#039;ADG3308&#039;&#039;&#039; 8-Kanal bi-dir. Pegelwandler ohne Richtungsumschaltung, 1,15V..5,5V, 50MBps&lt;br /&gt;
&lt;br /&gt;
Vierfachdioden im kleinen 6-poligen SMD-Gehäuse:&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/12635/dsilc6-4xx.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/11599.pdf&lt;br /&gt;
* http://www.st.com/stonline/products/literature/ds/6477/dalc208.pdf&lt;br /&gt;
* [http://www.diodes.com/datasheets/ds30195.pdf QSBT40, vierfach Schottky Terminator für Datenleitungen]&lt;br /&gt;
* [http://www.littlefuse.com/data/en/Data_Sheets/SP724Lead_Free.pdf SP724, Siliziumschutzarray]&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
&lt;br /&gt;
* Holmes D., [http://delphys.net/d.holmes/hardware/levelshift.html Bi-directional level-shift with MOSFETs]&lt;br /&gt;
* Gaurang Kavaiya, [http://www.edn.com/contents/images/6335309.pdf Don’t pay for level translators in systems using multiple power-supply voltages], EDN, MAY 25, 2006, 81-86 (PDF)&lt;br /&gt;
* [http://www.elektronik-kompendium.de/public/schaerer/scf3_lc.htm Einfacher Pegelwandler im ELKO]&lt;br /&gt;
* [http://www.prog-link.com/dcf77/dcf77-17.html Pegelwandler für DFC77 Module]&lt;br /&gt;
* [http://elektronik.kai-uwe-schmidt.de/index.php?page=mp3_blueschaltung Pegelwandler für [[I2C]] Bus in einem MP3 Player]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment.php/256452/levelshifter.pdf Application Note von Philips, I2C Pegelwandler]&lt;br /&gt;
* [http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf I2C Spezifikation]  &lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-234277.html#new Forumsbeitrag zum Thema 1,8V-5V Pegelwandler] &lt;br /&gt;
* [http://www.st.com/stonline/products/literature/ds/5186/74lcx16245.pdf 74LCX16245, 16 Bit Pegelwandler]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/buffers/ LVC Logikfamilie]&lt;br /&gt;
* [http://www.standardics.nxp.com/products/lvc/transceivers/ LVC Tranceiver]&lt;br /&gt;
* [http://www.leg-gmbh.de/html/signalanpassung.html Pegelwandler für die Automatisierungstechnik]&lt;br /&gt;
* [http://www.microchip.com/stellent/groups/techpub_sg/documents/devicedoc/en026368.pdf 3V Tips ‘n Tricks] (PDF) von Microchip&lt;br /&gt;
* [http://www.ti.com/lit/an/slaa148/slaa148.pdf Interfacing the 3-V MSP430 to 5-V Circuits] (PDF) von Texas Instruments&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Kategorie:Datenübertragung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Pegelwandler&amp;diff=70246</id>
		<title>Diskussion:Pegelwandler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Pegelwandler&amp;diff=70246"/>
		<updated>2012-12-26T16:18:29Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Artikel sind Pegelwandler die auf eine höher Spannung wandeln z.B. 3,3V -&amp;gt; 5V mit der Bezeichung STEP-UP angegeben. Dies ist irreführend und sollte man besser umbenennen. [[Benutzer:Esko|Esko]] 23:34, 10. Jan. 2010 (UTC)&lt;br /&gt;
: das ist sogar ziemlich falsch, würde ich sagen. Wurde aber auch schon geändert. [[Benutzer:Elektromeister|Elektromeister]] 16:18, 26. Dez. 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70245</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70245"/>
		<updated>2012-12-26T16:14:53Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Softwareentprellung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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 verhandenen Mikrocontrollers z.B., kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso so 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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70244</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70244"/>
		<updated>2012-12-26T16:11:58Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Prellfreie Schalter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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;
Bei Verwendung eines Mikrocontrollers kann man sich die zusätzliche Hardware sparen, da die Entprellung genauso gut in Software funktioniert. Dabei ist zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch Hardwareressourcen benötigt werden (z. B. Timer).&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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70243</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70243"/>
		<updated>2012-12-26T16:09:59Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Prellfreie Schalter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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 nur im Leistungsbereich eingesetzt. In den Zeiten der elektronischen Auswertung von Tastern ist das softwaretechnische Entprellen billiger. Daher werden heute auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.&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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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;
Bei Verwendung eines Mikrocontrollers kann man sich die zusätzliche Hardware sparen, da die Entprellung genauso gut in Software funktioniert. Dabei ist zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch Hardwareressourcen benötigt werden (z. B. Timer).&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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70242</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70242"/>
		<updated>2012-12-26T16:07:51Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: Inhaltsverzeichnis nach vorn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Problembeschreibung ==&lt;br /&gt;
Mechanische Schalter 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. Solche Systeme sind jedoch teuer und werden nur im Leistungsbereich eingesetzt. In den Zeiten der elektronischen Auswertung von Tastern ist das softwaretechnische Entprellen billiger.&lt;br /&gt;
&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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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;
Bei Verwendung eines Mikrocontrollers kann man sich die zusätzliche Hardware sparen, da die Entprellung genauso gut in Software funktioniert. Dabei ist zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch Hardwareressourcen benötigt werden (z. B. Timer).&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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70241</id>
		<title>Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entprellung&amp;diff=70241"/>
		<updated>2012-12-26T16:07:07Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: bouncefree switches, Redundanter Satz raus, Link einsortiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mechanische Schalter 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. Solche Systeme sind jedoch teuer und werden nur im Leistungsbereich eingesetzt. In den Zeiten der elektronischen Auswertung von Tastern ist das softwaretechnische Entprellen billiger.&lt;br /&gt;
&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|framed|left|&#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;
===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|framed|left|&#039;&#039;&#039;Taster entprellen mit RC-Entpreller&#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;
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 der 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;
Bei Verwendung eines Mikrocontrollers kann man sich die zusätzliche Hardware sparen, da die Entprellung genauso gut in Software funktioniert. Dabei ist zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch Hardwareressourcen benötigt werden (z. B. Timer).&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;c&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;/c&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 abgerenzt 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;c&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;/c&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;c&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;/c&amp;gt;&lt;br /&gt;
Die Funktion wird wie folgt aufgerufen:&lt;br /&gt;
&amp;lt;c&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;/c&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;c&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;/c&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;c&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;/c&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;avrasm&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;/avrasm&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;c&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;/c&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;c&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;/c&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;C&amp;gt;&lt;br /&gt;
  i = key_state ^ ~KEY_PIN;                       // key changed ?&lt;br /&gt;
&amp;lt;/C&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;C&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;/C&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;C&amp;gt;&lt;br /&gt;
  i &amp;amp;= ct0 &amp;amp; ct1;                                 // count until roll over ?&lt;br /&gt;
&amp;lt;/C&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. Das heißt, ein Tastendruck wird erkannt, 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;C&amp;gt;&lt;br /&gt;
  key_state ^= i;                                 // then toggle debounced state&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
  key_press |= key_state &amp;amp; i;                     // 0-&amp;gt;1: key press detect&lt;br /&gt;
&amp;lt;/C&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;C&amp;gt;&lt;br /&gt;
    key_press |= key_state &amp;amp; i;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
ist nichts anderes als ein&lt;br /&gt;
&amp;lt;C&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;/C&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;
===== 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;C&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;/C&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 diskreter Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit 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 Eingangswers träge folgt. Bei Überschreiten eines bstimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.&lt;br /&gt;
&lt;br /&gt;
Für Assembler und 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 den gedämpften Verlauf des Eingangs flankenverschliffen ab und kann Prellen bis hart 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.&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;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Signalverarbeitung]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61055</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61055"/>
		<updated>2011-10-11T12:36:15Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digitent Spartan 3&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
=== Vorhandene Designs und Sourcen ===&lt;br /&gt;
Auf diese Designs und Sourcen die bereits realisiert sind, kann für eigene FPGA-Entwicklungen zurückgegriffen werden:&lt;br /&gt;
&lt;br /&gt;
====interne====&lt;br /&gt;
* VGA Core für 800x600 und 1024x768 in VHDL&lt;br /&gt;
* einstellbarer Spektralfilter&lt;br /&gt;
&lt;br /&gt;
====externe====&lt;br /&gt;
* SUMP Logic Analyzer&lt;br /&gt;
* Bithound Analyzer&lt;br /&gt;
* Logic sniffer open workbench&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
http://www.mikrocontroller.net/topic/77033#new&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/219592#new&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/192400#new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61054</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61054"/>
		<updated>2011-10-11T12:35:19Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* interne */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digitent Spartan 3&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
=== Vorhandene Designs und Sourcen ===&lt;br /&gt;
Auf diese Designs und Sourcen die bereits realisiert sind, kann für eigene FPGA-Entwicklungen zurückgegriffen werden:&lt;br /&gt;
&lt;br /&gt;
====interne====&lt;br /&gt;
* VGA Core für 800x600 und 1024x768 in VHDL&lt;br /&gt;
* einstellbarer Spektralfilter&lt;br /&gt;
&lt;br /&gt;
====externe====&lt;br /&gt;
* SUMP Logic Analyzer&lt;br /&gt;
* Bithound Analyzer&lt;br /&gt;
* Logic sniffer open workbench&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
http://www.mikrocontroller.net/topic/77033#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/219592#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/192400#new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61053</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61053"/>
		<updated>2011-10-11T12:33:13Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* =externe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digitent Spartan 3&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
=== Vorhandene Designs und Sourcen ===&lt;br /&gt;
Auf diese Designs und Sourcen die bereits realisiert sind, kann für eigene FPGA-Entwicklungen zurückgegriffen werden:&lt;br /&gt;
&lt;br /&gt;
====interne====&lt;br /&gt;
====externe====&lt;br /&gt;
* SUMP Logic Analyzer&lt;br /&gt;
* Bithound Analyzer&lt;br /&gt;
* Logic sniffer open workbench&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
http://www.mikrocontroller.net/topic/77033#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/219592#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/192400#new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61052</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61052"/>
		<updated>2011-10-11T12:32:59Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Designunterlagen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digitent Spartan 3&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
=== Vorhandene Designs und Sourcen ===&lt;br /&gt;
Auf diese Designs und Sourcen die bereits realisiert sind, kann für eigene FPGA-Entwicklungen zurückgegriffen werden:&lt;br /&gt;
&lt;br /&gt;
====interne====&lt;br /&gt;
====externe===&lt;br /&gt;
* SUMP Logic Analyzer&lt;br /&gt;
* Bithound Analyzer&lt;br /&gt;
* Logic sniffer open workbench&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
http://www.mikrocontroller.net/topic/77033#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/219592#new&lt;br /&gt;
http://www.mikrocontroller.net/topic/192400#new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61051</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61051"/>
		<updated>2011-10-11T12:25:01Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Zielplattformen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
* Digitent Spartan 3&lt;br /&gt;
* SUMP-LA (?)&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61050</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61050"/>
		<updated>2011-10-11T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Digitale Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Projektseite definiert einen universellen Analogeingang für FPGA-basierte Oszilloskope, Spektrumanalysatoren und Logikanalysatoren.&lt;br /&gt;
&lt;br /&gt;
→ [http://www.mikrocontroller.net/topic/234702 Forum: Diskussionsseite zum Projekt]&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
&lt;br /&gt;
===Projektstatus===&lt;br /&gt;
&lt;br /&gt;
Das Projekt ist in Planung&lt;br /&gt;
&lt;br /&gt;
== Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:engineer|Jürgen Schuhmacher]], Init&lt;br /&gt;
&lt;br /&gt;
===Kostenziel===&lt;br /&gt;
===Zeitplan===&lt;br /&gt;
&lt;br /&gt;
==Konzept==&lt;br /&gt;
&lt;br /&gt;
===Feature List===&lt;br /&gt;
Hier bitte die gewünschten Features eintragen:&lt;br /&gt;
&lt;br /&gt;
* Kalibierspannungen mit Abgleichfunktion&lt;br /&gt;
* kalibierte Offsetspannungen für Eingangsverschiebung&lt;br /&gt;
* grosser, AC-tauglicher common mode-freir Schiebebereich&lt;br /&gt;
* mehrere unterschiedlich steile / flache AA-Filter&lt;br /&gt;
* automatic gain control&lt;br /&gt;
* Mischer für Eingangsspannungen&lt;br /&gt;
* Analoger Differenzbildner&lt;br /&gt;
* Eingangswahlschalter für Signalquelle(n) / GND&lt;br /&gt;
* Eingangskopplung DC, AC&lt;br /&gt;
* Eingangsdaämpfung HF, LF&lt;br /&gt;
* zuschaltbarer Terminator 50Ω&lt;br /&gt;
* Eingangsverstärkung&lt;br /&gt;
* Eingangsoffset&lt;br /&gt;
&lt;br /&gt;
* über Relais einstellbarer Eingangsspannungsteiler, welche Relais genau wäre zu klären, Teilung 1:10 und 1:100&lt;br /&gt;
* zuschaltbarer 50Ω-Abschluss-Widerstand für max. 40Vpp am Eingang (5V/div)&lt;br /&gt;
* umschaltbare AC/DC-Kopplung, wer das lieber in Software realisieren mag bestückt den AC-Teil einfach nicht&lt;br /&gt;
* möglichst große und einstellbare Analogbandbreite für den vielseitigen Einsatz&lt;br /&gt;
* zusätzliche Bandbreitenbegrenzung (entfällt bei Einsatz des LMH6518)&lt;br /&gt;
* über DAC einstellbare Offset-Verschiebung, auch hier gilt wieder, wer das in Software mit den digitalisierten Werten realisieren mag bestückt den Teil einfach wieder nicht, es wäre zu klären was für ein DAC zum Einsatz kommen soll (16bit?)&lt;br /&gt;
* AA-Filter sollten genauso wenig auf der Eingangsstufe platziert sein wie auch ggf. notwendige zusätzliche ADC-Treiber, das erhöht die Flexibilität der Eingangsstufe und mögliche Einsatzzwecke, sie gehören daher auf die ADC-Platine&lt;br /&gt;
* zentrale Spannungsversorgung, aus der alle weiteren Spannungen abgeleitet werden, das erhöht die Betriebssicherheit&lt;br /&gt;
* zu klären wäre, wie sämtliche Interfaces (DAC, SPI, CM-Spannungen) ausgestaltet werden sollen&lt;br /&gt;
* Ground-Coupling, möglichst an der BNC-Buchse, um das tatsächliche Eingangsrauschen der gesamten Stufe samt Eingangsspannungsteiler beurteilen zu können&lt;br /&gt;
* Einschleifen eines Testsignals zur Geräte-Kalibrierung&lt;br /&gt;
&lt;br /&gt;
bei Einsatz des LMH6518:&lt;br /&gt;
* herausgeführte CM-Anschlüsse für MainOut und AuxOut, damit die Möglichkeit besteht beides an entsprechende Zusatz-Module anzupassen&lt;br /&gt;
* über Koax-Anschlüsse herausgeführtes diff. MainOut und diff. AuxOut (50Ω-Technik, vorzugsweise SMA oder SMB)&lt;br /&gt;
&lt;br /&gt;
==Realisierung==&lt;br /&gt;
&lt;br /&gt;
=== Zielplattformen===&lt;br /&gt;
&lt;br /&gt;
* Terasic DE2-115 Altera Cyclone 4&lt;br /&gt;
* Digilent Xilinx Spartan 3E Dev board&lt;br /&gt;
&lt;br /&gt;
=== Digitale Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Hier bitte die gewünschten, realisierten digitalen Funktionen eintragen:&lt;br /&gt;
&lt;br /&gt;
* Anstatt eines Mini-TFT 640×320 oder einer kleinen Oszi-Röhre, eine übersichtliche Ausgabe im Breitbild auf TFT mit &amp;gt; 1024 Punkten&lt;br /&gt;
* Mehrer Bildschirme für FFT, Spektrum, Mathematik, Analogfunktionen, z.B: parallele Ausgabe von totalem Bildschirm und gezoomtem Bildschirm auf zwei Monitoren und parallele Ausgabe von FFT, Spektrum der eingehenden Signale, mathematische Funktonen auf drittem Monitor&lt;br /&gt;
* statt fest eingebranntem 10×8–Gitter eine bequeme und stufenlose Zoomfunktion mit Autoskalierung, die dynamisch angepasst ist,&lt;br /&gt;
* geschickte(re) Farbgebung, damit &amp;quot;Strahl&amp;quot; und &amp;quot;Gitter&amp;quot; differenzierbar sind und trotzdem direkt zur Messung verwendet werden können&lt;br /&gt;
* real time FFT mit z.B. 64k, damit man auch etwas Auflösung hat&lt;br /&gt;
* statt langsamer Übertragungsrate zum PC, hohe Updatraten in Realzeit mit ausreichend geringer Latenz nahe Null, so dass 75Hz verzögerungsfrei dargestellt werden können,&lt;br /&gt;
* real time interpreter für eigenes serielles Daten-Protokoll (in openVHDL leicht machbar)&lt;br /&gt;
&lt;br /&gt;
* Verzerrungsmessgerät THDN auf der Basis von FFT und Vergleichseingang&lt;br /&gt;
&lt;br /&gt;
=== Designunterlagen ===&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=60818</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=60818"/>
		<updated>2011-09-29T15:11:32Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Altera DE2-115 - Development and Education Board V3 */ tippo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor geschalteten Logikelementen. Diese Logikelemente sind entweder Verschaltungen verschiedener Logikgatter (Actel) oder aber kleine LUTs (LUT = Lookup-Table), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zur Betriebsbereitschaft.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards. Üblich sind verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung.&lt;br /&gt;
&lt;br /&gt;
Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Delaygliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden.&lt;br /&gt;
&lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Komponente eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. &lt;br /&gt;
&lt;br /&gt;
Ferner sind einige wenige Pins (2 - 8) zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare buffer direkt auf Taktnetze / PLLs.&lt;br /&gt;
&lt;br /&gt;
Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1000 I/Os, die kleinsten bieten ca. 80 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240 Pins) angeboten.&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Funktionsblöcke ===&lt;br /&gt;
&lt;br /&gt;
Neben den einfachen FlipFlops beinhalten FPGAs darüber hinaus komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente (LEs), die es gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten viele FPGAs &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; direkt auf dem Chip, die in einem einzigen Taktzyklus Multiplikationen durchführen können.&lt;br /&gt;
&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung spezieller Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen mit dem selben Ziel &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere erzeugt werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt geteilt werden oder ein Signal gleicher Frequenz, aber um eine halbe, viertel usw. Periode verschoben erzeugt werden. Typische Anwendungen sind die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch bei FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen auch deutlich einfacher zu entwickeln. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine klassische CPU zurückgreifen. &lt;br /&gt;
&lt;br /&gt;
Manche FPGAs integrieren dazu einen oder mehrere Prozessorkerne (z. B. [[AVR]] bei Atmels FPSLIC oder PowerPC bei Xilinx&#039; Virtex) als &#039;&#039;HardCores&#039;&#039; auf einem IC.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instanziiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. &lt;br /&gt;
 &lt;br /&gt;
Teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil optimiert auf die FPGAs einzelner Hersteller. Auch auf vergleichsweise &lt;br /&gt;
kleinen aktuellen FPGAs kann man problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die maximale „Geschwindigkeit“ eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen, möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-600 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-100 MHz für global operierende Einheiten und bis zu 300 MHz für schnelle lokale Module. Maßgeblich ist in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade entschärfen (Pipelining), sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz lässt sich darüber hinaus durch die Nutzung paralleler Architekturen verbessern.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann-, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen etwa 10-30% weniger Taktgeschwindigkeit bei gleichem Design zu erwarten als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswert.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in zwei oder mehr Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-10% höhere Taktung zwischen zwei speed grades erwarten.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau komplizierter, applikationsnaher Strukturen wird meist durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer logischen, funktionellen Beschreibung der Architektur in einer Hardwarebeschreibungssprache wie z.&amp;amp;nbsp;B. VHDL &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung in [[VHDL]] gelingt ihrerseits z.&amp;amp;nbsp;B. mit VHDL-generierenden Werkzeugen, mittels derer zuvor Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert wurden.&lt;br /&gt;
&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits und die Entkoppplung von applikationsorientierter Beschreibung sowie Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi als Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplett nutzbare Schaltungen wie serielle Bausteine, RAM-Controller und vieles mehr zur Verfügung - teilweis sogar in Form von Open Source Projekten.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsboards und Starterkits ==&lt;br /&gt;
=== Boards für Xilinx-FPGAs ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fpgaevalboards&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichn.&lt;br /&gt;
! Preis (&amp;amp;euro;)&lt;br /&gt;
! FPGA&lt;br /&gt;
! RAM (MByte)&lt;br /&gt;
! Flash (MByte)&lt;br /&gt;
! USB&lt;br /&gt;
! Ethernet&lt;br /&gt;
! RS-232&lt;br /&gt;
! µC&lt;br /&gt;
! Eingabe&lt;br /&gt;
! sonst.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.knjn.com/board_Xylo.html Xylo-L]&lt;br /&gt;
| 130&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| 10base-T&lt;br /&gt;
| -&lt;br /&gt;
| LPC213x&lt;br /&gt;
| -&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/s3estarter Spartan3e Starter Kit]&lt;br /&gt;
| 180&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| 64 MB DDR-SDRAM&lt;br /&gt;
| 16&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 2x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| Coolrunner CPLD, LCD, 3-Bit VGA, PS/2&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=S3BOARD Digilent Spartan-3]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200 XC3S400 XC3S1000&lt;br /&gt;
| 1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA, PS/2, 7seg&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys]]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 16&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| 7seg, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys 2]]&lt;br /&gt;
| 121&lt;br /&gt;
| XC3S500E/1200E&lt;br /&gt;
| 16&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| Cypress FX2 &lt;br /&gt;
| 4 Taster, 8 Schalter, 8 LEDs&lt;br /&gt;
| 4x7Seg, Programmierung &amp;amp; Stromversorgung über USB oder über Netzteil (5V-15V)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uxibo.de Uxibo]&lt;br /&gt;
| 88&lt;br /&gt;
| XC2S200E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA I/O, Videomux, dual PS/2, 7seg, Buzzer, IOs auf Pinleisten, dual-channel FTDI2232C, 48 MHz + prog. Oszillator, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fpgaz.com/wiki/doku.php?id=fpgaz:usbp:hw FPGAz USBP]&lt;br /&gt;
| $135&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Cypress FX2&lt;br /&gt;
| 2 Taster&lt;br /&gt;
| 8 LEDs, I2C-EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys.com/fpga_produktmatrix.html USBS6] Cesys &lt;br /&gt;
| 399&lt;br /&gt;
| XC6SLX16&lt;br /&gt;
| 128&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| Drehschalter, Leds.&lt;br /&gt;
|115 I/O signale, einstellbarer IO Standard, zweiter USB Port (FT232), WIN 32&amp;amp;64 Bit und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys.com/fpga/spartan/efm01_de.html EFM 01] Cesys &lt;br /&gt;
| 145&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| -&lt;br /&gt;
| 28 x 44mm, 50 I/O auf 2.54mm Stiftleiste, WIN und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://shop.trenz-electronic.de/catalog/product_info.php?products_id=456 Avnet Spartan 3A Evaluation Kit]&lt;br /&gt;
| 50&lt;br /&gt;
| XC3S400A&lt;br /&gt;
| -&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| WIN und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ct-lab.de FPGA-Karte aus dem c´t-Lab]&lt;br /&gt;
| 92&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| SD-Kartenslot (Bitstream-File wird über µC ins FPGA geladen, Dateiauswahl via Systembus oder Panel oder fest einstellbar)&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| ATmega644&lt;br /&gt;
| optionales Bedienpanel mit LCD-Display, Drehgeber und Taster&lt;br /&gt;
| Bestandteil des Laborsystems c´t-Lab der Zeitschrift c´t.&lt;br /&gt;
VGA-Buchse, SD-Kartenslot (u.a. auch zum Laden des FPGA). Preis für FPGA-Platine mit verlöteten SMD-Bauteilen und Teilesatz. Optionale Erweiterungskarten mit schnellen DACs, Eingangskomparator, SRAM, Echtzeituhr, PS/2, RS232 (am FPGA). Optionaler JTAG-Adapter. &lt;br /&gt;
http://www.ct-lab.de, http://www.segor.de, http://thoralt.ehecht.com/phpbb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 1 - Spartan-3 Development PCI-Karte ====&lt;br /&gt;
* Spartan-3 FPGA FG456-Package&lt;br /&gt;
* 32 bit, 33 MHz, 3.3/5V PCI interface&lt;br /&gt;
* 4Mbit Flash Memory&lt;br /&gt;
* 16KBit serielles EEprom&lt;br /&gt;
* 4 x 7 Segment Anzeigen LED, abnehmbar&lt;br /&gt;
* LM75 Temperatursensor&lt;br /&gt;
* viele DIL-Header für eigene Erweiterungen, verschiedene werden auch durch Hersteller angeboten&lt;br /&gt;
* 2 Drucktaster&lt;br /&gt;
* Mit dem PCI-Interface kann bei entsprechender Programmierung des FPGA auf den PCI-Bus eines Hostrechners zugegriffen werden, Beispieldesign unter http://projects.varxec.net/raggedstone1&lt;br /&gt;
* Webseite: http://www.enterpoint.co.uk/moelbryn/raggedstone1.html&lt;br /&gt;
* Preis mit XC3S400 ca. €165,- (inkl MwSt.)&lt;br /&gt;
* Preis mit XC3S1500 ca. €265,-  (inkl. MwSt.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Die Altium-Software nutzt direkt die Programmier-Software des jeweiligen FPGA-Herstellers&lt;br /&gt;
* Xilinx XC3S1000-4FG456C, wahlweise aber auch mit Altera EP1C12F324C8 (s.u.)&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern, USB-Dongle (braucht man für NB2 und NB3000) ebenso verfügbar&lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Board NB1 (LiveDesign), nicht mehr neu erhältlich; manchmal beim großen Versteigerer zu haben für ca. 100 EUR&lt;br /&gt;
* Board NB2, immer noch aktuell, mehrere Erweiterungskarten verfügbar, Kosten ca. 1.800 EUR&lt;br /&gt;
* Board NB3000, sehr gut ausgestattetes, kompaktes Board, Kosten ca. 340 EUR ~ 400 EUR, je nach FPGA-Familie. Erhältlich mit Altera, Xilinx oder Lattice-Chip&lt;br /&gt;
* NB3000 enthält sog &amp;quot;SoftDesign&amp;quot; Lizenz für Altium, gültig 1 Jahr. Sehr große Software-Bibliothek, inkl. verschiedener 8Bit- und einem 32Bit-Softcore. Per JTAG auch eigene Boards programmierbar&lt;br /&gt;
&lt;br /&gt;
==== Trenz-Electronic ====&lt;br /&gt;
http://www.trenz-electronic.de/products.html&lt;br /&gt;
* Kleines FPGA Board mit ucLinux und Virtex-II PowerPC, optional: ucLinux und Microblaze Softprozessor im Spartan-3 FPGA&lt;br /&gt;
* Pal/Gal kompatible FPGA und CPLD Module&lt;br /&gt;
* Spartan-3 FPGA Mikromodul mit 200 bis 1000 Systemgattern&lt;br /&gt;
* Spartan-3A DSP Mikromodul mit bis zu 18000 / 34000 Systemgattern&lt;br /&gt;
* Spartan-6 DSP mit bis zu 34000 Gattern&lt;br /&gt;
&lt;br /&gt;
==== Simple-Solutions ====&lt;br /&gt;
http://www.simple-solutions.de/de/products/index.php&lt;br /&gt;
Mehrere Spartan3-FPGAs - Boards&lt;br /&gt;
&lt;br /&gt;
==== CESYS ====&lt;br /&gt;
http://www.cesys.com&lt;br /&gt;
&lt;br /&gt;
Cesys ist Entwickler und Hersteller von FPGA-boards mit Sitz in Deutschland.&lt;br /&gt;
&lt;br /&gt;
* Verschiedene FPGA boards mit USB, PCI und PCIe Schnittstellen im Lieferprogramm&lt;br /&gt;
* Je nach Ausführung mit Spartan-2/3/3E/6, Virtex2/2PRO/4&lt;br /&gt;
* verschiedene Speicherkonfigurationen (SO-DIMM, SRAM, SDRAM, DDR2)&lt;br /&gt;
* Auftragsentwicklungen nach Kundenwunsch möglich&lt;br /&gt;
&lt;br /&gt;
==== ZTEX ====&lt;br /&gt;
&lt;br /&gt;
http://www.ztex.de/&lt;br /&gt;
&lt;br /&gt;
ZTEX ist Entwickler und Hersteller von FPGA-boards mit Sitz in Deutschland.&lt;br /&gt;
&lt;br /&gt;
* Xilinx Spartan 6 FPGA, High-Speed USB interface, Cypress CY7C68013A EZ-USB Microcontroller, 90 GPIO ports, 15 SIO ports, 64 MByte DDR SDRAM, microSD socket, EEPROM.&lt;br /&gt;
* Xilinx Spartan 3 XC3S400 FPGA, High-Speed (480 MBit/s) USB interface, Cypress CY7C68013A EZ-USB Microcontroller, 60 GPIO ports, 20 SIO ports, EEPROM und optionally mit Flash memory&lt;br /&gt;
* High-Speed (480 MBit/s) USB interface, Cypress CY7C68013A/14A EZ-USB Microcontroller, microSD socket mit bis zu 2GB Flash memory, 36 GPIO ports, 28 SIO ports, EEPROM und on-board Schaltregler&lt;br /&gt;
&lt;br /&gt;
* Open Source Firmware Kit zum Programmieren&lt;br /&gt;
&lt;br /&gt;
=== Boards für Altera-FPGAs ===&lt;br /&gt;
&lt;br /&gt;
==== Altera Cyclone II 2C20 ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C7N FPGA mit 20000 LEs&lt;br /&gt;
* USB-BlasterTM download cable (integriert)&lt;br /&gt;
* EPCS4 serial configuration Flash&lt;br /&gt;
* 8-Mbyte SDRAM, 512-Kb SRAM, 4-Mbyte flash &lt;br /&gt;
* externer SMA - Clock-Eingang&lt;br /&gt;
* 24-bit Audio coder/decoder (CODEC) &lt;br /&gt;
* 10 Schalter, 4 Druckknöpfe inkl Reset &lt;br /&gt;
* 4St. 7-Segmentanzeigen, 10 rote LEDs + 8 grüne LEDs&lt;br /&gt;
* VGA, RS-232, and PS/2 Stecker&lt;br /&gt;
* Zwei 40-pin expansion ports + SD/MMC socket&lt;br /&gt;
* USB-Kabel, externes Steckernetztteil, CD-Rom&lt;br /&gt;
* Reference designs&lt;br /&gt;
* Qartus II Web Edition + NIOS II Web Edition&lt;br /&gt;
* http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html&lt;br /&gt;
* Listenpreis $150,-&lt;br /&gt;
&lt;br /&gt;
==== Hpe Mini AC II - Cyclone II board von Gleichmann Research ====&lt;br /&gt;
* Altera Cyclone II EP2C35 FPGA (speed grade 6)&lt;br /&gt;
* Mit reprogrammierbarem Flash zur automatischen FPGA-Konfiguration&lt;br /&gt;
* 25 pin SUB-D connector (parallel) für direktes FPGA-Programmieren&lt;br /&gt;
* RS232 (9 pin SUB-D) &lt;br /&gt;
* VGA (15 pin SUB-D) mit 64 möglichen Farben&lt;br /&gt;
* Ethernet 10/100 Mbit/s, full/half duplex&lt;br /&gt;
* 1 USB 2.0 compatible full-speed target connector&lt;br /&gt;
* 3 USB 2.0 compatible full-speed host connectors&lt;br /&gt;
* Santa Cruz connector mit 40 nutzbaren I/Os&lt;br /&gt;
* Audio interface (line-in and line-out) mit CODEC&lt;br /&gt;
* SODIMM144 Sockel für (SDRAM) 256MB&lt;br /&gt;
* SDRAM-Speichersockel mit nur 32-Bit angebunden, die Hälfte des Speichers bleibt nicht nutzbar&lt;br /&gt;
* 25 MHz oscillator&lt;br /&gt;
* Prototyping area, Lötfläche&lt;br /&gt;
* 8 LEDs, grün, blau, 3x4 key matrix, 4-bit DIP switch&lt;br /&gt;
* LCD connector, 2-character 7-segment display&lt;br /&gt;
* Single step Knopf und Reset Knopf&lt;br /&gt;
* Parallelportkabel für PC&lt;br /&gt;
* Beispieldesign, Testprogramme, Datenblätter&lt;br /&gt;
* LEON3-CPU Design inkl. Source Code, Quartus IDE, SnapGear Linux&lt;br /&gt;
* Nicht mehr im Programm - war ca 399,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2 - Development and Education Board V2 ====&lt;br /&gt;
* Altera Cyclone II 2C35 FPGA mit 35000 LEs&lt;br /&gt;
* Altera Serial Configuration devices (EPCS16) für Cyclone II 2C35&lt;br /&gt;
* USB Blaster board zur Programmierung und User API&lt;br /&gt;
* 8 MB SDRAM, 4 MB Flash Memory, 512KB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, Ethernet, 10-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* Viele Besipiel mit Source Code wie TV, SD Music Player)&lt;br /&gt;
* [http://www.fh-wedel.de/fileadmin/mitarbeiter/bos/files/VHDL/VhdlEinfuehrung.pdf Kleines aber nettes Tutorial zum Altera DE2 Dev. Board]&lt;br /&gt;
* Listenpreis US $495,-&lt;br /&gt;
&lt;br /&gt;
==== Sasco Holz PABLO ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C6N&lt;br /&gt;
* EPCS16SI16N serial configuration Flash&lt;br /&gt;
* 2x32 MByte mDDR-333 RAM (unabhängige Daten-/Adressbusse)&lt;br /&gt;
* externer SMA-Clock-Eingang&lt;br /&gt;
* 25 MHz Oszillator&lt;br /&gt;
* 3 Taster, kleiner Joystick, 4 LEDs&lt;br /&gt;
* AD7843 SPI touch controller&lt;br /&gt;
* RS-232&lt;br /&gt;
* 2x Santa Cruz connector&lt;br /&gt;
* 60-Pin TFT, 14-Pin GPIO Wannenstecker&lt;br /&gt;
* 10-Pin JTAG &amp;amp; 10-Pin Passiv Seriell Wannenstecker&lt;br /&gt;
* Netzteil, CD-ROM&lt;br /&gt;
* [http://web.archive.org/web/20080907191153/http://www.sascoholz.com/designsupport/solutions/pablo http://www.sascoholz.com/designsupport/solutions/pablo]&lt;br /&gt;
* kein Programmierkabel, kein Kaltgerätekabel&lt;br /&gt;
* Restmengen hin und wieder günstig beim großen E&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2-115 - Development and Education Board V3 ====&lt;br /&gt;
* Altera Cyclone IV FPGA mit 115000 LEs&lt;br /&gt;
* Altera Serial Configuration device EPCS64&lt;br /&gt;
* USB Blaster zur Programmierung und für User API&lt;br /&gt;
* User-Applikations und Steuerungssoftware&lt;br /&gt;
* 128 MB SDRAM, 8 MB Flash Memory, 2 MB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, 2x GBit-Ethernet, &lt;br /&gt;
* 8-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* 18 Schalter, 4 Drucktasten, PS2-Maus/Tastatur-Anschluss&lt;br /&gt;
* 27 LEDs, 16x2-LCD-Display, 8 7-Segment-Anzeigen&lt;br /&gt;
* IR-Fernsteuerung&lt;br /&gt;
* HSMC-Stecker&lt;br /&gt;
* Viele Beispiele mit Source Code wie TV, SD Music Player, Audiorecorder&lt;br /&gt;
* Listenpreis US $595,- (academic = $299,-)&lt;br /&gt;
&lt;br /&gt;
==== Cyclone III Embedded Development Kit ====&lt;br /&gt;
* Altera Cyclone III EP3C25 FPGA&lt;br /&gt;
* 640x480 LCD Display mit Touchscreen-Function&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* Audio Interface ADC CODEC&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstelle&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* NIOS II EVAL Lizenz&lt;br /&gt;
* IP LIB Altera&lt;br /&gt;
* Listenpreis US $495,-  über Altera Webseite&lt;br /&gt;
* Bei EBV €349,- inkl. MwSt.&lt;br /&gt;
&lt;br /&gt;
==== DE0-Nano ====&lt;br /&gt;
* Cyclone IV EP4CE22F17C6N &lt;br /&gt;
* 32MB SDRAM&lt;br /&gt;
* 2Kb I2C-EEPROM &lt;br /&gt;
* 3-Achsen-Beschleunigungssensor ADXL345 (Analog Devices)&lt;br /&gt;
* AD-Wandler ADC128S022 (National Semiconductor)&lt;br /&gt;
* Zwei 40-Pin-GPIO-Header mit 72 verfügbaren IO-Pins&lt;br /&gt;
* On-Board-USB-Blaster zum Programmieren/Debuggen&lt;br /&gt;
* Herstellerpreis (www.terasic.com.tw): $79,- (für Studenten: $59,-)&lt;br /&gt;
* erhältlich bei Digikey&lt;br /&gt;
&lt;br /&gt;
=== Boards für Lattice-FPGAs ===&lt;br /&gt;
==== www.hardware-design.de ====&lt;br /&gt;
* bietet verschiedene einfache Boards mit Lattice-Bausteinen an&lt;br /&gt;
* FPGA-Board mit XP2-17/XP2-8/XP2-5 -&amp;gt; 113,- bis 101,- Euro&lt;br /&gt;
* CPLD-Boards u.a. mit MachXO640 -&amp;gt; 89,- Euro&lt;br /&gt;
&lt;br /&gt;
== Debugging-Hilfen ==&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores und state machines instanziiert und mit Software auf PC-Seite ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
===Automatisch instanziierte Logic Analyzer ===&lt;br /&gt;
Praktisch alle FPGA-Hersteller bieten die Möglichkeit, mit einem internen Tool ein script zu erzeugen, welches der Synthese übergeben wird, welche dann anhand von Signallisten und diversen Randbedingungen einen LA automatisiert aufbaut und verdrahtet. SampleZeit und -Takt sind dabei genauso einstellbar, wie RAM-Tiefe und -Breite. Die so generierten Datenpakete können dann mittels JTAG ausgelesen werden. Im Continous-Betrieb können so sogar permanente Datenausgaben wie bei einem Oszilloskop vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
===Proprietärer serieller Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BusProbe, der Debugging Core von abaxor engineering  ===&lt;br /&gt;
Mit der BusProbe kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
[http://www.abaxor.de/produkte.html abaxor.de-Webseite]&lt;br /&gt;
&lt;br /&gt;
=== open source Logikanalysator von sump.org ===&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
* Projekt [[FPGA Lab]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co| ]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Elektronikversender&amp;diff=60332</id>
		<title>Elektronikversender</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Elektronikversender&amp;diff=60332"/>
		<updated>2011-09-09T10:38:46Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Batronix Elektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Die Vor- und Nachteile von verschiedenen Elektronik-Versand-Händlern werden relativ häufig im Forum diskutiert. Diese Diskussionen führen nicht selten zu weitestgehend gleichen Ergebnissen. In diesem Artikel sollen daher die Argumente, die für oder gegen einen bestimmten Elektronik-Versender sprechen, zusammengetragen werden. Sobald diese Liste einigermaßen vollständig ist, würde dies sicher einige Diskussions-Threads und/oder Flame-Wars überflüssig machen.&lt;br /&gt;
&lt;br /&gt;
Diese Liste erhebt keinerlei Anspruch auf Vollständigkeit, d.h. wenn ihr einen Versender kennt, der hier noch nicht aufgeführt ist, dann nennt wenigstens die URL und den Namen. Den Rest können auch andere besorgen, die den Versender ebenfalls kennen!&lt;br /&gt;
&lt;br /&gt;
Bitte ergänzt nur allgemeine Sachen (z.&amp;amp;nbsp;B. &amp;quot;liefert immer vollständig&amp;quot;, &amp;quot;günstig&amp;quot; oder &amp;quot;große Auswahl&amp;quot;), aber nicht Sachen wie &amp;quot;mein ATMega 128 hatte verbogene Beine&amp;quot;! Bitte auch die alphabetische Sortierung beibehalten!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diese Seite kann nur von angemeldeten Benutzern bearbeitet werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liste der Versender ==&lt;br /&gt;
&lt;br /&gt;
=== Amidon ===&lt;br /&gt;
Homepage: http://www.amidon.de&lt;br /&gt;
&lt;br /&gt;
* Sehr großes Sortiment, vorallem für seltene Bauteile, z.&amp;amp;nbsp;B. Dioden&lt;br /&gt;
&lt;br /&gt;
=== AATiS ===&lt;br /&gt;
Homepage: http://www.aatis.de/&lt;br /&gt;
&lt;br /&gt;
* Arbeitskreis Amateurfunk und Technik in der Schule e.V.&lt;br /&gt;
* Bausätze speziell auch für Elektronik-Anfänger, Schüler&lt;br /&gt;
* Literatur, Seminare für Lehrer &lt;br /&gt;
&lt;br /&gt;
=== Actron ===&lt;br /&gt;
Homepage: http://www.actron.de&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;kein&#039;&#039;&#039; Online-Shop!&lt;br /&gt;
* alphanumerische LCDs und Graphikdisplays in großer Auswahl, auch mit Touchscreens&lt;br /&gt;
* für gewerbliche Kunden: etwas verhandeln schadet nie&lt;br /&gt;
* bei kleinen Stückzahlen nicht ganz billig&lt;br /&gt;
* liefern sehr schnell und stets zuverlässig&lt;br /&gt;
&lt;br /&gt;
=== Adapterprofi ===&lt;br /&gt;
Homepage: http://www.adapterprofi.de&lt;br /&gt;
&lt;br /&gt;
* Bauteile, Gehäuse, Netzteile&lt;br /&gt;
* Viele unterschiedliche HF-Adapter&lt;br /&gt;
&lt;br /&gt;
=== AK Modul Bus Computer GmbH ===&lt;br /&gt;
Homepage: http://www.ak-modul-bus.com/stat/produkte.html&lt;br /&gt;
&lt;br /&gt;
* Interfaces, Messmodule, Funktionsmodelle, Experimentiersysteme&lt;br /&gt;
* Entwicklungssysteme, Baugruppen, Elektor, Zubehör, Bauelemente&lt;br /&gt;
* Software, Lernpakete, Bücher, Sonderposten&lt;br /&gt;
&lt;br /&gt;
=== Allpax ===&lt;br /&gt;
Homepage: http://www.allpax.de&lt;br /&gt;
&lt;br /&gt;
* Liefert auch an Privathaushalte&lt;br /&gt;
* Keine Elektronik an sich, aber ggf. nützliches Zubehör: Größeres, übersichtliches Sortiment an ESD-Beuteln und -Folien, offen und mit Zippverschluss, Pink Poly und Metallisiert (High Shield). Preislich über Farnell, dafür findet man sofort, was man sucht...&lt;br /&gt;
* außerdem Ultraschallreiniger, Waagen und Folienschweißgeräte, sowie viel Fachfremdes&lt;br /&gt;
* Versandkosten: 8,33€ nach Deutschland, diverse EU-Länder 17,85€, Schweiz 34,51€; Versandkostenfrei in D ab 178,50€&lt;br /&gt;
* Gewährt scheinbar auch Privatkunden die Zahlung per Rechnung; bei Bankeinzug 2% Rabatt, bei Vorkasse und Abholung 3%&lt;br /&gt;
&lt;br /&gt;
=== AME-Engineering ===&lt;br /&gt;
Homepage: http://www.ame-engineering.de&lt;br /&gt;
&lt;br /&gt;
* Hochfrequenz-Spezialitäten, Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== Andy&#039;s Funkladen ===&lt;br /&gt;
Homepage: http://www.andyfunk.de&lt;br /&gt;
&lt;br /&gt;
* Alles für Amateur- und CB-Funk&lt;br /&gt;
* Bauteile und Gehäuse&lt;br /&gt;
&lt;br /&gt;
=== Atlantis Shop 24 ===&lt;br /&gt;
Homepage: http://www.atlantis-shop24.de/&lt;br /&gt;
&lt;br /&gt;
* Elektronik nur ein kleiner Teil des Angebotes. Ansonsten eher Drogerie bzw. Haushaltsbedarf&lt;br /&gt;
&lt;br /&gt;
=== Atzert-Elektronik Versand ===&lt;br /&gt;
Homepage: http://www.atzert-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
Früher &#039;&#039;EFB-Electronic Versand&#039;&#039;, davor &#039;&#039;MEGAKICK Electronic Stores&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Mindestens schon der dritte Name und die dritte Webseite für den Endkunden-Versand von [[Elektronikversender#ETT|ETT]]. ETT liefert sonst nur an gewerbliche Kunden.&lt;br /&gt;
* Ladengeschäfte in Bielefeld, Braunschweig, Bremen, Hamburg und Berlin. &lt;br /&gt;
* Die Preise schwanken im Vergleich zu anderen Anbietern, welche ebenfalls ETT-importierte Produkte führen, mal nach oben, mal nach unten.&lt;br /&gt;
&lt;br /&gt;
=== Bassenberg Elektronik ===&lt;br /&gt;
Homepage: http://www.bassenberg.de/&lt;br /&gt;
&lt;br /&gt;
* Ladengeschäfte in Braunschweig und Neumünster&lt;br /&gt;
* Beschafft auch nicht mehr gelistete und abgekündigte Bauteile&lt;br /&gt;
* Liefert auch an Privat&lt;br /&gt;
&lt;br /&gt;
=== Batronix ===&lt;br /&gt;
Homepage: http://www.batronix.com&lt;br /&gt;
* Grosses Sortiment an Geräten&lt;br /&gt;
* Bausätze für Microcontroller-Applikationen&lt;br /&gt;
* Liefert auch an Privat&lt;br /&gt;
&lt;br /&gt;
=== BAZ Spezialantennen ===&lt;br /&gt;
Homepage: http://www.spezialantennen.de/&lt;br /&gt;
&lt;br /&gt;
* Antennen für Amateurfunk, ISM, WLAN usw.&lt;br /&gt;
&lt;br /&gt;
=== Bfi-Optilas ===&lt;br /&gt;
Homepage: http://www.bfioptilas.de/&lt;br /&gt;
&lt;br /&gt;
* Kein Onlineshop&lt;br /&gt;
* spezialisierter Distributor für Hochfrequenzhalbleiter und Optik&lt;br /&gt;
&lt;br /&gt;
=== BG-Electronics.de ===&lt;br /&gt;
Homepage: http://www.bg-electronics.de&lt;br /&gt;
&lt;br /&gt;
* Online Shop für aktive und passive elektronische Bauelememte&lt;br /&gt;
* günstige Preise&lt;br /&gt;
* alle Artikel ab Lager lieferbar, daher kurze Wartezeiten&lt;br /&gt;
* weltweiter Versand&lt;br /&gt;
* zahlreiche Mengenrabatte&lt;br /&gt;
* viele Ersatzteile aus dem Audio-, CarHiFi und TV-Bereich&lt;br /&gt;
&lt;br /&gt;
=== B &amp;amp; M electronics ===&lt;br /&gt;
Homepage: http://www.bmelectronics.de/&lt;br /&gt;
&lt;br /&gt;
* Bauteile, Platinen und Baugruppen für Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== Box73 ===&lt;br /&gt;
Homepage: http://www.box73.de&lt;br /&gt;
&lt;br /&gt;
Onlineshop des Funkamateur.&lt;br /&gt;
&lt;br /&gt;
* Bauteile, Bausätze, Literatur aus dem Amateurfunkbereich&lt;br /&gt;
* Preise sind O.K.&lt;br /&gt;
* Bestellungen werden nur Di und Do bearbeitet&lt;br /&gt;
* Ab 50 EUR bei Bankeinzug portofrei.&lt;br /&gt;
&lt;br /&gt;
=== Bürklin OHG ===&lt;br /&gt;
Homepage: http://www.buerklin.com/&lt;br /&gt;
&lt;br /&gt;
* große Auswahl, hohe Verfügbarkeit&lt;br /&gt;
* sehr schneller Versand&lt;br /&gt;
* Ladengeschäft in München&lt;br /&gt;
* &amp;lt;s&amp;gt;nur an gewerbliche Abnehmer (lt. AGB), private Abnehmer können dennoch im Ladengeschäft einkaufen&amp;lt;br&amp;gt;Angeblich versendet Bürklin seit November 2010 auch an Privatpersonen. Allerdings verlangt Bürklin weiterhin in Adressformularen die Eingabe eines Firmennamens &amp;lt;br&amp;gt;Geben Sie einen Wert in das Feld &amp;quot;Firma&amp;quot; ein.&amp;lt;br&amp;gt;Daher ist diese Information eher mit Vorsicht zu genießen.&amp;lt;/s&amp;gt;&amp;lt;br&amp;gt;Mittlerweile muss man auch keinen Firmennamen mehr eingeben. Die AGB wurde ebenfalls angepasst.&lt;br /&gt;
* 35 EUR Mindestbestellwert, darunter 7 EUR Bearbeitungskosten (incl. MWSt)&lt;br /&gt;
&lt;br /&gt;
=== CBsoft, s.r.o. (ltd.) ===&lt;br /&gt;
*Homepage: http://www.jjtubes.eu/&lt;br /&gt;
* Firma in der Slowakei&lt;br /&gt;
* Verkauft Röhren der Firma JJ&lt;br /&gt;
* englischsprachig&lt;br /&gt;
* Zahlungsmöglichkeiten in € mit Paypal und Kreditkarte&lt;br /&gt;
&lt;br /&gt;
=== chiptrade.com ===&lt;br /&gt;
Homepage: [http://www.chiptrade.com/ chiptrade.com]&lt;br /&gt;
* kein Onlineshop!&lt;br /&gt;
* Produkte von: Trinamic Motion Control, Datasphere/BlueSerial, connectBlue, Tectus RFID, Korenix, CentiPad, eye2m und Televideo&lt;br /&gt;
&lt;br /&gt;
=== ConeleK Electronic ===&lt;br /&gt;
Homepage: http://www.conelek.com/&lt;br /&gt;
&lt;br /&gt;
* Sehr kleines Bauteileangebot (Röhren, Röhrensockel)&lt;br /&gt;
* Elektronik-Laborbedarf, insbesondere Nachfüllpackungen mit Steckbrett-Drahtbrücken&lt;br /&gt;
* Werkzeug für Elektronik&lt;br /&gt;
* Stromversorgungen&lt;br /&gt;
* Versand an Privat&lt;br /&gt;
* Versandkosten bis 25kg, Vorkasse 5,90€ (Stand 04/2008)&lt;br /&gt;
&lt;br /&gt;
=== Conrad ===&lt;br /&gt;
Homepage: [http://www.conrad.de/ Conrad Elektronik] und [http://www.business.conrad.de/ Conrad &amp;quot;Business&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
* großes Angebot (für Bauteile den &amp;quot;Business&amp;quot;-Katalog beachten, der Hauptkatalog ist dahingehend etwas &amp;quot;dünn&amp;quot;) (Anm.: Bauteile, die nur im Business-Katalog aufgeführt sind, sind in Ladengeschäften nur über Sonderbestellung zu bekommen, d.h. dort in aller Regel nicht vorrätig.)&lt;br /&gt;
* Positiv: Wirklich jedes Bauteil kann einzeln gekauft werden und wird nicht in dämlichen Verpackungseinheiten verkauft, so wie es bei den meisten anderen Elektronik-Lieferanten der Fall ist. Dies ist vor Allem für den Prototypenbau sehr hilfreich.&lt;br /&gt;
* relativ teuer jedoch bis zu 10% Rabatt für Schulen (bei genügend Umsatz)&lt;br /&gt;
* 21 Ladengeschäfte in Deutschland, fünf in Österreich&lt;br /&gt;
* positiv: Bei Business-Kunden wird der Rechnungsbetrag erst nach 14 Tagen abgebucht.&lt;br /&gt;
* haben einen (teuren) 24 Std. Lieferservice für Notfälle - Conrad garantiert aber nicht 100%ig für die Einhaltung der 24 Stunden. Bei Nichteinhaltung gibt es kein Geld zurück.&lt;br /&gt;
* Verfügbarkeit in Filialen kann über zentale Rufnummer erfragt werden. Abholung bestellter Ware in Filialen möglich, aber trotzdem gleiche Versandkosten.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Vorerst Auskommentiert - Subjektiv/Einzelerfahrung, veraltete Informationen (Filialen)&lt;br /&gt;
* Mit jeder Bestellung erhält man zusätzlich Werbung von unseriösen Firmen, wo Gewinne versprochen werden und man sich in Wirklichkeit für irgendwelche Abos verpflichtet. Wenn man bei Conrad anruft und sie zur Rede stellt, erhält man die Antwort, dass diese Werbung anscheinend aus Versehen hineingerutscht ist. So ein Zufall.&lt;br /&gt;
* sehr kulant bei Umtäuschen&lt;br /&gt;
* versuchen bei Rückgaben einen Teil oder den gesamten Betrag einzubehalten (schon mehrfach vorgekommen)&lt;br /&gt;
* Schlampig verpackte Artikel. ICs sind nicht Antistatik-Konform verpackt.&lt;br /&gt;
* Die Filiale München / Tal hat keine Telefonnummer mehr in den Verzeichnissen, anscheinend sind Kundenanfragen dort zu &amp;quot;lästig&amp;quot;. (Kommentar: andere Filialen auch nicht, wird nur noch über eine Sammelnummer über ein Callcenter abgewickelt. Die Ladenbestellung wird dann vom Callcenter per eMail an die Filiale weitergeleitet.)&lt;br /&gt;
* die Ladengeschäfte haben nicht das gesamte Programm vor Ort, man kann jedoch in den Geschäften anrufen und die Verfügbarkeit anfragen, evtl. sogar Teile für ein paar Stunden &amp;quot;zurücklegen lassen&amp;quot; (von Geschäft zu Geschäft verschieden).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== csd-electronics ===&lt;br /&gt;
Homepage: [http://www.csd-electronics.de csd-electronics.de]&lt;br /&gt;
&lt;br /&gt;
* ATMEL, ICs, Passive und Mechanische Bauteile, Platinen- und Lötzubehör, u.a.&lt;br /&gt;
* günstig&lt;br /&gt;
* Mengenrabatte für fast jedes Produkt&lt;br /&gt;
* Versand innerhalb Deutschlands pauschal 3,59€ (ab 100 EUR versandkostenfrei)&lt;br /&gt;
* Versand EU-weit ab 6,95 EUR&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* schnelle Lieferung, sofern die Artikel auf Lager sind, versandkostenfreie Nachlieferung&lt;br /&gt;
* Bauelemente, die nicht im Shop angeboten werden, können auf Anfrage beschafft werden.&lt;br /&gt;
* Zahlung bei Vorkasse(2% Skonto), Bankabbuchung, Kreditkarte, PayPal&lt;br /&gt;
* Ist man bereits Kunde, kann man &amp;quot;auf Rechnung&amp;quot; (Zahlung innerhalb von 21 Tagen) bestellen.&lt;br /&gt;
* haben ein Forum, in dem man sich zu Sammelbestellungen organisieren kann und auch allgemeine Fragen stellen kann -zur Zeit (05/2008) offline-&lt;br /&gt;
&lt;br /&gt;
=== dad24 ===&lt;br /&gt;
Homepage, Shop: http://dad24.eu/&lt;br /&gt;
E-Bay Shop:     http://stores.ebay.de/Shop-dad24&lt;br /&gt;
&lt;br /&gt;
* Unterschiedliche Preise in den beiden Shops&lt;br /&gt;
* Kleiner, nicht sonderlich schöner Onlineshop (dad24.eu)&lt;br /&gt;
* Kleines Angebot. Lupenleuchten, Lötstationen, Labornetzgeräte, Messgeräte, etc. aus dem unteren Preissegment&lt;br /&gt;
* Jede Woche eine neue &amp;quot;Kategorie der Woche&amp;quot; auf dad24.eu. Produkte aus der Kategorie werden erst im Warenkorb mit einem Rabatt angezeigt, der auch gewährt wird.&lt;br /&gt;
&lt;br /&gt;
=== Darisus ===&lt;br /&gt;
Homepage: http://www.darisus.de&lt;br /&gt;
&lt;br /&gt;
* kompetente Beratung&lt;br /&gt;
* liefert sehr zuverlässig, in Notfällen auch Express&lt;br /&gt;
* Versand innerhalb Deutschlands ab 4,50 EUR&lt;br /&gt;
* Hat auch eine gute Auswahl an CPLDs und einige FPGAs diverser Hersteller&lt;br /&gt;
&lt;br /&gt;
=== DES - Der Elektroniker-Shop ===&lt;br /&gt;
Homepage: http://www.DerElektronikerShop.de&lt;br /&gt;
&lt;br /&gt;
* Bauteile&lt;br /&gt;
* Bauteilsätze der [http://www.DieElektronikerseite.de Elektronikerseite]&lt;br /&gt;
* Verkauf des BasicBeetle und Zubehör von [http://www.DieProjektseite.de der Projektseite]&lt;br /&gt;
* Ständig wachsendes Angebot&lt;br /&gt;
* Auch einige SMD-Bauteile verfügbar&lt;br /&gt;
* Kein Mindestbestellwert&lt;br /&gt;
* Versandkosten ab 3,50 EUR (Österreich/Europa ab 4,00 Eur)&lt;br /&gt;
* Versand auch nach Österreich (Europa auf Anfrage)&lt;br /&gt;
* Zahlung per Vorkasse&lt;br /&gt;
* Lieferzeit 1-3 Tage bei Verfügbarkeit&lt;br /&gt;
* PrePaid-Konto möglich&lt;br /&gt;
* Lieferungen auch an Privat&lt;br /&gt;
&lt;br /&gt;
=== Digi-Key ===&lt;br /&gt;
(tlw.) deutsche Homepage: [http://de.digikey.com/ Digi-Key]&lt;br /&gt;
&lt;br /&gt;
* optisch nicht besonders ansprechende, aber durchaus sehr funktionelle Website&lt;br /&gt;
* beheimatet in den USA, ein Logistikbüro gibt es in den Niederlanden&lt;br /&gt;
* kostenloser Versand ab 65&amp;amp;#8364;, darunter 18&amp;amp;#8364; Versandkosten&lt;br /&gt;
* Versand direkt aus den USA, dafür sehr flott mit UPS Express (in rund zwei bis drei Tagen da)&lt;br /&gt;
* riesiges Angebot, gewissermaßen ein Distributor der auch Kleinmengen an Privatpersonen liefert, entscheidend ist, dass der Hersteller des Produkts geführt wird&lt;br /&gt;
* kein anderer Anbieter, bietet so viele verschiedene passive Bauteile in kleinen Stückzahlen, z.&amp;amp;nbsp;B. SMD Widerstände in Bauform 01005 bis 2512 meist in verschiedenen Toleranzklassen und von verschiedenen Herstellern&lt;br /&gt;
* alle Bauteile mit Herstellerangabe, Digikey kauft ausschließlich direkt vom Hersteller&lt;br /&gt;
* Preise sind auf der deutschen Website in Euro inklusive etwaigem Zoll angegeben, allerdings ohne Mehrwertsteuer, die korrekt abgerechnet wird (d.h. man zahlt bei Versand nach Österreich 20% Mwst., nach Deutschland m.W.n. 19%)&lt;br /&gt;
* Meistens deutlich teurer als Reichelt, doch häufig die beste Anlaufstelle für Privatkunden wenn es um Spezialbauteile geht, und der Hersteller sich im Programm von Digikey befindet&lt;br /&gt;
&amp;lt;!-- * wesentlich teurer als Reichelt, dafür jeder Artikel mit Herstellerangabe&lt;br /&gt;
=&amp;gt; &amp;quot;wesentlich&amp;quot; etwas zu pauschal (vgl. STK500 etc. selbst bei den verglw. hohen Versandkosten) - mt --&amp;gt;&lt;br /&gt;
* Zu beachten ist auch noch folgendes, um unliebsame zusatzkosten zu vermeiden: http://www.mikrocontroller.net/topic/90943#new. &#039;&#039;Anmerkung dazu: Digikey hat wohl zum 1.4.2011 den Versand umgestellt und importiert nun selbst. Zusatzkosten durch Verzollung sollten dann nicht mehr anfallen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Display Electronics ===&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.distel.co.uk/&lt;br /&gt;
&lt;br /&gt;
* In England&lt;br /&gt;
* Webseite = Augenkrebs &lt;br /&gt;
* Online-Shop versteckt hinter dem Search-Button auf der Homepage&lt;br /&gt;
* Restposten aller Art&lt;br /&gt;
* Mindestbestellwert 10 GBP&lt;br /&gt;
&lt;br /&gt;
=== Eisch-Kafka-Electronic ===&lt;br /&gt;
Homepage: http://www.eisch-electronic.de&lt;br /&gt;
 &lt;br /&gt;
* Hochfrequenz Bausätze und Bauteile für Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== EleConT ===&lt;br /&gt;
Homepage: http://www.elecont.de/shop/&lt;br /&gt;
&lt;br /&gt;
* Carrierboards für gebräuchliche AVR&lt;br /&gt;
&lt;br /&gt;
=== Electropuces ===&lt;br /&gt;
Homepage: http://perso.wanadoo.fr/electropuces/&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte aus Nantes, Frankreich  (teilweise engl. Menü)&lt;br /&gt;
&lt;br /&gt;
=== Electronic Search ===&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.electronic-search.de/&lt;br /&gt;
&lt;br /&gt;
* Keine Mindestbestellmenge&lt;br /&gt;
* Verkauf auch an Privat/Bastler&lt;br /&gt;
* Fast alle Preise im Online-Shop nur &amp;quot;auf Anfrage&amp;quot;, und nicht im Shop angegeben.&lt;br /&gt;
&lt;br /&gt;
=== electronicpool Rheinstetten ===&lt;br /&gt;
Homepage: http://www.electronicpool.de/&lt;br /&gt;
&lt;br /&gt;
* abgekündigte oder schwer beschaffbare elektronische Bauteile&lt;br /&gt;
&lt;br /&gt;
=== Elektronikladen ===&lt;br /&gt;
Homepage: http://www.elektronikladen.de&lt;br /&gt;
&lt;br /&gt;
* Spezialist für Mikrokontroller&lt;br /&gt;
* Entwicklungssysteme, keine Einzelbauteile&lt;br /&gt;
* entsprechende Literatur und Software&lt;br /&gt;
&lt;br /&gt;
=== Elektronik-Kompendium ===&lt;br /&gt;
Homepage: http://www.elektronik-kompendium.de/&lt;br /&gt;
&lt;br /&gt;
* Bausätze diverser Schaltungen (mit Anleitung und Funktionsbeschreibung)&lt;br /&gt;
* erspart lästiges Suchen in anderen Shops&lt;br /&gt;
* kurze Lieferzeiten&lt;br /&gt;
* günstiger Versand&lt;br /&gt;
&lt;br /&gt;
=== Elk Tronic ===&lt;br /&gt;
Homepage: http://www.elk-tronic.de/&lt;br /&gt;
&lt;br /&gt;
* kleines Lieferprogramm Adapterplatinen (SMD -&amp;gt; 2,54mm-Raster) und Programmieradapter&lt;br /&gt;
* günstige Preise und Versandspesen&lt;br /&gt;
&lt;br /&gt;
=== Ellmitron ===&lt;br /&gt;
[http://www.ellmitron.de/ Ellmitron.de] &lt;br /&gt;
[http://www.ellmitron.de/katalog.pdf PDF-Katalog] &lt;br /&gt;
&lt;br /&gt;
Lehrmittel, Kleinbausätze vor allem für Schüler, Experimentierkästen&lt;br /&gt;
&lt;br /&gt;
=== Elpro Darmstadt ===&lt;br /&gt;
Homepage: http://www.elpro.org&lt;br /&gt;
&lt;br /&gt;
* Kein Mindestbestellwert, aber hohe Versandkosten für kleine Bestellungen. Stand September 2008:&lt;br /&gt;
** Bis 15€: 9,95€ Versandkosten&lt;br /&gt;
** Von €15 bis €75: 5,95€ Versandkosten&lt;br /&gt;
** Von €75 bis €200: 4,49€ Versandkosten&lt;br /&gt;
** Ab €200: Versandkostenfrei&lt;br /&gt;
* Große Auswahl an Mikrocontrollern&lt;br /&gt;
* Sehr große Auswahl an Schaltnetzteilen von Meanwell (geschlossen, offen, auf PCB lötbar, DIN-Schiene)&lt;br /&gt;
* Merkwürdig zu bedienende Shopsoftware, ständig klappt was auf und zu und wird irgendwas nachgeladen. Braucht JavaScript&lt;br /&gt;
* Keine AGBs online. Da Preisangaben ohne MwSt. richtet sich das Angebot vermutlich nicht an Endverbraucher (werden aber beliefert)&lt;br /&gt;
&lt;br /&gt;
=== Eltrix ===&lt;br /&gt;
Homepage: http://eltrix.de/Starteltrix.htm&lt;br /&gt;
&lt;br /&gt;
*  Verbrauchsmaterial, Tipps und Tricks fürs Leiterplattenherstellen und Löten&lt;br /&gt;
&lt;br /&gt;
=== ELV ===&lt;br /&gt;
Homepage: [http://www.elv.de/ ELV]&lt;br /&gt;
&lt;br /&gt;
* nicht sehr große Auswahl an Einzelteilen&lt;br /&gt;
* riesiges Angebot an Zubehör für Hobbyisten&lt;br /&gt;
* viele z.T. pfiffige Eigenentwicklungen, Bausätze (auch zum Download auf der Website verfügbar)&lt;br /&gt;
* sonst Sortiment ähnlich Conrad, nicht billig&lt;br /&gt;
* im Allgemeinen nicht billig, merkwürdigerweise sind manche Artikel aber die günstigsten auf dem Markt&lt;br /&gt;
* mühsamer Onlinekatalog&lt;br /&gt;
* Immer mal wieder Fehllieferungen und Wartezeiten (zumindest in die Schweiz). Service erreichte in 3 Fällen nicht das inserierte Niveau.&lt;br /&gt;
* Versandkosten innerhalb Deutschland 4,5&amp;amp;#8364;, ab 150&amp;amp;#8364; Bestellwert versandkostenfrei&lt;br /&gt;
* nicht abwählbare Versandversicherung, die 0,85% des Bestellwertes kostet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Erklärte am 31. August 2010 &amp;quot;... den Betrieb bis auf weiteres zu schließen.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== Embedit Mikrocontrollertechnik ===&lt;br /&gt;
Online Shop: [http://shop.embedit.de/ Shop]&lt;br /&gt;
&lt;br /&gt;
* Gute Auswahl an AVR Controllern, aber nur aktuelle Typen, keine AT90Sxxxx. Teilweise exotische Typen wie MLF Gehäuse&lt;br /&gt;
* Atmel und Philips SmartARM Controller&lt;br /&gt;
* Module und Boards mit AVR Controllern&lt;br /&gt;
* Zubehör von Atmel wie STK500 oder AVRISP mkII&lt;br /&gt;
* Diverse aktive und passive Elektronikteile, ständig neue Teile&lt;br /&gt;
* Mechanikteile wie Zahnräder, Steckverbinder usw.&lt;br /&gt;
* Lieferzeit 1-4 Tage, je nachdem wie man zahlt (hab aber auch schon ne Vorauskasse innerhalb eines Tages per Expressbrief bekommen, zuvorkommender Service)&lt;br /&gt;
* Versandkosten ab 3,95 &amp;amp;#8364;, versicherter Versand, Vorauskasse und Nachnahme&lt;br /&gt;
* Keine Versandkosten ab 50 &amp;amp;#8364; Warenwert innerhalb Deutschlands, bei Zahlung per Vorauskasse und Lieferung per Hermes&lt;br /&gt;
* Lieferung in viele EU-Länder&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETT - Electronic Toys Trading  ===&lt;br /&gt;
Homepage: http://www.ett-online.de/&lt;br /&gt;
&lt;br /&gt;
* Großhandel nur für Gewerbekunden.&lt;br /&gt;
* Zweitshop [[Elektronikversender#Atzert-Elektronik_Versand|Atzert-Elektronik Versand]] (früher EFB-Electronic Versand, davor Megakick Electronic-Stores) für Endkunden.&lt;br /&gt;
* Ladengeschäft in Braunschweig für jedermann. Weitere Atzert Ladengeschäfte in Bielefeld, Bremen, Hamburg und Berlin.&lt;br /&gt;
* Eigentümer der Marken McCHECK®, McPower®, McVoice® und anderer, unter denen ETT importierte Messgeräte, Labornetzteile, usw. an Großkunden und Händler vertreibt. Diese sind unter oben genannten Marken dann in vielen Shops anderer Firmen für Endkunden zu finden, nicht nur bei Atzert. Preisvergleiche lohnen.&lt;br /&gt;
&lt;br /&gt;
=== Ettinger GmbH ===&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.ettinger.de&lt;br /&gt;
&lt;br /&gt;
* Für gewerbliche Kunden&lt;br /&gt;
* Mechanische Komponenten (Gehäuse, Abstandshalter, Drehknöpfe, usw.)&lt;br /&gt;
* LEDs&lt;br /&gt;
* Gewöhnungsbedürftiger Online-Shop&lt;br /&gt;
&lt;br /&gt;
=== EVE ===&lt;br /&gt;
Homepage: http://www.eve.de&lt;br /&gt;
&lt;br /&gt;
* Zitat aus den AGBs:&lt;br /&gt;
::&#039;&#039;&amp;quot;Zu Bestellungen im Rahmen des Online-Handels sind nur durch uns autorisierte, d. h. zugelassene Käufer berechtigt. Wir gewähren nach erfolgreicher Zertifizierung – ohne hierzu verpflichtet zu sein – dem jeweiligen Käufer das nicht übertragbare, nicht exklusive Recht im Rahmen des Online-Handels Bestellungen uns gegenüber “auszubringen”.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Dies darf man wohl getrost als Hinweis ansehen, dass Endverbraucher als Kunden nicht gewünscht sind.&lt;br /&gt;
* Versandhaus für elektronische Artikel in Emsdetten&lt;br /&gt;
* machen auch Kabelkonfektion&lt;br /&gt;
* Pb-freie Artikel markiert&lt;br /&gt;
&lt;br /&gt;
=== Farnell ===&lt;br /&gt;
Homepage: [http://www.farnell.de/ Farnell InOne]&lt;br /&gt;
&lt;br /&gt;
* liefert nur an gewerbliche Abnehmer, Ausnahme sind Studenten. Nachweis wird verlangt (Gewerbeschein oder Immatrikulation).&lt;br /&gt;
* Lieferungen an Privat:&lt;br /&gt;
:* Schweiz: Farnell Schweiz beliefert auch Privatkunden.&lt;br /&gt;
:* Deutschland: Über den Reseller [[#HBE_-_Heinz_B.C3.BCchner_Elektronik.2C_Messtechnik.2C_med._Elektronik_e.K.|HBE]] kann man Produkte aus dem Farnell-Sortiment zu bestellen.&lt;br /&gt;
:* Österreich: [[#Technik-Welt / Industrieshop.at|Technik-Welt / Industrieshop.at]]&lt;br /&gt;
* große Auswahl&lt;br /&gt;
* 12% Rabatt für Studenten und Lehreinrichtungen&lt;br /&gt;
* sehr schneller Versand, Ware ist in 99% aller Fälle am nächsten Tag da (UPS), fehlende Positionen werden relativ rasch versandkostenfrei nachgeliefert&lt;br /&gt;
* Versandkosten: Bestellung bis 49,99&amp;amp;#8364;: 7,95&amp;amp;#8364;;   50,- bis 149,99&amp;amp;#8364;: 5,95&amp;amp;#8364;;   ab EUR 150,- versandkostenfrei&lt;br /&gt;
* hat nach eigenen Aussagen umfangreichstes Sortiment an RoHS-konformen Bauteilen mit Suchfunktion im WWW&lt;br /&gt;
* leistungsfähige parametrische Suchfunktion / teils aber völlig nutzlos, da den Artikeln massenweise Tags fehlen, weswegen die Suchergebnisse unnötig eingeschränkt werden&lt;br /&gt;
* Datenblätter für die meisten Bauteile online&lt;br /&gt;
* Internetpräsenz fällt nachts oft aus (Hinweis auf angebliche geplante Wartungsarbeiten)&lt;br /&gt;
* Sortierfunktion wird bei der Suche ständig zurückgesetzt, im Warenkorb ist überhaupt keine sinnvolle Sortierung möglich&lt;br /&gt;
* Eigenwillige Preispolitik: Einiges sehr günstig, Anderes total überteuert&lt;br /&gt;
&lt;br /&gt;
=== Fibra-Brandt Zweibrücken ===&lt;br /&gt;
Homepage: http://www.fibra-brandt.com/&lt;br /&gt;
&lt;br /&gt;
* lagert tausende veraltete und schwer zu findende elektronische Bauteile&lt;br /&gt;
* Halbleiter, IC&#039;s, Transistoren, Spulen und Kondensatoren.&lt;br /&gt;
* Sonderbeschaffung von abgekündigten Halbleitern.&lt;br /&gt;
&lt;br /&gt;
=== Fischer DK2FD ===&lt;br /&gt;
Homepage: http://www.dfe-online.de/&lt;br /&gt;
&lt;br /&gt;
* Baugruppen für Hochfrequenzmesstechnik und Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== Funkamateur Online-Shop ===&lt;br /&gt;
&lt;br /&gt;
Siehe [[Elektronikversender#Box73]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Futurelec ===&lt;br /&gt;
Homepage: http://www.futurlec.com&lt;br /&gt;
&lt;br /&gt;
* günstiger Versender aus Übersee&lt;br /&gt;
* viele Stamp-Boards&lt;br /&gt;
* LED Matrix-Module&lt;br /&gt;
&lt;br /&gt;
=== Geist ===&lt;br /&gt;
Homepage: [http://www.geist-electronic.de/ Geist Electronic-Versand GmbH]&lt;br /&gt;
&lt;br /&gt;
* Liefern Bauteile für Elektor-Projekte&lt;br /&gt;
* D-78054 Villingen-Schwenningen&lt;br /&gt;
* Versandkosten: 5.40€&lt;br /&gt;
&lt;br /&gt;
=== Giga-Tech ===&lt;br /&gt;
Homepage: http://www.giga-tech.de&lt;br /&gt;
&lt;br /&gt;
* Spezialitäten für Hochfrequenz / Amateurfunk&lt;br /&gt;
* 68542 Heddesheim&lt;br /&gt;
&lt;br /&gt;
=== Grummes Elektronik ===&lt;br /&gt;
Homepage: http://www.grummes.de&lt;br /&gt;
&lt;br /&gt;
* Elektronikversender /CNC-Fräsmaschinen / Schrittmotorsteuerungen / Bauteile&lt;br /&gt;
&lt;br /&gt;
=== Glyn (GLYNshop) ===&lt;br /&gt;
Homepage: https://www.glynshop.com/erp/welcome.do&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;B2B Shop&amp;quot; = nicht für Privatkunden&lt;br /&gt;
* Microcontroller, Evaluation Boards, TFT-Displays, LC-Displays, Memory Cards u.a.&lt;br /&gt;
&lt;br /&gt;
=== Hallmanns Elektronik ===&lt;br /&gt;
Homepage: http://www.hallmanns.com&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse: Bruno Hallmanns, Weierstraße 41, 52349 Düren&lt;br /&gt;
&lt;br /&gt;
* Elektronikhändler mit Ladenlokal und Versand&lt;br /&gt;
* Ladentypisches Sortiment (Bauteile, Geräte, PC, Funk, Hifi...)&lt;br /&gt;
&lt;br /&gt;
=== Hari Seligenstadt ===&lt;br /&gt;
Homepage: http://www.hari-ham.com/&lt;br /&gt;
&lt;br /&gt;
* Bausätze, Ringkerne, Geräte für Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== HBE - Heinz Büchner Elektronik, Messtechnik, med. Elektronik e.K. ===&lt;br /&gt;
Homepage: http://www.hbe-shop.de/katalog/&lt;br /&gt;
&lt;br /&gt;
* Bezeichnet sich als &#039;&#039;[[#Farnell|Farnell]] Fachhändler&#039;&#039;, bei dem nichtgewerbliche Kunden aus dem Farnell-Sortiment bestellen können.&lt;br /&gt;
* Preise für Farnell-Produkte normalerweise Farnell Netto-Preis + MwSt.&lt;br /&gt;
* Mindestbestellwert 25,- € (netto), Mindermengenzuschlag 5,- € (Stand 06/2010)&lt;br /&gt;
* Versandkosten 4,75 € (netto), ab 75,- € (netto) versandkostenfrei (Stand 06/2010)&lt;br /&gt;
&lt;br /&gt;
=== Heho-Elektronik ===&lt;br /&gt;
Homepage: http://www.heho-elektronik.de&lt;br /&gt;
* Halbleiter / Bauteile, Sortimente, Handy - Akkus, VELLEMAN - Bausätze&lt;br /&gt;
* Aktuelles Angebot, Ladegeräte / Akkuladegeräte, Blei - Akkus&lt;br /&gt;
* Spannungswandler, Audio / Video / USB - Kabel, Netzwerk - Kabel&lt;br /&gt;
* 1-2 Arbeitstage für Waren ab Lager&lt;br /&gt;
* Porto + Verpackung pauschal Euro 4,50&lt;br /&gt;
* Mindestbestellwert von &amp;amp;#8364; 10,00&lt;br /&gt;
&lt;br /&gt;
=== Hinkel ===&lt;br /&gt;
Homepage: http://www.hinkel-elektronik.de&lt;br /&gt;
&lt;br /&gt;
* Von der Webseite &amp;quot;Unser Angebot richtet sich an Schulen, Behörden, Handel, Handwerk und Industrie.&amp;quot;&lt;br /&gt;
* Batterien&lt;br /&gt;
* Knopfzellen, spezielle KZH, die man sonst lang sucht, findet man hier&lt;br /&gt;
* Mindestbestellwert von 20&amp;amp;#8364;&lt;br /&gt;
* Standardversand innerhalb Deutschlands 5,80&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
=== HN Electronic Components GmbH &amp;amp; Co. KG / Netzteilshop ===&lt;br /&gt;
Homepage gewerbliche Kunden: http://www.hn-electronic.de/homed/framed.html &amp;lt;br /&amp;gt;&lt;br /&gt;
Homepage Endkunden: http://www.netzteilshop.com/hnshop.html&lt;br /&gt;
&lt;br /&gt;
* Netzteile aller Art&lt;br /&gt;
* Lieferung an Endkunden nur per UPS Nachnahme.&lt;br /&gt;
* Mindestbestellmenge für Endkunden 25 €&lt;br /&gt;
&lt;br /&gt;
=== HW-Electronics ===&lt;br /&gt;
Homepages:&lt;br /&gt;
: http://www.hw-electronics.de/&lt;br /&gt;
: http://hw-electronics.eu/&lt;br /&gt;
&lt;br /&gt;
* Tauch- und Sprühätzanlagen&lt;br /&gt;
* Entwicklungsgeräte&lt;br /&gt;
* Belichtungsgeräte, Materialsätze zum Selbstbau von Belichtungsgeräten&lt;br /&gt;
&lt;br /&gt;
=== ID-Elektronik ===&lt;br /&gt;
Homepage: http://www.id-elektronik.de&lt;br /&gt;
&lt;br /&gt;
* Amateurfunk-Baugruppen&lt;br /&gt;
&lt;br /&gt;
=== IT-WNS ===&lt;br /&gt;
Homepage: http://www.it-wns.de/&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Bauteile, Platinen, Bausätze&amp;quot; insbesondere mit ATMEGA und ENC28J60&lt;br /&gt;
* Bausätze zu Projekten aus dem Forum, z.&amp;amp;nbsp;B. USBprog, ChipBasic, Mikro-Webserver, Transistortester u.v.a.m.&lt;br /&gt;
* Atmega32/644 Experimentiersystem als Bausatz mit vielen Zusatzmodul-Bausätzen&lt;br /&gt;
* SD-Slots, RFID, Bluetooth-Module, AVR Mikrocontroller uvam.&lt;br /&gt;
* Bauelemente, die nicht im Shop angeboten werden, können auf Anfrage (Kontaktformular) beschafft werden &lt;br /&gt;
* günstige Preise und Versandkosten ab 1,90EUR, kein Mindestbestellwert&lt;br /&gt;
* schneller Versand, sofern die Artikel auf Lager sind, versandkostenfreie Nachlieferung&lt;br /&gt;
&lt;br /&gt;
=== Kabelscheune ===&lt;br /&gt;
Homepage: http://www.kabelscheune.de/&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Direktversand von Elektromaterial und Multimediaprodukten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Kelemen ===&lt;br /&gt;
Homepage: http://www.kelemenantennen.de/Kelemen-Shop/&lt;br /&gt;
&lt;br /&gt;
* Messgeräte, Antennen und Zubehör für den Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== Kessler ===&lt;br /&gt;
Homepage: [http://www.kessler-elektronik.de/ Kessler]&lt;br /&gt;
&lt;br /&gt;
* im Preis-Leistungsverhältnis mit Reichelt zu vergleichen (sprich: günstig)&lt;br /&gt;
* Sortiment kleiner als Reichelt und mit gewissen Abweichungen (z. B. andere FPGA und RAMs)&lt;br /&gt;
* oft lange Lieferzeiten&lt;br /&gt;
* Versandkosten innerhalb Deutschlands 4,95&amp;amp;#8364; bei Bankeinzug und 6,90&amp;amp;#8364; bei Nachnahme plus Nachnahmegebühren&lt;br /&gt;
* Der Download-Katalog ist von 2002! Online aktueller&lt;br /&gt;
&lt;br /&gt;
=== Klein-Electronic ===&lt;br /&gt;
Homepage: http://www.klein-electronic.de/&lt;br /&gt;
&lt;br /&gt;
* Baugruppen zur Video- und 2,4GHz-Sendetechnik&lt;br /&gt;
&lt;br /&gt;
=== Konni-Antennen ===&lt;br /&gt;
Homepage: http://www.konni-antennen.de&lt;br /&gt;
&lt;br /&gt;
* Antennen für TV, Amateurfunk&lt;br /&gt;
* Zubehör, Einzelteile&lt;br /&gt;
&lt;br /&gt;
=== Köditz Nachrichtentechnik ===&lt;br /&gt;
Homepage: http://www.koeditz-nachrichtentechnik.de/&lt;br /&gt;
&lt;br /&gt;
* Baugruppen und Bauteile für Amateurfunk und TV-Satellitenempfang&lt;br /&gt;
&lt;br /&gt;
=== Kuhne DB6NT ===&lt;br /&gt;
Homepage: http://www.kuhne-electronic.de/&lt;br /&gt;
&lt;br /&gt;
* Baugruppen und Bausätze für Mikrowellenamateure&lt;br /&gt;
&lt;br /&gt;
=== LEDSEE Electronics ===&lt;br /&gt;
Homepage: http://www.ledsee.com/&lt;br /&gt;
&lt;br /&gt;
* LEDs, LCDs, diverses&lt;br /&gt;
* Lieferung direkt aus China, daher sehr günstig und lange Lieferzeiten&lt;br /&gt;
&lt;br /&gt;
=== LED Microtechnics LTD ===&lt;br /&gt;
Homepage: http://www.ledmeile.de/&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;LED Shop und Lampentechnik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== LED-Tech LED-Shop ===&lt;br /&gt;
Homepage: http://www.led-tech.de&lt;br /&gt;
&lt;br /&gt;
* viele verschiedene LEDs zu sehr guten (meist den günstigsten) Preisen&lt;br /&gt;
* vor allem auf High-Power-LEDs spezialisiert&lt;br /&gt;
* viele verschiedene Treiber für High-Power-LEDs&lt;br /&gt;
* kostenloser Versand&lt;br /&gt;
* haben ein eigenes, sehr umfangreiches Forum&lt;br /&gt;
&lt;br /&gt;
=== Lieske Elektronik ===&lt;br /&gt;
Homepage: http://www.lieske-elektronik.de&lt;br /&gt;
&lt;br /&gt;
* liefert nur an Geschäftskunden&lt;br /&gt;
&lt;br /&gt;
=== LUMITRONIX LEDs-Shop ===&lt;br /&gt;
Homepage: http://www.leds.de&lt;br /&gt;
&lt;br /&gt;
* alles rund um LEDs (auch Zubehör und Lektüre)&lt;br /&gt;
* neben Standard-LEDs auch SMD- und SuperFlux-LEDs&lt;br /&gt;
&lt;br /&gt;
=== Marsch Elektronik, M. Schlimper ===&lt;br /&gt;
Homepage: http://www.marsch-elektronik.de&lt;br /&gt;
&lt;br /&gt;
* Online Shop für aktive und passive Bauelemente&lt;br /&gt;
* Versandkosten ab Euro 1,60&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* liefert nur innerhalb Deutschlands&lt;br /&gt;
* nicht gelistete Artikel können angefragt werden und werden meist auch beschafft&lt;br /&gt;
&lt;br /&gt;
=== Mein-Daarle ===&lt;br /&gt;
Homepage: http://www.mein-st-arnual.de/shop/saarbruecken/artikellisteL.html&lt;br /&gt;
&lt;br /&gt;
* Teileliste eines &amp;quot;Händlers aus Saarbrücken&amp;quot; (wahrscheinl.: Frank Skowronek ESS Elektronik Service), &amp;quot;bis sein Onlineshop ans Netz gehen kann&amp;quot;&lt;br /&gt;
* derzeit (4/2011) kein Onlineshop, Kontakt über Formular&lt;br /&gt;
&lt;br /&gt;
=== Micromaus ===&lt;br /&gt;
Homepage: http://www.micromaus.de&lt;br /&gt;
&lt;br /&gt;
* Sensoren&lt;br /&gt;
* Mikrokontroller&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
&lt;br /&gt;
=== Microcontroller-Starterkits ===&lt;br /&gt;
Homepage: http://www.microcontroller-starterkits.de&lt;br /&gt;
&lt;br /&gt;
* Bauteile: CAN, Ethernet, Mikrokontroller AVR und ARM, Linearregler 1,8V 3,3V 5V in SOT223&lt;br /&gt;
* Leerplatinen, Bausätze&lt;br /&gt;
* günstig&lt;br /&gt;
* Abholung in Hattingen möglich&lt;br /&gt;
* Versandkosten innerhalb Deutschlands ab 2,50&amp;amp;#8364;&lt;br /&gt;
* keine Kreditkartenzahlung möglich&lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller.net ===&lt;br /&gt;
Homepage: http://shop.mikrocontroller.net/&lt;br /&gt;
&lt;br /&gt;
* Starterkits, Development Boards und Zubehör für AVR, AVR32, ARM und MSP430&lt;br /&gt;
&lt;br /&gt;
=== Mira Nürnberg ===&lt;br /&gt;
Homepage: http://www.mira-electronic.de/&lt;br /&gt;
&lt;br /&gt;
* SMD-Bauteile, SMD-Sortimentboxen&lt;br /&gt;
* Verkauf und Preisangaben nur für Gewerbetreibende&lt;br /&gt;
&lt;br /&gt;
=== Karl Müller EME Messtechnik ===&lt;br /&gt;
Homepage: http://www.eme-hf-technik.de/&lt;br /&gt;
&lt;br /&gt;
* Hochfrequenz-Messtechnik, HF-Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Mouser ===&lt;br /&gt;
Homepage: http://de.mouser.com/&lt;br /&gt;
&lt;br /&gt;
* Liefert an Privat&lt;br /&gt;
* Zügige Lieferung mit FedEx aus den USA&lt;br /&gt;
* Keine Halbleiter von Linear, National und Analog&lt;br /&gt;
&lt;br /&gt;
=== MS-Elektronik ===&lt;br /&gt;
Homepage: http://www.ms-elektronik.info/&lt;br /&gt;
&lt;br /&gt;
* Liefert an Privat&lt;br /&gt;
* Zügige Lieferung&lt;br /&gt;
* Gute Qualität&lt;br /&gt;
* Viel in Richtung Audio&lt;br /&gt;
* Große Auswahl an Elkos -&amp;gt; kleine Preise&lt;br /&gt;
* kein allzu großes Sortiment&lt;br /&gt;
&lt;br /&gt;
=== Mütron ===&lt;br /&gt;
Homepage: [http://www.muetronshop.de/ Mütron]&lt;br /&gt;
&lt;br /&gt;
* Keine Privatkunden&lt;br /&gt;
&lt;br /&gt;
=== myAVR Shop ===&lt;br /&gt;
Hompage [http://shop.myavr.de/ shop.myavr.de]&lt;br /&gt;
&lt;br /&gt;
* Kleine Auswahl, aber die angebotene Ware ist sehr preiswert (meist preiswerter als bei Reichelt)&lt;br /&gt;
* Zügige Lieferung (1-2 Werktage)&lt;br /&gt;
* Diverse Zahlungsmöglichkeiten: Rechnung, Vorkasse, Lastschrift, Kreditkarte, PayPal&lt;br /&gt;
* Kein Mindestbestellwert&lt;br /&gt;
* Sehr günstige Versandkosten ab 1,95 Eur&lt;br /&gt;
* Mengenrabatt ab 10 gleichen Artikeln&lt;br /&gt;
&lt;br /&gt;
=== Neuhold-Elektronik ===&lt;br /&gt;
Homepage: http://www.neuhold-elektronik.at &amp;lt;br&amp;gt;&lt;br /&gt;
Shop: http://www.neuhold-elektronik.at/catshop/default.php?language=de&lt;br /&gt;
&lt;br /&gt;
* preiswerte Schnäppchen&lt;br /&gt;
* regelmäßig aktualisierte Angebotsliste herunterladbar&lt;br /&gt;
* Ab 60,- EUR versandkostenfrei in Österreich&lt;br /&gt;
&lt;br /&gt;
=== Octamex ===&lt;br /&gt;
Homepage: http://www.octamex.de&lt;br /&gt;
&lt;br /&gt;
* preiswerte Leiterplattenchemie &lt;br /&gt;
* Chemisch Zinn&lt;br /&gt;
* Ätzmittel Natriumpersulfat, Eisen-III-Chlorid&lt;br /&gt;
* Entwickler positiv und negativ&lt;br /&gt;
* Lötstopp-Laminat, Tentingresist, Bestückungsdruck&lt;br /&gt;
* Bungard Basismaterial in 0,5mm 1,0mm 1,5mm Dicke und 18µm, 35µm, 70µm Kupfer&lt;br /&gt;
* Bungard Alucorex für 19&amp;quot; Frontplatten&lt;br /&gt;
* Gehäuse aller Art&lt;br /&gt;
* Quarze in Industriequalität&lt;br /&gt;
* aktive und passive Halbleiter (Widerstände, Kondensatoren, Transistoren, Logik-ICs etc.)&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* Lieferung auch ins Ausland&lt;br /&gt;
* Versandkosten ab 2,55EUR&lt;br /&gt;
* Liefert nur gegen Vorkasse, ausser für Bestandskunden, die schon häufig bestellt haben&lt;br /&gt;
* Zahlung mit EC-Pay oder Kreditkarte nur gegen erheblichen Aufschlag (bis zu 5%)&lt;br /&gt;
&lt;br /&gt;
=== Online Batterien ===&lt;br /&gt;
Homepage: http://www.online-batterien.de&lt;br /&gt;
&lt;br /&gt;
* Allerlei günstige Batterien &amp;amp; Akkus vieler Marken&lt;br /&gt;
* z.&amp;amp;nbsp;B. &#039;&#039;&#039;40 Stk.&#039;&#039;&#039; DURACELL PLUS LR6 AA 11,59€ (Jan 2010)&lt;br /&gt;
* Beleuchtungsartikel&lt;br /&gt;
* USV&lt;br /&gt;
* Versand ab 3,90€&lt;br /&gt;
&lt;br /&gt;
=== Oppermann ===&lt;br /&gt;
Homepage: http://www.oppermann-electronic.de&lt;br /&gt;
&lt;br /&gt;
* Restposten, auch HF Bauteile&lt;br /&gt;
* auch Privatkunden&lt;br /&gt;
* Lieferung nach üblicher Zeit&lt;br /&gt;
&lt;br /&gt;
=== PCB-Soldering ===&lt;br /&gt;
&lt;br /&gt;
;Homepage, normaler Online-Shop: http://www.pcb-soldering.co.uk/&lt;br /&gt;
;eBay: http://www.allendale-stores.co.uk/&lt;br /&gt;
;Firmen-Homepage: http://www.allendale-elec.co.uk/&lt;br /&gt;
&lt;br /&gt;
* [http://www.aoyue.com/en/products.asp Aoyue] Lötstationen und preiswertes Zubehör (Lötspitzen) für diese. Bei Aoyue-Zubehör bessere Preise (Stand 10/2008) als [[#WilTec_Wildanger_Technik_GmbH|WilTec]]&lt;br /&gt;
* Schnelle Lieferung&lt;br /&gt;
* Dank [http://www.zoll.de/b0_zoll_und_steuern/a0_zoelle/a1_grundlage_zollrecht/b0_zollgebiet/index.html EU Binnenmarkt] nur britische Mehrwertsteuer (VAT), kein Zoll, keine [http://www.zoll.de/b0_zoll_und_steuern/a3_einfuhrumsatzsteuer/index.html Einfuhrumsatzsteuer] fällig.&lt;br /&gt;
* Zwei von drei E-Mails wurden nicht beantwortet&lt;br /&gt;
* Versandart wurde eigenmächtig von &amp;quot;Standard&amp;quot; auf teureres &amp;quot;Signed for&amp;quot; (Einschreiben) geändert&lt;br /&gt;
&lt;br /&gt;
=== Pollin Electronic ===&lt;br /&gt;
Homepage: [http://www.pollin.de/ Pollin Electronic]&lt;br /&gt;
&lt;br /&gt;
* Beliebt&lt;br /&gt;
* Günstige Restposten aller Art (z.&amp;amp;nbsp;B. &amp;quot;250 g verschiedene ICs&amp;quot; u.dgl.)&lt;br /&gt;
* Produktkategorien:&lt;br /&gt;
** Computer und Zubehör&lt;br /&gt;
** Telefone und Zubehör&lt;br /&gt;
** Antennentechnik&lt;br /&gt;
** HiFi/Car-HiFi/Video/TV&lt;br /&gt;
** Stromversorgung&lt;br /&gt;
** Lichttechnik&lt;br /&gt;
** Messtechnik / Uhren&lt;br /&gt;
** Haustechnik&lt;br /&gt;
** Werkstatt&lt;br /&gt;
** Bauelemente&lt;br /&gt;
** KFZ- und Zweirad&lt;br /&gt;
** Motoren&lt;br /&gt;
** Bausätze&lt;br /&gt;
** Fundgrube&lt;br /&gt;
* Produkte teils schnell ausverkauft &lt;br /&gt;
* Qualität schwankend. Man kann gute Schnäppchen machen aber auch reinfallen. Umtausch ist dann aber problemlos.&lt;br /&gt;
* Es wird öfters von sorgloser Verpackung berichtet, trotz Verpackungspauschale von 0,85 % des Warenwerts (empfindliche und schwere Produkte besser nicht zusammen bestellen). Reklamationen bei Beschädigungen werden freundlich behandelt.&lt;br /&gt;
* Lieferzeit i.d.r. 2-3 Werktage / knappe Woche bei neuer Sonderliste&lt;br /&gt;
* Ladengeschäft in 85104 Pförring&lt;br /&gt;
* Versandkosten  innerhalb Deutschlands 4,50 &amp;amp;#8364; (ab 150&amp;amp;#8364; versandkostenfrei); dazu 0,85 % Verpackungspauschale&lt;br /&gt;
* Zahlung per Nachnahme (+2,50 €) oder Bankeinzug (keine Kreditkarte, keine Überweisung)&lt;br /&gt;
&lt;br /&gt;
=== proma / Isel ===&lt;br /&gt;
Homepage: http://www.proma-technologie.com/deutsch/rundum_l/proma_fs_1.html&lt;br /&gt;
&lt;br /&gt;
* fotobeschichtete Leiterplatten Platinenfrästechnik&lt;br /&gt;
* Chemikalien für die Platinenherstellung: Ätzmittel, Flussmittel für Lötanlagen, etc.&lt;br /&gt;
* Profilgehäuse, u.a. von Conrad und Reichelt vertrieben&lt;br /&gt;
&lt;br /&gt;
=== QRP-project ===&lt;br /&gt;
http://www.qrpshop.de/sitemap.htm Bausätze vor allem einfache Kurzwellen-Funkgeräte&lt;br /&gt;
&lt;br /&gt;
=== Reichelt ===&lt;br /&gt;
Homepage: [http://www.reichelt.de/ Reichelt]&lt;br /&gt;
&lt;br /&gt;
* relativ große Auswahl, aber nicht viele &amp;quot;brandaktuelle&amp;quot; Bauteile&lt;br /&gt;
* wenn man höflich fragt, liefern sie ganz selten auch Bauteile, die nicht im Katalog stehen zu &amp;quot;normalen&amp;quot; Preisen (vorausgesetzt der Hersteller ist im Sortiment), z.&amp;amp;nbsp;B. Xilinx XC2S50, aber meist erhält man die Antwort, dass der Artikel nicht im Sortiment ist, obwohl auf der Homepage unter Service extra ein Punkt angeführt ist: &amp;quot;Ich benötige einen Artikel, der nicht im Programm ist&amp;quot;&lt;br /&gt;
* reagiert aber teilweise auch auf Anregungen, neue Produkte in das Angebot aufzunehmen; siehe dazu auch den Artikel [[Reichelt-Wishlist]]&lt;br /&gt;
* liefert schnell und vollständig; wenn etwas ausnahmsweise nicht verfügbar ist, dann liefern sie es auf eigene Kosten nach, wenn der Artikel in absehbarer Zeit wieder vorrätig ist (selbst wenn er nur 0,20&amp;amp;#8364; wert ist).&lt;br /&gt;
* Lieferzeiten normal, manchmal unverständlicherweise länger als üblich&lt;br /&gt;
* lässt einen dennoch manchmal warten, wenn ein Artikel nicht lieferbar ist! Daher bei der Bestellung immer darauf hinweisen, dass man auch eine Teillieferung akzeptiert. (Laut Auskunft dauert das länger, besser nach der Inet-Bestellung anrufen und nicht lieferbare Teile aus der Bestellung streichen lassen)&lt;br /&gt;
* niedrige Preise (aber unbedingt Qualität des Artikel checken)&lt;br /&gt;
* im Inland (Deutschland) und Ausland 10&amp;amp;#8364; Mindestbestellwert&lt;br /&gt;
* auch in die Schweiz sehr guter Service&lt;br /&gt;
* holt sich auch ohne Erlaubnis Bankauskünfte bei großen Bestellungen ein.&lt;br /&gt;
&lt;br /&gt;
=== RFW Elektronik ===&lt;br /&gt;
Homepage: http://www.rfw-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
* HF Bauelemente&lt;br /&gt;
&lt;br /&gt;
=== Ribu ===&lt;br /&gt;
Homepage: [http://www.ribu.at/ Ribu]&lt;br /&gt;
&lt;br /&gt;
* Sehr guter Elektronikversand in Österreich mit zahlreichen Entwicklungsboards und zahlreichen Elektroniklösungen.&lt;br /&gt;
* Liefert sehr schnell und hat eine ausgezeichnete Beratung. &lt;br /&gt;
* Online-Shop ist sehr übersichtlich und einfach zu bedienen.&lt;br /&gt;
* Lieferstatusanzeige für alle Artikel. Bei Auslaufartikeln ist sogar die noch verfügbare Stückzahl sichbar.&lt;br /&gt;
* Günstige Sonderangebote&lt;br /&gt;
* innerhalb Österreichs 4,90&amp;amp;#8364; Versandkosten, ab 80,- keine Versandkosten&lt;br /&gt;
* ausserhalb Österreichs 13&amp;amp;#8364; Versandkosten, ab 225&amp;amp;#8364; versandkostenfrei&lt;br /&gt;
* liefert auch an Privatkunden&lt;br /&gt;
* Mindestbestellwert innerhalb Österreichs 10&amp;amp;#8364;, ausserhalb 30&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
=== Richardson Electronic ===&lt;br /&gt;
Homepage: [http://www.rell.com/international/index.asp?ID=GE]&lt;br /&gt;
&lt;br /&gt;
* Hochfrequenz-Halbleiter, HF-Röhren,&lt;br /&gt;
&lt;br /&gt;
=== Riedl Elektronik ===&lt;br /&gt;
Homepage: http://www.riedl-electronic.at&lt;br /&gt;
* großes Angebot v.a. ICs und Trafos&lt;br /&gt;
* recht günstig&lt;br /&gt;
* Rabatt für Schüler/Student&lt;br /&gt;
* Versand nach AT: 3,95€ bis 1kg, ab 100€ frei Haus&lt;br /&gt;
* Versand AT über 1kg sowie Ausland: Nach Aufwand (wird nicht direkt angezeigt)&lt;br /&gt;
&lt;br /&gt;
=== RLX COMPONENTS s.r.o. ===&lt;br /&gt;
Homepage: http://www.rlx.sk/&lt;br /&gt;
&lt;br /&gt;
* Man spricht Deutsch&lt;br /&gt;
* Messgeräte, Mikrocontroller-Boards, Bauelemente&lt;br /&gt;
&lt;br /&gt;
=== RM Computertechnik GmbH ===&lt;br /&gt;
Homepage: http://www.rm-computertechnik.de/&lt;br /&gt;
&lt;br /&gt;
* Kerngeschäft ist PC-Technik, aber auch großes Sortiment an Kabeln, Litzen und Steckverbindern&lt;br /&gt;
* handelt auch mit einigen Bauelementen, wie LED&#039;s&lt;br /&gt;
&lt;br /&gt;
=== Robotikhardware===&lt;br /&gt;
Homepage: http://www.robotikhardware.de/&lt;br /&gt;
&lt;br /&gt;
* Microcontroller&lt;br /&gt;
* Entwicklungsboards&lt;br /&gt;
* Sensoren&lt;br /&gt;
* Robotik-Zubehör&lt;br /&gt;
* günstiges Angebote für Hobby-Elektroniker&lt;br /&gt;
* auch einzelne Platinen&lt;br /&gt;
&lt;br /&gt;
=== Benno Rößle Elektronik ===&lt;br /&gt;
Homepage: http://www.roessle-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
* Masten, Antennen, Befestigungsmat.,Zubehör, Geräte, Anpassteile, HF-Stecker&lt;br /&gt;
&lt;br /&gt;
=== RS Components ===&lt;br /&gt;
Homepage: [http://www.rsonline.de/ RS Components] &lt;br /&gt;
&lt;br /&gt;
* lt. AGB nur an gewerbliche Abnehmer, fragt bei Internetbestellungen aber nicht nach. Anm.: mitlerweile machen sie es doch.&lt;br /&gt;
* gute Auswahl insbesondere an &amp;quot;mechanischen Bauteilen&amp;quot;&lt;br /&gt;
* gute Verfügbarkeit&lt;br /&gt;
* sehr schneller Versand, Ware ist in 99% aller Fälle am nächsten Tag da (GP)&lt;br /&gt;
* Preise wurden angepasst, gute Preis/Leistung&lt;br /&gt;
* Preis im Onlineshop sind ohne MwSt angegeben&lt;br /&gt;
* Bei Onlinekauf ist der Versand kostenfrei, ohne Mindesbestellwert.&lt;br /&gt;
* Notify-Me Service für Produktabkündigung&lt;br /&gt;
* Auch größere Stückzahlen über Allied möglich&lt;br /&gt;
* Relativ große Auswahl an Sortimenten (Widerstände, Kondensatoren), Einzelteile können teilweise nachgekauft werden&lt;br /&gt;
* Verfügbarkeitsanzeige im Internet ist ziemlich hilfreich&lt;br /&gt;
* Nützliche Tipps zum Thema RoHS&lt;br /&gt;
&lt;br /&gt;
=== Sander Elektronik ===&lt;br /&gt;
Homepage: http://www.sander-electronic.de&lt;br /&gt;
&lt;br /&gt;
* beliefert auch Privatkunden, Bankeinzug möglich&lt;br /&gt;
* ähnlich Segor ein Berliner Versender&lt;br /&gt;
* Hier findet man manche [[MSP430]], die es sonst nicht in kleinen Stückzahlen gibt&lt;br /&gt;
* Herr Sander ist sehr kompetent und selbst Autor von Fachartikeln&lt;br /&gt;
* selbst abgekündigte Halbleiter können noch beschafft werden&lt;br /&gt;
* Bezahlung auch mit Kreditkarte möglich&lt;br /&gt;
* Versandkosten innerhalb Deutschlands ab 3,35&amp;amp;#8364;, innerhalb Europas ab 6&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
=== Sasco Holz ===&lt;br /&gt;
Homepage: http://www.sasco.de/&lt;br /&gt;
&lt;br /&gt;
* Wie Spoerle eine Tochter von Arrow. &lt;br /&gt;
* Distributor für Analog Devices... &lt;br /&gt;
* Liefert wie Spoerle und Arrow in Deutschland nicht an Privatkunden.&lt;br /&gt;
&lt;br /&gt;
=== Sat-Schneider ===&lt;br /&gt;
Homepage: http://www.sat-schneider.de/&lt;br /&gt;
* Bauteile, Ersatzteile  Online-Shop&lt;br /&gt;
* Baugruppen zum Empfang des Digitalen Kurzwellenrundfunks DRM&lt;br /&gt;
&lt;br /&gt;
=== Otto Schubert GmbH ===&lt;br /&gt;
Homepage: http://www.schubert-gehaeuse.de/&lt;br /&gt;
&lt;br /&gt;
* Kein Online-Shop. Bestellungen nur per Telefon, Fax oder E-Mail &lt;br /&gt;
* Weissblechgehäuse, Gerätegehäuse, wetterfeste Gehäuse&lt;br /&gt;
* Drehkondensatoren&lt;br /&gt;
* Sonderanfertigungen&lt;br /&gt;
&lt;br /&gt;
=== Schramm-Software ===&lt;br /&gt;
Homepage: http://www.schramm-software.de/bausatz/&lt;br /&gt;
* Online-Shop, bietet Elektronik-Bausätze mit Mikrocontrollern&lt;br /&gt;
* Bausätze als Lehrmaterial geeignet, da ausführliches Begleitheft mitgeliefert wird (Aufbauanleitung, Schaltung, Controllerprogramm, Experimente...)&lt;br /&gt;
* bisher nur ein relativ kleines Sortiment, soll ergänzt werden&lt;br /&gt;
* Versandkosten innerhalb Deutschlands 2,50 &amp;amp;#8364;, innerhalb der EU 3,50 &amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
=== Schukat elektronic ===&lt;br /&gt;
Homepage: [http://www.schukat.de/ Schukat]&lt;br /&gt;
&lt;br /&gt;
* liefert nicht an privaten Endverbraucher&lt;br /&gt;
* einfache und passiver Bauteile oft nur in großen Mindeststückzahlen&lt;br /&gt;
* ICs teilweise recht preiswert (vor allem bei mehr als 1 Stück, z.&amp;amp;nbsp;B. auch AVR)&lt;br /&gt;
* LCDs sehr preiswert und auch als Einzelstücke&lt;br /&gt;
* aktuelle Preise und Verfügbarkeit im Internet (aber nur nach Anmeldung -jetzt nicht mehr bei kleinen Stückzahlen), ebenso Bilder von Gehäusefootprints u.dgl.&lt;br /&gt;
* Abholung in Monheim am Rhein nach Vereinbarung möglich&lt;br /&gt;
* Versandkosten innerhalb Deutschlands ab 5&amp;amp;#8364; (bis 10kg!)&lt;br /&gt;
&lt;br /&gt;
=== Schuricht ===&lt;br /&gt;
Homepage: [http://www.schuricht.de/ Schuricht]&lt;br /&gt;
&lt;br /&gt;
* deutscher Ableger der Distrelec- (Elektronik) und Disdata-Gruppe (Computertechnik)&lt;br /&gt;
* Liefert auch an Privatkunden (getrennte AGBs für gewerbliche und Privatkunden, Lieferung an Privat per Nachnahme: Versandkosten ab 6,54€ plus 4,76€ Nachnahmegebühr).&lt;br /&gt;
** Online-Bestellung von Privatkunde scheiterte daran, dass die  Onlineshop-Bestellformulare nur für gewerbliche Kunden ausgelegt sind und der Onlineshop Bestellungen ohne Firmenangaben nicht annimmt oder gar mit einer internen Fehlermeldung quittierte.&lt;br /&gt;
**Online Bestellung mit &amp;quot;Privat&amp;quot; als Firmenangabe funktionierte einwandfrei.&lt;br /&gt;
**Telefonische Bestellung von Privat funktioniert. Nette, freundliche Behandlung am Telefon, kein Callcenter. Versprochener Rückruf erfolgte mit gewünschten Informationen. Neben Nachnahme wurde für einen relativ teuren Artikel persönliche Abholung angeboten. Angegebene Lieferfrist wurde leicht unterschritten.&lt;br /&gt;
* Papierkatalog über 2000 Seiten, durchgehend farbig, nur für Geschäftskunden erhältlich.&lt;br /&gt;
* Ziemlich teuer&lt;br /&gt;
&lt;br /&gt;
=== Schuro Elektronik GmbH ===&lt;br /&gt;
Homepage: [http://www.schuro.de Schuro]&lt;br /&gt;
&lt;br /&gt;
* Elektronische Bauelemente und Bauteile für den Audio- und Lautsprecherbau (Kondensatoren, Spulen u.dgl.)&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* Versandkosten innerhalb Deutschlands gewichtsabhängig ab 5,75&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
=== Segor-electronics ===&lt;br /&gt;
Homepage: [http://www.segor.de/ Segor-electronics]&lt;br /&gt;
&lt;br /&gt;
* Spezialist für Halbleiter, die ansonsten für nicht-gewerbliche Abnehmer nur schwer erhältlich sind (Preise dahingehend &amp;quot;angemessen&amp;quot;)&lt;br /&gt;
* auch Privatkunden gerne gesehen&lt;br /&gt;
* Ladengeschäft in Berlin&lt;br /&gt;
* kein Mindestbestellwert bei Versand innerhalb der EU&lt;br /&gt;
&lt;br /&gt;
=== SE Spezial-Electronic AG ===&lt;br /&gt;
Homepage: [http://www.spezial.de/ SE Spezial-Electronic]&lt;br /&gt;
* Distributor&lt;br /&gt;
* Laut AGB auch Verkauf an Privat.&lt;br /&gt;
* Große Verpackungseinheiten/Mindestbestellmengen pro Bauteil&lt;br /&gt;
* Versandkosten pauschal 9,- €  (Deutschland) (Stand 08/2008)&lt;br /&gt;
&lt;br /&gt;
=== Shortec Electronics ===&lt;br /&gt;
Homepage: http://www.shortec.com&lt;br /&gt;
* Unabhängiger Distributor von elektronischen und elektromechanischen Bauelementen aller Hersteller.&lt;br /&gt;
&lt;br /&gt;
=== Small Control Shop ===&lt;br /&gt;
Homepage: http://www.small-control.de/&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Bernd Walter Computer Technology&amp;quot;&lt;br /&gt;
* kleines Lieferprogramm aber ein paar interessante Produkte&lt;br /&gt;
&lt;br /&gt;
=== SMG Diffusion - F1GE ===&lt;br /&gt;
http://www.smgdiffusion.com&lt;br /&gt;
( Seite nur französisch )&lt;br /&gt;
* Videotechnik, &lt;br /&gt;
* 1,2 GHz / 2,4GHz Module&lt;br /&gt;
* Gebraucht-Messgeräte HP, Tek, Philips  u.a.&lt;br /&gt;
* GHz-Halbleiter&lt;br /&gt;
* Koax-Adapter&lt;br /&gt;
* Antennen&lt;br /&gt;
&lt;br /&gt;
=== Spoerle ===&lt;br /&gt;
Homepage: http://www.spoerle.de&lt;br /&gt;
&lt;br /&gt;
* Früher eine Tochterfirma von Arror. Mittlerweile komplett in Arrow aufgegangen, Webseite leitet auf Arrow um.&lt;br /&gt;
* Aus dem Webshop: &amp;quot;Unser Angebot richtet sich nur an Kaufleute und nicht an Verbraucher.&amp;quot;&lt;br /&gt;
* Wenn es wirklich über Arrow sein muss, dann kann man es als Privatperson bei Arrow Electronics North American Components http://www.arrownac.com/ versuchen, die sich normalerweise nicht weigern ihre Produkte zu verkaufen. Allerdings muss man mit großen Mindestmengen (z.&amp;amp;nbsp;B. BC547 in Schritten von 2000 Stück) und hohen Kosten rechnen.&lt;br /&gt;
:Zu den Kosten gehören zum Beispiel ein mehrfacher Mindermengenzuschlag (&#039;&#039;$10 handling charge will be added to each line item less than $30&#039;&#039;), eine satte &#039;&#039;handling and energy fee of $10.22&#039;&#039; (mehr als 10x zu hoch wie die vergleichbare Gebühr für amerikanische Besteller), hohe Versandkosten (ab $20 nach Deutschland). Dazu kommen die üblichen Kosten für den Import aus dem Ausland (Einfuhrumsatzsteuer, Kreditkartengebühr, ...)&lt;br /&gt;
&lt;br /&gt;
=== SR-Systems ===&lt;br /&gt;
Homepage: http://www.sr-systems.de&lt;br /&gt;
&lt;br /&gt;
* Baugruppen für Digital-TV, Sende- und Empfangstechnik&lt;br /&gt;
* DVB-S, DVB-T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Strixner&amp;amp;Holzinger ===&lt;br /&gt;
Homepage: [http://www.sh-halbleiter.de www.sh-halbleiter.de]&lt;br /&gt;
&lt;br /&gt;
* Ladengeschäft in München&lt;br /&gt;
* Versand &lt;br /&gt;
* riesiges Angebot an Halbleiter, auch schwer beschaffbare&lt;br /&gt;
* Online-Shop&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TAUTEC-ELECTRONICS ===&lt;br /&gt;
Homepage: http://www.tautec-electronics.de&lt;br /&gt;
&lt;br /&gt;
* Online Shop für aktive elektronische Bauelemente&lt;br /&gt;
* günstige Preise (Vorsicht, Preisangaben enthalten keine Mehrwertsteuer) aber Mindestbestellwert 100 Euro&lt;br /&gt;
* alle Artikel ab Lager lieferbar, daher kurze Wartezeiten&lt;br /&gt;
* weltweiter Versand&lt;br /&gt;
* zahlreiche Mengenrabatte&lt;br /&gt;
* viele Ersatzteile aus dem Audio-, Car-HiFi und TV-Bereich&lt;br /&gt;
&lt;br /&gt;
=== TCB-Versand ===&lt;br /&gt;
Homepage: [http://www.tcb-versand.de www.tcb-versand.de]&lt;br /&gt;
&lt;br /&gt;
* insbesondere für Modellbauer ein sehr interresantes Sortiment&lt;br /&gt;
* Stecker,Kabel etc. recht günstig und kleine Mengen abnehmbar &lt;br /&gt;
* Lieferung normal zwischen 1 und 3 Tage&lt;br /&gt;
* leider nur Online-Shop&lt;br /&gt;
&lt;br /&gt;
=== Tec-Shop (Wolfgang Rompel Elektronik) ===&lt;br /&gt;
Homepage: [http://www.tec-shop.de www.tec-shop.de]&lt;br /&gt;
&lt;br /&gt;
* Kleines, aber ausgesuchtes Sortiment&lt;br /&gt;
* Interessantes Angebot an Sensoren&lt;br /&gt;
&lt;br /&gt;
=== Technik-Welt / Industrieshop.at ===&lt;br /&gt;
Homepage: http://www.industrieshop.at/&lt;br /&gt;
&lt;br /&gt;
* Laut Homepage richtet man sich &amp;quot;an den industriellen Kunden&amp;quot;. Laut AGB sieht man das jedoch nicht so eng, Zitat:&lt;br /&gt;
:: &#039;&#039;TW schließt online Verträge nur mit Kunden ab, die natürliche oder juristischen Personen sind, die ihren Wohnsitz oder Sitz in Österreich, einem Mitgliedsstaat der Europäischen Union (EU25) oder der Schweiz haben.&#039;&#039;&lt;br /&gt;
* [[#Farnell|Farnell]] Teile&lt;br /&gt;
* In Österreich&lt;br /&gt;
* Schnelle Lieferung (2 Tage)&lt;br /&gt;
&lt;br /&gt;
=== TIGAL KG ===&lt;br /&gt;
Homepage: http://www.tigal.com/default.asp&lt;br /&gt;
&lt;br /&gt;
* Boards und Tools für Embedded-Elektronik&lt;br /&gt;
* In Österreich &lt;br /&gt;
* Versandkosten ab € 7,00 in Österreich, ab € 10,00 nach Deutschland.&lt;br /&gt;
* Preisangaben ohne MWSt. Für Privatkunden kommen 20% österreichische Mehrwertsteuer hinzu.&lt;br /&gt;
* U.a. ZeroLogic Logik-Analysatoren.&lt;br /&gt;
&lt;br /&gt;
=== TME (Transfer Multisort Elektronik) ===&lt;br /&gt;
Homepage: [http://www.tme.pl/index.phtml?lang=de www.tme.pl]&lt;br /&gt;
&lt;br /&gt;
* Firmensitz in Łódź, Polen&lt;br /&gt;
* Zahlungsabwicklung über deutsches Konto&lt;br /&gt;
* als Privatkunde: Mehrwertsteuer beachten (22%)&lt;br /&gt;
* sehr großes günstiges SMD Sortiment&lt;br /&gt;
&lt;br /&gt;
=== Trade-Shop / AIR Electronics GmbH ===&lt;br /&gt;
Homepage: http://www.trade-shop.de/&lt;br /&gt;
&lt;br /&gt;
* Trotz knackiger Sprüche auf der englischen Version der Webseite (&amp;quot;Electronic Components Superstore&amp;quot;) eher kleines Angebot elektronischer Bauteile&lt;br /&gt;
* 20 Euro Mindestbestellmenge (Stand Februar 2008)&lt;br /&gt;
* ab 6,90 Euro Versandkosten (Deutschland, bis 1kg)  (Stand Februar 2008)&lt;br /&gt;
&lt;br /&gt;
=== Trenkenchu &amp;amp; Stadler GbR ===&lt;br /&gt;
Homepage: http://www.ts-audio.de/&lt;br /&gt;
&lt;br /&gt;
* die meisten Artikel sind deutlich teurer als der Marktpreis, nur bei exotischen Bauelementen kann man durchaus ein Schnäppchen machen&lt;br /&gt;
&lt;br /&gt;
=== TV-Ersatzteile ===&lt;br /&gt;
Homepage: http://www.tversatzteile.de/&lt;br /&gt;
&lt;br /&gt;
* TV-, Audio-, Video-Ersatzteile, Aktive / Passive Bauteile&lt;br /&gt;
* Fernbedienungen Haushaltstechnik&lt;br /&gt;
&lt;br /&gt;
=== UKW-Berichte ===&lt;br /&gt;
Homepage: http://www.ukw-berichte.de/&lt;br /&gt;
&lt;br /&gt;
* Antennen, Bauteile, Bausätze, Literatur für Amateurfunk&lt;br /&gt;
&lt;br /&gt;
=== Voelkner ===&lt;br /&gt;
Homepage: - Kein Link, entsprechend der Vorgabe des Betreibers der Voelkner Webseite im Impressum:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;i&amp;gt;voelkner - direkt günstiger&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
wird produziert und betreut von&amp;lt;br/&amp;gt;&lt;br /&gt;
Re-In Retail International GmbH &amp;lt;br/&amp;gt;&lt;br /&gt;
...&amp;lt;br/&amp;gt;&lt;br /&gt;
...&amp;lt;br/&amp;gt;&lt;br /&gt;
Eine Verlinkung auf die Website der Firma Re-In Retail International GmbH bedarf einer schriftlichen Genehmigung. &amp;lt;/i&amp;gt;&amp;lt;/blockquote&amp;gt; (Stand 3. April 2011)&lt;br /&gt;
&lt;br /&gt;
* Großer Teil des Conrad-Programms, identische Nummern, identische Aufkleber auf der Ware, Preise identisch oder nur ein paar Cent abweichend&lt;br /&gt;
* Versandkosten: D: 5,95€; ab 20€ Warenwert (Vorkasse) bzw. 25€ (Sofortüberweisung) versandkostenfrei / EU: Pauschal 9,95€&lt;br /&gt;
* Möglichkeit der Versandkostenflatrate (D): Einmalig 9,95€ / gültig für ein Jahr&lt;br /&gt;
* Legt jeder Bestellung gleich wieder einen Gutschein über 5€ bei MBW 25€ bei (Flat nur bei häufigen, kleinen Bestellungen sinnvoll); außerdem kommt etwa alle 2-3 Monate selbiger Gutschein + versandkostenfreie Lieferung per Mail, ebenfalls MBW 25€&lt;br /&gt;
* Verpackungsqualität wechselnd, mal brauchbar, mal eher Pollin-Niveau. Selbst kleine Bestellungen, die gefahrlos per Brief/Großbrief verschickt werden könnten werden in einem großen Paket versendet.&lt;br /&gt;
&lt;br /&gt;
=== VOTI Webshop ===&lt;br /&gt;
Homepage: http://www.voti.nl/shop/catalog.html&lt;br /&gt;
&lt;br /&gt;
* relativ kleines Lieferprogramm&lt;br /&gt;
* einige interessante Restposten (Surplus)&lt;br /&gt;
&amp;lt;!-- nicht mehr: * verkauft auch VID/PID-Paare für USB-Applikationen --&amp;gt;&lt;br /&gt;
* Sitz in Amersfoort, Niederlande&lt;br /&gt;
&lt;br /&gt;
=== Walter elektronik ===&lt;br /&gt;
Homepage: http://www.walter-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
* Bauteile, Röhren&lt;br /&gt;
&lt;br /&gt;
=== Watterott electronic GmbH===&lt;br /&gt;
Homepage: http://www.watterott.com/&lt;br /&gt;
&lt;br /&gt;
* Distributor für Arduino, BeagleBoard, FriendlyARM, Pololu, Seeed Studio, Solarbotics, SparkFun...vollständige [http://www.watterott.net/about#distri Liste hier]&lt;br /&gt;
* Entwicklungskits von Atmel, Luminary Micro, Microchip, Raisonance, TI&lt;br /&gt;
* Spezialbauteile von Davicom, FTDI, VLSI, WIZnet&lt;br /&gt;
* Bungard Basismaterial + Chemie&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* Zahlung: Vorkasse, Sofortüberweisung, PayPal, Nachnahme, Kreditkarte (Visa/Mastercard), Rechnung (nur gewerbliche Kunden)&lt;br /&gt;
* Versandkosten Dtl. (UPS): &lt;br /&gt;
** bis  25 EUR Warenwert: 3,50 Euro&lt;br /&gt;
** bis  50 EUR Warenwert: 2,90 Euro&lt;br /&gt;
** bis 150 EUR Warenwert: 2,00 Euro&lt;br /&gt;
** ab  150 EUR Warenwert: versandkostenfrei&lt;br /&gt;
* Versandkosten EU (UPS): &lt;br /&gt;
** bis 150 EUR Warenwert: 10,00 Euro&lt;br /&gt;
** bis 250 EUR Warenwert:  8,90 Euro&lt;br /&gt;
** bis 500 EUR Warenwert:  7,00 Euro&lt;br /&gt;
** ab  500 EUR Warenwert:  versandkostenfrei&lt;br /&gt;
* Schneller, entgegenkommender Service&lt;br /&gt;
&lt;br /&gt;
=== Westfalia ===&lt;br /&gt;
Homepage Deutschland: http://www.westfalia.de/&lt;br /&gt;
Homepage Österreich: http://www.westfalia-versand.at&lt;br /&gt;
&lt;br /&gt;
* Vor 85 Jahren in Hagen, Westfalen gegründet&lt;br /&gt;
* Elektronik nur ein kleiner Teil des Angebotes. Eher insgesamt Haushalts-, Werkstätten-, Agrar- und Gartenbedarf&lt;br /&gt;
* Elektroniksortiment stark schwankend. Momentan (Juni 2008) wenig Auswahl.&lt;br /&gt;
* Mindestbestellwert 18 €, bei Neukundenbestellungen mit Prämienanforderungen (wenig wertiges Geschenk) sogar 50 €.&lt;br /&gt;
* 4,95&amp;amp;#8364; Versandkosten, ab 150&amp;amp;#8364; Bestellwert versandkostenfrei&lt;br /&gt;
* Transportversicherung wird zusätzlich mit einem Zuschlag von 0,8% des Warenwertes berechnet.&lt;br /&gt;
* Einmalige Bestellung führte zu jahrelanger Zusendung von Werbung für Westfalia-Angeboten mit Gewinnspielen (Glücksnummern, Rubbellose, Glücksschlüssel, etc.)&lt;br /&gt;
* Verpackung ähnlich &amp;quot;sorgfältig&amp;quot; wie bei [[#Pollin_Electronic|Pollin Electronic]]. Übergroße Kartons, wenig Verpackungsmaterial, schweres Teil (Labornetzgerät) flog lose im Karton herum und zertrümmerte andere Ware.&lt;br /&gt;
&lt;br /&gt;
=== WilTec Wildanger Technik GmbH ===&lt;br /&gt;
Homepage: http://shop.wiltec.info/&lt;br /&gt;
&lt;br /&gt;
* Aoyue Lötgeräte (Heißluft, Löten, Entlöten), Netzteile, Werkzeuge&lt;br /&gt;
* Aoyue Zubehör (Lötspitzen, Heißluftdüsen), Ersatzteile&lt;br /&gt;
* Andere, nicht Elektronik-Angebote, wie KFZ-Tuningteile&lt;br /&gt;
* Versand. Bei Voranmeldung auch Lagerverkauf.&lt;br /&gt;
&lt;br /&gt;
=== Wüstens frag-jan-zuerst ===&lt;br /&gt;
Homepage: http://www.die-wuestens.de/dindex.htm&lt;br /&gt;
&lt;br /&gt;
* Röhrentechnik&lt;br /&gt;
* Hochspannungs-Spezialteile&lt;br /&gt;
&lt;br /&gt;
=== WIMO ===&lt;br /&gt;
Homepage: http://www.wimo.de&lt;br /&gt;
&lt;br /&gt;
* Große Auswahl an Amateurfunktechnik&lt;br /&gt;
&lt;br /&gt;
=== Zech DG0VE ===&lt;br /&gt;
Homepage: http://www.dg0ve.de/&lt;br /&gt;
&lt;br /&gt;
* Baugruppen für Amateurfunk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Diverse ===&lt;br /&gt;
* [http://www.chip-flip.com/ CHIP-FLIP] - Europäisches Bauelementesuchsystem, franchised Lieferantensuche, Datenblätter und viele nützliche Informationen&lt;br /&gt;
* [http://www.ecomponents-store.com/ ecomponentes-store: Elektronische Bauelemente billig kaufen] - Hier finden Sie eine große Auswahl an elektronischen und elektromechanischen Bauelementen von über 40 Herstellern.&lt;br /&gt;
* [http://www.franchised-distributors.eu/ FRANCHISED-DISTRIBUTORS.EU] - Finden Sie Vertragsdistributoren von über 800 Halbleiterherstellern für elektronische und elektromechanische Bauelemente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO: elektronik-fundgrube&lt;br /&gt;
&lt;br /&gt;
==Messgeräte ==&lt;br /&gt;
=== Neue Messgeräte ===&lt;br /&gt;
&lt;br /&gt;
Viele der oben genannten Elektronikversender verkaufen auch Messgeräte. Darüber hinaus gibt es diverse Versender, die sich hauptsächlich oder ausschließlich auf Messgeräte spezialisiert haben. Allerdings verkaufen viele davon nicht an Privat.&lt;br /&gt;
&lt;br /&gt;
==== CalPlus GmbH ====&lt;br /&gt;
Homepage: http://www.calplus.de/ &amp;lt;br /&amp;gt;&lt;br /&gt;
Homepage: http://www.scopeshop.de/&lt;br /&gt;
&lt;br /&gt;
==== Cosinus ComputerMesstechnik ====&lt;br /&gt;
Homepage: http://www.cosinus.de&lt;br /&gt;
&lt;br /&gt;
* Nicht an Privat&lt;br /&gt;
&lt;br /&gt;
==== dataTec ====&lt;br /&gt;
Homepage: http://www.datatec.de/&lt;br /&gt;
&lt;br /&gt;
* Große Auswahl&lt;br /&gt;
* Nicht an Privat&lt;br /&gt;
&lt;br /&gt;
==== Donald4646 ====&lt;br /&gt;
Homepage: http://www.donald4646.co.uk/&lt;br /&gt;
&lt;br /&gt;
* In Schottland&lt;br /&gt;
* Als eBay-Shop gestartet&lt;br /&gt;
* Einfache, No-Name und Billigmarken (z.&amp;amp;nbsp;B. Oszilloskope)&lt;br /&gt;
&lt;br /&gt;
==== Elektronik-Kontor Messtechnik GmbH ====&lt;br /&gt;
Homepage: http://www.ekomess.de/&lt;br /&gt;
&lt;br /&gt;
==== Meilhaus Electronic GmbH ====&lt;br /&gt;
Homepage: http://www.meilhaus.de/&lt;br /&gt;
&lt;br /&gt;
* Diverse Markenhersteller&lt;br /&gt;
* Eigenmarken&lt;br /&gt;
&lt;br /&gt;
==== PinSonne-Elektronik ====&lt;br /&gt;
Homepage: http://www.pinsonne-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
* Onlineshop&lt;br /&gt;
* Sehr kleines Sortiment&lt;br /&gt;
* UNI-T, RIGOL und andere asiatische Firmen&lt;br /&gt;
&lt;br /&gt;
==== PK elektronik Poppe GmbH ====&lt;br /&gt;
Homepage: http://www.pk-elektronik.de/&lt;br /&gt;
&lt;br /&gt;
* U.a. Fluke Distributor.&lt;br /&gt;
&lt;br /&gt;
====Präzitronic Hennig / Messgeräte Chemnitz====&lt;br /&gt;
Homepage: http://www.messgeraete-chemnitz.de&lt;br /&gt;
&lt;br /&gt;
* Owon&lt;br /&gt;
* Selbst übersetzte deutsche Owon-Handbücher&lt;br /&gt;
* Fluke&lt;br /&gt;
* Zusätzlich kleines Angebot an Gebrauchtgeräten&lt;br /&gt;
&lt;br /&gt;
==== ScopeShop Hamburg ====&lt;br /&gt;
&lt;br /&gt;
* Von CalPlus übernommen, siehe [[#CalPlus_GmbH|CalPlus]]&lt;br /&gt;
&lt;br /&gt;
==== SI Scientific Instruments GmbH ====&lt;br /&gt;
Homepage: http://www.si-scientific.de (Onlineshop) &amp;lt;br /&amp;gt;&lt;br /&gt;
Homepage: http://www.si-gmbh.de (komplettes Programm)&lt;br /&gt;
&lt;br /&gt;
* Onlineshop auf si-scientific.de&lt;br /&gt;
* Akzeptiert PayPal&lt;br /&gt;
 &lt;br /&gt;
==== SKY Messtechnik GmbH ====&lt;br /&gt;
Homepage: http://www.sky-messtechnik.de&lt;br /&gt;
&lt;br /&gt;
* Kein Onlineshop (E-Mail oder Telefon)&lt;br /&gt;
&lt;br /&gt;
==== TESTEC ====&lt;br /&gt;
Homepage: http://www.testec.info/&lt;br /&gt;
&lt;br /&gt;
* Tastköpfe-Hersteller&lt;br /&gt;
* Hameg Vertriebspartner&lt;br /&gt;
* B+K Precision Generalimporteur&lt;br /&gt;
&lt;br /&gt;
==== Zeitech ====&lt;br /&gt;
Homepage: http://zeitech.eu/shop/&lt;br /&gt;
&lt;br /&gt;
* Diverses (Rigol, Owon, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Gebrauchte Messgeräte ===&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält Anbieter bei denen gebrauchte Messgeräte erhältlich sind.&lt;br /&gt;
&lt;br /&gt;
==== Astro Electronic ====&lt;br /&gt;
Homepage: http://www.astro-electronic.de/&lt;br /&gt;
&lt;br /&gt;
==== eumex GmbH ====&lt;br /&gt;
Homepage: http://www.eumes.com/pub/de/&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
&lt;br /&gt;
==== HTB-Elektronik ====&lt;br /&gt;
Homepage: http://www.htb-elektronik.com/&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
&lt;br /&gt;
==== IX Instrumex ====&lt;br /&gt;
Homepage: http://www.instrumex.de/index.cgi?User:LANGUAGE=de&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
&lt;br /&gt;
==== Christoph Lüders MessTechnik ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.CLMT.de &amp;lt;br&amp;gt;&lt;br /&gt;
Online-Shop: http://www.shop-016.de/shop-CLMT.html &amp;lt;br&amp;gt;&lt;br /&gt;
eBay: http://myworld.ebay.de/c_h_r/&lt;br /&gt;
&lt;br /&gt;
* Hat 2010 die Restbestände von Förtig übernommen&lt;br /&gt;
&lt;br /&gt;
==== mbmt Messtechnik ====&lt;br /&gt;
Homepage: http://www.mbmt.com/&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
* Verkauf nur an Gewerbetreibende&lt;br /&gt;
&lt;br /&gt;
==== Rosenkranz Elektronik ====&lt;br /&gt;
Homepage: [http://www.rosenkranz-elektronik.de/ http://www.rosenkranz-elektronik.de/]&amp;lt;br&amp;gt;&lt;br /&gt;
eBay Shop: [http://stores.ebay.de/Rosenkranz-Elektronik-GmbH-Shop http://stores.ebay.de/Rosenkranz-Elektronik-GmbH-Shop]&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
* Auch auf eBay zu finden&lt;br /&gt;
&lt;br /&gt;
==== Helmut-Singer-Elektronik ====&lt;br /&gt;
Homepage: http://www.helmut-singer.de/&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
* Verkauf auch an Privat&lt;br /&gt;
* An den meisten Samstagen im Jahr auch Lagerverkauf, sonst Versand&lt;br /&gt;
&lt;br /&gt;
==== Sphere ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.sphere.bc.ca&amp;lt;br&amp;gt;&lt;br /&gt;
Messgeräte und Ersatzteile: http://www.sphere.bc.ca/test/index.html&lt;br /&gt;
&lt;br /&gt;
* Gebrauchte Messgeräte&lt;br /&gt;
* Ersatzteile&lt;br /&gt;
** Besonders bekannt für Tektronix-Ersatzteile&lt;br /&gt;
&lt;br /&gt;
==== Tektronix TekSelect ====&lt;br /&gt;
Homepage: http://www.tek.com/Measurement/tekselect/&lt;br /&gt;
&lt;br /&gt;
* Tektronix verkauft selber gebrauchte und überarbeitete Tektronix-Messgeräte unter dem Label &#039;&#039;TekSelect&#039;&#039;.&lt;br /&gt;
* Original Tektronix-Garantie&lt;br /&gt;
* Der Bestellvorgang nervt, man muss Kontaktaufnahme durch einen &amp;quot;Representative&amp;quot; erbeten.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Platinenhersteller]]&lt;br /&gt;
* [[Lokale Elektroniklieferanten]]&lt;br /&gt;
* [[Eisenwarenversender]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* http://www.xs4all.nl/~ganswijk/chipdir/ Suche nach integrierten Schaltkreisen&lt;br /&gt;
* http://www.alldatasheet.com                Datenblätter&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile|!]]&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=60331</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=60331"/>
		<updated>2011-09-09T10:32:52Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Digitale Lösung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel gehört zum Projekt &#039;Logic Analyzer&#039;, das von einigen Nutzern dieser Seite gemeinsam entwickelt wird. Eine Übersicht über verschiedene Projekte, die die Entwicklung eines Logikanalysators zum Ziel haben, gibt es unter [[Logic Analyzer Project]].&lt;br /&gt;
&lt;br /&gt;
Ein Logikanalysator dient zur Analyse von digitalen, logischen Signalen an zumeist mehreren Datenleitungen (Bussysteme), über die einzelne Bauteile/Komponenten kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Ein [[Oszilloskop]] hingegen dient überwiegend zur Analyse von analogen Signalverläufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lastenheft =&lt;br /&gt;
&lt;br /&gt;
Hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: |||&lt;br /&gt;
* 16 Kanäle: ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||| ||||&lt;br /&gt;
* Modular (erweiterbar X mal 8/16 Kanäle): |||||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : ||&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : |||||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: ||||| |||| ||||&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: ||||| |&lt;br /&gt;
*..Konfigurierbar ||||&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : ||||| ||||| |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
* &amp;gt;16 ||||&lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; u.U. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: ||&lt;br /&gt;
* Seriell asyncron (RS232).: ||||| ||||| |&lt;br /&gt;
* USB......................: ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Parallelport.............: ||||&lt;br /&gt;
* Ethernet.................: |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Linux   .: ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Ubuntu  .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Direktausgabe des L.A.&#039;&#039;&#039;&lt;br /&gt;
* LCD     .: |&lt;br /&gt;
* TFT     .: |&lt;br /&gt;
* VGA     .: ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Data Analyzer&#039;&#039;&#039;&lt;br /&gt;
* A-Serial.: ||&lt;br /&gt;
* SPI     .: |&lt;br /&gt;
* CAN     .: |&lt;br /&gt;
* ERC     .: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wenn man über WxWidgets/Fox-Toolkit/Qt programmiert, hätte man Win, Linux und MAC erschlagen. COM ist kein Problem, bei USB muss man sehen. Da ist noch nicht viel realisiert. Einen einfachen Treiber sollte man aber hinbekommen können, zumal die Hardware und das Protokoll bekannt sind.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(-- [[Benutzer:Ope|Ope]] 20:51, 10. M?2006 (CET))&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jedoch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die großen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezüglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Stand z.Zt.: Es ist nicht tot, aber in einem Dämmerzustand, siehe dazu [#VHDL_LA_Core].&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.&amp;amp;nbsp;B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genannten Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.&amp;amp;nbsp;B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrocontroller aus, der seine Ports pollt um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) mit Mikrocontroller/AVR dar. Die CPLD z.&amp;amp;nbsp;B. von Xilinx können mit über 100 MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einen externen SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, das Speicherinterface und natürlich das eigentliche sampeln der Eingänge verantwortlich. Der Mikrocontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampleten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3,3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLDs der XC95000XL Serie mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
Allerdings baut die Lösung mit dem CPLD und externen SRAM sowie Mikrocontroller entsprechend groß und es sollte ja kein Tischgerät werden (CPLD + AVR + SRAM +&lt;br /&gt;
FT245 + EEPROM + Spannungsregler kämen ungefähr auf Europa-Format). Als Abmessungen wurde die Größe einer Zigarettenschachtel als Ziel für gut befunden. Neben den Abmessungen gibt es auch beim Routen des PCB zwischen CPLD und SRAM keine befriedigende Lösung, insbesondere wenn mehrere SRAMs für&#039;s Interleave eingesetzt oder gar Transitional Timing Analysis Mode implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Entsprechend dieser Erkenntnis reicher, ist ein FPGA als eine Komponente des LA in&#039;s Gespräch gekommen. Diese haben genug Platz für Logik und internen SRAM, konkret die Spartan-2 Serie. Diese gibt es in einem lötbaren TQFP Gehäuse - kommt also ohne BGA aus - zu moderaten Preisen.&lt;br /&gt;
&lt;br /&gt;
Da künftig die RS232 Schnittstellen wegfallen und nur noch USB in Hardware unterstützt wird, wird der LA ein USB Interface haben. Dies deckt sich auch mit der Umfrage oben und ist unabhängig von der CPLD+AVR- und FPGA-Lösung.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird im Anhang auf die CPLD-Lösung eingegangen, einfach um die Gedankengänge festzuhalten - auch wenn es an sich überholt ist.&lt;br /&gt;
&lt;br /&gt;
= Hardware Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.&amp;amp;nbsp;B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Threshold) variabel sind und somit auch am flexibelsten für die verschiedenen Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Komparator Lösung ===&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL-Eingänge und da der Eingangsspannungsbereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Threshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom µC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per µC mit anschließendem Tiefpass mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Alles in allem eine komplexe Angelegenheit, weshalb sie in der ersten Version des LA fallen gelassen wurde.&lt;br /&gt;
&lt;br /&gt;
=== Digitale Lösung ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Lösung besteht in einem Levelshifter wie dem 74LVC4245 [http://www.standardics.philips.com/products/levelshifters/alvc164245a/]. Er wird mit 2 Betriebsspannungen versorgt - die FPGA-Seite mit 3,3 V und die Eingangsseite mit variabler Spannung bzw. 3,3 V oder 5 V. Diese Spannung kann per PWM durch den Mikrocontroller erzeugt werden und ermöglicht so, variable Logikpegel am DUT abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Es müsste auch eine Lösung für 2,5V-kompatible FPGA-Eingänge vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstige Betrachtungen ===&lt;br /&gt;
&lt;br /&gt;
Weiterhin besteht Einigkeit in der notwendigen Schutzschaltung, damit die Eingangsspannung den max. Input Voltage Range (je nach Typ) bzw. Strom nicht überschreiten kann:&lt;br /&gt;
* Dioden-Array (bringt Speed-Probleme aufgrund der Sperrschichtkapazität, sofern man keine teuren Spezialdioden verwendet) &lt;br /&gt;
* Serienwiderstand&lt;br /&gt;
&lt;br /&gt;
== FPGA ==&lt;br /&gt;
&lt;br /&gt;
Momentan ist der XC2S100 bzw. XC2S200 (prefered)&lt;br /&gt;
(http://direct.xilinx.com/bvdocs/publications/ds001.pdf)&lt;br /&gt;
&lt;br /&gt;
Das externe SRAM entfällt durch den internen des FPGA, da die größeren FPGAs ausreichend interne Speichermöglichkeit haben und das Platinenlayout durch einen&lt;br /&gt;
externen SRAM um ein vielfaches komplizierter werden würde. &lt;br /&gt;
Für den FPGA haben wir derzeit das PQ208-Gehäuse im Auge, dort ist der&lt;br /&gt;
FPGA etwa 2/3 so teuer wie im TQ144 und kann noch nach oben erweitert&lt;br /&gt;
werden - für die, die mehr Speicher brauchen.&lt;br /&gt;
&lt;br /&gt;
Der interne Speicher ist 40k bzw 56k, wobei nur&lt;br /&gt;
Sample-Änderungen abgespeichert werden um den Block-RAM (echter interner&lt;br /&gt;
RAM) besser ausnützen zu können. Yep, er ist veraltet etc., aber&lt;br /&gt;
verfügbar und im TQ144 oder PQ208 (prefered, da derzeitig bestellbar)&lt;br /&gt;
verhältnissmäßig preiswert zu bekommen. Siehe auch&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-204570.html#new.&lt;br /&gt;
&lt;br /&gt;
Der FPGA LA Core wird in VHDL geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Interface zwischen LA und PC == &lt;br /&gt;
&lt;br /&gt;
In der FPGA-Lösung bietet sich der FTDI FT2232C [http://www.ftdichip.com/Documents/DataSheets/ds2232c_14.pdf] (Dual USB UART/FIFO) an, wie er auch im UXIBO [http://www.uxibo.de/] Verwendung findet. Damit kann der FPGA per USB über die erste Schnittstelle im Bit-Bang-Mode geflasht werden und über die zweite mit dem PC kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Die erste Begeisterung verschwand, nachdem die Preise bekannt waren. Daher wurde  ein AT91SAM7S321/64 mit internen USB gewählt, welcher preiswerter ist und zudem die Mikrocontroller-Fähigkeiten in den LA bringt. Der AT91SAM7S wird per USB (nur Buchse und Widerstände erforderlich) über SPI an den FPGA angebunden.&lt;br /&gt;
&lt;br /&gt;
Zudem hat der AT91SAM7 den Vorteil, dass er über USB programmierbar ist via SAM Boot Assistant (SAM-BA) (User Guide [http://www.atmel.com/dyn/resources/prod_documents/doc6132.pdf]).&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Der FPGA benötigt 2,5 V für den Core selbst und eine weitere Spannung für die I/O. Hier bietet sich 3,3 V an, da dann der SAM7 und der Levelshifter 74LVC4245 damit betrieben werden können. TI bietet hierzu den TPS70358 [http://focus.ti.com/lit/ds/symlink/tps70358.pdf] (2.5/2A + 3.3V/1A) an. Dieser besitzt ein Powerpad unter dem Chip, welches die meisten wohl kaum anlöten können. Aber dafür ist die Strombelastbarkeit total überdimensioniert, d.h. etwas Wärmeleitpaste sollte das Problem (hoffentlich) lösen.&lt;br /&gt;
&lt;br /&gt;
Für die variable Spannung auf der Probenseite bzw. 74LVC4245 scheint der TPS62222 [http://focus.ti.com/docs/prod/folders/print/tps62220.html] eine Lösung zu bieten. Er kann eine einstellbare Spannung erzeugen. Die Vorgabe geschieht entweder mit per PWM erzeugter Sollspannung durch den SAM7 (analog zum STK500 [http://www.avrfreaks.net/Tools/ToolFiles/115/STK500_Schematics.pdf]) oder durch ein digitales Potentiometer bzw. analogem Switch und Widerständen und Ähnlichen, wobei die PWM-Lösung die preiswertere Alternative darstellt.&lt;br /&gt;
&lt;br /&gt;
Indirekt heißt dies aber auch, dass mit einem Bus powered LA nicht zu rechnen ist...&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== VHDL LA Core ==&lt;br /&gt;
&lt;br /&gt;
Dieser ist in VHDL geschrieben und imo die Hauptarbeit. Bisher sind:&lt;br /&gt;
&lt;br /&gt;
* die Trigger komplett geschrieben und getestet (pattern/edge on Low, High und Don&#039;t Care und Condition length),&lt;br /&gt;
* die Probe ist registered wegen der Meta-Stabilität,&lt;br /&gt;
* die Speicherorganisiation des internen RAMs, &lt;br /&gt;
* das handling der Timestamps und &lt;br /&gt;
* eine FSM mit Registerset zur rudimentären Steuerung,&lt;br /&gt;
* ein arithmetischer Trigger existiert auch, ist aber nicht eingebunden (z.&amp;amp;nbsp;B. für Addressvergleiche als Trigger).&lt;br /&gt;
* Clk Management per DLL.&lt;br /&gt;
&lt;br /&gt;
Die Anbindung FPGA zum Mikrocontroller per SPI fehlt komplett (SPI Cores z.&amp;amp;nbsp;B. von Jörn sind im Forum aber vorhanden). &lt;br /&gt;
&lt;br /&gt;
Mit dem VHDL LA Core gehen die eigentlichen Probleme des LA los. Da ich (ope) als einziger LA-Projekt-Programmierer und VHDL-Neuling (bisher nur C/C++) mir das Coden auf die Fahnen geschrieben habe, dauert es entsprechend lange. Das ursprüngliche Ziel, den Core bis Ende 2005 fertig zu bekommen, ist an vielen kleinen Problemen und am Zeitaufwand gescheitert (eben ein Feierabend-Projekt). Viel Zeit nimmt das Schreiben der Testbenches in Anspruch. Weitere Zeit vergeht für die Fehlersuche im Source, aber auch als Bug-Hunter in XST (das übersteigt dann doch meine derzeitigen Fähigkeiten).&lt;br /&gt;
&lt;br /&gt;
Da der Speicher intern nur begrenzt ist, wurde ein Transitional Timing Analysis Mode realisiert d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert. Dummerweise sind 3 Samples beim Auslesen des Speichers am falschen Ende (oberste 3 Addressen), obwohl sie am Anfang sein sollten (unterste 3 Adressen). Irgendwann habe ich dann die Lust verloren, da auch keiner helfen konnte...&lt;br /&gt;
&lt;br /&gt;
== ARM Core ==&lt;br /&gt;
&lt;br /&gt;
Keine konkreten Überlegungen bisher?&lt;br /&gt;
&lt;br /&gt;
== PC Frontend ==&lt;br /&gt;
&lt;br /&gt;
Nichts passiert. Für C++ ist WxWindows, Qt und eben Fox-Toolkit interessant. Aber Fox Toolkit [http://www.fox-toolkit.org],&lt;br /&gt;
[http://wiki.wxwidgets.org/wiki.pl?WxWidgets_Compared_To_Other_Toolkits],&lt;br /&gt;
[http://lists.trolltech.com/qt-interest/2002-06/msg01202.html] ist imo die Alternative zu WxWindows/Qt und von mir (ope) favorisiert.&lt;br /&gt;
&lt;br /&gt;
WxWindows/WxWidgets hat Altlasten, die gehen bis Win 3.1 zurück, Qt&lt;br /&gt;
behagt mir die Geschichte mit den Moc Compiler nicht; auch wenn ich mit&lt;br /&gt;
Qt bereits (gute) Erfahrung habe, aber die neue Politik unter Windows&lt;br /&gt;
behagt mir nicht - dir wird der Compiler vorgeschrieben, aber man wird&lt;br /&gt;
mit dem mingw alleine gelassen. Von der Seite her gibt&#039;s für mich&lt;br /&gt;
keinen Grund unbedingt Qt nehmen zu müssen. FLTK und Gtk lasse ich mal&lt;br /&gt;
ganz außen vor.&lt;br /&gt;
&lt;br /&gt;
Auch sollen viele Dinge in Fox besser gelöst sein, allerdings ist diese&lt;br /&gt;
auch jünger, so dass wohl auch einige GUI-Klassen geschrieben werden&lt;br /&gt;
müssen. Mal sehen, ob sich Cairo&lt;br /&gt;
(http://cairographics.org/introduction) einbinden lässt, dann hätte man&lt;br /&gt;
gleich PDF Wave Plot Export prints und bessere Screen Graphic (kann aber&lt;br /&gt;
auch Overkill sein). Jedoch sind diese Aussagen eben ungeprüft.&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Hier muss Dirk schreiben :-)&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD-Löten mit 0,5 mm-Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Kommerziell: Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Kommerziell: Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.pctestinstruments.com/] Kommerziell: LogicPort (34 Kanäle)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang A: Die CPLD/AVR Lösung (veraltet) =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch herausstellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschließen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatcht und gemeinsam auf den nun 32 bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit liegt die Schreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man z.&amp;amp;nbsp;B. eine 16 bit Time-Stamp-Adresse (256k) mit einem 16 bit Pattern speichern, oder ein 24 bit Timestamps für 8 bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heißeste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischengespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup- und Hold-Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAMs. Dieser kann aber auch zum Lesen des SRAMs benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen.&lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.&amp;amp;nbsp;B. 512 KiB SRAMs benutzen kann ohne dass der µC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlos an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
µC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N-Teiler um den Sample-Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den µC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und µC und spart den Quarz am µC. Allerdings bietet sich auch ein eigener Quarz für den µC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50 - 64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch Umlöten und Wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per µC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsreichster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Frequenzen mit einem einfachen Quarz erzeugen kann. Dadurch wird der Frequenzteiler im CPLD nicht mehr benötigt und hat wieder einige Macrozellen frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefrequenz liegen zum einem in den verwendeten Bauelementen (&amp;gt; 100 MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das Optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500 mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150 mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320 mA&lt;br /&gt;
* ATmega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit MAX964 8 mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100 mA ziehen (in diese Kategorie wird wohl der LA u.U. fallen), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.&amp;amp;nbsp;B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genug Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
&lt;br /&gt;
=== AVR ===&lt;br /&gt;
Recht früh hat sich im Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATmega-Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40-poliger nötig. Es wird ein ATmega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
=== CPLD ===&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmware über den Computer updaten zu können.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.&amp;amp;nbsp;B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels µC beschrieben wird. &lt;br /&gt;
&lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45 kB für µC-Verhältnisse extrem groß ist und somit nur in einen ATmega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde, da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10 kB für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz-effizienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.&amp;amp;nbsp;B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG-Verbindung zum AVR-Port eingerichtet, falls das Problem irgendwann später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
== PCB ==&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Application Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Converter IC RS232/RS422 USB/Seriell Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | USB FIFO, parallel Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,45&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80&amp;amp;#8364; Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://web.icsi.com.tw/domino/packinfo.nsf/4E09C79E58017C3448256F320003A56F/$FILE/22_61LV25616.Pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ??&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=60329</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=60329"/>
		<updated>2011-09-09T10:30:36Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: /* Lastenheft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel gehört zum Projekt &#039;Logic Analyzer&#039;, das von einigen Nutzern dieser Seite gemeinsam entwickelt wird. Eine Übersicht über verschiedene Projekte, die die Entwicklung eines Logikanalysators zum Ziel haben, gibt es unter [[Logic Analyzer Project]].&lt;br /&gt;
&lt;br /&gt;
Ein Logikanalysator dient zur Analyse von digitalen, logischen Signalen an zumeist mehreren Datenleitungen (Bussysteme), über die einzelne Bauteile/Komponenten kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Ein [[Oszilloskop]] hingegen dient überwiegend zur Analyse von analogen Signalverläufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lastenheft =&lt;br /&gt;
&lt;br /&gt;
Hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: |||&lt;br /&gt;
* 16 Kanäle: ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||| ||||&lt;br /&gt;
* Modular (erweiterbar X mal 8/16 Kanäle): |||||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : ||&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : |||||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: ||||| |||| ||||&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: ||||| |&lt;br /&gt;
*..Konfigurierbar ||||&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : ||||| ||||| |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
* &amp;gt;16 ||||&lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; u.U. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: ||&lt;br /&gt;
* Seriell asyncron (RS232).: ||||| ||||| |&lt;br /&gt;
* USB......................: ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Parallelport.............: ||||&lt;br /&gt;
* Ethernet.................: |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Linux   .: ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Ubuntu  .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Direktausgabe des L.A.&#039;&#039;&#039;&lt;br /&gt;
* LCD     .: |&lt;br /&gt;
* TFT     .: |&lt;br /&gt;
* VGA     .: ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Data Analyzer&#039;&#039;&#039;&lt;br /&gt;
* A-Serial.: ||&lt;br /&gt;
* SPI     .: |&lt;br /&gt;
* CAN     .: |&lt;br /&gt;
* ERC     .: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wenn man über WxWidgets/Fox-Toolkit/Qt programmiert, hätte man Win, Linux und MAC erschlagen. COM ist kein Problem, bei USB muss man sehen. Da ist noch nicht viel realisiert. Einen einfachen Treiber sollte man aber hinbekommen können, zumal die Hardware und das Protokoll bekannt sind.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(-- [[Benutzer:Ope|Ope]] 20:51, 10. M?2006 (CET))&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jedoch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die großen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezüglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Stand z.Zt.: Es ist nicht tot, aber in einem Dämmerzustand, siehe dazu [#VHDL_LA_Core].&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.&amp;amp;nbsp;B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genannten Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.&amp;amp;nbsp;B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrocontroller aus, der seine Ports pollt um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) mit Mikrocontroller/AVR dar. Die CPLD z.&amp;amp;nbsp;B. von Xilinx können mit über 100 MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einen externen SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, das Speicherinterface und natürlich das eigentliche sampeln der Eingänge verantwortlich. Der Mikrocontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampleten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3,3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLDs der XC95000XL Serie mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
Allerdings baut die Lösung mit dem CPLD und externen SRAM sowie Mikrocontroller entsprechend groß und es sollte ja kein Tischgerät werden (CPLD + AVR + SRAM +&lt;br /&gt;
FT245 + EEPROM + Spannungsregler kämen ungefähr auf Europa-Format). Als Abmessungen wurde die Größe einer Zigarettenschachtel als Ziel für gut befunden. Neben den Abmessungen gibt es auch beim Routen des PCB zwischen CPLD und SRAM keine befriedigende Lösung, insbesondere wenn mehrere SRAMs für&#039;s Interleave eingesetzt oder gar Transitional Timing Analysis Mode implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Entsprechend dieser Erkenntnis reicher, ist ein FPGA als eine Komponente des LA in&#039;s Gespräch gekommen. Diese haben genug Platz für Logik und internen SRAM, konkret die Spartan-2 Serie. Diese gibt es in einem lötbaren TQFP Gehäuse - kommt also ohne BGA aus - zu moderaten Preisen.&lt;br /&gt;
&lt;br /&gt;
Da künftig die RS232 Schnittstellen wegfallen und nur noch USB in Hardware unterstützt wird, wird der LA ein USB Interface haben. Dies deckt sich auch mit der Umfrage oben und ist unabhängig von der CPLD+AVR- und FPGA-Lösung.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird im Anhang auf die CPLD-Lösung eingegangen, einfach um die Gedankengänge festzuhalten - auch wenn es an sich überholt ist.&lt;br /&gt;
&lt;br /&gt;
= Hardware Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.&amp;amp;nbsp;B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Threshold) variabel sind und somit auch am flexibelsten für die verschiedenen Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Komparator Lösung ===&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL-Eingänge und da der Eingangsspannungsbereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Threshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom µC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per µC mit anschließendem Tiefpass mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Alles in allem eine komplexe Angelegenheit, weshalb sie in der ersten Version des LA fallen gelassen wurde.&lt;br /&gt;
&lt;br /&gt;
=== Digitale Lösung ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Lösung besteht in einem Levelshifter wie dem 74LVC4245 [http://www.standardics.philips.com/products/levelshifters/alvc164245a/]. Er wird mit 2 Betriebsspannungen versorgt - die FPGA-Seite mit 3,3 V und die Eingangsseite mit variabler Spannung bzw. 3,3 V oder 5 V. Diese Spannung kann per PWM durch den Mikrocontroller erzeugt werden und ermöglicht so, variable Logikpegel am DUT abzugreifen.&lt;br /&gt;
&lt;br /&gt;
=== Sonstige Betrachtungen ===&lt;br /&gt;
&lt;br /&gt;
Weiterhin besteht Einigkeit in der notwendigen Schutzschaltung, damit die Eingangsspannung den max. Input Voltage Range (je nach Typ) bzw. Strom nicht überschreiten kann:&lt;br /&gt;
* Dioden-Array (bringt Speed-Probleme aufgrund der Sperrschichtkapazität, sofern man keine teuren Spezialdioden verwendet) &lt;br /&gt;
* Serienwiderstand&lt;br /&gt;
&lt;br /&gt;
== FPGA ==&lt;br /&gt;
&lt;br /&gt;
Momentan ist der XC2S100 bzw. XC2S200 (prefered)&lt;br /&gt;
(http://direct.xilinx.com/bvdocs/publications/ds001.pdf)&lt;br /&gt;
&lt;br /&gt;
Das externe SRAM entfällt durch den internen des FPGA, da die größeren FPGAs ausreichend interne Speichermöglichkeit haben und das Platinenlayout durch einen&lt;br /&gt;
externen SRAM um ein vielfaches komplizierter werden würde. &lt;br /&gt;
Für den FPGA haben wir derzeit das PQ208-Gehäuse im Auge, dort ist der&lt;br /&gt;
FPGA etwa 2/3 so teuer wie im TQ144 und kann noch nach oben erweitert&lt;br /&gt;
werden - für die, die mehr Speicher brauchen.&lt;br /&gt;
&lt;br /&gt;
Der interne Speicher ist 40k bzw 56k, wobei nur&lt;br /&gt;
Sample-Änderungen abgespeichert werden um den Block-RAM (echter interner&lt;br /&gt;
RAM) besser ausnützen zu können. Yep, er ist veraltet etc., aber&lt;br /&gt;
verfügbar und im TQ144 oder PQ208 (prefered, da derzeitig bestellbar)&lt;br /&gt;
verhältnissmäßig preiswert zu bekommen. Siehe auch&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-204570.html#new.&lt;br /&gt;
&lt;br /&gt;
Der FPGA LA Core wird in VHDL geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Interface zwischen LA und PC == &lt;br /&gt;
&lt;br /&gt;
In der FPGA-Lösung bietet sich der FTDI FT2232C [http://www.ftdichip.com/Documents/DataSheets/ds2232c_14.pdf] (Dual USB UART/FIFO) an, wie er auch im UXIBO [http://www.uxibo.de/] Verwendung findet. Damit kann der FPGA per USB über die erste Schnittstelle im Bit-Bang-Mode geflasht werden und über die zweite mit dem PC kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Die erste Begeisterung verschwand, nachdem die Preise bekannt waren. Daher wurde  ein AT91SAM7S321/64 mit internen USB gewählt, welcher preiswerter ist und zudem die Mikrocontroller-Fähigkeiten in den LA bringt. Der AT91SAM7S wird per USB (nur Buchse und Widerstände erforderlich) über SPI an den FPGA angebunden.&lt;br /&gt;
&lt;br /&gt;
Zudem hat der AT91SAM7 den Vorteil, dass er über USB programmierbar ist via SAM Boot Assistant (SAM-BA) (User Guide [http://www.atmel.com/dyn/resources/prod_documents/doc6132.pdf]).&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Der FPGA benötigt 2,5 V für den Core selbst und eine weitere Spannung für die I/O. Hier bietet sich 3,3 V an, da dann der SAM7 und der Levelshifter 74LVC4245 damit betrieben werden können. TI bietet hierzu den TPS70358 [http://focus.ti.com/lit/ds/symlink/tps70358.pdf] (2.5/2A + 3.3V/1A) an. Dieser besitzt ein Powerpad unter dem Chip, welches die meisten wohl kaum anlöten können. Aber dafür ist die Strombelastbarkeit total überdimensioniert, d.h. etwas Wärmeleitpaste sollte das Problem (hoffentlich) lösen.&lt;br /&gt;
&lt;br /&gt;
Für die variable Spannung auf der Probenseite bzw. 74LVC4245 scheint der TPS62222 [http://focus.ti.com/docs/prod/folders/print/tps62220.html] eine Lösung zu bieten. Er kann eine einstellbare Spannung erzeugen. Die Vorgabe geschieht entweder mit per PWM erzeugter Sollspannung durch den SAM7 (analog zum STK500 [http://www.avrfreaks.net/Tools/ToolFiles/115/STK500_Schematics.pdf]) oder durch ein digitales Potentiometer bzw. analogem Switch und Widerständen und Ähnlichen, wobei die PWM-Lösung die preiswertere Alternative darstellt.&lt;br /&gt;
&lt;br /&gt;
Indirekt heißt dies aber auch, dass mit einem Bus powered LA nicht zu rechnen ist...&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== VHDL LA Core ==&lt;br /&gt;
&lt;br /&gt;
Dieser ist in VHDL geschrieben und imo die Hauptarbeit. Bisher sind:&lt;br /&gt;
&lt;br /&gt;
* die Trigger komplett geschrieben und getestet (pattern/edge on Low, High und Don&#039;t Care und Condition length),&lt;br /&gt;
* die Probe ist registered wegen der Meta-Stabilität,&lt;br /&gt;
* die Speicherorganisiation des internen RAMs, &lt;br /&gt;
* das handling der Timestamps und &lt;br /&gt;
* eine FSM mit Registerset zur rudimentären Steuerung,&lt;br /&gt;
* ein arithmetischer Trigger existiert auch, ist aber nicht eingebunden (z.&amp;amp;nbsp;B. für Addressvergleiche als Trigger).&lt;br /&gt;
* Clk Management per DLL.&lt;br /&gt;
&lt;br /&gt;
Die Anbindung FPGA zum Mikrocontroller per SPI fehlt komplett (SPI Cores z.&amp;amp;nbsp;B. von Jörn sind im Forum aber vorhanden). &lt;br /&gt;
&lt;br /&gt;
Mit dem VHDL LA Core gehen die eigentlichen Probleme des LA los. Da ich (ope) als einziger LA-Projekt-Programmierer und VHDL-Neuling (bisher nur C/C++) mir das Coden auf die Fahnen geschrieben habe, dauert es entsprechend lange. Das ursprüngliche Ziel, den Core bis Ende 2005 fertig zu bekommen, ist an vielen kleinen Problemen und am Zeitaufwand gescheitert (eben ein Feierabend-Projekt). Viel Zeit nimmt das Schreiben der Testbenches in Anspruch. Weitere Zeit vergeht für die Fehlersuche im Source, aber auch als Bug-Hunter in XST (das übersteigt dann doch meine derzeitigen Fähigkeiten).&lt;br /&gt;
&lt;br /&gt;
Da der Speicher intern nur begrenzt ist, wurde ein Transitional Timing Analysis Mode realisiert d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert. Dummerweise sind 3 Samples beim Auslesen des Speichers am falschen Ende (oberste 3 Addressen), obwohl sie am Anfang sein sollten (unterste 3 Adressen). Irgendwann habe ich dann die Lust verloren, da auch keiner helfen konnte...&lt;br /&gt;
&lt;br /&gt;
== ARM Core ==&lt;br /&gt;
&lt;br /&gt;
Keine konkreten Überlegungen bisher?&lt;br /&gt;
&lt;br /&gt;
== PC Frontend ==&lt;br /&gt;
&lt;br /&gt;
Nichts passiert. Für C++ ist WxWindows, Qt und eben Fox-Toolkit interessant. Aber Fox Toolkit [http://www.fox-toolkit.org],&lt;br /&gt;
[http://wiki.wxwidgets.org/wiki.pl?WxWidgets_Compared_To_Other_Toolkits],&lt;br /&gt;
[http://lists.trolltech.com/qt-interest/2002-06/msg01202.html] ist imo die Alternative zu WxWindows/Qt und von mir (ope) favorisiert.&lt;br /&gt;
&lt;br /&gt;
WxWindows/WxWidgets hat Altlasten, die gehen bis Win 3.1 zurück, Qt&lt;br /&gt;
behagt mir die Geschichte mit den Moc Compiler nicht; auch wenn ich mit&lt;br /&gt;
Qt bereits (gute) Erfahrung habe, aber die neue Politik unter Windows&lt;br /&gt;
behagt mir nicht - dir wird der Compiler vorgeschrieben, aber man wird&lt;br /&gt;
mit dem mingw alleine gelassen. Von der Seite her gibt&#039;s für mich&lt;br /&gt;
keinen Grund unbedingt Qt nehmen zu müssen. FLTK und Gtk lasse ich mal&lt;br /&gt;
ganz außen vor.&lt;br /&gt;
&lt;br /&gt;
Auch sollen viele Dinge in Fox besser gelöst sein, allerdings ist diese&lt;br /&gt;
auch jünger, so dass wohl auch einige GUI-Klassen geschrieben werden&lt;br /&gt;
müssen. Mal sehen, ob sich Cairo&lt;br /&gt;
(http://cairographics.org/introduction) einbinden lässt, dann hätte man&lt;br /&gt;
gleich PDF Wave Plot Export prints und bessere Screen Graphic (kann aber&lt;br /&gt;
auch Overkill sein). Jedoch sind diese Aussagen eben ungeprüft.&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Hier muss Dirk schreiben :-)&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD-Löten mit 0,5 mm-Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Kommerziell: Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Kommerziell: Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.pctestinstruments.com/] Kommerziell: LogicPort (34 Kanäle)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Anhang A: Die CPLD/AVR Lösung (veraltet) =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch herausstellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschließen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatcht und gemeinsam auf den nun 32 bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit liegt die Schreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man z.&amp;amp;nbsp;B. eine 16 bit Time-Stamp-Adresse (256k) mit einem 16 bit Pattern speichern, oder ein 24 bit Timestamps für 8 bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heißeste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischengespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup- und Hold-Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAMs. Dieser kann aber auch zum Lesen des SRAMs benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen.&lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.&amp;amp;nbsp;B. 512 KiB SRAMs benutzen kann ohne dass der µC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlos an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
µC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N-Teiler um den Sample-Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den µC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und µC und spart den Quarz am µC. Allerdings bietet sich auch ein eigener Quarz für den µC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50 - 64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch Umlöten und Wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per µC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsreichster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Frequenzen mit einem einfachen Quarz erzeugen kann. Dadurch wird der Frequenzteiler im CPLD nicht mehr benötigt und hat wieder einige Macrozellen frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefrequenz liegen zum einem in den verwendeten Bauelementen (&amp;gt; 100 MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das Optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500 mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150 mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320 mA&lt;br /&gt;
* ATmega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit MAX964 8 mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100 mA ziehen (in diese Kategorie wird wohl der LA u.U. fallen), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.&amp;amp;nbsp;B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genug Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
&lt;br /&gt;
=== AVR ===&lt;br /&gt;
Recht früh hat sich im Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATmega-Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40-poliger nötig. Es wird ein ATmega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
=== CPLD ===&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmware über den Computer updaten zu können.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.&amp;amp;nbsp;B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels µC beschrieben wird. &lt;br /&gt;
&lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45 kB für µC-Verhältnisse extrem groß ist und somit nur in einen ATmega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde, da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10 kB für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz-effizienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.&amp;amp;nbsp;B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG-Verbindung zum AVR-Port eingerichtet, falls das Problem irgendwann später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
== PCB ==&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Application Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Converter IC RS232/RS422 USB/Seriell Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | USB FIFO, parallel Interface&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.Reichelt.de Reichelt.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6,45&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80&amp;amp;#8364; Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://web.icsi.com.tw/domino/packinfo.nsf/4E09C79E58017C3448256F320003A56F/$FILE/22_61LV25616.Pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ??&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75&amp;amp;#8364;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&amp;amp;#8364;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Oszilloskope und Analyzer]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorverst%C3%A4rker_/_Kopfh%C3%B6rerverst%C3%A4rker&amp;diff=60306</id>
		<title>Vorverstärker / Kopfhörerverstärker</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorverst%C3%A4rker_/_Kopfh%C3%B6rerverst%C3%A4rker&amp;diff=60306"/>
		<updated>2011-09-08T09:41:24Z</updated>

		<summary type="html">&lt;p&gt;Elektromeister: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von: Ghostrider1911&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Beispiel.jpg|right]]&lt;br /&gt;
Dies ist ein kleines Tutorial, in dem es um einen Vorverstärker geht, der mittels eines OP-Amps aufgebaut ist. Solche Vorverstärker kann man verwenden, um:&lt;br /&gt;
&lt;br /&gt;
* Einen MP3-Player an eine Stereoanlage anzuschließen (Falls das Ausganssignal des MP3 Players zu schwach ist)&lt;br /&gt;
* Einen größeren Kopfhörer (siehe Studiokopfhörer) an einen MP3-Player zu betreiben&lt;br /&gt;
* Einen hochohmigen Ausgang mit einen niederohmigen Eingang zu verbinden (z.B. Ein [[LFE]]-Ausgang an einen normalen Verstärker)&lt;br /&gt;
&lt;br /&gt;
Schaltplan: [http://yfrog.com/59vorverstrkerj]&lt;br /&gt;
&lt;br /&gt;
Spezifikationen:&lt;br /&gt;
* Verstärkung: 3,3-fach, jederzeit mittels R3 veränderbar gemäß R3 : R1 = Verstärkung&lt;br /&gt;
&lt;br /&gt;
Folgendes ist zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Wenn man ein Stereo-Signal verstärken möchte, muss man den oberen Teil der Schaltung 2x aufbauen. (Lässt sich aber meistens mit einem OP-Amp machen)&lt;br /&gt;
* Man sollte den OP-Amp unbedingt auf eine passende IC-Fassung stecken und diese dann verlöten, so dass man den OP-Amp leicht austauschen kann und nicht immer löten muss.&lt;br /&gt;
* Möglichst Masse zu einem Punkt zusammenführen.&lt;br /&gt;
* Es kann ein kleiner Ringkerntrafo oder ein normaler Trafo mit 2 getrennten Spannungen verwendet werden.&lt;br /&gt;
* Die Kabel sollten verdrillt werden um Störeinflüsse zu minimieren.&lt;br /&gt;
* Es können auch andere Spannungsregler und andere OP-Amps verwendet werden, jedoch sollten diese beiden Komponenten aufeinander abgestimmt werden. Das heißt: Der Operationsverstärker sollte die Spannung vertragen, die die Spannungsregler liefern, und man sollte auch nicht ans Limit der Op-Amps gehen.  Das müsst ihr den Datenblättern entnehmen.&lt;br /&gt;
* C3,C5 und C4 müssen bipolare Elektrolytkondensatoren oder Folienkondensatoren sein. (Erfahrungsgemäß funktionieren generell auch normale, aber es ist besser, die oben genannten zu benutzen)&lt;br /&gt;
* C12, C13, C8, C10, C9 und C11 sollten Folienkondensatoren sein. Wenn man keine hat, lässt man sie besser weg, anstatt normale einzusetzen.&lt;br /&gt;
* Die Schaltung braucht recht wenig Strom, deswegen kann auch ein sehr kleiner Trafo und Gleichrichter verwendet werden.&lt;br /&gt;
* Die Spannungsregler brauchen keine Kühlkörper&lt;br /&gt;
* C8, C9, C10 und C11 sollten jeweils ziemlich nah beim Spannungsregler sein, um zu verhindern, dass der Regler schwingt.&lt;br /&gt;
* Als Operationsverstärker können Standarttypen verwendet werden, z.B. der NE5532 oder der LM358N und noch viele andere…&lt;br /&gt;
* Folgende Bauteile kann man zu Versuchszwecken auch weglassen: C5, C12, C13, C3, C4, C8, C10, C11, C9&lt;br /&gt;
* Folgende Bauteile kann man auch umdimensionieren: C1, C2, C6, C7&lt;br /&gt;
* Die stromführenden Leitungen im Gehäuse (falls die Schaltung in ein solches eingebaut wird) sollten so kurz wie möglich und verdrillt sein.&lt;br /&gt;
* Signalführende Leitungen im Gehäuse sollten nicht mit stromführenden Leitungen parallel verlaufen.&lt;br /&gt;
* Der Trafo sollte möglichst weit entfernt von der Schaltung sein.&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, euch hat die Schaltung weitergeholfen; falls ja, könnt Ihr mir gerne einen Kommentar hinterlassen. Falls Ihr noch Fragen habt, einfach stellen, es gibt (fast) keine dummen Fragen!&lt;br /&gt;
&lt;br /&gt;
Wer einen Fehler findet, möge mir diesen mitteilen, ich freue mich auch über hilfreiche Kritik etc.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Audio]]&lt;/div&gt;</summary>
		<author><name>Elektromeister</name></author>
	</entry>
</feed>