<?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=Haku</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=Haku"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Haku"/>
	<updated>2026-04-10T21:41:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Haku&amp;diff=80558</id>
		<title>Benutzer:Haku</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Haku&amp;diff=80558"/>
		<updated>2014-01-03T06:57:05Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 5px solid red; padding: 10px; text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;Dieser Benutzer ist hier nicht mehr aktiv.&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist schade und ich habe mich lange gegen den Eindruck gewehrt, aber das Diskussionsniveau konvergiert in jüngster Zeit stramm hinfort. &lt;br /&gt;
Ich weiß besseres mit meiner Zeit anzufangen, als mich bei jeder sich bietenden Gelegenheit wieder von wie von uneinsichtigen Kindergartenkindern belehren und anpöbeln zu lassen, die nicht in der Lage sind, ein Datenblatt oder eine Anleitung zu lesen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ja, aber...&#039;&#039;&lt;br /&gt;
Nein. --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 07:57, 3. Jan. 2014 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Übrigens: &lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/99690&lt;br /&gt;
* Ich bin nicht in der Lage, mitzudenken.&lt;br /&gt;
* Ich behalte mein Supergesülze für mich.&lt;br /&gt;
* Ich kanns nicht lassen. (Pater Brown und Agathe übrigens auch nicht.)&lt;br /&gt;
* Ich bin ein Erbsenzähler.&lt;br /&gt;
* Ich ziehe alles sinnlos runter.&lt;br /&gt;
* Ich lenke von der eigentlichen Frage ab.&lt;br /&gt;
* Ich kann nicht lesen.&lt;br /&gt;
* Bitte sehr für die Ratschläge.&lt;br /&gt;
* Ich habs kapiert. Bitteschön, man hilft, wo man kann.&lt;br /&gt;
* Ich bin ein arroganter Schnösel.&lt;br /&gt;
* Bei mir tickt es nicht richtig.&lt;br /&gt;
* Ich stelle ziemlich unfreundliche Gegenfragen.&lt;br /&gt;
* Ich bin hier nicht der Nette.&lt;br /&gt;
* Ich habe garnix verstanden.&lt;br /&gt;
* Ich brauche eine Beschäftigung.&lt;br /&gt;
* Ich habe nicht den Hauch einer Ahnung.&lt;br /&gt;
* Bittesehr für den Link.&lt;br /&gt;
* Alles ist etwas zu viel für mich heute.&lt;br /&gt;
* Ich habe aber auch gar keine Ahnung, was ich hier deutlich beweise.&lt;br /&gt;
* Ich war heute noch nicht auf dem Klo.&lt;br /&gt;
* Ich mache Jupp die Rolle des Forentrolls streitig.&lt;br /&gt;
* Ich verweise auf nutzlose Links.&lt;br /&gt;
* Ich bin ein Übergott und haue jeden.&lt;br /&gt;
* Ich bin ein Superstar.&lt;br /&gt;
* Ich bin Mister Allwissend und belehre schwachsinnig alle von oben herab.&lt;br /&gt;
* SiMa ist dumm und klein.&lt;br /&gt;
* Ich moser andere Leute an, wenn ich mal was weiß.&lt;br /&gt;
* Ich bin einfach nur still.&lt;br /&gt;
* Ich pinsele Superregeln.&lt;br /&gt;
* Ich habe garnichts gelüftet, alles was ich mache, ist falsch.&lt;br /&gt;
* Ich stelle mich immer noch als allwissend dar. Und alles ist ein Kinderspiel, weil ihr alle zu doof und zu faul seit.&lt;br /&gt;
* Ich beleidige ständig alles und jeden.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/101931&lt;br /&gt;
* Ich tue immer ganz erhaben.&lt;br /&gt;
* Ich halt die Klappe.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/102386#892463&lt;br /&gt;
* Ich mach mal.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/104088#910584&lt;br /&gt;
* Ich bin ein möchtegern-Hilfssheriff.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/113723?reply_to=1025066#1025066&lt;br /&gt;
* Ich bin eine Katastrophe für mikrocontroller.net.&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Kategorie:L%C3%B6schkandidaten&amp;diff=80334</id>
		<title>Kategorie:Löschkandidaten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Kategorie:L%C3%B6schkandidaten&amp;diff=80334"/>
		<updated>2013-12-31T08:43:34Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Löschantrag */ Vorlage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Löschkandidaten =&lt;br /&gt;
Diese Kategorie enthält Seiten, die zur Löschung vorgeschlagen sind. Löschen einer Seite ist etwas anderes, als den Inhalt einer Seite zu entfernen und die dann leere Seite als neue Version zu speichern! Seiten können nur von Administratoren gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Löschantrag ==&lt;br /&gt;
Um eine Seite zur Löschung vorzuschlagen, lege sie in dieser Kategorie ab, indem du der Seite einen Verweis auf diese Kategorie hinzufügst:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{Vorlage:Löschen|Deine Begründung...}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Löschen von Benutzerseiten ==&lt;br /&gt;
Seiten aus den Benutzernamensräumen (&#039;&#039;Benutzer:Mustermann/Musterseite&#039;&#039;) sollten nur vom Eigentümer des Namensraumes zur Löschung vorgeschlagen werden. Falls notwendig, sollte zunächst der Kontakt zu dem Benutzer gesucht werden (etwa über dessen Diskussionsseite, &#039;&#039;Benutzer Diskussion:Mustermann&#039;&#039;), um die Löschung zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Löschdiskussion ==&lt;br /&gt;
Die Löschung von Artikeln sollte diskutiert werden. Dazu dient die [[Kategorie Diskussion:Löschkandidaten|Diskussionsseite]]. Vielleicht kann ein Artikel durch zum Beispiel durch inhaltliche Überarbeitung gerettet werden. Bitte lege zu jeder Löschdiskussion eine neue Überschrift auf der Diskussionsseite an und signiere deine Beiträge mit &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80333</id>
		<title>Vorlage:Löschen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80333"/>
		<updated>2013-12-31T08:43:06Z</updated>

		<summary type="html">&lt;p&gt;Haku: Includeonly wg. Kategorie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font: 32pt bold;&amp;quot;&amp;gt;Löschkandidat&amp;lt;/div&amp;gt;&lt;br /&gt;
Dieser Artikel wurde zur [[Kategorie:Löschkandidaten|Löschung]] vorgeschlagen.&lt;br /&gt;
Bitte beteilige dich an der [[Kategorie Diskussion:Löschkandidaten/{{FULLPAGENAME}}|Löschdiskussion]]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid gray; padding: 3px; margin: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;em&amp;gt;Begründung:&amp;lt;/em&amp;gt; {{{1|Wunsch des Benutzers}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Kategorie:Löschkandidaten]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80332</id>
		<title>Vorlage:Löschen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80332"/>
		<updated>2013-12-31T08:41:54Z</updated>

		<summary type="html">&lt;p&gt;Haku: Kategorie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font: 32pt bold;&amp;quot;&amp;gt;Löschkandidat&amp;lt;/div&amp;gt;&lt;br /&gt;
Dieser Artikel wurde zur [[Kategorie:Löschkandidaten|Löschung]] vorgeschlagen.&lt;br /&gt;
Bitte beteilige dich an der [[Kategorie Diskussion:Löschkandidaten/{{FULLPAGENAME}}|Löschdiskussion]]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid gray; padding: 3px; margin: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;em&amp;gt;Begründung:&amp;lt;/em&amp;gt; {{{1|Wunsch des Benutzers}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Löschkandidaten]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80331</id>
		<title>Vorlage:Löschen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80331"/>
		<updated>2013-12-31T08:41:25Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font: 32pt bold;&amp;quot;&amp;gt;Löschkandidat&amp;lt;/div&amp;gt;&lt;br /&gt;
Dieser Artikel wurde zur [[Kategorie:Löschkandidaten|Löschung]] vorgeschlagen.&lt;br /&gt;
Bitte beteilige dich an der [[Kategorie Diskussion:Löschkandidaten/{{FULLPAGENAME}}|Löschdiskussion]]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid gray; padding: 3px; margin: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;em&amp;gt;Begründung:&amp;lt;/em&amp;gt; {{{1|Wunsch des Benutzers}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80329</id>
		<title>Vorlage:Löschen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80329"/>
		<updated>2013-12-31T08:35:04Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Löschkandidat&amp;lt;/h1&amp;gt;&lt;br /&gt;
Dieser Artikel wurde zur [[Kategorie:Löschkandidaten|Löschung]] vorgeschlagen.&lt;br /&gt;
Bitte beteilige dich an der [[Kategorie Diskussion:Löschkandidaten/{{FULLPAGENAME}}|Löschdiskussion]]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid gray; padding: 3px; margin: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;em&amp;gt;Begründung:&amp;lt;/em&amp;gt; {{{1|Wunsch des Benutzers}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80328</id>
		<title>Vorlage:Löschen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorlage:L%C3%B6schen&amp;diff=80328"/>
		<updated>2013-12-31T08:32:52Z</updated>

		<summary type="html">&lt;p&gt;Haku: Die Seite wurde neu angelegt: „&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt; &amp;lt;h1&amp;gt;Löschkandidat&amp;lt;/h1&amp;gt; Dieser Artikel wurde zur Löschung vorgeschlagen. Bi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 3px dashed red; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Löschkandidat&amp;lt;/h1&amp;gt;&lt;br /&gt;
Dieser Artikel wurde zur [[Kategorie:Löschkandidaten|Löschung]] vorgeschlagen.&lt;br /&gt;
Bitte beteilige dich an der [[Kategorie Diskussion:Löschkandidaten/{{FULLPAGENAME}}|Löschdiskussion]]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid gray; padding: 3px; margin: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;em&amp;gt;Begründung:&amp;lt;/em&amp;gt; {{1}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:STM32_f%C3%BCr_Einsteiger&amp;diff=80327</id>
		<title>Diskussion:STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:STM32_f%C3%BCr_Einsteiger&amp;diff=80327"/>
		<updated>2013-12-31T08:15:27Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Speicher... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Speicher... =&lt;br /&gt;
RAM und I/O liegen bei den AVR im gleichen Adressbereich. --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 17:45, 30. Dez. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
:Das ist wohl richtig. Sogar der Registersatz (32 Register à 8 Bit) liegt dort. --[[Benutzer:M-w|M-w]] ([[Benutzer Diskussion:M-w|Diskussion]]) 23:20, 30. Dez. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
= Programm/Arbeitsspeicher =&lt;br /&gt;
Man sollte auch fairerweise unterscheiden zwischen 8Bit und größeren. Wenn man beim PIC z.B. hinschreibt, dass er 2MB Programmspeicher hat, dann sollte man erwähnen, dass es dann kein 8-Bit-PIC mehr ist. Denn die AVR32 können auch mehr als 256k... --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 09:15, 31. Dez. 2013 (CET)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Kategorie:L%C3%B6schkandidaten&amp;diff=80293</id>
		<title>Kategorie:Löschkandidaten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Kategorie:L%C3%B6schkandidaten&amp;diff=80293"/>
		<updated>2013-12-30T19:03:07Z</updated>

		<summary type="html">&lt;p&gt;Haku: Löschverfahren wie in anderen Wikis üblich&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Löschkandidaten =&lt;br /&gt;
Diese Kategorie enthält Seiten, die zur Löschung vorgeschlagen sind. Löschen einer Seite ist etwas anderes, als den Inhalt einer Seite zu entfernen und die dann leere Seite als neue Version zu speichern! Seiten können nur von Administratoren gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Löschantrag ==&lt;br /&gt;
Um eine Seite zur Löschung vorzuschlagen, lege sie in dieser Kategorie ab, indem du der Seite einen Verweis auf diese Kategorie hinzufügst:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:Löschkandidaten]]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Löschen von Benutzerseiten ==&lt;br /&gt;
Seiten aus den Benutzernamensräumen (&#039;&#039;Benutzer:Mustermann/Musterseite&#039;&#039;) sollten nur vom Eigentümer des Namensraumes zur Löschung vorgeschlagen werden. Falls notwendig, sollte zunächst der Kontakt zu dem Benutzer gesucht werden (etwa über dessen Diskussionsseite, &#039;&#039;Benutzer Diskussion:Mustermann&#039;&#039;), um die Löschung zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Löschdiskussion ==&lt;br /&gt;
Die Löschung von Artikeln sollte diskutiert werden. Dazu dient die [[Kategorie Diskussion:Löschkandidaten|Diskussionsseite]]. Vielleicht kann ein Artikel durch zum Beispiel durch inhaltliche Überarbeitung gerettet werden. Bitte lege zu jeder Löschdiskussion eine neue Überschrift auf der Diskussionsseite an und signiere deine Beiträge mit &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80271</id>
		<title>STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80271"/>
		<updated>2013-12-30T16:48:29Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Eigene Fähigkeiten und Wünsche */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Immer wiederkehrend hier im Forum &amp;quot;Mit welchem Mikrocontroller anfangen?&amp;quot;. Es gibt eine große Auswahl und eben so viele Empfehlungen. In diesem Artikel soll zu erst geholfen werden ob ein STM32-Prozessor mit Cortex-M3/M4 Kern überhaupt der Richtige für den Start ist.&lt;br /&gt;
Nicht für jeden ist der STM32 zu empfehlen, denn die Anforderungen und Wünsche die man realisieren möchte, sowie die eigenen Fähigkeiten sind verschieden.&lt;br /&gt;
&lt;br /&gt;
Es werden meist die Prozessoren AVR, PIC, Arduino, MSP430 und STM32 empfohlen. Seltener auch 8051, LPC und M16C. Alle haben Vorzüge und ebenso auch Nachteile.&lt;br /&gt;
&lt;br /&gt;
= Eigene Fähigkeiten und Wünsche =&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel geht davon aus, dass bereits Elektronik Kenntnisse vorhanden sind. Wenn nicht dann sollte man erst einmal den Artikel &amp;quot;[[Absolute Beginner]]&amp;quot; durcharbeiten, sowie die anderen Artikel aus der Kategorie &amp;quot;[http://www.mikrocontroller.net/articles/Kategorie:Grundlagen Grundlagen]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal die Randbedingungen, mit der man sich selbst zu erst einmal einschätzen sollte:&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Fähigkeit || Empfehlung [[STM32]] || Empfehlung [[AVR]] || Empfehlung PIC || Empfehlung [[MSP430]] || Empfehlung Arduino&lt;br /&gt;
|-&lt;br /&gt;
| Neueinsteiger, kaum Elektronikkenntnisse, noch nie programmiert || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O [http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht] [http://www.avr-asm-tutorial.net/avr_de/] || align=&amp;quot;center&amp;quot;|O [http://www.sprut.de/] || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist SD-Card oder Grafik-Display || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2680&amp;amp;dDocName=en537999] [http://www.microchip.com/pagehandler/en-us/technology/graphics/] || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist TCP/IP Netzwerk oder Kamera|| align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2505&amp;amp;param=en535724] || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O&lt;br /&gt;
|-&lt;br /&gt;
| Möchte die Erkenntnisse beruflich nutzen|| align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Strom sparende Anwendungen|| align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x [http://www.atmel.com/technologies/lowpower/default.aspx] || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/pagehandler/en-us/technology/xlp/] || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Experimentieren mit Multithreading, RTOS, Schedulern || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O [http://www.freertos.org/a00098.html] [http://www.femtoos.org/] || align=&amp;quot;center&amp;quot;|O [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en531543&amp;amp;redirects=rtos] || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Große, komplex strukturierte Programme || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|bedingt, z.B. XMega || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Sehr viel PWM mit komplexem Timing || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|bedingt, AT90Spwm || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Deutschsprachige Community || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|}&lt;br /&gt;
* x = ja&lt;br /&gt;
* O = Teilweise, Einschränkungen&lt;br /&gt;
* - = nicht empfohlen&lt;br /&gt;
* ? = Bitte ergänzen&lt;br /&gt;
&lt;br /&gt;
Nur um nicht zu verwirren, auch wenn Teile &amp;quot;nicht empfohlen&amp;quot; sind, heißt dass nicht dass es mit dem Prozessor nicht geht, vielmehr dass es mehr Aufwand ist das zu realisieren oder mehr Einschränkungen hat.&lt;br /&gt;
&lt;br /&gt;
= Unwichtige Randbedingungen =&lt;br /&gt;
&lt;br /&gt;
Oftmals werden fälschlicherweise Argumente für oder gegen eine µC-Familie ausgesprochen, die in der Praxis &#039;&#039;&#039;zum Einstieg&#039;&#039;&#039; (bei konkreten Anwendungen kann das anders aussehen) eher unwichtig sind.&lt;br /&gt;
&lt;br /&gt;
* Spannungsversorgung 3,3V / 5V&lt;br /&gt;
* 8 (z.B. [[AVR]]), 16 (z.B. [[MSP430]]) oder 32 (z.B. [[STM32]]) Bit&lt;br /&gt;
* Interrupt System mit mehr oder weniger Features&lt;br /&gt;
* Programmiersprache (Assembler, Basic, C, C++, Pascal)&lt;br /&gt;
* Assembler verstehen (Sollte nur theoretisch verstanden werden, ein Programm sollte in einer Hochsprache geschrieben sein)&lt;br /&gt;
* DIL Gehäuse - steckbretttauglich (STM32-Prozessoren gibt es auch fertig gelötet auf einem steckbretttauglichen Board zum zehnfachen Preis vergleichbarer DIL Mikrocontroller)&lt;br /&gt;
* Programmieradapter&lt;br /&gt;
* zu 90% reicht doch ein kleiner Prozessor ([[AVR]]/PIC) - und für die restlichen kann man immer noch einen großen nehmen. Warum also nicht gleich einen großen nehmen?&lt;br /&gt;
&lt;br /&gt;
= Kosten =&lt;br /&gt;
&lt;br /&gt;
Grobe Abschätzung was das alles denn kosten wird. Hier sind nur einige Beispiele gezeigt.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Board || [[STM32]] || [[AVR]] || PIC18/24/32 || [[MSP430]] || Arduino&lt;br /&gt;
|-&lt;br /&gt;
| Demo-Board || align=&amp;quot;center&amp;quot;|[http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419] 9..20€ (incl. Programmieradapter und Debugger) || align=&amp;quot;center&amp;quot;|5..500€, z.B. Arduino || align=&amp;quot;center&amp;quot;| [http://www.microchipdirect.com/ProductDetails.aspx?Catalog=BuyMicrochip&amp;amp;Category=Starter%20Kits&amp;amp;mid=1&amp;amp;lmid=610 durchschnittlich 18€ .. 50€] || align=&amp;quot;center&amp;quot;|[http://www.ti.com/tool/msp-exp430fr5739] ~35€ || align=&amp;quot;center&amp;quot;|20€&lt;br /&gt;
|-&lt;br /&gt;
| Steckbrettaugliches Board || align=&amp;quot;center&amp;quot;| s.o. oder [http://re.reworld.eu/de/produkte/s64dil-405/index.htm S64DIL-405] 30€ || align=&amp;quot;center&amp;quot;|2-5€ als einzelner IC || align=&amp;quot;center&amp;quot;|2-5€ als einzelner IC || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|??&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter mit Debugger || align=&amp;quot;center&amp;quot;| s.o. oder z.B [http://www.segger.com/j-link-edu.html Segger J-LINK EDU] 50€ (sehr schnell und unterstützt viele Prozessoren) || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|PICkit 3 30€ [http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130] || align=&amp;quot;center&amp;quot;|z.B. Dragon 50€ || align=&amp;quot;center&amp;quot;|20€ (Man muss DebugWire aktivieren)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Demo-Board sollte ein Board sein, nicht zu teuer, um die ersten Erfahrungen zu sammeln. Wenn einem der Prozessor gefällt, so kann man später immer noch mit einem zweiten Demo-Board, z.B. mit Display aufrüsten.&lt;br /&gt;
&lt;br /&gt;
Wenn man gerne mit einem Steckbrett sich die Schaltung zusammen stecken möchte, so kann man entweder die benötigten Drähte am Demo-Board anlöten oder bei z.B. [[AVR]]/[[PIC]] Prozessoren gibt es Ausführungen im DIL Gehäuse, die direkt steckbar sind.&lt;br /&gt;
&lt;br /&gt;
Ein Programmieradapter sollte unbedingt auch einen Debugger beinhalten. Denn für den Start ist es ungemein hilfreich zu sehen was im Prozessor gerade geschieht. Die JTAG-Adapter für einen [[STM32]] Prozessor sind alle Debugger-Tauglich. Für einen [[AVR]] oder [[PIC]] Prozessor gibt es auch oft reine Programmer (oft Selbstbau-Lösungen über die serielle oder parallele Schnittstelle) welche den Mikrocontroller nur beschreiben können. Sinvoller sind hingegen Debugger (bspw. PIC Kit 3 [http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130] kompatibel zu allen PIC Mikrocontrollern), die die Ausführung eines Mikrocontrollers anhalten können um die aktuelle Position im Programmcode, Variableninhalt, Register, ... auszulesen bzw. zur Laufzeit zu ändern.&lt;br /&gt;
&lt;br /&gt;
Der für den [[STM32]] empfohlene Segger J-LINK EDU ist zwar nicht der günstigste (z.B. auf einem STM32F4DISCOVERY Borad ist auch einer drauf den man für andere STM32 nutzen kann) aber eines der besten, mit sehr guten Software-Tools und nutzbar für alle Prozessoren mit ARM-Kern (ARM7/9/11/... Cortex-Mx). Niemals am Werkzeug sparen und man hat viel mehr Freude bei der Arbeit.&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Arduino&amp;quot; ist kein eigenständiger Prozessor, sondern ein fertiges Board mit einer &amp;quot;Arduino&amp;quot; Programmierumgebung (und einem AVR Prozessor), extra geschaffen für Einsteiger. Allerdings ist da der Lerneffekt viel geringer da man den Prozessor mit der Arduino-Software programmiert und nicht direkt die Register.&lt;br /&gt;
&lt;br /&gt;
Ein [[PIC16]] ist ein älterer 8-Bit Mikrocontroller, der durch die [[PIC18]] Reihe abgelöst wurde. Werden komplexere Anforderungen in Zukunft an den Mikrocontroller gestellt (Audio, Grafik), so sollte zu den moderneren [[PIC24]] bzw. [[dsPIC]] (16-Bit) oder gar zu [[PIC32]] (32-Bit MIPS Prozessor) gegriffen werden, wobei letzterer von der Performance vergleichbar mit den STM32 ARM-basierten Mikrocontrollern ist.&lt;br /&gt;
&lt;br /&gt;
= Programmierumgebungen=&lt;br /&gt;
&lt;br /&gt;
Bei den Programmierumgebungen gibt es zu allen Prozessorfamilien kostenlose und Leistungsfähige Software&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! [[STM32]] || [[AVR]] || PIC || [[MSP430]] || Arduino&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.coocox.org/CooCox_CoIDE.htm CooCox] || align=&amp;quot;center&amp;quot;|Atmel-Studio || align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPALB X] (IDE inklusive compiler) || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|arduino 1.0.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
natürlich gibt es noch viele weitere (für STM32 siehe [[STM32#Programmierung]]), es sollte jedoch nur die einfachsten kostenlose (und ohne Codebegrenzung) für den ersten Einstieg gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
= Dokumentation=&lt;br /&gt;
&lt;br /&gt;
Bevor man sich für einen Prozessor entscheidet sollte man unbedingt deren Dokumentation mal zumindest überfliegen und auch deren Errata&#039;s lesen. Nicht dass man eine Anwendung erstellen möchte und stellt hinterher fest, dass genau dieser Teil so buggy ist das er nicht genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim [[STM32]] hat die Dokumentation doch recht viele Seiten, viel mehr als bei einem [[AVR]] oder PIC. Dabei ist vieles eher knapp beschrieben, man muss mehr suchen als z.B. bei den AVR-Dokus, um die gewünschten Informationen zu finden. Außerdem gibt es durchaus einige Unklarheiten und Fehler/Widersprüche. Schlussendlich ist es Geschmackssache mit welcher Doku von welchem Hersteller man sich besser zurecht findet.&lt;br /&gt;
&lt;br /&gt;
Bei den PICs gibt es zu jedem Mikrocontroller ein Datenblatt das die wichtigsten Informationen für den alltäglichen Gebrauch enthält. Da bestimmte Peripherie (bspw. I2C, SPI, ... ) aber sehr komplex ist und innerhalb einer Familie (PIC16/18/24/32) sich identisch verhält, gibt es zu jeder Familie die sogenannten Family-Datasheets, welche alle Module im Detail beschreiben.&lt;br /&gt;
&lt;br /&gt;
Parallel zur Dokumentation sollte man sich auch die Demo-Beispiele der Hersteller anschauen, dann wird vieles gleich verständlicher.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die Funktionen gibt es im Artikel: [[STM32]]&lt;br /&gt;
&lt;br /&gt;
= Die Arbeit mit dem STM32=&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal SOOO groß sind die Unterschiede zwischen den einzelnen Prozessoren nicht. Alle haben Ein-/Ausgänge und um mittels einem Port-Pin eine LED ansteuern zu können muss bei jedem Prozessor der Pin erst einmal parametriert werden, egal ob das jetzt ein STM32 oder ein AVR oder ein MSP430 ist. Nur hat man bei einem STM32 doch einige Funktionen mehr, z.B. zuschaltbarer Pull-Up oder Pull-Down Widerstand und spezielle Setz-Rücksetzregister, die andere Prozessoren nicht haben, jedoch das programmieren vereinfachen.&lt;br /&gt;
Der Haupt-Unterschied zu den anderen Prozessoren ist, dass der [[STM32]] so viele Peripherie-Module beherbergt, dass man die einzeln immer mit einem Clock aktivieren muss, denn damit lässt sich viel Strom sparen.&lt;br /&gt;
&lt;br /&gt;
Und mal ganz ehrlich die Diskussion welcher µc einfacher zu konfigurieren ist, ist doch absoluter Unsinn. Der Weg ist immer der Gleiche:&lt;br /&gt;
*1. Blick ins Datenblatt welche Register für diese Funktion benötigt werden.&lt;br /&gt;
*2. Werte ermitteln die in die Register eingetragen werden.&lt;br /&gt;
*3. Werte ins Register schreiben. Da machte es GAR KEINEN UNTERSCHIED ob es ein [[AVR]], 8051/2, ARM,...... ist.&lt;br /&gt;
&lt;br /&gt;
Stimmt schon es gibt Unterschiede. Die Register haben anderen Namen, andere Adressen, andere Bitbedeutungen,...&lt;br /&gt;
Aber es steht doch alles im Datenblatt. Und ob ich jetzt einen [[AVR]] oder einen ARM das erste mal vor mir liegen hab. Ich brauch in allen Fällen die oben beschriebenen Schritte.&lt;br /&gt;
&lt;br /&gt;
Das Interruptsystem ist bei einem STM32 zusätzlich priorisiert, damit kann man festlegen welcher Interrupt vorrangig bearbeitet wird. Die Prioritätenvergabe ist auch kein Hexenwerk.&lt;br /&gt;
&lt;br /&gt;
Zu allen Prozessoren liefern die jeweiligen Hersteller umfangreiche Demo-Codes und Libraries mit. Meist sind alle in C geschrieben, daher sollte auch die Programmiersprache C verwendet werden. Vor allem auch wenn man berufliche Absichten verfolgt.&lt;br /&gt;
&lt;br /&gt;
Und wenn man einen STM32 kann, dann ist ein Umstieg auf einen LPC17xx (NXP) oder andere Hersteller überhaupt kein Problem, denn die bieten ebenfalls Prozessoren mit Cortex-M3 Kern und man kann diese mit der gleichen Programmierumgebung programmieren. Somit ist man nicht zwingend Herstellerabhängig.&lt;br /&gt;
&lt;br /&gt;
Mit einem STM32 kann man als Hobby-Baster und Professionell nahezu alle Anwendungen realisieren. Der hat genügend RAM und FLASH Speicher und auch genügen Geschwindigkeit. Viele Gehäuse-Varianten um kleine bis hin zu größere Geräte zu erstellen. Viele Schnittstellen, sind im Artikel [[STM32]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der einzige Nachteil beim STM32: man muss etwas mehr lesen, da eine Peripherie doch viel mehr Funktionalität hat. Ansonsten kenne ich nicht wirklich einen Grund warum man als Neueinsteiger keinen STM32 nehmen sollte.&lt;br /&gt;
&lt;br /&gt;
= Programmiersprachen =&lt;br /&gt;
* Wie bei vielen anderen Controllern wird beim STM32 auch hauptsächlich C und C++ verwendet. Kennen sollte man die Programmiersprache C schon, wenn man davon noch keine Ahnung hat dann sollte man erst mal mittels einem Tutorial auf einem PC ein Konsoleprogramm schreiben, sodass man es einigermaßen kennen lernt. Hier im Forum gibt es ebenfalls Artikel dazu. Zielt man auf die (spätere) Anwendung in der Industrie, sollte aufgrund der Verbreitung auf jeden Fall C (oder C++) gewählt werden; außerdem sind die meisten verfügbaren Libraries in C geschrieben.&lt;br /&gt;
* Assembler sollte man nur grob verstehen, Details wie ein Befehl arbeitet ist unwichtig. Selbst wenn man die Zyklen für einen Funktionsaufruf wissen will, so bietet der STM32 (Cortex-M3) einen Cycle-Counter den man auslesen kann; durch die komplexere Pipeline und Cache-Effekte sind die Laufzeiten allerdings nicht genau vorhersehbar. Wird zyklengenause Timing benötigt, sollten Timer verwendet werden - davon hat der STM32 genug.&lt;br /&gt;
&lt;br /&gt;
Der 32bit-Adressraum, der RAM, Flash, I/O-Register vereinheitlicht ansprechen kann (im Gegensatz zu z.B. AVR) ist ideal für eine Verwendung durch Hochsprachen; bei Pointern muss keine zusätzliche Information verwaltet werden, in welche Art Speicher sie zeigen. Die Adresse gibt dies eindeutig an (es gibt nur &#039;&#039;&#039;eine&#039;&#039;&#039; Adresse 42, und nicht 2 wie bei es für Harvard-Architekturen eigentlich typisch ist (Programmspeicher und Datenspeicher, also z.B. Flash und RAM/IO) und die Hardware spricht automatisch den richtigen Speicher an. Die Möglichkeiten zur Offset-Adressierung, der Barrel-Shifter, Divsions-Einheit, die FPU (bei STM32F4), Interrupt-Modell etc. begünstigen ebenfalls die Erzeugung effizienteren Codes. Außerdem haben die STM32 einfach mehr &amp;quot;rohe Leistung&amp;quot;, d.h. mehr Flash/RAM-Speicher und höhere Taktfrequenzen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Folgerung&#039;&#039;&#039;: Die Programmierung in Hochsprachen ist &#039;&#039;&#039;bequemer als bei 8-Bittern&#039;&#039;&#039;, denn man muss sich einfach weniger Gedanken machen, ob der Compiler ein Programm nun effizent umsetzen kann (kann man natürlich trotzdem machen, um noch mehr Leistung &amp;quot;herauszuquetschen&amp;quot;, wenn man will).&lt;br /&gt;
&lt;br /&gt;
= Weitere Randbedingungen für die Entscheidung=&lt;br /&gt;
&lt;br /&gt;
Der wichtige Punkt, der oftmals auch vergessen wird: die Beschaffbarkeit. Wenn jemand einen Renesas M16C oder Fujitsu empfiehlt, dann sucht man erst mal und findet nur wenige vereinzelte die man privat kaufen kann.&lt;br /&gt;
&lt;br /&gt;
Oder auch die Unterstützung im Internet - ist bei einigen Exoten spärlich. Dieses Forum bietet die beste Hilfe für [[AVR]], PIC, [[STM32]] und [[MSP430]].&lt;br /&gt;
&lt;br /&gt;
Andere Prozessoren sind schon sehr alt, bzw. nicht mehr modern da deren Peripherie zum Teil doch recht eingeschränkte Funktionalität bietet. z.B. viele 8051 Typen oder PIC16. Die mögen für Mini-Anwenungen gut sein, aber wer will den schon gerne sich extra für eine Kleinanwendung mit einem kleinen µC auseinandersetzen, wenn er schon einen STM32 kennt, mit dem er alles machen kann (und sich bereits gute Funktionen geschrieben hat)?&lt;br /&gt;
&lt;br /&gt;
Daher mein Resümee: wer nicht gerade auf den Kopf gefallen ist, der kann getrost mit einem STM32 starten. Ein [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419?s_searchtype=keyword STM32F4DISCOVERY] Board kostet nur ca. 20 EUR - und mehr muss für den ersten Start nicht investiert werden - wenn es doch zu komplex sein sollte gibt es hier im Forum auch Hilfe oder man nimmt erst mal ein &amp;quot;Arduino&amp;quot;. Jedenfalls sind diese 20 EUR wirklich keine große Investition.&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities, Tutorials =&lt;br /&gt;
* [[STM32]] Hauptartikel, [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials dortige Linksammlung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/319328 Diskussion zum Artikel]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:STM32_f%C3%BCr_Einsteiger&amp;diff=80270</id>
		<title>Diskussion:STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:STM32_f%C3%BCr_Einsteiger&amp;diff=80270"/>
		<updated>2013-12-30T16:45:26Z</updated>

		<summary type="html">&lt;p&gt;Haku: Die Seite wurde neu angelegt: „= Speicher... = RAM und I/O liegen bei den AVR im gleichen Adressbereich. --~~~~“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Speicher... =&lt;br /&gt;
RAM und I/O liegen bei den AVR im gleichen Adressbereich. --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 17:45, 30. Dez. 2013 (CET)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80269</id>
		<title>STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=80269"/>
		<updated>2013-12-30T16:45:04Z</updated>

		<summary type="html">&lt;p&gt;Haku: Etwas ergänzt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Immer wiederkehrend hier im Forum &amp;quot;Mit welchem Mikrocontroller anfangen?&amp;quot;. Es gibt eine große Auswahl und eben so viele Empfehlungen. In diesem Artikel soll zu erst geholfen werden ob ein STM32-Prozessor mit Cortex-M3/M4 Kern überhaupt der Richtige für den Start ist.&lt;br /&gt;
Nicht für jeden ist der STM32 zu empfehlen, denn die Anforderungen und Wünsche die man realisieren möchte, sowie die eigenen Fähigkeiten sind verschieden.&lt;br /&gt;
&lt;br /&gt;
Es werden meist die Prozessoren AVR, PIC, Arduino, MSP430 und STM32 empfohlen. Seltener auch 8051, LPC und M16C. Alle haben Vorzüge und ebenso auch Nachteile.&lt;br /&gt;
&lt;br /&gt;
= Eigene Fähigkeiten und Wünsche =&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel geht davon aus, dass bereits Elektronik Kenntnisse vorhanden sind. Wenn nicht dann sollte man erst einmal den Artikel &amp;quot;[[Absolute Beginner]]&amp;quot; durcharbeiten, sowie die anderen Artikel aus der Kategorie &amp;quot;[http://www.mikrocontroller.net/articles/Kategorie:Grundlagen Grundlagen]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal die Randbedingungen, mit der man sich selbst zu erst einmal einschätzen sollte:&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Fähigkeit || Empfehlung [[STM32]] || Empfehlung [[AVR]] || Empfehlung PIC || Empfehlung [[MSP430]] || Empfehlung Arduino&lt;br /&gt;
|-&lt;br /&gt;
| Neueinsteiger, kaum Elektronikkenntnisse, noch nie programmiert || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O [http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht] [http://www.avr-asm-tutorial.net/avr_de/] || align=&amp;quot;center&amp;quot;|O [http://www.sprut.de/] || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist SD-Card oder Grafik-Display || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2680&amp;amp;dDocName=en537999] [http://www.microchip.com/pagehandler/en-us/technology/graphics/] || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist TCP/IP Netzwerk oder Kamera|| align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2505&amp;amp;param=en535724] || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O&lt;br /&gt;
|-&lt;br /&gt;
| Möchte die Erkenntnisse beruflich nutzen|| align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Strom sparende Anwendungen|| align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x [http://www.atmel.com/technologies/lowpower/default.aspx] || align=&amp;quot;center&amp;quot;|x [http://www.microchip.com/pagehandler/en-us/technology/xlp/] || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Experimentieren mit Multithreading, RTOS, Schedulern || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O [http://www.freertos.org/a00098.html] [http://www.femtoos.org/] || align=&amp;quot;center&amp;quot;|O [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en531543&amp;amp;redirects=rtos] || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Große, komplex strukturierte Programme || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Sehr viel PWM mit komplexem Timing || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|-&lt;br /&gt;
| Deutschsprachige Community || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|x || align=&amp;quot;center&amp;quot;|O || align=&amp;quot;center&amp;quot;|- || align=&amp;quot;center&amp;quot;|x&lt;br /&gt;
|}&lt;br /&gt;
* x = ja&lt;br /&gt;
* O = Teilweise, Einschränkungen&lt;br /&gt;
* - = nicht empfohlen&lt;br /&gt;
* ? = Bitte ergänzen&lt;br /&gt;
&lt;br /&gt;
Nur um nicht zu verwirren, auch wenn Teile &amp;quot;nicht empfohlen&amp;quot; sind, heißt dass nicht dass es mit dem Prozessor nicht geht, vielmehr dass es mehr Aufwand ist das zu realisieren oder mehr Einschränkungen hat.&lt;br /&gt;
&lt;br /&gt;
= Unwichtige Randbedingungen =&lt;br /&gt;
&lt;br /&gt;
Oftmals werden fälschlicherweise Argumente für oder gegen eine µC-Familie ausgesprochen, die in der Praxis &#039;&#039;&#039;zum Einstieg&#039;&#039;&#039; (bei konkreten Anwendungen kann das anders aussehen) eher unwichtig sind.&lt;br /&gt;
&lt;br /&gt;
* Spannungsversorgung 3,3V / 5V&lt;br /&gt;
* 8 (z.B. [[AVR]]), 16 (z.B. [[MSP430]]) oder 32 (z.B. [[STM32]]) Bit&lt;br /&gt;
* Interrupt System mit mehr oder weniger Features&lt;br /&gt;
* Programmiersprache (Assembler, Basic, C, C++, Pascal)&lt;br /&gt;
* Assembler verstehen (Sollte nur theoretisch verstanden werden, ein Programm sollte in einer Hochsprache geschrieben sein)&lt;br /&gt;
* DIL Gehäuse - steckbretttauglich (STM32-Prozessoren gibt es auch fertig gelötet auf einem steckbretttauglichen Board zum zehnfachen Preis vergleichbarer DIL Mikrocontroller)&lt;br /&gt;
* Programmieradapter&lt;br /&gt;
* zu 90% reicht doch ein kleiner Prozessor ([[AVR]]/PIC) - und für die restlichen kann man immer noch einen großen nehmen. Warum also nicht gleich einen großen nehmen?&lt;br /&gt;
&lt;br /&gt;
= Kosten =&lt;br /&gt;
&lt;br /&gt;
Grobe Abschätzung was das alles denn kosten wird. Hier sind nur einige Beispiele gezeigt.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Board || [[STM32]] || [[AVR]] || PIC18/24/32 || [[MSP430]] || Arduino&lt;br /&gt;
|-&lt;br /&gt;
| Demo-Board || align=&amp;quot;center&amp;quot;|[http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419] 9..20€ (incl. Programmieradapter und Debugger) || align=&amp;quot;center&amp;quot;|5..500€, z.B. Arduino || align=&amp;quot;center&amp;quot;| [http://www.microchipdirect.com/ProductDetails.aspx?Catalog=BuyMicrochip&amp;amp;Category=Starter%20Kits&amp;amp;mid=1&amp;amp;lmid=610 durchschnittlich 18€ .. 50€] || align=&amp;quot;center&amp;quot;|[http://www.ti.com/tool/msp-exp430fr5739] ~35€ || align=&amp;quot;center&amp;quot;|20€&lt;br /&gt;
|-&lt;br /&gt;
| Steckbrettaugliches Board || align=&amp;quot;center&amp;quot;| s.o. oder [http://re.reworld.eu/de/produkte/s64dil-405/index.htm S64DIL-405] 30€ || align=&amp;quot;center&amp;quot;|2-5€ als einzelner IC || align=&amp;quot;center&amp;quot;|2-5€ als einzelner IC || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|??&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter mit Debugger || align=&amp;quot;center&amp;quot;| s.o. oder z.B [http://www.segger.com/j-link-edu.html Segger J-LINK EDU] 50€ (sehr schnell und unterstützt viele Prozessoren) || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|PICkit 3 30€ [http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130] || align=&amp;quot;center&amp;quot;|z.B. Dragon 50€ || align=&amp;quot;center&amp;quot;|20€ (Man muss DebugWire aktivieren)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Demo-Board sollte ein Board sein, nicht zu teuer, um die ersten Erfahrungen zu sammeln. Wenn einem der Prozessor gefällt, so kann man später immer noch mit einem zweiten Demo-Board, z.B. mit Display aufrüsten.&lt;br /&gt;
&lt;br /&gt;
Wenn man gerne mit einem Steckbrett sich die Schaltung zusammen stecken möchte, so kann man entweder die benötigten Drähte am Demo-Board anlöten oder bei z.B. [[AVR]]/[[PIC]] Prozessoren gibt es Ausführungen im DIL Gehäuse, die direkt steckbar sind.&lt;br /&gt;
&lt;br /&gt;
Ein Programmieradapter sollte unbedingt auch einen Debugger beinhalten. Denn für den Start ist es ungemein hilfreich zu sehen was im Prozessor gerade geschieht. Die JTAG-Adapter für einen [[STM32]] Prozessor sind alle Debugger-Tauglich. Für einen [[AVR]] oder [[PIC]] Prozessor gibt es auch oft reine Programmer (oft Selbstbau-Lösungen über die serielle oder parallele Schnittstelle) welche den Mikrocontroller nur beschreiben können. Sinvoller sind hingegen Debugger (bspw. PIC Kit 3 [http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130] kompatibel zu allen PIC Mikrocontrollern), die die Ausführung eines Mikrocontrollers anhalten können um die aktuelle Position im Programmcode, Variableninhalt, Register, ... auszulesen bzw. zur Laufzeit zu ändern.&lt;br /&gt;
&lt;br /&gt;
Der für den [[STM32]] empfohlene Segger J-LINK EDU ist zwar nicht der günstigste (z.B. auf einem STM32F4DISCOVERY Borad ist auch einer drauf den man für andere STM32 nutzen kann) aber eines der besten, mit sehr guten Software-Tools und nutzbar für alle Prozessoren mit ARM-Kern (ARM7/9/11/... Cortex-Mx). Niemals am Werkzeug sparen und man hat viel mehr Freude bei der Arbeit.&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Arduino&amp;quot; ist kein eigenständiger Prozessor, sondern ein fertiges Board mit einer &amp;quot;Arduino&amp;quot; Programmierumgebung (und einem AVR Prozessor), extra geschaffen für Einsteiger. Allerdings ist da der Lerneffekt viel geringer da man den Prozessor mit der Arduino-Software programmiert und nicht direkt die Register.&lt;br /&gt;
&lt;br /&gt;
Ein [[PIC16]] ist ein älterer 8-Bit Mikrocontroller, der durch die [[PIC18]] Reihe abgelöst wurde. Werden komplexere Anforderungen in Zukunft an den Mikrocontroller gestellt (Audio, Grafik), so sollte zu den moderneren [[PIC24]] bzw. [[dsPIC]] (16-Bit) oder gar zu [[PIC32]] (32-Bit MIPS Prozessor) gegriffen werden, wobei letzterer von der Performance vergleichbar mit den STM32 ARM-basierten Mikrocontrollern ist.&lt;br /&gt;
&lt;br /&gt;
= Programmierumgebungen=&lt;br /&gt;
&lt;br /&gt;
Bei den Programmierumgebungen gibt es zu allen Prozessorfamilien kostenlose und Leistungsfähige Software&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! [[STM32]] || [[AVR]] || PIC || [[MSP430]] || Arduino&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.coocox.org/CooCox_CoIDE.htm CooCox] || align=&amp;quot;center&amp;quot;|Atmel-Studio || align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPALB X] (IDE inklusive compiler) || align=&amp;quot;center&amp;quot;|?? || align=&amp;quot;center&amp;quot;|arduino 1.0.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
natürlich gibt es noch viele weitere (für STM32 siehe [[STM32#Programmierung]]), es sollte jedoch nur die einfachsten kostenlose (und ohne Codebegrenzung) für den ersten Einstieg gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
= Dokumentation=&lt;br /&gt;
&lt;br /&gt;
Bevor man sich für einen Prozessor entscheidet sollte man unbedingt deren Dokumentation mal zumindest überfliegen und auch deren Errata&#039;s lesen. Nicht dass man eine Anwendung erstellen möchte und stellt hinterher fest, dass genau dieser Teil so buggy ist das er nicht genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim [[STM32]] hat die Dokumentation doch recht viele Seiten, viel mehr als bei einem [[AVR]] oder PIC. Dabei ist vieles eher knapp beschrieben, man muss mehr suchen als z.B. bei den AVR-Dokus, um die gewünschten Informationen zu finden. Außerdem gibt es durchaus einige Unklarheiten und Fehler/Widersprüche. Schlussendlich ist es Geschmackssache mit welcher Doku von welchem Hersteller man sich besser zurecht findet.&lt;br /&gt;
&lt;br /&gt;
Bei den PICs gibt es zu jedem Mikrocontroller ein Datenblatt das die wichtigsten Informationen für den alltäglichen Gebrauch enthält. Da bestimmte Peripherie (bspw. I2C, SPI, ... ) aber sehr komplex ist und innerhalb einer Familie (PIC16/18/24/32) sich identisch verhält, gibt es zu jeder Familie die sogenannten Family-Datasheets, welche alle Module im Detail beschreiben.&lt;br /&gt;
&lt;br /&gt;
Parallel zur Dokumentation sollte man sich auch die Demo-Beispiele der Hersteller anschauen, dann wird vieles gleich verständlicher.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die Funktionen gibt es im Artikel: [[STM32]]&lt;br /&gt;
&lt;br /&gt;
= Die Arbeit mit dem STM32=&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal SOOO groß sind die Unterschiede zwischen den einzelnen Prozessoren nicht. Alle haben Ein-/Ausgänge und um mittels einem Port-Pin eine LED ansteuern zu können muss bei jedem Prozessor der Pin erst einmal parametriert werden, egal ob das jetzt ein STM32 oder ein AVR oder ein MSP430 ist. Nur hat man bei einem STM32 doch einige Funktionen mehr, z.B. zuschaltbarer Pull-Up oder Pull-Down Widerstand und spezielle Setz-Rücksetzregister, die andere Prozessoren nicht haben, jedoch das programmieren vereinfachen.&lt;br /&gt;
Der Haupt-Unterschied zu den anderen Prozessoren ist, dass der [[STM32]] so viele Peripherie-Module beherbergt, dass man die einzeln immer mit einem Clock aktivieren muss, denn damit lässt sich viel Strom sparen.&lt;br /&gt;
&lt;br /&gt;
Und mal ganz ehrlich die Diskussion welcher µc einfacher zu konfigurieren ist, ist doch absoluter Unsinn. Der Weg ist immer der Gleiche:&lt;br /&gt;
*1. Blick ins Datenblatt welche Register für diese Funktion benötigt werden.&lt;br /&gt;
*2. Werte ermitteln die in die Register eingetragen werden.&lt;br /&gt;
*3. Werte ins Register schreiben. Da machte es GAR KEINEN UNTERSCHIED ob es ein [[AVR]], 8051/2, ARM,...... ist.&lt;br /&gt;
&lt;br /&gt;
Stimmt schon es gibt Unterschiede. Die Register haben anderen Namen, andere Adressen, andere Bitbedeutungen,...&lt;br /&gt;
Aber es steht doch alles im Datenblatt. Und ob ich jetzt einen [[AVR]] oder einen ARM das erste mal vor mir liegen hab. Ich brauch in allen Fällen die oben beschriebenen Schritte.&lt;br /&gt;
&lt;br /&gt;
Das Interruptsystem ist bei einem STM32 zusätzlich priorisiert, damit kann man festlegen welcher Interrupt vorrangig bearbeitet wird. Die Prioritätenvergabe ist auch kein Hexenwerk.&lt;br /&gt;
&lt;br /&gt;
Zu allen Prozessoren liefern die jeweiligen Hersteller umfangreiche Demo-Codes und Libraries mit. Meist sind alle in C geschrieben, daher sollte auch die Programmiersprache C verwendet werden. Vor allem auch wenn man berufliche Absichten verfolgt.&lt;br /&gt;
&lt;br /&gt;
Und wenn man einen STM32 kann, dann ist ein Umstieg auf einen LPC17xx (NXP) oder andere Hersteller überhaupt kein Problem, denn die bieten ebenfalls Prozessoren mit Cortex-M3 Kern und man kann diese mit der gleichen Programmierumgebung programmieren. Somit ist man nicht zwingend Herstellerabhängig.&lt;br /&gt;
&lt;br /&gt;
Mit einem STM32 kann man als Hobby-Baster und Professionell nahezu alle Anwendungen realisieren. Der hat genügend RAM und FLASH Speicher und auch genügen Geschwindigkeit. Viele Gehäuse-Varianten um kleine bis hin zu größere Geräte zu erstellen. Viele Schnittstellen, sind im Artikel [[STM32]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der einzige Nachteil beim STM32: man muss etwas mehr lesen, da eine Peripherie doch viel mehr Funktionalität hat. Ansonsten kenne ich nicht wirklich einen Grund warum man als Neueinsteiger keinen STM32 nehmen sollte.&lt;br /&gt;
&lt;br /&gt;
= Programmiersprachen =&lt;br /&gt;
* Wie bei vielen anderen Controllern wird beim STM32 auch hauptsächlich C und C++ verwendet. Kennen sollte man die Programmiersprache C schon, wenn man davon noch keine Ahnung hat dann sollte man erst mal mittels einem Tutorial auf einem PC ein Konsoleprogramm schreiben, sodass man es einigermaßen kennen lernt. Hier im Forum gibt es ebenfalls Artikel dazu. Zielt man auf die (spätere) Anwendung in der Industrie, sollte aufgrund der Verbreitung auf jeden Fall C (oder C++) gewählt werden; außerdem sind die meisten verfügbaren Libraries in C geschrieben.&lt;br /&gt;
* Assembler sollte man nur grob verstehen, Details wie ein Befehl arbeitet ist unwichtig. Selbst wenn man die Zyklen für einen Funktionsaufruf wissen will, so bietet der STM32 (Cortex-M3) einen Cycle-Counter den man auslesen kann; durch die komplexere Pipeline und Cache-Effekte sind die Laufzeiten allerdings nicht genau vorhersehbar. Wird zyklengenause Timing benötigt, sollten Timer verwendet werden - davon hat der STM32 genug.&lt;br /&gt;
&lt;br /&gt;
Der 32bit-Adressraum, der RAM, Flash, I/O-Register vereinheitlicht ansprechen kann (im Gegensatz zu z.B. AVR) ist ideal für eine Verwendung durch Hochsprachen; bei Pointern muss keine zusätzliche Information verwaltet werden, in welche Art Speicher sie zeigen. Die Adresse gibt dies eindeutig an (es gibt nur &#039;&#039;&#039;eine&#039;&#039;&#039; Adresse 42, und nicht 2 wie bei es für Harvard-Architekturen eigentlich typisch ist (Programmspeicher und Datenspeicher, also z.B. Flash und RAM/IO) und die Hardware spricht automatisch den richtigen Speicher an. Die Möglichkeiten zur Offset-Adressierung, der Barrel-Shifter, Divsions-Einheit, die FPU (bei STM32F4), Interrupt-Modell etc. begünstigen ebenfalls die Erzeugung effizienteren Codes. Außerdem haben die STM32 einfach mehr &amp;quot;rohe Leistung&amp;quot;, d.h. mehr Flash/RAM-Speicher und höhere Taktfrequenzen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Folgerung&#039;&#039;&#039;: Die Programmierung in Hochsprachen ist &#039;&#039;&#039;bequemer als bei 8-Bittern&#039;&#039;&#039;, denn man muss sich einfach weniger Gedanken machen, ob der Compiler ein Programm nun effizent umsetzen kann (kann man natürlich trotzdem machen, um noch mehr Leistung &amp;quot;herauszuquetschen&amp;quot;, wenn man will).&lt;br /&gt;
&lt;br /&gt;
= Weitere Randbedingungen für die Entscheidung=&lt;br /&gt;
&lt;br /&gt;
Der wichtige Punkt, der oftmals auch vergessen wird: die Beschaffbarkeit. Wenn jemand einen Renesas M16C oder Fujitsu empfiehlt, dann sucht man erst mal und findet nur wenige vereinzelte die man privat kaufen kann.&lt;br /&gt;
&lt;br /&gt;
Oder auch die Unterstützung im Internet - ist bei einigen Exoten spärlich. Dieses Forum bietet die beste Hilfe für [[AVR]], PIC, [[STM32]] und [[MSP430]].&lt;br /&gt;
&lt;br /&gt;
Andere Prozessoren sind schon sehr alt, bzw. nicht mehr modern da deren Peripherie zum Teil doch recht eingeschränkte Funktionalität bietet. z.B. viele 8051 Typen oder PIC16. Die mögen für Mini-Anwenungen gut sein, aber wer will den schon gerne sich extra für eine Kleinanwendung mit einem kleinen µC auseinandersetzen, wenn er schon einen STM32 kennt, mit dem er alles machen kann (und sich bereits gute Funktionen geschrieben hat)?&lt;br /&gt;
&lt;br /&gt;
Daher mein Resümee: wer nicht gerade auf den Kopf gefallen ist, der kann getrost mit einem STM32 starten. Ein [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419?s_searchtype=keyword STM32F4DISCOVERY] Board kostet nur ca. 20 EUR - und mehr muss für den ersten Start nicht investiert werden - wenn es doch zu komplex sein sollte gibt es hier im Forum auch Hilfe oder man nimmt erst mal ein &amp;quot;Arduino&amp;quot;. Jedenfalls sind diese 20 EUR wirklich keine große Investition.&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities, Tutorials =&lt;br /&gt;
* [[STM32]] Hauptartikel, [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials dortige Linksammlung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/319328 Diskussion zum Artikel]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Haku/F%C3%BCr:Assembler&amp;diff=80206</id>
		<title>Benutzer:Haku/Für:Assembler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Haku/F%C3%BCr:Assembler&amp;diff=80206"/>
		<updated>2013-12-29T14:02:34Z</updated>

		<summary type="html">&lt;p&gt;Haku: Die Seite wurde neu angelegt: „= Darum Assembler! = Ja, Assembler. Total altmodisch, umständlich und uncool.  Es folgen einige Beispiele, weshalb ich persönlich der festen Überzeugung bin…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Darum Assembler! =&lt;br /&gt;
Ja, Assembler. Total altmodisch, umständlich und uncool.&lt;br /&gt;
&lt;br /&gt;
Es folgen einige Beispiele, weshalb ich persönlich der festen Überzeugung bin, dass jeder, der ernsthaft mit Mikrocontrollern leben möchte, Assembler verstehen sollte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Befehlssatz ==&lt;br /&gt;
Gerade auf Mikroprozessoren hat man nicht beliebig viele Ressourcen und Rechenzeit, wie das mittlerweile auf jedem PC der Fall ist. Mit einer Hochsprache hat man schnell und elegant etwas programmiert, was für die Zielplattform aber völlig ungeeignet ist. Da hilft es, wenn man seinen Prozessor verstanden hat und sich in etwa vorstellen kann, welche Möglichkeiten der Compiler hat, um den Code zu übersetzen. Dazu muss man aber den Assembler verstanden haben.&lt;br /&gt;
&lt;br /&gt;
Beispiele?&lt;br /&gt;
&lt;br /&gt;
Auf dem AVR wird folgendes ziemlich umständlich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int schieben(int x, int d) {&lt;br /&gt;
  return x &amp;lt;&amp;lt; d;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder, immer wieder gerne gesehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
/* ... */&lt;br /&gt;
void warten(int sek) {&lt;br /&gt;
  _delay_ms(1000 * sek);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nebenläufigkeit ==&lt;br /&gt;
Richtig Spaß machen Mikroprozessoren erst mit Interrupts. Vorallem, wenn man dann Daten zwischen dem Hauptprogramm (&#039;&#039;main-Schleife&#039;&#039;) und den Interrupts austauscht. Man sollte dann wissen, was im Assembly passiert. Andernfalls handelt man sich jede Menge Unterhaltung ein, wenn es dann irgendwann zu ganz sporadischen (also auch ganz schlecht reproduzierbaren) Fehlern kommt.&lt;br /&gt;
&lt;br /&gt;
Beispiel?&lt;br /&gt;
&lt;br /&gt;
Dieses knallt auf dem AVR &#039;&#039;sehr sporadisch&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
volatile int zaehler;&lt;br /&gt;
ISR(...) {&lt;br /&gt;
  zaehler++;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  /* ... */&lt;br /&gt;
  if (zaehler == 1000) {&lt;br /&gt;
    /* Autsch */&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Read-modify-write ==&lt;br /&gt;
Read-modify-write ist richtig schön im Zusammenspiel mit Interrupts.&lt;br /&gt;
&lt;br /&gt;
Beispiel?&lt;br /&gt;
&lt;br /&gt;
Folgendes funktioniert völlig unproblematisch und wackelt an zwei Pins eines ATmega128:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
volatile int zaehler;&lt;br /&gt;
ISR(/* ... */) {&lt;br /&gt;
  static int flag = 0;&lt;br /&gt;
  &lt;br /&gt;
  flag = !flag;&lt;br /&gt;
  if (flag)&lt;br /&gt;
    PORTE |= _BV(PE1);&lt;br /&gt;
  else&lt;br /&gt;
    PORTE &amp;amp;= ~_BV(PE1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  for (;;) {&lt;br /&gt;
    PORTE |= _BV(PE0);&lt;br /&gt;
    PORTE &amp;amp;= ~_BV(PE0);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgendes dagegen geht, wieder auf dem ATmega128, &#039;&#039;sehr sporadisch&#039;&#039; in die Hose:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
volatile int zaehler;&lt;br /&gt;
ISR(/* ... */) {&lt;br /&gt;
  static int flag = 0;&lt;br /&gt;
  &lt;br /&gt;
  flag = !flag;&lt;br /&gt;
  if (flag)&lt;br /&gt;
    PORTF |= _BV(PF1);&lt;br /&gt;
  else&lt;br /&gt;
    PORTF &amp;amp;= ~_BV(PF1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  for (;;) {&lt;br /&gt;
    PORTF |= _BV(PF0);&lt;br /&gt;
    PORTF &amp;amp;= ~_BV(PF0);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=C-Pr%C3%A4prozessor&amp;diff=79700</id>
		<title>C-Präprozessor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=C-Pr%C3%A4prozessor&amp;diff=79700"/>
		<updated>2013-11-25T18:10:24Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* #define */ Inkrement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der erste Verarbeitungsschritt bei der Kompilierung eines [[C]]/[[C++]]-Programmes erfolgt durch den &#039;&#039;&#039;Präprozessor&#039;&#039;&#039;. Dieser verändert den Quelltext, den die späteren Verarbeitungsphasen erhalten, in folgender Hinsicht:&lt;br /&gt;
* Einbeziehen zusätzlicher Dateien ([[Include-Files]])&lt;br /&gt;
* Ersetzen von (parametrisierbaren) [[Makro]]s&lt;br /&gt;
* Entfernen einzelner Abschnitte (= bedingte Kompilierung)&lt;br /&gt;
&lt;br /&gt;
Im Grunde kann man sich den Präprozessor als eine Art Texteditor vorstellen, der die Anweisungen, was er zu tun hat, dem Text entnimmt, den er bearbeitet. In jedem Texteditor gibt es zb. die Funktion &#039;Suchen und Ersetzen&#039;. Auch im Präprozessor gibt es sie, nur heißt sie dort #define. Alle Anweisungen an den Präprozessor beginnen grundsätzlich damit, daß das Zeichen &#039;#&#039; das erste Zeichen in einer Textzeile darstellt. Und umgekehrt: Ist das erste Zeichen in einer Textzeile ein &#039;#&#039;, so handelt es sich um eine Präprozessor-Anweisung.&lt;br /&gt;
&lt;br /&gt;
==#include==&lt;br /&gt;
Die #include weist den Präprozessor an, den Inhalt der angegebenen Datei anstelle der #include Anweisung einzusetzen. Weiter passiert nichts. Bei der Angabe des Dateinamens der einzusetzenden Datei gibt es 2 Formen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;Datei1.xyz&amp;quot;&lt;br /&gt;
#include &amp;lt;Datei2.abc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der Unterschied zwischen beiden Formen besteht rein im Aufsuchpfad, den der Präprozessor benutzt, um die Datei zu finden. Per Konvention wird die &amp;lt; &amp;gt;-Form benutzt, um systemweite Includes durchzuführen. Alle mit dem Compiler mitgelieferten Header Files sind zb. solche systemweite-Includes. Bei der Installation des Compilers wurde im System hinterlassen, auf welchem Pfad sie gefunden werden können. Durch Verwendung der &amp;lt; &amp;gt;-Form wird dem Präprozessor mitgeteilt, dass diese damals vereinbarten Pfadangaben zur Aufsuche dieser Datei benutzt werden soll.&lt;br /&gt;
&lt;br /&gt;
==#define==&lt;br /&gt;
Mittels #define wird eine Textersetzung vereinbart.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define ABC xyz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
weist den Präprozessor an, im weiteren Quelltext alle Vorkommen von &#039;ABC&#039; durch den Text &#039;xyz&#039; zu ersetzen. Der Präprozessor macht dies überall, solange&lt;br /&gt;
* es sich an der zu ersetzenden Stelle um keinen String handelt. Mit obigem #define würde also in &amp;quot;Dies ist ABC&amp;quot; keine Textersetzung stattfinden.&lt;br /&gt;
* er den Ursprungstext als &#039;Wort&#039; im Sinne eines C-Wortes handelt. Mit obigem #define würde also in cdABCef = 5; keine Textersetzung stattfinden.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Präprozessor führt eine reine Textersetzung durch! Ob sich durch diese Ersetzung eine Logikänderung im Programm ergibt, interessiert den Präprozessor nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define NR 5&lt;br /&gt;
&lt;br /&gt;
int Werte[NR];&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  for( i = 0; i &amp;lt; NR; i++ )&lt;br /&gt;
    printf( &amp;quot;%d&amp;quot;, Werte[i] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor der eigentliche Compiler den Quelltext zu Gesicht bekommt, wird er zunächst vom Präprozessor bearbeitet. Dieser führt die Textersetzung durch, indem er alle Vorkommen von NR durch den Text 5 ersetzt. Erst dieses Ergebnis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int Werte[5];&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  for( i = 0; i &amp;lt; 5; i++ )&lt;br /&gt;
    printf( &amp;quot;%d&amp;quot;, Werte[i] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird dann dem eigentlichen Compiler zur Übersetzung vorgelegt. In diesem Beispiel hat man durch den Einsatz des Präprozessors erreicht, dass die Anzahl der Arrayelemente immer mit dem Maximalwert in der for-Schleife übereinstimmt. Ein Fehler, dass beispielweise die Arraygröße verändert wird, ohne das die for-Schleife angepasst würde, ist durch den Einsatz des Präprozessors wirkungsvoll verhindert worden.&lt;br /&gt;
&lt;br /&gt;
Aber auch hier wieder: Der Präprozessors macht nur eine Textersetzung! Für den Präprozessors ist es völlig unerheblich, ob sich dadurch die Logik des Programms aus Sicht des Programmierers verändert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define PART    3+5&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  y = 4*PART;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In diesem Beispiel mag es schon so sein, dass der Programmierer im Sinn hatte, den Ausdruck 4 mal 8 berechnen zu lassen, wobei sich die 8 durch eine Addition von 3 und 5 ergeben. Das interessiert aber den Präprozessor nicht. Der macht eine reine textuelle Ersetzung, indem er den Text &#039;PART&#039; durch den Text &#039;3+5&#039; austauscht, wodurch dieses Ergebnis entsteht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define PART    3+5&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
  y = 4*3+5;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies ist aber etwas anderes, nämlich &#039;(4*3)+5&#039;, also ursprünglich beabsichtigt war, nämlich &#039;4*(3+5)&#039;.&lt;br /&gt;
&lt;br /&gt;
Schlussfolgerung: Es ist bei komplexeren Makros nicht ungewöhnlich, dass sich in Makros relativ viele Klammern wiederfinden, deren Zweck gerade für einen Neuling nicht auf den ersten Blick zu durchschauen ist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define PART    (3+5)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
  x = PART;&lt;br /&gt;
  y = 4*PART;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Während die Klammern im Makro bei der Zuweisung an x keine Funktion erfüllen (aber auch nicht störend sind), sind sie bei der Zuweisung an y lebenswichtig um der ganzen Anweisung nach der Textersetzung die beabsichtigte Bedeutung zu geben.&lt;br /&gt;
&lt;br /&gt;
==#if, #ifdef==&lt;br /&gt;
&lt;br /&gt;
==mögliche Probleme beim Einsatz des Präprozessors==&lt;br /&gt;
Eine am C-Präprozessor häufig geäußerte Kritik ist, dass er (nahezu) ohne Berücksichtigung der eigentlichen Sprachsyntax arbeitet (&amp;quot;The C-Preprocessor doesn&#039;t know about C&amp;quot;). Die Tatsache, dass Makros beispielsweise auf der Basis von Textersatz arbeiten, kann zu Überaschungen führen. So wird in&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define cub(a) a*a*a&lt;br /&gt;
...&lt;br /&gt;
int x, y;&lt;br /&gt;
y = 4;&lt;br /&gt;
x = cub(y+1);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in x nicht etwa der Wert 125 (5 hoch 3) stehen, sondern der Wert 13, da nach Ersetzen des Makros der folgende Quelltext kompiliert wird ...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
x = y+1*y+1*y+1; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
... und durch die arithmetischen Vorrangregeln, wird dieser Ausdruck so ausgewertet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
x = y + (1*y) + (1*y) + 1; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte man jeden Parameter eines Makros bei jeder Verwendung klammern. Damit werden viele Probleme mit Makros gelöst und man erhält für obiges Beispiel folgende Form und damit auch eine korrekte Berechnung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define cub(a) ((a)*(a)*(a))&lt;br /&gt;
...&lt;br /&gt;
int x, y;&lt;br /&gt;
y = 4;&lt;br /&gt;
x = cub(y+1);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ein weiteres Problem besteht jedoch, wenn ein Makro-Parameter im Ersatztext doppelt verwendet wird:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define max(a, b) ((a&amp;gt;b) ? (a) : (b))&lt;br /&gt;
...&lt;br /&gt;
int x, y;&lt;br /&gt;
...&lt;br /&gt;
x = max(y, 10);   /* OK */&lt;br /&gt;
x = max(++y, 10); /* ?? */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Im zweiten Fall wird die Variable &#039;&#039;y&#039;&#039; u.U. &#039;&#039;zweimal&#039;&#039; inkrementiert - was ohne Kenntnis der Makro-Definition keineswegs offensichtlich ist (&#039;&#039;max&#039;&#039; könnte auch eine echte Funktion sein).&lt;br /&gt;
&lt;br /&gt;
Die Tatsache, dass der C-Präprozessor die Syntax von C/C++ nicht wirklich berücksichtigt, ist allerdings auch nützlich. So lassen sich mit dem C-Präprozessor Datentypen parametrisieren, um systematische Programmteile zu vereinfachen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* GSAWP:&lt;br /&gt;
   generiert Funktionsdefinition zum Vertauschen des Inhalts von zwei Variablen&lt;br /&gt;
*/&lt;br /&gt;
#define GSWAP(n, T)s\&lt;br /&gt;
        void n(T *xp, T *yp) { T tmp = *xp; *xp = *yp; *yp = tmp; }&lt;br /&gt;
...&lt;br /&gt;
GSWAP(iswap, int)&lt;br /&gt;
GSWAP(dswap, double)&lt;br /&gt;
GSWAP(swap_s, struct s)&lt;br /&gt;
...&lt;br /&gt;
int a, b;&lt;br /&gt;
double c, d;&lt;br /&gt;
struct s e, f;&lt;br /&gt;
...&lt;br /&gt;
iswap(&amp;amp;a, &amp;amp;b);&lt;br /&gt;
dswap(&amp;amp;c, &amp;amp;d);&lt;br /&gt;
swap_s(&amp;amp;e. &amp;amp;f);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viele typische Anwendungsfälle des Präprozessors lassen sich allerdings bereits mit Standard-C-Bordmitteln erfolgreich erschlagen:&lt;br /&gt;
* Statt &#039;&#039;#define&#039;&#039; besser mit &#039;&#039;const&#039;&#039; vereinbarte Variablen benutzen. Bei jedem besseren Compiler ergeben sich dank Optimierung keinerlei Nachteile.&lt;br /&gt;
* &#039;&#039;enum&#039;&#039; für Konstantenfelder benutzen. Dabei sollte man allerdings sauber casten, da &#039;&#039;enum&#039;&#039;-Werte in der Regel als &#039;&#039;int&#039;&#039; interpretiert werden.&lt;br /&gt;
* Neuere Versionen des GCC unterstützen &#039;&#039;inline&#039;&#039;, wodurch Makros für Einzeiler überflüssig werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In [[C++]] wurden ergänzend zum C-Präprozessor weitere Mechanismen eingeführt. So erlauben [[Templates (C++)|Templates]] generische Programmierung, womit viele der &amp;quot;Makro-Tricks&amp;quot; wie die obigen überflüssig werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Entprellung&amp;diff=79686</id>
		<title>Diskussion:Entprellung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Entprellung&amp;diff=79686"/>
		<updated>2013-11-24T08:09:28Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Wechselschalter ohne Flip-Flop ohne Schmitt-Trigger? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dat Bildchen ==&lt;br /&gt;
&lt;br /&gt;
Warum muß das &amp;quot;Prellen&amp;quot; einer Taste eigentlich immer als sauberer Rechteck dargestellt werden? Meiner Meinung nach verwirrt das unsichere Neulinge. -- [[Benutzer:Guido|Guido]] 10:44, 9. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Für die Auswertung in der Logik ist ja das Wechselspiel zwischen Nullen und Einsen so wie dargestellt das Problem. Trotzdem hast du natürlich recht, als das die Ursache, also die Spannung am Schalter ganz anderes aussehen kann, bspw. langsames Ansteigen an Nicht-Schmitt-Trigger-Eingängen. Ich unterstütze deine Bemühungen, neue Bildchen einzufügen ;-) --[[Benutzer:Yahp|Yahp]] 13:19, 9. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Unkreativ und lustlos, aber vielleicht schon mal was, bis jemand mal mit einem Speicheroszi einen Originalpreller abschießen kann:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Entprellen1a.png]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Guido|Guido]] 17:19, 9. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Hallo Guido, ich bin für das Einbinden des Bildes im Artikel. Gegenstimmen? Nein. Gut, machen wir es so :-) --[[Benutzer:Yahp|Yahp]] 01:13, 11. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Werde das nachholen! [[Spezial:Beiträge/0:0:0:FFFF:87:166:185:17|0:0:0:FFFF:87:166:185:17]] 16:20, 19. Jan. 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Ich finde das Bild sehr verwirrend. Das blaue ist die Spannung vor dem RC ? Das ist aber genau ein Komparator ohne Hyterese&lt;br /&gt;
&lt;br /&gt;
== Fehler in Quellcode? ==&lt;br /&gt;
&amp;lt;c&amp;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;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Fehlt da nicht ein sei()?&lt;br /&gt;
&lt;br /&gt;
-- [http://www.reintechnisch.de Winfried Mueller] 18.02.07&lt;br /&gt;
&lt;br /&gt;
sei() wird in der aufgerufenen get_key_press() als deren Seiteneffekt ausgeführt und braucht an dieser Stelle nicht zusätzlich gemacht zu werden. Zu solchen Seiteneffekten siehe auch [[AVR-GCC-Tutorial#Interrupts mit dem AVR GCC Compiler (WinAVR)]]. [[Benutzer:Stefan|Stefan]] 13:31, 12. Jun 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Neue Funktion &amp;quot;Warteschleifenvariante mit Maske und Pointer&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Guten Tag&lt;br /&gt;
&lt;br /&gt;
Ich habe eine Funktion zum Entprellen eingefügt. Diese ist recht schnell (bei 0815-Tastern etwa 1-3ms) und man kann alle Pins eines Ports gleichzeitig verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Ich habe diese Funktion jetzt etwa ein halbes Jahr im Einsatz und habe nur in Ausnahmefällen noch ein Prellen auf meinen Schaltern.&lt;br /&gt;
&lt;br /&gt;
Grüsse&lt;br /&gt;
&lt;br /&gt;
Christian Riggenbach&lt;br /&gt;
&lt;br /&gt;
== Komfortroutine ==&lt;br /&gt;
Die Komfortroutine hat inzwischen einen Haufen Fehler. Im Original sind diese noch nicht vorhanden:&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/16197]&lt;br /&gt;
Werde mich bei Gelegenheit mal dranmachen. [[Benutzer:Esko|Esko]] 21:37, 12. Nov. 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Entprellroutine nach Peter Danegger ==&lt;br /&gt;
&lt;br /&gt;
Im Text hatte sich ein Fehler eingeschlichen. Die gezeigte Routine betreibt keine 4-fach Abtastung, sondern 2-fach Abtastung. Dieser Beitrag klärt die Verwechslung auf:&lt;br /&gt;
[http://www.mikrocontroller.net/topic/6490#962294]&lt;br /&gt;
&lt;br /&gt;
Soweit ich das im Forum gesehen hab, wurde für die Entprellung bei Peter Danegger nicht nachgefragt, ob er mit einer Veröffentlichung im Wiki einverstanden ist. (Im Gegensatz zur Zeit ohne RTC.) Das sollte man zumindest noch nachholen, denke ich. --[[Benutzer:80.108.115.184|80.108.115.184]] 19:15, 25. Apr 2005 (CEST)sym&lt;br /&gt;
&lt;br /&gt;
: Sollte wohl erledgt sein!&lt;br /&gt;
&lt;br /&gt;
== Millerentprellung ==&lt;br /&gt;
Ich habe das eben eingesetzt. Gefunden auf der Millerwebseite.&lt;br /&gt;
&lt;br /&gt;
== Wechselschalter ohne Flip-Flop ohne Schmitt-Trigger? ==&lt;br /&gt;
&lt;br /&gt;
In dem Abschnitt &amp;quot;Wechselschalter ohne Flip-Flop&amp;quot; wird ein Wechselschalter mit einem einfachen Tiefpass entprellt. In dem Abschnitt &amp;quot;Einfacher Taster&amp;quot; wird explizit darauf hingewiesen, dass dem Tiefpass ein Schmitt-Trigger folgen muss. Muss dieser nicht auch in der Schaltung mit Wechselschalter verwendet werden?&lt;br /&gt;
: Ratsam ist das, ja. Insbesondere, wenn man damit CMOS ansteuern möchte. Denn hinter dem RC-Glied entsteht eben die typische Lade-/Entladekurve. --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 09:09, 24. Nov. 2013 (CET)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Schnelle_32Bit-Integer_Sinusberechnung&amp;diff=79207</id>
		<title>Diskussion:Schnelle 32Bit-Integer Sinusberechnung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Schnelle_32Bit-Integer_Sinusberechnung&amp;diff=79207"/>
		<updated>2013-10-29T18:02:35Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Kommentar des Autors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fragen und Probleme mit dem Code ==&lt;br /&gt;
&lt;br /&gt;
Mit dem aktuellen Code ergeben sich einige Probleme:&lt;br /&gt;
&lt;br /&gt;
* Je nach Plattform ist int lediglich 16 Bits breit: Der C-Standard garantiert mindestens 16 Bits für int, mehr jedoch nicht. Lösund wäre die Verwendung von stdin.h von C99 und Vermeidung von Überläufen wie sie momentan auftreten.&lt;br /&gt;
* Falls die Architektur nicht über Divisionsbefehle verfügt (Beispiel: [[AVR]]), ist die Berechnung keineswegs als &amp;quot;schnell&amp;quot; zu bezeichnen.&lt;br /&gt;
* Die angegebene Genauigkeit von 0.1% entspricht 10 Binärstellen.  Es stellt sich die Frage, warum dafür überhaupt 32-Bit Arithmetik verwendet wird.&lt;br /&gt;
* Die Eingabe erfolgt in Grad, es sind also nur 91 Eingaben (0°...90°) möglich falls man sich auf den ersten Quadranten beschränkt.  Dies erfordert eine Rundung der Eingabe auf ganze Grade, was einen Rundungsfehler von bis zu pi/360 bedingt.  Dies entspricht einer Genauigkeit von nur 7 Binärstellen, was schneller, einfacher und kürzer durch eine 91 Byte große Lookup-Table bewerkstelligt werden kann.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Gjlayde|Gjlayde]] ([[Benutzer Diskussion:Gjlayde|Diskussion]]) 11:15, 28. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
Wenn man 16 Stützstellen nimmt, kann die /10 Division durch eine Schiebeoperation optimiert werden.&lt;br /&gt;
&lt;br /&gt;
: Es verbleiben aber immer noch Divisionen bzw. Modulo durch 360 und 90. --[[Benutzer:Gjlayde|Gjlayde]] ([[Benutzer Diskussion:Gjlayde|Diskussion]]) 13:59, 28. Okt. 2013 (CET)&lt;br /&gt;
:: Ginge mit INT und Abziehen direkter und einfacher. [[Spezial:Beiträge/87.166.187.53|87.166.187.53]] 21:05, 28. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
:: Wenn nicht rad, dann könnte man anstatt in einer 360° Welt auch gleich in einer 256 oder 1024 Einheiten-Welt arbeiten. 07:02, 29. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentar des Autors ==&lt;br /&gt;
&lt;br /&gt;
Zugegeben, ich arbeite nur noch mit 32Bit-Arm Controllern und habe nicht über eine 8Bit Optimierung oder die Reduktion von Divisionen nachgedacht. Da gibt es sicher noch ein paar Optimierungsmöglichkeiten. Wichtig war mir, das Verständnis für einen so einfachen Algorithmus mit nur 188Byte code (CortexM4) zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorschlag:&#039;&#039;&#039; Optimiert das doch für 8Bit und mit Bitschift-Divisionen und wir bieten das als zusätzlichen Download mit an.&lt;br /&gt;
&lt;br /&gt;
MPetschke&lt;br /&gt;
&lt;br /&gt;
: Das ist ziemlich witzlos, weil schon jede Lookup-Tabelle für 8 Bit (256 Stützstellen) kleiner sein dürfte, als irgendwelche Berechnungen... --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 11:27, 29. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
: 256 Stützstellen sind garantiert größer als der vorliegende code.  MPetschke&lt;br /&gt;
&lt;br /&gt;
:: Vertu dich da mal nicht. Ist immerhin ein 8-Bitter ohne Hardware-Dividierer. Und dann ist die Rechenzeit noch nicht berücksichtigt. Schon allein die Ganzzahl-Divisionsroutine frisst etwa 80 Bytes. Dazu kommen die je zehn Stützstellen für Sinus und Cosinus mit insgesamt 40 Bytes. Die Routine selbst braucht nochmals 192 Bytes. Macht insgesamt also rund 300 Bytes, bei starker Optimierung (-O2, avr-gcc 4.7.2). Spart bei ganzzahligen Winkeln also eigentlich quasi fast nichts und braucht noch viel mehr Rechenzeit als eine Tabelle mit 360 Einträgen. --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 19:02, 29. Okt. 2013 (CET)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Schnelle_32Bit-Integer_Sinusberechnung&amp;diff=79205</id>
		<title>Diskussion:Schnelle 32Bit-Integer Sinusberechnung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Schnelle_32Bit-Integer_Sinusberechnung&amp;diff=79205"/>
		<updated>2013-10-29T10:27:05Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Kommentar des Autors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fragen und Probleme mit dem Code ==&lt;br /&gt;
&lt;br /&gt;
Mit dem aktuellen Code ergeben sich einige Probleme:&lt;br /&gt;
&lt;br /&gt;
* Je nach Plattform ist int lediglich 16 Bits breit: Der C-Standard garantiert mindestens 16 Bits für int, mehr jedoch nicht. Lösund wäre die Verwendung von stdin.h von C99 und Vermeidung von Überläufen wie sie momentan auftreten.&lt;br /&gt;
* Falls die Architektur nicht über Divisionsbefehle verfügt (Beispiel: [[AVR]]), ist die Berechnung keineswegs als &amp;quot;schnell&amp;quot; zu bezeichnen.&lt;br /&gt;
* Die angegebene Genauigkeit von 0.1% entspricht 10 Binärstellen.  Es stellt sich die Frage, warum dafür überhaupt 32-Bit Arithmetik verwendet wird.&lt;br /&gt;
* Die Eingabe erfolgt in Grad, es sind also nur 91 Eingaben (0°...90°) möglich falls man sich auf den ersten Quadranten beschränkt.  Dies erfordert eine Rundung der Eingabe auf ganze Grade, was einen Rundungsfehler von bis zu pi/360 bedingt.  Dies entspricht einer Genauigkeit von nur 7 Binärstellen, was schneller, einfacher und kürzer durch eine 91 Byte große Lookup-Table bewerkstelligt werden kann.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Gjlayde|Gjlayde]] ([[Benutzer Diskussion:Gjlayde|Diskussion]]) 11:15, 28. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
Wenn man 16 Stützstellen nimmt, kann die /10 Division durch eine Schiebeoperation optimiert werden.&lt;br /&gt;
&lt;br /&gt;
: Es verbleiben aber immer noch Divisionen bzw. Modulo durch 360 und 90. --[[Benutzer:Gjlayde|Gjlayde]] ([[Benutzer Diskussion:Gjlayde|Diskussion]]) 13:59, 28. Okt. 2013 (CET)&lt;br /&gt;
:: Ginge mit INT und Abziehen direkter und einfacher. [[Spezial:Beiträge/87.166.187.53|87.166.187.53]] 21:05, 28. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
:: Wenn nicht rad, dann könnte man anstatt in einer 360° Welt auch gleich in einer 256 oder 1024 Einheiten-Welt arbeiten. 07:02, 29. Okt. 2013 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentar des Autors ==&lt;br /&gt;
&lt;br /&gt;
Zugegeben, ich arbeite nur noch mit 32Bit-Arm Controllern und habe nicht über eine 8Bit Optimierung oder die Reduktion von Divisionen nachgedacht. Da gibt es sicher noch ein paar Optimierungsmöglichkeiten. Wichtig war mir, das Verständnis für einen so einfachen Algorithmus mit nur 188Byte code (CortexM4) zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorschlag:&#039;&#039;&#039; Optimiert das doch für 8Bit und mit Bitschift-Divisionen und wir bieten das als zusätzlichen Download mit an.&lt;br /&gt;
&lt;br /&gt;
MPetschke&lt;br /&gt;
&lt;br /&gt;
: Das ist ziemlich witzlos, weil schon jede Lookup-Tabelle für 8 Bit (256 Stützstellen) kleiner sein dürfte, als irgendwelche Berechnungen... --[[Benutzer:Haku|Haku]] ([[Benutzer Diskussion:Haku|Diskussion]]) 11:27, 29. Okt. 2013 (CET)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Eagle-Wishlist&amp;diff=79099</id>
		<title>Eagle-Wishlist</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Eagle-Wishlist&amp;diff=79099"/>
		<updated>2013-10-23T09:47:13Z</updated>

		<summary type="html">&lt;p&gt;Haku: erledigte Punkte aufgesammelt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite können Wünsche zur Erweiterung der Funktionen des Leiterplatten CAD Programms Cadsoft EAGLE eingetragen werden. Es ist keine offizelle Wunschliste von Cadsoft und es ist nicht bekannt, ob Cadsoft-Mitarbeiter diese Seite regelmässig sichten. Cadsoft sollte sicherheitshalber regelmäßig angeschrieben werden, damit diese Liste nicht in Vergessenheit gerät.&lt;br /&gt;
&lt;br /&gt;
Damit sich die beliebtesten Wünsche herauskristallisieren, macht jeder einfach einen virtuellen Strich dahinter: | (Windows: ALT-GR Taste und &amp;lt; Taste drücken, Mac OS X: Alt-Taste und 7 Taste drücken). Alle fünf Striche (|||||) bitte immer ein Leerzeichen einfügen.&lt;br /&gt;
&lt;br /&gt;
Neue Wünsche einfügen darf und soll natürlich auch jeder. Einfach ganz viele Striche auf einmal hinter einem Wunsch einzufügen ist zwecklos. Das erkennt man in der History, und es gibt viele Leute, die diese Seite überwachen...&lt;br /&gt;
&lt;br /&gt;
Ja, die Einleitung ist von der Reichelt-Wishlist geklaut. Existenzberechtigung für diese Seite: Farnell will Eagle verbessern. Siehe [http://de.farnell.com/jsp/bespoke/bespoke2.jsp?ICID=i-7706-00001001&amp;amp;bespokepage=farnell/de/design-link/cadsoft.jsp]&lt;br /&gt;
&lt;br /&gt;
== Programmfunktionen ==&lt;br /&gt;
&lt;br /&gt;
=== Control Panel ===&lt;br /&gt;
&lt;br /&gt;
* In Bibliothek: Bei Klick auf ein Device soll das Fenster an der aktuellen Position stehenbleiben ||&lt;br /&gt;
* In Bibliothek: Bildposition vom Symbol und Package soll fixed sein (mitscrollen), bei großen Device-Kollektionen vorteilhaft ||&lt;br /&gt;
* Möglichkeit, für unterschiedliche Programmversionen auch unterschiedliche Projektverzeichnisse zu verwenden. |&lt;br /&gt;
* Backupdateien in Unterverzeichnisse packen ||||| |||&lt;br /&gt;
* Raster-/Grid-Größe für X und Y Achse getrennt angeben |&lt;br /&gt;
* Möglichkeit einbauen um alle Bibliotheken INKL. Unterverzeichnisse zuladen.&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan-Editor ===&lt;br /&gt;
* Bibliotheken aus dem Download Bereich in die Releases mit aufnehmen ||||| || | 8&lt;br /&gt;
* Richtungsabhängige Labels: (3erlei) verschiedene Labels mit denen zusätzlich zum Netznamen die Signalrichtung (Eingang, Ausgang, Bidirektional) visualisiert werden kann ||||| ||||| | 11&lt;br /&gt;
* Farbige XREFs → Das Netz dazu in der gleichen Farbe ||||| 5&lt;br /&gt;
* Eigenen &#039;Lagerbestand&#039; mitverwalten, sodass beim Zeichnen von Plänen direkt nur Lagerteile verbaut werden (nützlich bei diesen ganzen SMD-Varianten) ||||| |||| 9&lt;br /&gt;
* &amp;quot;hierarchisches Design&amp;quot; von identisch aufgebauten Unterbaugruppen, sprich Subcomponenten mit definierten Input/Output-Signalen aus z.B. einer speziellen hierarchy.lib. Diese kann dann ja im gleichen Verzeichnis wieder als Schematic abgelegt werden. Mit dazugehöriger Board-Datei läßt sich dann auch das Layout clonen. ||||| ||||| ||||| || 17&lt;br /&gt;
* Drucken: neue Option &amp;quot;Automatisch drehen&amp;quot;, um bei mehrseitigen Plänen mit wechselnder Seitenorientierung automatisch auszurichten |||||  5&lt;br /&gt;
* Tastatur-/Maus-Bedienkonzept: z.B. Move, Copy etc. alle auf Tasten der linken Tastaturhälfte (bzw. auf der rechten für Linkshänder) und zwar ohne Ctrl/Shift etc. so daß man zügig arbeiten kann, ohne ständig mit der Maus umschalten zu müssen. ||||| |||| 9&lt;br /&gt;
* Der relative, beliebig setzbare Ursprung sollte vom absoluten zu unterscheiden sein (andere Farbe...) ||| 3&lt;br /&gt;
* Bauteilwerte direkt im ADD-Befehl festlegbar machen (-&amp;gt; Standardbauteile im Textmenü) ||| 3&lt;br /&gt;
* Der &amp;quot;Gruppenauswahlrahmen&amp;quot; sollte sich bei gedrückter Maustaste immer aufziehen lassen, nicht erst nach Druck auf Group. (Im Board auch) ||||| | 6&lt;br /&gt;
* Ein markiertes Bauteil/e sollte sich einfach mit Druck auf ENTF löschen lassen. |||| 4&lt;br /&gt;
&lt;br /&gt;
=== Board-Editor ===&lt;br /&gt;
* MOVE mit einstellbaren Freiheitsgraden. Beispielsweise, um parallel (nur horizontal/vertikal) oder diagonal zu verschieben | 1&lt;br /&gt;
* Mathematik-Funktionen in Eingabefeldern (+ plus, - minus, * mal, / geteilt und () Klammern) z.B.: 375mil+(13,6mm/2)  || 2&lt;br /&gt;
* Kacheln-Funktion im Drucken Dialog ||||| ||||| | 11&lt;br /&gt;
* Netznamen in verlegten Leiterbahnen einblenden&amp;lt;ref&amp;gt;Wird z.&amp;amp;nbsp;B. im AltiumDesigner so gemacht. Abstand und Größe der Beschriftung erfolgt je nach Zoom-Stufe.&amp;lt;/ref&amp;gt; ||||| ||||| 10&lt;br /&gt;
* Die Auswahl von Bauteilen sperren, die mit dem aktuellen Werkzeug nicht bearbeitet können&amp;lt;ref&amp;gt;Wenn zB eine Leiterbahn durch einen Bauteilmittelpunkt läuft und man mit Ripup auf den Mittelpunkt klickt, will man natürlich die Leiterbahn auflösen. Ripup lässt sich ja nicht auf Bauteile anwenden. Warum muss man also mit linker Maustaste wählen, auf was man Ripup anwenden will?&amp;lt;/ref&amp;gt; ||||| || 7&lt;br /&gt;
* Routing mit Walkaround/Push/Hug&amp;amp;Push Funktionen (Hindernisse automatisch umrouten beim FollowMe) ||||| || 7&lt;br /&gt;
* Parameter eines Objektes (Via, Track,..) per Doppelklick-Option bearbeitbar ||||| ||||| ||||| 15&lt;br /&gt;
* Thermal Vias für unterschiedliche Gehäuse einzeln anpassbar machen ||||| 5&lt;br /&gt;
* Padstack frei definierbar || 2&lt;br /&gt;
* Direkte Implementierung von EAGLE 3D ||||| ||||| ||||| ||||| ||||| ||| 28&lt;br /&gt;
* Messung der Leiterbahnlänge &amp;lt;ref&amp;gt;Die Messung der Länge einer Leiterbahn sollte zwischen zwei beliebigen Segmenten möglich sein. Man könnte dafür Start- und Endsegment markieren.&amp;lt;/ref&amp;gt; ||||| ||||| ||||| ||||| ||||| ||||| 30&lt;br /&gt;
* Weitere Standardgeometrien (Spiralen, Heaxagon u.ä.) ||||| ||||| || 12&lt;br /&gt;
* Andere Farben für Versorgungsspannungen definierbar machen ||||| ||||| |||| ||| 18&lt;br /&gt;
* Impedanzkontrolle von Leiterbahnen ||||| ||||| ||||| ||||| || 22&lt;br /&gt;
* Board im Editor drehen (90°-Schritte) und Umdrehen (Oberseite/Unterseite) ||||| ||||| ||||| || 17&lt;br /&gt;
* Kopieren von Leiterbahnen/Gruppen ||||| ||||| | 11&lt;br /&gt;
* Online (Echtzeit) DRC ||||| ||||| ||||| 15&lt;br /&gt;
* Direkte Integration von Teardrops bzw SnowMans ||||| | 6&lt;br /&gt;
* Chamfered edge (Anfasungen bei T-Leiterbahnverbindungen) | 1&lt;br /&gt;
* selektives Ratsnest (nicht mit dem Bauteil verbundene Luftlinien beim Plazieren ausblenden) ||||| || 7&lt;br /&gt;
* dynamisches Ratsnest (Luftlinien des Bauteils beim Plazieren zum nächstgelegenen Pin verbinden) ||||| ||||| ||||| | 16&lt;br /&gt;
* Benannte Gruppen in Editor und Schaltplan z.&amp;amp;nbsp;B. analog1 oder power zum einfachen plazieren || 2&lt;br /&gt;
* Dxf Drag and Drop Mechanische Teile direkt in eagle boards und libs ziehen | 1&lt;br /&gt;
* Parametrische Library-Erstellung über Textfile | 1&lt;br /&gt;
* Iges / Step Export. 3D Darstellung für Mcad exportieren |||| 4&lt;br /&gt;
* 3DScanner Import. Da eine fertige Leiterplatte die Lageinformationen aller Bauteile hat, wird über einen 3D-Scanner die Höheninformationen der Bauteile eingelesen und in die Bibliothek übertragen. || 2&lt;br /&gt;
* Direkte, einfache Nutzung von Layout- und Schaltplanmodulen | 1&lt;br /&gt;
* Im Layouteditor Bauteile konsistent platzieren sowie kopieren können || 2&lt;br /&gt;
* DRC: Bestückungsdruck auf PADs, SMDs oder VIAs ||| 3&lt;br /&gt;
* DRC: Warnung / Meldung über nicht geroutete Netze / bestehende Luftlinien ||||| ||||| ||||| ||||| 20&lt;br /&gt;
* Layer werden sofort aktiviert/deaktiviert ohne erst &amp;quot;Übernehmen&amp;quot; anklicken zu müssen ||||| |||| 9&lt;br /&gt;
* Wert von &amp;quot;Alle Packages anzeigen&amp;quot; im change technology-Dialog merken | 1&lt;br /&gt;
* Busse werden automatisch umbenannt falls Nets umbenannt werden ||| 3&lt;br /&gt;
* Unrouted Layer nur für aktivertes Bauteil (oder Bereich) anzeigen lassen | 1&lt;br /&gt;
* Schrift-Ausrichtung: alle vier Richtungen zulassen, anstatt nur nach rechts oder oben. Dafür Ausrichtungen links/zentriert/rechts zulassen || 2&lt;br /&gt;
* unsplit-Funktion: einen Knick aus einem Wire löschen (z.B. als Shift-optimize) ||||| ||||| 10&lt;br /&gt;
* Busse (oder mehrere parallele Leitungen gleichzeitig) verlegen (wo es Sinn macht) ||||| | 6&lt;br /&gt;
* &amp;quot;clonen&amp;quot; von Leiterbahnen-Routings von einer Baugruppe zu einer anderen ||||| 5&lt;br /&gt;
* Ausblenden von Bauelementen im Layouteditor. Beispielsweise nach einer bestimmten Buchse Stecker Kombination im Schaltplan. Wäre hilfreich um Bauelemente im Gehäuse darzustelle | 1&lt;br /&gt;
* &amp;quot;Lochrastermodus&amp;quot; um noch einfacher Pläne für Lochrasterplatinen zu erstellen ||||| 5&lt;br /&gt;
* Symmetrierfunktion, um Bauteile automatisch symmetrisch um eine Achse oder Punkt anordnen zu können || 2&lt;br /&gt;
* automatische Platzierung von Bauteilen im Board ||||| ||| 8&lt;br /&gt;
* Der relative, beliebig setzbare Ursprung sollte vom absoluten zu unterscheiden sein (ander Farbe...) ||| 3&lt;br /&gt;
* Offset Routing  - Gleichzeitiges verlegen von paralell verlaufenden Leiterbahnen |1&lt;br /&gt;
* Polygone gegen Verschieben schützen können (lock) || 2&lt;br /&gt;
* In Bauteilinfo die zugehörige Schaltplanseitennummer anzeigen || 2&lt;br /&gt;
* In Bauteilinfo die auch das DEVICE anzeigen (wie im Schaltplan) | 1&lt;br /&gt;
* Beim DRC einen Hinweis geben, wenn der Fehler durch Netzklassenregeln bedingt ist || 2&lt;br /&gt;
* Über Rechtsklickmenü eine ausgewählte Gruppe ins Raster setzen | 1&lt;br /&gt;
* die Airwires zeigen auf das Zentrum eines SMD Pads, das meist nicht auf dem raster liegt. Besser währe, wenn ein Bereich innerhalb des Pads als zulässiges Airwire-Ziel akzeptiert wird. Oft sind kleine Leiterbahnschnippsel übrig, mit denen man kämpfen muss. Pad ist eigentlich kontaktiert, aber man hat das zentrum wieder nicht getroffen. || 2&lt;br /&gt;
* invertierter Text einfach über Textbefehl einfügen zu können | 1&lt;br /&gt;
&lt;br /&gt;
=== Autorouter ===&lt;br /&gt;
&lt;br /&gt;
* Ausführungen des Autorouters zurücksetzen (z.&amp;amp;nbsp;B. mit Ctrl + Z) ||||| ||||| ||||| ||||| ||||| || 27&lt;br /&gt;
* Autorouter um Autoplacer von nicht gelockten Bauteilen ergänzen ||||| | 6&lt;br /&gt;
&lt;br /&gt;
=== Bibiliotheks-Editor ===&lt;br /&gt;
&lt;br /&gt;
* Alle Packages zentral speichern, zB in ref-packages. Andere Libs laden dann von da das Package und verbinden das mit ihren Symbols ||||| ||||| ||||| |||| 19&lt;br /&gt;
* Verschiedene Symbole für ein Bauteil (Auswählbar im Schaltplaneditor) ||||| 5&lt;br /&gt;
* Möglichkeit Symbole einzeln zu kopieren und nicht nur als Device inkl. allen Varianten/ Packages ||||| 5&lt;br /&gt;
* Pin-Namen und Nummern per Smash-Befehl verschiebbar und drehbar ||| 3&lt;br /&gt;
* Pin-Namen und Nummern auch in Schriftgröße einstellbar || 2&lt;br /&gt;
* Bibliotheken ausblenden oder Favoritenliste | 1&lt;br /&gt;
* Pin-Namen im Symbol mit auswählbaren Alternativen versehen (bei MCUs teilweise 8fach belegt) ||| 3&lt;br /&gt;
* Bauteile im Device als optional kennzeichnen, damit z.B. für MCUs unterschiedliche Packages als Varianten ausgewählt werden können | 1&lt;br /&gt;
&lt;br /&gt;
== Preispolitik/Sonstiges ==&lt;br /&gt;
* Funktionsumfang der Non-Profit Version auf Schaltplan+Board mit 2 Layern reduzieren (Autorouter und 2 Innenlagen fallen weg), dafür max. Leiterplattengröße auf Doppel-Euro erhöhen. Besser noch 320cm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; in beliebigem Format. ||||| ||||| ||||| ||||| ||||| ||||| 30&lt;br /&gt;
* Kostenlose Studentenversion ||||| ||||| ||||| ||||| ||||| 25&lt;br /&gt;
* max. Leiterplattengröße der Light-Version auf 160x100mm erhöhen. Dafür den Autorouter weglassen. ||||| ||||| ||||| ||||| ||||| || 27&lt;br /&gt;
* Light Version auf 2 Signal + 2 Power Lagen anheben. 2 Lagen ist nicht mehr Zeitgemäß ||||| |||||  10&lt;br /&gt;
* Generell eine ordentlicher strukturierte Bibliothek. Beispielsweise Widerstandsgehäuse in unterschiedlichen Rastern (&amp;quot;lange Beinchen&amp;quot;), einheitliches Bezeichnungsschema usw. ||||| ||||| | 11&lt;br /&gt;
* Bibliotheken mit Sammlungen der Bestände verschiedener Lieferanten (Reichelt, Segor, Farnell) ||||| ||||| 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Erledigte Punkte ==&lt;br /&gt;
* Mehrzeilige Texte (Mehrzeilige Texte sind ab Version 6.3 möglich) |||| 4&lt;br /&gt;
* Neben Ckeckbox &amp;quot;Smds&amp;quot; neue Checkbox &amp;quot;bedrahtet&amp;quot;, sodass diese ausgeschaltet werden können, wenn nur mit SMDs gearbeitet wird (wurde nun in die Suchfunktion übernommen) ||||| |||| 9&lt;br /&gt;
* Meanderstrukturen für Leiterbahnlängenausgleich ||||| ||| 8&lt;br /&gt;
* Standardbauteile oder Makros in &amp;quot;Schnellzugriff&amp;quot; (Symbolleiste) für den Schnellzugriff (Mit dem &#039;&#039;MENU&#039;&#039;-Befehl lässt sich eine Symbolleiste erzeugen, deren Knöpfe wiederum mit beliebigen Befehlen belegt werden können, einschließlich &#039;&#039;ADD&#039;&#039; --[[Benutzer:Haku|Haku]] 08:47, 21. Feb. 2010 (UTC)) oder &#039;&#039;RUN&#039;&#039;/&#039;&#039;SCRIPT&#039;&#039; für Makros. |||&lt;br /&gt;
* 2-3 frei definierbare Layerauswahlen, die sofort per Klick bzw. Shortcut übernommen und angezeigt werden (Es gibt die ALIAS-Option für den DISPLAY-Befehl. Shortcut dann wieder mit MENU oder direkt in den Einstellungen eine Tastenkombination festlegen) || 2 &lt;br /&gt;
* Auswahlmenü beim Kopieren von Bauteilen, damit nur einzelne Packages (z.&amp;amp;nbsp;B. nur SO16) kopiert werden können und nicht zusätzlich alle anderen Varianten (z.&amp;amp;nbsp;B. DIL16, TSSOP16, usw.) (spätestens ab 6.5.0) |||| 4&lt;br /&gt;
* Zusätzliches Flag für Bauteile (Bestückt / Unbestückt), damit Bestückungsvarianten erstellt werden können (Bestückungsvarianten, spätestens ab 6.5.0 verfügbar) ||||| 5&lt;br /&gt;
* Einem Pin im Symbol können mehrere Pins eines Packages zugewiesen werden ||||| ||| 8  - gibt es ab 6.xx&lt;br /&gt;
* Polygone (mit Pad-Namen) zulassen für PAD-Sonderformen ||||| ||| 8 - gibt es indirekt ab 6.x&lt;br /&gt;
* Aktualisierung der Programmdateien statt jedes mal im neuen Ordner zu installieren &amp;lt;ref&amp;gt;&#039;&#039;Nichts&#039;&#039; anderes passiert bei Installation im &#039;&#039;gleichen&#039;&#039; Ordner. Lesen lernen... → Diskussion --[[Benutzer:Hownottobeseen|Hownottobeseen]]&amp;lt;/ref&amp;gt; ||||| | 6&lt;br /&gt;
* Abstandsmessung (Wie in Sprint-Layout: Mit Maustaste auf Startpunk klicken, gedrückt halten und zum Endpunkt ziehen. Länge und Winkel der Strecke werden in Echtzeit angezeigt.) (Dazu benutzt man en MARK-Befehl, um den Startpunkt zu setzen. Dann werden Winkel, Abstand und x/y-Offset in Echtzeit angezeigt) ||||| ||||| ||||| ||||| ||| 23&lt;br /&gt;
* Suche im Bauteilkatalog nach Lieferanten-Artikelnummer (sofern gepflegt) (spätestens ab 6.5.0 kann man nach Attributen und Attributwerten suchen) ||| 3&lt;br /&gt;
* Routen von LVDS-Leitungspaaren (Mäander) ||||| ||||| 10&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
Diskussion im Forum: http://www.mikrocontroller.net/topic/169171&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Eagle]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FET&amp;diff=79075</id>
		<title>FET</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FET&amp;diff=79075"/>
		<updated>2013-10-21T11:56:12Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Linearbetrieb von MOSFETs */ Trench-Fets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel versteht sich als Unterpunkt zum Artikel [[Leistungselektronik]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein FET (engl. &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor) ist ein  Feldeffekttransistor. Der FET ist ein Bauelement, das im Gegensatz zum Bipolartransistor (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT) mit Spannung und nicht mit Strom gesteuert wird. Unterschieden werden&lt;br /&gt;
* MOSFET = engl. &#039;&#039;&#039;M&#039;&#039;&#039;etall &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor; Metalloxidschicht-FET, größte Teilgruppe der FETs mit isoliertem Gate &lt;br /&gt;
* JFET = engl. &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;E&#039;&#039;&#039;ffect &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, Übergangszonen FET, der steuerbare Kanal wird durch einen PN-Übergang wie in einer Diode gebildet&lt;br /&gt;
&lt;br /&gt;
Die drei Anschlüsse eines FETs werden &#039;&#039;Gate&#039;&#039;, &#039;&#039;Drain&#039;&#039; und &#039;&#039;Source&#039;&#039; genannt. Unter Umständen ist ein vierter Anschluß vorhanden, der &#039;&#039;Bulk&#039;&#039; genannt wird. Normalerweise ist Bulk intern mit Source verbunden. Wenn dies nicht der Fall ist, muss diese Verbindung durch den Designer in der Schaltung hergestellt werden.&lt;br /&gt;
&lt;br /&gt;
== FET-Typen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FETs werden hauptsächlich unterschieden in N-Kanal und P-Kanal, sowie &amp;quot;selbst sperrend = Anreicherungstyp&amp;quot; (engl. enhancement type) und &amp;quot;selbst leitend = Verarmungstyp&amp;quot; (engl. depletion type). Beim selbstleitenden FET ist der Transitor bei 0V Gate-Source Spannung maximal leitend (durchgesteuert) und wird durch Anlegen einer Spannung ans Gate gesperrt. Beim selbstsperrenden FET (größte Gruppe) ist der Transistor bei 0V Gate-Source Spannung gesperrt und wird durch Anlegen einer Spannung ans Gate leitend. Ist die Linie zwischen Drain und Source durchgezogen handelt es sich um einen selbstleitenden, bei einer gestrichelten Linie um einen selbstsperrenden FET. JFETs gibt es nur als Verarmungstyp. Im weiteren Artikel wird nur mehr der &amp;quot;selbstsperrende&amp;quot; MOSFET betrachtet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Typen von Feldeffekttransistoren&amp;lt;br/&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Typ || N-Kanal || P-Kanal&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| JFET  || [[bild:JFET-N.png|center]]&lt;br /&gt;
* drittgrößte Gruppe&lt;br /&gt;
* bislang nur für kleine Leistungen verfügbar&lt;br /&gt;
* JFETs mit hoher Leistung sind im Kommen&lt;br /&gt;
* Eingangsstufen von OPVs&lt;br /&gt;
* Eingangsstufen von HF-Verstärkern bis in den GHz-Bereich&lt;br /&gt;
* als einfache [[Konstantstromquelle]] geeignet&lt;br /&gt;
| [[bild:JFET-P.png|center]]&lt;br /&gt;
* selten &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Anreicherungstyp || [[bild:MOS-EN.png|center]]&lt;br /&gt;
* größte Gruppe&lt;br /&gt;
* sehr viele Typen erhältlich&lt;br /&gt;
| [[bild:MOS-EP.png|center]]&lt;br /&gt;
* zweitgrößte Gruppe&lt;br /&gt;
* bei gleicher Geometrie etwas schlechter als ein N-Kanal Typ&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| MOSFET&amp;lt;br/&amp;gt;Verarmungstyp || [[bild:MOS-DN.png|center]]&lt;br /&gt;
* selten&lt;br /&gt;
| [[bild:MOS-DP.png|center]]&lt;br /&gt;
* sehr selten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Meist niedrigere Verluste als bei Bipolartransistoren.&lt;br /&gt;
* Sehr schnelles Schalten möglich, daher für sehr hohe Frequenzen geeignet (keine Speicherzeit wie beim BJT).&lt;br /&gt;
* Einfaches Parallelschalten im Schaltbetrieb, da Unterschiede im &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; durch den positiven Temperaturkoeffizienten ausgeglichen werden.&lt;br /&gt;
* Leistungslose Ansteuerung im statischen Fall, jedoch hohe Umladeverluste am Gate!&lt;br /&gt;
* oft preiswerter als vergleichbare Bipolartransistoren (engl. &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;J&#039;&#039;&#039;unction &#039;&#039;&#039;T&#039;&#039;&#039;ransistor, BJT)&lt;br /&gt;
* Relativ unempfindlich gegen Überspannung zwischen Drain und Source. Bei Überschreitung der Maximalspannung zwischen Drain und Source findet ein sogenannter &amp;quot;Durchbruch&amp;quot; statt. Dies ist vergleichbar mit dem Zener-Effekt. Ist die Energiemenge begrenzt, ist dieser Durchbruch reversibel und der FET wird NICHT zerstört, im Gegensatz zum BJT.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des FET ===&lt;br /&gt;
&lt;br /&gt;
* Nur bedingt für hohe Spannungen [[Transistor#Wann setzt man einen MOSFET, Bipolartransistor, IGBT oder Thyristor ein ? |geeignet]], die ON-Verluste sind ab ca. 250V höher als bei einem [[IGBT]]. &lt;br /&gt;
* Parasitäre Diode parallel zur Drain-Source Strecke ist immer enthalten, das (Ab-)Schaltverhalten dieser Dioden ist meist schlechter als separate Dioden, was häufig zu unerwünschten Schwingungen führt.&lt;br /&gt;
* Empfindlicher gegen ESD am Gate als BJT&lt;br /&gt;
* Positiver Temperaturkoeffizient (TK), der &amp;lt;math&amp;gt;R_{DS,on}&amp;lt;/math&amp;gt; ist stark temperaturabhängig und steigt von 25°C (Datenblattangabe) auf 150°C ungefähr um den Faktor 2. Dadurch steigen auch die Verluste und damit die Erwärmung des Bauteiles.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der wichtigsten Datenblattwerte ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Wert&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Drain Source (Breakdown) Voltage || V(BR)_DSS oder V_DS || 75V || Maximale Spannungsfestigkeit des Bauteiles zwischen Drain und Source&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Drain current  || I_D(on)   || 55A @125°C  || Maximaler Dauerstrom bei 125°C Gehäusetemperatur &lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Drain Current || ID_pulse oder I_CD(on) || 240A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Repetetive Avalanche Energy || t_sc ||  280mJ || Maximale Energie, welche beim Avalanche Durchbruch bei Überschreiten der maximalen Drain-Source Spannung im MOSFET bei z.&amp;amp;nbsp;B. 1% Puls/Pausen Verhältnis regelmäßig auftreten darf, ohne den FET zu schädigen&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_ON ||  0,01Ω || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;25°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source ON Resistance || R_DS_on ||  0,021Ω || Widerstand des eingeschalteten FETs bei &#039;&#039;&#039;175°C&#039;&#039;&#039;, V_GS = 10V und ID = 30A&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  R_th_JC ||  0,8K/W || Thermischer Widerstand im Transistor vom eigentlichen Chip im Inneren (junction) bis zur Rückseite des Transistorgehäuses (case)&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Source Threshold Voltage ||  V_GS(th) || 2,0-4,5V || Gatespannung, ab welcher der Transistor minimal leitend wird (I_D typisch 100-200µA), große Toleranz, typisch 1:2 zwischen Minimum und Maximum&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  t_d(on) || 40ns ||  Verzögerung zwischen dem Einschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  t_r || 200ns ||  Anstiegszeit des Transistorstromes am Drain&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || t_d(off) || 120ns ||  Verzögerung zwischen Abschalten am Gate bis zur Reaktion im Drainstrom&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  t_f  || 60ns || Abfallzeit des Transistorstromes am Drain  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die oben genannten Zeiten gelten ausschließlich unter den angegebenen Messbedungungen (Gatewiderstand, Treiberspannung, etc.) und müssen für die eigene Anwendung ggf. neu berechnet werden. Meist wird man sie eher messen, weil die Rechung zu aufwändig und bisweilen unmöglich ist. Achtung: Die Tabelle ist nur für eine Temperatur von 25° C gültig !!&lt;br /&gt;
&lt;br /&gt;
Gerade bei der &#039;&#039;&#039;Gate-Source Threshold Voltage &amp;lt;math&amp;gt;V_{GS}(th)&amp;lt;/math&amp;gt;&#039;&#039;&#039; gibt es hier immer wieder Verwirrung. Sie gibt an, ab welcher Spannung der MOSFET &#039;&#039;&#039;minimal&#039;&#039;&#039; leitfähig wird, je nach Datenblatt bei 100-250µA Drainstrom. Diese Spannung ist technologisch bedingt auch heute noch einer starken Toleranz unterworfen, typisch 1:2 zwischen Minimum und Maximum. Im praktischen Betrieb muss man mindestens das Doppelte anlegen, um den MOSFET voll aufzusteuern. Wer es solide machen will nimmt dabei typisch 10-15V für einen Standardtypen und 3-5V für einen Logic Level Mosfet, dabei &#039;&#039;&#039;immer&#039;&#039;&#039; den Wert aus dem Datenblatt beachten, welcher unter &amp;lt;math&amp;gt;R_{DS-ON}&amp;lt;/math&amp;gt; als Messbedingung angegeben ist. Deshalb braucht man bei 5V Ansteuerung einen Typen, der &#039;&#039;&#039;sicher&#039;&#039;&#039; bei typ. 4,5V voll durchgesteuert ist, z.B. IRLZ34N. Bei 3,3V ist er bereits nicht mehr zuverlässig nutzbar. Es gibt auch Typen mit noch geringerer Spannung für Vollaussteuerung. Wer einen BUZ11 mit 5V ansteuert riskiert ein Abfackeln des MOSFETs, denn je nach Toleranz kann er bereit ganz gut aufgesteuert sein oder auch nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039; Parasitäre Diode des FETs  &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039; || &#039;&#039;&#039;Symbol&#039;&#039;&#039; || &#039;&#039;&#039;Value&#039;&#039;&#039; (Beispiel)|| &#039;&#039;&#039;Erklärung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Continuous Current (Diode) ||  I_S || 75A || Maximaler Dauerstrom der parasitären Diode, meist identisch zum maximalen Dauerstrom des MOSFETs&lt;br /&gt;
|-&lt;br /&gt;
| Forward Voltage (Diode)||  V_SD || 1,0..1,3V || Spannungsfall an der parasitären Diode &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Time ||  t_rr || 80..120ns || Zeit, die die Elektronen brauchen um aus der leitenden Diode vollständig abzufließen. Während dieser Zeit fließt der Strom in &#039;&#039;&#039;Rückwärtsrichtung&#039;&#039;&#039; durch die Diode. &lt;br /&gt;
|-&lt;br /&gt;
| Reverse Recovery Charge ||  Q_rr || 60nC || Ladungsmenge, die während t_rr rückwärts durch die Diode fließt.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SOA Diagramm ====&lt;br /&gt;
&lt;br /&gt;
SOA-Diagramm (engl. &#039;&#039;&#039;S&#039;&#039;&#039;afe &#039;&#039;&#039;O&#039;&#039;&#039;perating &#039;&#039;&#039;A&#039;&#039;&#039;rea, sicherer Arbeitsbereich) beschreibt die zulässige Verlustleistung eines Transistors in Anhängigkeit des Drainstroms (I_D), der Drain-Source Spannung (U_DS) und der Pulsbreite. Als Beispiel sei hier der BUZ 11 genannt. Im nachfolgenden Diagramm ist das SOA-Diagrmm dargestellt. Wie ist es zu verstehen? Zunächst gibt es eine Grenze auf der linken Seite, die schräge, dunkelblaue Line. Diese wird durch den minimalen R_DS_ON festgelegt, hier wirkt der MOSFET wie ein ohmscher Widerstand. Mehr Strom kann bei einer bestimmten Spannung nicht fließen. Die zweite Grenzlinie ist ganz rechts die pinkfarbene Linie, sie stellt die maximale Sperrspannung des MOSFET dar. Die dritte Grenze ist der maximal zulässige Drainstrom, hier im Beispiel 120A, dargestellt durch die gelbe Linie. Die maximale Spannung zwischen Drain und Source sowie der Drainstrom sind abhängig von der Pulsbreite, mit welcher der MOSFET betrieben wird. Bei nur 2,5µs Pulsbreite (Rechteckimpuls) müssen die beiden Parameter sich innerhalb der Fläche bewegen, welche durch die dunkelblaue, gelbe und die pinkfarbene Line begrenzt wird. Im Extremfall dürfen 50V anliegen und 120A fließen, das sind satte 6kW Pulsleistung! Werden die Pulse breiter, so sinken die zulässigen Ströme und Spannungen, bei 1ms (dunkelblaue Linie bis zur braunen Linie, dann zur pinkfarbenen Linie) sind maximal noch 50V und 7A zulässig, also nur noch 350W. Die letzte Linie stellt den Fall für Gleichstrom (engl. &#039;&#039;&#039;D&#039;&#039;&#039;irect &#039;&#039;&#039;C&#039;&#039;&#039;urrent), also Dauerbelastung dar, hier sind bei 50V maximal 1,5A zulässig, was einer Dauerverlustleistung von 75W entspricht. MOSFETs, welche nur für Schaltbetrieb und nicht für [[#Linearbetrieb von MOSFETs | Linearbetrieb]] geeignet sind, haben keine Kennlinie für DC. Im normalen Schaltbetrieb liegt der Arbeitspunkt auf der linken Grenzlinie R_DS_ON_MIN.&lt;br /&gt;
&lt;br /&gt;
[[bild: SOA-BUZ11.png | thumb | 300px| SOA-Diagramm]]&lt;br /&gt;
&lt;br /&gt;
Bei der Anwendung des Diagramms gilt es einiges zu beachten. Die Pulsleistungen sind nur zulässig, wenn der MOSFET vorher kalt ist, sprich ca. 25°C Sperrschichttemperatur hat. War er vorher schon heiß, reduziert sich die zulässige Belastung deutlich. Ebenso dürfen die Pulse nicht zu schnell wiederholt werden, denn dann ist der MOSFET noch vom vorherigen Puls aufgeheizt. Im Fall von DC sind 75W Verlustleistung auch eher ein theoretischer Wert, welcher real nur schwer erreicht werden kann, wenn der MOSFET auf einem sehr großen [[Kühlkörper]] optimal montiert ist. Praktisch liegen die erreichbaren Werte eher bei der Hälfte.&lt;br /&gt;
&lt;br /&gt;
(Anm. Eigentlich müsste für die R_DS_ON Grenzlinie R = U / I der minimale R_DS_ON rauskommen, hier ~40mOhm, es kommen aber ~80mOhm raus. Die Ursache dafür ist unklar, möglicherweise liegt hier ein Sicherheitsfaktor zu grunde).&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Haupttypen und Gatespannungslevel ==&lt;br /&gt;
&lt;br /&gt;
===Unterschied N-Kanal / P-Kanal FET===&lt;br /&gt;
&lt;br /&gt;
Im Schaltsymbol werden die MOSFET-Typen meist durch die Pfeilrichtung in der Mitte des Symbols (eigentlich &amp;quot;Bulk&amp;quot;) vom oder zum Gate unterschieden.  Zeigt der Pfeil zum Gate hin, handelt es sich um einen N-Kanal-FET, zeigt der Pfeil vom Gate weg um einen P-Kanal FET.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des N-Kanal FETs (Elektronenleitung) ist, daß er immer niederohmiger ist, als ein gleich großer P-Kanal FET (Löcherleitung). Daher sind P-Kanal Typen bei vergleichbaren Werten auch immer größer = teuerer da weniger Chips auf einem Wafer Platz haben.&lt;br /&gt;
&lt;br /&gt;
Beim N-Kanal FET muss die Gatespannung positiv gegenüber Source sein. Dabei wird der FET dann leitend, wenn die sogenannte &amp;quot;threshold voltage&amp;quot; (Schwellenspannung) erreicht wird. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;Low-Side Schalter&#039;&#039;&#039;: Source an GND, Drain an die Last, Ansteuerung des N-Kanal FETs mit 12V gleichbedeutend mit 12V ÜBER den Source = GND Potential.&lt;br /&gt;
 &lt;br /&gt;
Beim P-Kanal FET muss die Gatespannung negativ gegenüber Source sein. Eine typische Anwendung ist z.&amp;amp;nbsp;B. ein &#039;&#039;&#039;High-Side Schalter&#039;&#039;&#039;:  Source an z.&amp;amp;nbsp;B. 400V, Drain an die Last, Ansteuerung des P-Kanal FETs mit 388V also 12V UNTER dem Sourcepotential.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann ein High-Side Schalter auch mit einem N-Kanal FET realisiert werden, was in diesem Fall eine zusätzliche Spannungsquelle bedeutet, denn der FET wird dann mit 412V eingeschaltet. Beim P-Kanal FET ist diese zusätzliche Spannungsquelle nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weblinks&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009943 A primer on high-side FET load switches (Part 1 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products, Micrel, Inc., 5/3/2007 4:14 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.eetimes.com/General/DisplayPrintViewContent?contentItemId=4009944 A primer on high-side FET load switches (Part 2 of 2)], Qi Deng, Senior Product Marketing Manager, Mixed-Signal Products. Micrel, Inc., 5/7/2007 1:36 PM EDT, www.eetimes.com&lt;br /&gt;
* [http://www.vishay.com/docs/70611/70611.pdf AN804 P-Channel MOSFETs, the Best Choice for High-Side Switching (PDF)] von Vishay Siliconix&lt;br /&gt;
&lt;br /&gt;
===Unterschied Logic-Level / &amp;quot;Normal&amp;quot;-Level===&lt;br /&gt;
&lt;br /&gt;
Den meisten FETs ist gemein, daß sie mit einer Spannung von 10..15V angesteuert werden müssen, um den minimalen Einschaltwiderstand zu erreichen. Diese FETs lassen sich nicht ohne weiteres mit einem CMOS-Pegel von 5V ansteuern. Es gibt jedoch für diesen Anwendungsfall sogenannte &amp;quot;Logic Level&amp;quot; (LL) FETs, die schon bei einer Gatespannung von etwa 4,5V voll durchgesteuert sind. Einige Kleinsignal-FETs sind schon ab ca. 1,2V voll durchgesteuert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Bauteiledimensionierung ==&lt;br /&gt;
&lt;br /&gt;
=== Spannungsfestigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die höchste vorkommende Betriebsspannung + Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. &lt;br /&gt;
&lt;br /&gt;
Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem FET wird es immer eine parasitäre Induktivität geben.&lt;br /&gt;
Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Übrspannungsspitze produziert. Dieser Peak&lt;br /&gt;
addiert sich auf die aktuelle Versorgungsspannung.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit:  dI/dt = -100A/µs (= Abschalten von 5A innerhalb 50ns),&lt;br /&gt;
* Induktivität:   L = 1µH (~ 1 m loses, ungebündeltes Kabel)&lt;br /&gt;
* dU=-L*dI/dt = -1µH * (-100A / 1µs) = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der &amp;quot;Induktivität&amp;quot; zwischen Transistor und Kondensator - Aufgrund von Selbstinduktion im Schaltmoment - ein Überspannungspuls von ca. 100V entsteht, der auf die Betriebsspannung aufzuschlagen ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromtragfähigkeit ===&lt;br /&gt;
&lt;br /&gt;
In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C, und meist noch bei einer höheren Temperatur z.B. 125°C, 150°C oder 175°C Kühlfahnentemperatur angegeben. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend, aber aus der theoretisch abführbaren Verlustleistung errechnet, und&lt;br /&gt;
* dient zum qualitativen Vergleich von Transistoren bezüglich ihres R_ds(on) und ihres Wärmewiderstands.&lt;br /&gt;
* ist für die Dimensionierung einer Schaltung nur als Richtwert zu interpretieren. &lt;br /&gt;
* ist ohne Schaltverluste genannt, und daher nur für einen Schaltbetrieb von wenigen Hz gültig. Außerdem wird ein annähernd idealer Kühlkörper unterstellt, der trotz der Verlustleistung das Gehäuse des Transistors auf der angegebenen Temperatur halten kann.&lt;br /&gt;
* entbindet einen nicht davon den Kopf einzuschalten... siehe die nachfolgenden Zeilen.&lt;br /&gt;
* Liegt der Strom für den die Schaltung entwickelt wird mit ca. 10..20% Abstand unter dem Datenblattwert von 125°C ist dieses Bauteil vermutlich verwendbar (siehe Detailberechnungen unten !).   &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 125°C sollte entweder ein anderer Typ eingesetzt oder mehrere FETs parallelgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für eine getaktete Anwendung betrachtet. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der Einschaltphase Verluste im Bauteil auf. Diese Verluste führen zu einer Bauteilerwärmung. Die dabei entstehende Temperatur darf die maximal zulässige Bauteiletemperatur nie überschreiten. Bei den ersten Projekten ist zu empfehlen eine berechnete Chiptemperatur von ca. 125°C nicht zu überschreiten. Fast alle aktuell verfügbaren FETs nennen im Datenblatt eine Temperatur von 175°C als ihre maximale Chiptemperatur.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter || Symbol ||Wert&lt;br /&gt;
|-&lt;br /&gt;
| Betriebsspannung || U&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 70 V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt; || 30 A&lt;br /&gt;
|-&lt;br /&gt;
| Drain-Source Widerstand bei einer Chiptemperatur von 125°C und einer Gatespannung von 10V || R&amp;lt;sub&amp;gt;DS&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 17 mΩ&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t&amp;lt;sub&amp;gt;on&amp;lt;/sub&amp;gt; || 150 µs&lt;br /&gt;
|-&lt;br /&gt;
| Schaltfrequenz || ƒ&amp;lt;sub&amp;gt;schalt&amp;lt;/sub&amp;gt; || 5 kHz, (T = 200µs)&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t&amp;lt;sub&amp;gt;r&amp;lt;/sub&amp;gt; || 500 ns&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t&amp;lt;sub&amp;gt;ƒ&amp;lt;/sub&amp;gt; || 800 ns &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Leitungsverluste ====&lt;br /&gt;
&lt;br /&gt;
Während der FET bei [[PWM]]-Ansteuerung eingeschaltet ist, erzeugt er Verlustleitung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\text{ON}&lt;br /&gt;
 = I_\mathrm{N}^2 \cdot R_\mathrm{DS_\mathrm{ON}} \cdot \frac{t_\mathrm{ON}}{T}&lt;br /&gt;
 = 30A^2 \cdot 17m\Omega  \cdot \frac{150\mu s}{200\mu s} = 11{,}5W&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste ====&lt;br /&gt;
&lt;br /&gt;
Vereinfachter Ansatz.&lt;br /&gt;
&lt;br /&gt;
Einschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_r}&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_r}{T} \\&lt;br /&gt;
&amp;amp;= \tfrac14 \cdot 70V \cdot 30A \cdot \frac{500ns}{200\mu s}=1{,}3W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausschalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_\mathrm{SW_f} &lt;br /&gt;
&amp;amp;=\tfrac14 \cdot U_N \cdot I_N \cdot \frac{t_f}{T}\\&lt;br /&gt;
&amp;amp;=\tfrac14 \cdot 70V \cdot 30A \cdot \frac{800ns}{200\mu s}=2{,}1W&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ und genauer kann man rechnen, wenn die Ein- Ausschaltenergie im Datenblatt angegeben ist. Aber Achtung! Die  Randbedingungen unter denen die genannte Energie ermittelt wurde, müssen genau so zutreffen.&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_{SW_f} = f_{schalt} \cdot E_{ON}&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
P_{SW_r} = f_{schalt} \cdot E_{OFF}&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 15W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt und die Chiptemperatur berechnet werden. z.&amp;amp;nbsp;B.:&lt;br /&gt;
* Kühlkörper mit einem R_th von 0,2K/W&lt;br /&gt;
* max. Umgebungstemperatur +60°C&lt;br /&gt;
* R_th &amp;quot;junction-case&amp;quot; des FETs 0,8K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen FET und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 3,0K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 18W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 18W * 3,0K/W +60°C = 114°C. ==&amp;gt; o.k.!&lt;br /&gt;
&lt;br /&gt;
Unter Berücksichtigung der Tatsache, daß hier viele Vereinfachungen vorgenommen, und die Art der Last nicht beachtet wurde ist es sinnvoll, einen gewissen Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf ca. 125°C zu beschränken. &lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist hier die parasitäre Diode im FET nicht berücksichtigt.&lt;br /&gt;
Wenn während der &amp;quot;off&amp;quot; Zeit ein Strom über die Diode fließt (Reverse recovery current oder Freilaufstrom), muß die dadurch &#039;&#039;&#039;zusätzlich&#039;&#039;&#039; entstehende Verlustleistung in die obige Berechnung der maximalen Chiptemperatur mit einfließen.&lt;br /&gt;
&lt;br /&gt;
==Treiberleistung==&lt;br /&gt;
&lt;br /&gt;
Auch wenn der MOSFET ein spannungsgesteuertes Bauelement ist, muss trotzdem bei jedem Einschalten und bei jedem Ausschalten die Gatekapazität umgeladen werden. Bei einigen wenigen Leistungs-FET muss sogar teilweise mit negativer Spannung am Gate gearbeitet werden, um eine vollständige Sperrung zu erreichen.&lt;br /&gt;
Diese Umladung muss möglichst schnell erfolgen, um die Verluste im FET während der Umschaltphase zu minimieren. Dazu findet ein [[Mosfet-Übersicht#Mosfet-Treiber|Mosfet-Treiber]] Verwendung.&lt;br /&gt;
Da die Gatekapazität nicht direkt im Datenblatt enthalten ist kann man sich mit der Eingangskapazität Ciss behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Ciss angegebene Wert. &lt;br /&gt;
Daher berechnet sich die Treiberleistung wie folgt: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{Treiber} = C \cdot U^2 \cdot f = 5 \cdot C_\text{iss} \cdot U_\text{Gate}^2 \cdot f_\text{schalt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.Beispiel, kleine MOSFET-Steuerung mit niedriger Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 4{,}8\,\text{nF} \cdot 15\,\text{V}^2 \cdot 10\,\text{kHz} = 54\,\text{mW}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Beispiel, sehr große MOSFET-Steuerung für Induktionsheizung mit sehr hoher Leistung und Frequenz.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P_\text{treiber} = 5 \cdot 24\,\text{nF} \cdot 15\,\text{V}^2 \cdot 250\,\text{kHz} = 6{,}75\,\text{W}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber Achtung, so ein MOSFET-Treiber hat auch einen Eigenverbrauch, der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
Bei niedrigen PWM-Frequenzen kann man Logic Level MOSFETs auch direkt per CMOS-Ausgang ansteuern, z.B. mit einem [[AVR]], wie in diesem [http://www.mikrocontroller.net/topic/246449#2519459 Forumsbeitrag] zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
== Low- und High-Side ==&lt;br /&gt;
&lt;br /&gt;
Definition LS- und HS:&lt;br /&gt;
 &lt;br /&gt;
;Low-Side: Schalter, der FET schaltet eine Last gegen GND &amp;amp;ndash; auch als LS-Schalter bezeichnet.&lt;br /&gt;
;High-Side: Schalter, der FET schaltet eine Last an die Versorgungsspannung – auch als HS-Schalter bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Anregungen oder Fragen auch gerne per Email an [http://www.mikrocontroller.net/user/show/powerfreak Powerfreak]. Dieser Artikel kann dadurch regelmäßig erweitert und ggf. durch ein FAQ ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
== Linearbetrieb von MOSFETs ==&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Anwendungen nutzt MOSFETs als Schalter, d.h. der MOSFET ist entweder voll gesperrt oder voll durchgesteuert. Dafür gelten auch all die Hinweise in diesem Artikel. In bestimmten Anwendungen werden MOSFETs aber auch im Linearbetrieb eingesetzt, z.B in linearen Endstufen für Audio, Video, elektronischen Lasten und Stromquellen. Hier muss man einiges beachten. Ein verbreiteter Irrtum besteht darin zu glauben, MOSFETs könne man im Linearbetrieb einfach parallel schalten, weil der positive Temperaturkoeffizient von &amp;lt;math&amp;gt;R_{DS(ON)}&amp;lt;/math&amp;gt; eine Symmetrierung bewirkt, ähnlich den Emitterwiderständen bei parallelgeschalteten Bipolartransistoren. Das ist falsch! Im Linearbetrieb spielt der Temperaturkoeffizient von &amp;lt;math&amp;gt;R_{DS(ON)}&amp;lt;/math&amp;gt; keine Rolle, weil der MOSFET selten bis nie komplett durchgesteuert ist. Eben darum ist beim Linearbetrieb der minimale &amp;lt;math&amp;gt;R_{DS(ON)}&amp;lt;/math&amp;gt; in den meisten Fällen unwichtig und man kann auch eher hochohmige, ältere MOSFETs verwenden, wie z.B. den BUZ11.&lt;br /&gt;
&lt;br /&gt;
Hier wirkt vielmehr der negative Temperaturkoeffizient (TK) der Thresholdspannung &amp;lt;math&amp;gt;U_{GS(thr)}&amp;lt;/math&amp;gt;, vergleichbar dem negativen TK der Basis-Emitter-Spannung von Bipolartransistoren. D.h. mit steigender Temperatur und konstanter Gate-Source-Spannung steigt der Stromfluss der Drain-Source Strecke. In einer Parallelschaltung von MOSFETs würde dies bedeuten, dass der MOSFET mit dem geringfügig größeren Drainstrom (Fertigungstoleranzen) wärmer wird, was zu einem weiter steigenden Drainstrom und damit noch mehr Wärme führt. Damit ist die Schaltung thermisch instabil und würde zum Durchbrennen der MOSFETs führen, einer nach dem Anderen. &lt;br /&gt;
&lt;br /&gt;
Um das zu verhindern muss man relativ große Ausgleichswiderstände in die Source-Leitung der einzelnen MOSFETs schalten, um diese Drift zu kompensieren. Dadurch verschlechtert sich natürlich der Wirkungsgrad des Verstärkers. MOSFETs haben einen TK von typisch -5mV/K für &amp;lt;math&amp;gt;U_{GS(thr)}&amp;lt;/math&amp;gt;, das ist mehr als das doppelte von Bipolartransistoren mit typisch -2mV/K, weshalb die Symmetrierungswiderstände mehr als doppelt so groß sein müssen. Weiterhin muss man beachten, dass die Toleranzen von &amp;lt;math&amp;gt;U_{GS(thr)}&amp;lt;/math&amp;gt; sehr groß sind, im Bereich von Volt! Das kann man sinnvoll nicht mehr mit Gatewiderständen symmetrieren, hier muss man die MOSFETs ausmessen und Gruppen mit geringen Toleranzen in einer Schaltung verwenden (engl. matching). &lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit ist die getrennte Ansteuerung der einzelnen MOSFETs, das wird oft in elektronischen Lasten bzw. [[Konstantstromquelle#Konstantstromquelle mit Operationsverstärker und Transistor | Konstantstromquellen]] gemacht. Hier treten keine zusätzlichen Verluste auf und der Mehraufwand in der Ansteuerung ist meist unkritisch.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss man beachten, dass viele der heutigen HochleistungsMOSFETs intern eine Parallelschaltung vieler kleiner MOSFET-Zellen (z.B. sogenannte Trench-FET) sind, und somit oft für den Linearbetrieb ungeeignet sind. Denn auch dort können einzelne Zellen überhitzen und durchbrennen (Hot Spot). Ob ein MOSFET für den Linearbetrieb tauglich ist steht manchmal im Datenblatt, oft aber eher nicht, eben weil die meisten MOSFETs als Schalter entwickelt und gebaut sind. Typische Vertreter für Linearbetrieb findet man in der [[MOSFET-Übersicht]]. Ein wichtiges Indiz für Linearbetrieb ist eine Kurve für DC im [[#SOA_Diagramm | SOA-Diagramm]]. Meist geht es dort nur bis 10ms, DC fehlt, eben weil DC (engl. &#039;&#039;&#039;D&#039;&#039;&#039;irect &#039;&#039;&#039;C&#039;&#039;&#039;urrent = Gleichstrom = Linearbetrieb) nicht zulässig ist. Manchmal hat der Hersteller auch &amp;quot;vergessen&amp;quot;, die Kennlinie für DC mit reinzuschreiben, wie z.B. bei [http://www.irf.com/product-info/hi-rel/alerts/fv5-p-09-01-A.pdf IRF], wie in diesem [http://www.mikrocontroller.net/topic/291760#3106758 Beitrag] zu erfahren ist.&lt;br /&gt;
Ein recht gutes Indiz dafür, ob ein FET für den Linearbetrieb taugt, ist die Vorwärtssteilheit. Die kennzeichnet die die Abhängigkeit des Drainstromes von der Ansteuerung am Gate als &amp;lt;math&amp;gt;S = \Delta i_d/\Delta u_{gs}&amp;lt;/math&amp;gt;. Moderne Trench-FET erreichen heute Steilheiten im dreistelligen Bereich und sind für Linearanwendungen völlig unbrauchbar. Zum Vergleich: Der BUZ11 kommt mit gerade einmal 4 bis 5 Siemens daher.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Leistungselektronik]]&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[IGBT]]&lt;br /&gt;
* [[TRIAC]]&lt;br /&gt;
* [[Kühlkörper]] &lt;br /&gt;
* [[Zwischenkreiskapazität]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F|Wie schließe ich einen Mosfet an einen Mikrocontroller an?]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/168218#1609684 Forumsbeitrag]: MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/186785#new Forumsbeitrag]: nochmal MOSFETs im Linearbetrieb&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/143324#new Forumsbeitrag]: Über eine elektronische Last, sehr lang&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/246449#2519459 Forumsbeitrag]: Logic Level MOSFETs direkt mit einem [[AVR]] treiben.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267254#2787855 Forumsbeitrag]: MOSFETs im Linearbetrieb, Laborerfahrungen&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267254#2787945 Forumsbeitrag]: MOSFETs für Linearbetrieb&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.elektronikinfo.de/strom/feldeffekttransistoren.htm Feldeffekttransistoren bei elektronikinfo.de]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0207011.htm FET im ELKO]&lt;br /&gt;
* [http://www.elektronik-kompendium.de/sites/bau/0510161.htm MOSFET im ELKO]&lt;br /&gt;
* [http://sound.westhost.com/articles/hexfet.htm#51 MOSFETs in Audioendstufen, engl.]&lt;br /&gt;
* [http://irf.custhelp.com/cgi-bin/irf.cfg/php/enduser/std_adp.php?p_faqid=214&amp;amp;p_created=1019728945&amp;amp;p_sid=pt9ITiCj&amp;amp;p_accessibility=0&amp;amp;p_redirect=&amp;amp;p_lva=&amp;amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTQsMTQmcF9wcm9kcz0mcF9jYXRzPSZwX3B2PSZwX2N2PSZwX3BhZ2U9MSZwX3NlYXJjaF90ZXh0PWxpbmVhcg**&amp;amp;p_li=&amp;amp;p_topview=1 FAQ Answer ID 214 bei IRF zum Linearbetrieb]&lt;br /&gt;
* [http://www.nxp.com/documents/application_note/AN11158.pdf AN11158 - Understanding power MOSFET data sheet parameters] von NXP (PDF)&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Richtiges_Designen_von_Platinenlayouts&amp;diff=69079</id>
		<title>Diskussion:Richtiges Designen von Platinenlayouts</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Richtiges_Designen_von_Platinenlayouts&amp;diff=69079"/>
		<updated>2012-11-09T19:06:56Z</updated>

		<summary type="html">&lt;p&gt;Haku: Neuer Abschnitt /* HF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hoi! Ich würde vorschlagen, den Artikeltitel umzudrehen. --[[Benutzer:Yahp|Yahp]] 00:26, 17. Dez 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Letzthin gab&#039;s mal einen Thread, der deutlich machte, warum 100nF||10nF wenig sinnvoll ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Stelle mit diesem Text, reicht das? [[Benutzer:Stefan|Stefan]] 14:44, 7. Feb. 2008 (CET)&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Niemals unterschiedliche große Abblock-Kondensatoren parallel schaltet, z.B. 10nF und 100nF. Es entstehen durch die parasitären Elemente Resonanzstellen, die genau das gegenteil des gewünschten erzeugen!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
_niemals_ ist auch nicht ganz richtig. gerade bei hf-schaltungen sieht man oft 100nF || ~22pF als hf-block.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== HF ==&lt;br /&gt;
&lt;br /&gt;
Bevor der Käse nun nocheinmal kommt: Bitte [http://www.mikrocontroller.net/wikisoftware/index.php?title=Wellenwiderstand#90.C2.B0_Ecken_in_Leiterbahnen _erst_ dieses lesen], dann verstehen, und dann ergänzen oder begründet ändern. --[[Benutzer:Haku|Haku]] 19:06, 9. Nov. 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Richtiges_Designen_von_Platinenlayouts&amp;diff=69078</id>
		<title>Richtiges Designen von Platinenlayouts</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Richtiges_Designen_von_Platinenlayouts&amp;diff=69078"/>
		<updated>2012-11-09T19:04:46Z</updated>

		<summary type="html">&lt;p&gt;Haku: Änderung 69076 von 87.176.246.224 (Diskussion) wurde rückgängig gemacht. Ist gut jetzt, siehe Diskussion!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim Erstellen von Platinenlayouts muss man vieles beachten. Dieser Artikel zählt auf, was man machen sollte (Dos), und was man keinesfalls machen sollte (Don&#039;ts).&lt;br /&gt;
&lt;br /&gt;
== Gutes Platinenlayout (Dos) ==&lt;br /&gt;
&lt;br /&gt;
* Berechne vor dem Zeichnen, welche Ströme über die Leiterbahn fließen werden und bestimme anhand dessen ihre Breite. Faustformel: 0,35mm können mit einem Ampere belastet werden. Weiteres siehe unter [[Leiterbahnbreite]].&lt;br /&gt;
* Halte die Leiterplatte klein und kompakt. Jeder Leiterzug wirkt wie eine Antenne, welche Störungen aussendet oder empfängt. Je länger um so intensiver. Zumindest auf der Eingangsseite.&lt;br /&gt;
* Nutze die Flächen zwischen den Leiterzügen und verbinde sie mit Masse (Polygone). So kann man Strahlung von außen abschirmen und Abstrahlung minimieren. Vermeide aber freie Kupferflächen, die nicht an GND angeschlossen sind. &lt;br /&gt;
* Geize nicht mit Blockkondensatoren. Für jeden VCC-Pin o.ä. ist mindestens ein 100nF Kondensator, bei schnelleren Sachen evtl. ein kleinerer (z.&amp;amp;nbsp;B. 10nF) einzusetzen. Ausserdem kann es meist notwendig sein, pro IC noch zusätzlich einen 10µF Kondensator und eine Ferritperle (engl. bead) zur Entkopplung von Vcc zu spendieren.&lt;br /&gt;
* Digitale und analoge Signale getrennt routen und nur in einem Punkt verbinden. Und zwar idealerweise am [[AD-Wandler]], wenn dieser vorhanden ist, sonst in der Nähe des Spannungsreglers. Eine Massefläche für analoge und digitale Schaltungsteile sollte durchgängig sein, getrennte Masseflächen sind nur in sehr seltenen Fällen sinnvoll. &lt;br /&gt;
* Nutze die Anschlüsse der bedrahteten Bauelemente für Durchkontaktierungen.&lt;br /&gt;
* Wenn es sich nicht vermeiden lässt 230V (400V) Netzspannung auf die Platine zu führen, so trenne die Bereiche der Kleinspannung und Netzspannung deutlich voneinander und mit vieeel Platz. Dabei unterscheidet man zwischen Luft- und Kriechstrecken. Eine Kriechstrecke ist die Strecke auf der Oberfläche einer Leiterplatte oder eines Bauteils. Die Luftstrecke ist sozusagen die kürzeste Verbindung zwischen den beiden Potentialen. Die Luft- und Kriechstrecken betragen zwischen 3 und 8 mm. Der notwendige Abstand hängt von der Gefährdung ab, siehe auch [[Leiterbahnabstände]].&lt;br /&gt;
* Mögichst sternförmige Verbindungen für Masse und Versorgungsspannungen bei Schaltungen mit hohen Strömen und empfindliche Analogschaltungen&lt;br /&gt;
&lt;br /&gt;
== Schlechtes Platinenlayout (Don&#039;ts) ==&lt;br /&gt;
&lt;br /&gt;
* Analoge und digitale Schaltungsteile direkt ohne Filter aus der gleichen Stromquelle versorgen.&lt;br /&gt;
* Digitale Signalleitungen in unmittelbarer Nachbarschaft analoger Signale.&lt;br /&gt;
* Zu wenig Abstand zwischen Leiterplattenrand und Leiterzügen.&lt;br /&gt;
* 90° oder spitze Winkel beim Routen von Leiterbahnen. Entgegen der weit verbreiteten Annahme hat das nur sehr wenig Auswirkungen auf die HF-Eigenschaften. Es sind mehr mechanische (Ablösung von Ecken) und ästhetische Gründe (Aussehen, Packungsdichte der Leitungen). Mehr dazu im Artikel [[Wellenwiderstand#Leitungsf.C3.BChrung_und_Layout | Wellenwiderstand]].&lt;br /&gt;
* Durchkontaktierungen auf SMD-Pads. Beim maschinellen Löten läuft das Flussmittel bzw. das Lötzinn in die Bohrung. Die Fehlerhäufigkeit steigt.&lt;br /&gt;
* Durchkontaktierungen von beiden Seiten mit Stopplack verschließen. Es könnte Feuchtigkeit darin zurückbleiben und beim Löten der Stopplack abplatzen&lt;br /&gt;
&lt;br /&gt;
== Vorgehen bei der Layouterstellung ==&lt;br /&gt;
* Umrisse festlegen&lt;br /&gt;
* Befestigungsbohrungen festlegen, dabei ausreichend Platz für Schraubenköpfe und Werkzeuge freihalten (Sperrflächen)&lt;br /&gt;
* Steckverbinder platzieren&lt;br /&gt;
* Bauteile platzieren, dabei möglichst zusammengehörige Bauteil nebeneinander platzieren. Die Verbindungen (Luftlinien, engl. air wires) möglichst kurz und kreuzungsarm halten.&lt;br /&gt;
* Stromversorgung der ICs layouten&lt;br /&gt;
* Kritische Signale layouten wie Takte, Sensoreingänge etc.&lt;br /&gt;
* Restliche Signale layouten&lt;br /&gt;
* Masseflächen füllen.&lt;br /&gt;
** Masseflächen können eine Schaltung deutlich verbessern, wenn sie richtig benutzt werden. Sie können aber auch genau das Gegenteil bewirken, wenn sie als automatisches Wundermittel betrachtet werden.&lt;br /&gt;
** Die Masserverbindung aller ICs muss zunächst direkt layoutet werden.&lt;br /&gt;
** Erst wenn die Masse komplett layoutet ist, kann man die Massefläche auffüllen. Damit verhindert man, dass vielleicht ein IC nur über eine sehr dünne Verbindung angeschlossen wird, welche man in der Masserfläche übersieht.&lt;br /&gt;
** Masseflächen sind nur dann wirklich wirksam, wenn sie möglichst durchgängig sind. Wenn sie durch viele Leitungen zerschnitten werden, sinkt ihre Wirksamkeit massiv und sie können sich zu einem EMV-Problem entwickeln (Abstrahung von Energie, Streifen- und Schlitzantennen)&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/forum/read-6-178710.html#254235 Forumsbeitrag]: Regeln beim Platinenentwurf&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93602#804338 Forumsbeitrag]: Vorschlag für Lötpads bei Hobbyeinsteigerplatinen&lt;br /&gt;
* [[EMV]]&lt;br /&gt;
* [[Eagle im Hobbybereich]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.ilfa.de/download/C/pb-id=wd7c584f8c9d73e6df32d52cabe12bcbbba8624a4eci8/453/Design-Optimierung.pdf Optimierung von Layouts]&lt;br /&gt;
*[http://www.ilfa.de/de/_design/index.html?a-Common_menu-n_Selected=6&amp;amp;button-CurrentMenuTree-setmenutree=&amp;amp;a-Common_storyOutput-n_SearchNodeId=6&amp;amp;button-Common_storyOutput-find_story=&amp;amp;uypb-id=wd7c584f8c9d73e6df32d52cabe12bcbbba8624a4eci8 Weitere Dokumente zum Thema professionelle Platinenherstellung]&lt;br /&gt;
* [http://www.analog.com/library/analogDialogue/Anniversary/12.html Grounding (Again)], Ask The Applications Engineer - 12, Fa. Analog Devices, (englisch)&lt;br /&gt;
&amp;lt;!-- * http://edaboard.com --&amp;gt;&lt;br /&gt;
* [http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=115 Designing a Better PCB] von Sparkfun (engl.)&lt;br /&gt;
* [http://www.hottconsultants.com/tips.html Tech Tips] von Henry Ott (engl.)&lt;br /&gt;
* [http://www.ultracad.com/articles/90deg.pdf Messung] von verschiedenen Winkeln von Leiterbahnen mit 17ps TDR, keinerlei Unterschiede!&lt;br /&gt;
&lt;br /&gt;
[[Category:Platinen]]&lt;br /&gt;
[[Kategorie:Schaltplaneditoren]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=68755</id>
		<title>VHDL</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=VHDL&amp;diff=68755"/>
		<updated>2012-10-16T16:16:14Z</updated>

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

		<summary type="html">&lt;p&gt;Haku: Montage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein Kühlkörper (engl. &#039;&#039;heat sink&#039;&#039;) wird benötigt, wenn die Verlustleistung von elektronischen Bauteilen einen bestimmten Wert übersteigt. Der Kühlkörper hat dabei die Aufgabe, die entstehende Wärme möglichst gut auf eine große Fläche zu verteilen, um sie dann an die Umgebung abzugeben.&lt;br /&gt;
&lt;br /&gt;
[[bild: Rippenkuehlkoerper.png | thumb | 300px| Rippenkühlkörper, Schnittdarstellung]]&lt;br /&gt;
&lt;br /&gt;
Das grundlegende Prinzip sieht man an jedem Rippenkühlkörper. An der Stelle, wo das Kühlobjekt angeschraubt/gepresst ist, ist ein dicker &amp;quot;Klumpen&amp;quot; Material, der erstmal die Wärme auf eine etwas größere Fläche verteilen soll. Bei CPU-Lüftern ist dort teilweise Kupfer eingepresst, weil das noch besser als Aluminium Wärme leitet (engl. heat spreader, Wärmespreizer). Danach folgen viele, nach aussen dünner werdende Rippen. In der Mitte noch dick, dort muss die Wärme ja verlustarm durchgeleitet werden, aussen dünn, dort ist fast alle Wärme schon abgegeben. Ein guter Kühlkörper hat eine möglichst große Oberfläche bei möglichst kleiner Masse. Viele Kühlkörper werden aus preiswerten [http://de.wikipedia.org/wiki/Strangpressen Strangpressprofilen] hergestellt.&lt;br /&gt;
&lt;br /&gt;
== Wärmewiderstand ==&lt;br /&gt;
&lt;br /&gt;
Die wichtigste Kennzahl eines Kühlkörpers ist der Wärmewiderstand. Er gibt an, um wie viel Kelvin sich die Temperatur zwischen Wärmequelle und Umgebung unterscheidet, wenn eine bestimmte Wärmeleistung abgeführt werden muss. Die Einheit ist K/W, Kelvin pro Watt. (Hinweis: Oft wird die Einheit °C/W angegeben, das ist allerdings nicht ganz korrekt. Temperaturdifferenzen werden in Kelvin angegeben). Je niedriger der Wärmewiderstand, umso besser der Kühlkörper, weil er die gleiche Wärmeleistung mit einem kleineren Temperaturunterschied abführen kann. Dadurch bleibt das Bauteil kühler, was der Lebensdauer und Funktionssicherheit zu Gute kommt.&lt;br /&gt;
&lt;br /&gt;
Allgemein gilt die Formel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta T = P_t \cdot R_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\Delta T&amp;lt;/math&amp;gt; - Temperaturdifferenz zwischen Wärmequelle und Umgebung in K&lt;br /&gt;
*&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt; - Wärmeleistung in W&lt;br /&gt;
*&amp;lt;math&amp;gt;R_t&amp;lt;/math&amp;gt; - Wärmewiderstand in K/W&lt;br /&gt;
&lt;br /&gt;
== Berechnung des Wärmewiderstands ==&lt;br /&gt;
&lt;br /&gt;
Für einen Kühlkörper ist der Wärmewiderstand im Datenblatt angegeben. Diesen rein aus dem Aufbau zu berechnen ist sehr schwierig, auch das Messen ist nicht so einfach. Was man jedoch berechnen kann und muss ist der Wärmewiderstand eines Gesamtaufbaus, d.h. Bauteil + Kühlkörper. Dazu muss man im Wesentlichen zwei Fälle unterscheiden.&lt;br /&gt;
&lt;br /&gt;
=== Bauteil ohne Kühlkörper ===&lt;br /&gt;
&lt;br /&gt;
Ohne Kühlkörper kann ein Bauteil seine Wärme über zwei Wege abgeben. Über das Gehäuse direkt an die Luft (Abstrahlung oder Konvektion) oder über die Anschlüsse auf die Platine (Wärmeleitung). Dies alles findet parallel statt, aber je nach Gehäusetyp und Platinengestaltung ist die Verteilung auf die Kühlwege verschieden. Transistoren im Metallgehäuse (z.&amp;amp;nbsp;B. TO-3) oder mit Metallfahne (z.&amp;amp;nbsp;B. TO220) können recht viel Wärme über das Gehäuse abgeben. Leistungsdioden im Plastikgehäuse hingegen können den Großteil der Wärme nur über die Anschlüsse abgeben. Deshalb sollten diese möglichst kurz sein, und auf der Platine an dicke Leiterbahnen oder gar Kupferflächen angeschlossen werden. Ähnliches gilt für leistungsverstärkte DIL- oder SOIC-[[IC-Gehäuseformen | Gehäuse]], welche oft für [[H-Brücken_Übersicht | Leistungstreiber]] oder [[FET | MOSFETs]] verwendet werden. In diesen Fällen sollten die Pins direkt an Kupferflächen &#039;&#039;&#039;ohne&#039;&#039;&#039; Wärmefallen (Thermals) angeschlossen werden, auch wenn dadurch das [[Löten]] erschwert wird. &lt;br /&gt;
&lt;br /&gt;
Für die meisten Bauteile ist im Datenblatt der Wärmewiderstand zwischen dem eigentlichen Chip (engl. &amp;quot;junction&amp;quot;) und der Umgebung (engl. &amp;quot;ambient&amp;quot;) angegeben. Damit kann man direkt in die oben genannte Formel gehen und die Temperaturdifferenz ausrechnen. Die Temperatur der Sperrschicht errechnet sich einfach aus der maximalen Umgebungstemperatur (meist Luft) und dem errechneten Temperaturunterschied.&lt;br /&gt;
&lt;br /&gt;
=== Bauteil mit Kühlkörper ===&lt;br /&gt;
&lt;br /&gt;
Will man mit einem IC größere Verlustleistungen umsetzen (Linearer Spannungsregler, [[Transistor]], etc.] muss meist ein Kühlkörper her. Die jeweiligen Gehäuse besitzen dazu meist eine Kühlfahne, an die man den Kühlkörper anschrauben kann. Bei anderen gibt es Klemmen, die den Kühlkörper fest klemmen. Hier gibt es einiges zu beachten. Der Kühlkörper darf nicht zu schwach angeschraubt werden, sonst ist der Wärmewiderstand zwischen Gehäuse und Kühlkörper zu gross. Er darf aber auch nicht zu stark angeschraubt/angepresst werden, um das Gehäuse nicht zu deformieren. Wichtig ist der Übergang zwischen IC und Kühlkörper. Hier muss bei größeren Leistungen (&amp;gt;5W) Wärmeleitpaste verwendet werden. Ihre Aufgabe ist es, die Luft zwischen den Oberflächen zu verdrängen, welche sich in den mikroskopischen Unebenheiten befindet und den Wärmewiderstand &#039;&#039;&#039;deutlich&#039;&#039;&#039; erhöht. Dabei sollte die Schicht sehr dünn sein, denn die Wärmeleitpaste ist im Vergleich zu Aluminium oder Kupfer ein schlechter Wärmeleiter, allerdings deutlich besser als Luft.&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;
! Material || Wärmeleitfähigkeit&amp;lt;br/&amp;gt;[W/(m*K)]&lt;br /&gt;
|-&lt;br /&gt;
| Luft            || 0,026&lt;br /&gt;
|-&lt;br /&gt;
| Wärmeleitpaste  || 4-10&lt;br /&gt;
|-&lt;br /&gt;
| Aluminium       || 221&lt;br /&gt;
|-&lt;br /&gt;
| Kupfer          || 370&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das oft verwendete TO220 Gehäuse hat ca. 1cm^2 Kühlfläche. Wird ein Kühlkörper ohne Wärmeleitpaste aufgeschraubt und entsteht dabei ein angenommener Luftspalt von 10µm, hat dieser einen Wärmewiderstand von ca. 4K/W! Mit Wärmeleitpaste sind es rein rechnerisch nur 1/150tel, also etwa 0,026 K/W. Real muss man jedoch eher mit 0,5-1K/W rechnen.&lt;br /&gt;
&lt;br /&gt;
Für die Berechnung des gesamten Wärmewiderstandes müssen hier drei Widerstände in Reihe betrachtet werden. Der Erste ist im Datenblatt zwischen Chip und Gehäuse angeben (engl. junction to case). Danach kommt der Übergang Gehäuse-Kühlkörper. Dieser ist von der Oberflächengüte und der Wärmeleitpaste abhängig und kann nur abgeschätzt werden. Ein TO220 Gehäuse mit dünner Schicht Wärmeleitpaste hat hier ca. 0,5-1K/W. Zum Schluss muss noch der Wärmewiderstand des Kühlkörpers addiert werden, dieser ist im Datenblatt angegeben. Vorsicht, bei größeren Kühlkörpern mit großen Rippen ist die Einbaulage wichtig, damit der Luftstrom frei strömen und gut kühlen kann (freie Konvektion, warme Luft strömt nach oben und kalte strömt unten nach). Die drei Wärmewiderstände werden addiert und über die oben angegebene Formel der Gesamtwärmewiderstand und damit die Temperaturerhöhung der Sperrschicht berechnet.&lt;br /&gt;
&lt;br /&gt;
Wird eine Schaltung in einem Gehäuse eingesetzt, muss man dafür sorgen dass die warme Luft abgeführt wird, vor allem in Kunststoffgehäusen. Ansonsten gibt es einen Wärmestau und die Temperatur steigt deutlich!&lt;br /&gt;
&lt;br /&gt;
=== Zwangskühlung  ===&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Kühlkörper die Wärme auch abführen können. Was aber, wenn der für den Wärmeabtransport benötigte Kühlkörper mechanisch nicht ins Gehäuse paßt?&lt;br /&gt;
Hier kommen die Lüfter zum Einsatz, das Ganze nennt sich dann Zwangskühlung.&lt;br /&gt;
&lt;br /&gt;
Durch den Einsatz eines Lüfters lässt sich die der Wärmewiderstand des Kühlkörpers etwa um den Faktor 4 verbessern, bzw. der Kühlkörper lässt sich in der Größe ungefähr um den Faktor 7..8 reduzieren. Dies sind jedoch nur Richtwerte für den ersten Entwurf, eine Prüfung durch Messung ist unbedingt erforderlich. Der Effekt beruht darauf, daß mittels eines Lüfters wesentlich mehr Luft wesentlich schneller am Kühlkörper vorbeiströmen kann, und dabei mehr Wärme bei gleicher Temperaturerhöhung aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Beim Einsatz eines Lüfters ist auch daran zu denken, daß sowohl die Ansaugöffnung als auch der Kühlkörper verschmutzen und regelmäßig gereinigt werden müssen. Weiterhin erzeugt ein Lüfter natürlich auch Lärm. Je kleiner der Lüfter und je größer die benötigte Luftlieferleistung, umso lauter wird der Lüfter. Umgekehrt kann man aber mit einem großen, eher langsam laufenden Lüfter den Geräuschpegel stark absenken. Und letztendlich kann ein Lüfter auch kaputt gehen, womit die Kühlung deutlich verschlechtert wird und das Bauteil überhitzt. Hier empfiehlt sich bei wertvolleren Objekten eine Lüfterüberwachung, wie sie seit längerem bei PCs eingesetzt wird.&lt;br /&gt;
&lt;br /&gt;
==== Physikalischer Hintergrund der Zwangskühlung mit Luft ====&lt;br /&gt;
&lt;br /&gt;
Luft hat eine Wärmekapazität von ungefähr 1kJ/kg/K was bedeutet, daß für die Erwärmung von 1kg Luft um 1K eine Energiemenge von 1kJ = 1000Ws erforderlich ist. D.h. für den kontinuierlichen Abtransport von 100W Wärme werden mindestens 100g Luft pro Sekunde benötigt, wenn man diese nur um 1K erwärmen will. &lt;br /&gt;
Um also 100W von einem Kühlkörper abzuführen, der sich hier im Beispiel um 8K erwärmen darf, sind  100W / 8K  = 12,5g Luft pro Sekunde erforderlich. Ein Gramm Luft hat ein Volumen von etwa 0,77l, d.h. bei 12,5 g muss der Lüfter 9,6 l/s bzw. 34,5 m^3/h liefern, die dann auch durch den gesamten Kühlkörper geblasen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Die Platine als Kühlkörper ==&lt;br /&gt;
&lt;br /&gt;
Bei kleineren Leistungen (&amp;lt; 5W) kann man auch die Platine als Kühlkörper benutzten. Dabei muss jedoch die Wärme vom Bauteil möglichst schnell auf eine größere Fläche verteilt werden. Dazu nutzt man große Kupferflächen direkt am Bauteil. Diese werden teilweise beidseitig angebracht. Die Wärme muss man dann jedoch mit vielen Vias von der einen Seite, auf der das Bauteil sitzt, auf die andere geleitet werden. Diese Vias heißen thermische Vias, da sie nicht als elektrische Verbindung sondern als Wärmeleiter dienen. Das funktioniert deshalb so gut, weil die Vias innen mit Kupfer beschichtet sind, welches die Wärme wesentlich besser leitet als das Material der Leiterplatte (FR2, FR4).&lt;br /&gt;
Verfügt ein SMD-Bauteil über eine sogenannte &amp;quot;Heatslug&amp;quot; oder thermal pad auf der Unterseite, muss dieses zur Wärmeableitung unbedingt angelötet werden. Dies ist mit einem normalen Lötkolben möglich, wenn die Platine an dieser Stelle mehrere Durchkontaktierungen mit einem Durchmesser von ca. 1,5mm aufweist. Durch diese Durchkontaktierungen kann genug Lötzinn auf die andere Seite fließen um diese Fläche mit der Platine zu verlöten. &lt;br /&gt;
&lt;br /&gt;
Mit modernen Technologien ist es auch möglich, deutlich größere Wärmeleistungen von der Platine abzuführen. Dazu werden z.&amp;amp;nbsp;B. Platinen mit Aluminium- oder Kupferkern  oder auf einen Metallträger laminierte PCBs benutzt (IMS = &#039;&#039;&#039;I&#039;&#039;&#039;nsulated &#039;&#039;&#039;M&#039;&#039;&#039;etal &#039;&#039;&#039;S&#039;&#039;&#039;ubstrat). Diese kommen z.&amp;amp;nbsp;B. bei Hochleistungs-[[LED]]s zum Einsatz. Für Hobbyzwecke sind sie aber noch wesentlich zu teuer, vor allem bei Einzelstücken.&lt;br /&gt;
&lt;br /&gt;
== Peltierelement ==&lt;br /&gt;
&lt;br /&gt;
Ein [http://de.wikipedia.org/wiki/Peltier-Element Peltierelement] arbeitet nach dem [http://de.wikipedia.org/wiki/Thermoelektrizit%C3%A4t#Peltier-Effekt Peltier-Effekt]. Dabei wird in einem Halbleiter durch Stromfluss eine Seite des Elements kalt, die andere heiß. Damit kann man ein kleines Objekt beliebig kühlen oder heizen. Allerdings sind Peltierelemente nur in eher kleinen Abmessungen und Leistung verfügbar (bis einige Dutzend Watt) und deren Effizienz ist auch nicht sonderlich hoch. Die allgemeine Auffassung, die könnten Wärme einfach verschwinden lassen ist falsch. Denn die heiße Seite muss klassisch gekühlt werden, je nach Temperaturunterschied mit mehr als der doppelten Kühlleistung als auf der kalten Seite an Wärme abgeführt wird.&lt;br /&gt;
&lt;br /&gt;
== Heatpipe ==&lt;br /&gt;
&lt;br /&gt;
Eine [http://de.wikipedia.org/wiki/Heatpipe Heatpipe],auf deutsch Wärmerohr genannt, ist ein Rohr, welches mit einer leicht verdampfenden Flüssigkeit gefüllt ist. Wird ein Ende erhitzt, verdampft die Flüssigkeit und nimmt dabei sehr viel Wärme auf. Der Dampf steigt im Rohr ans andere Ende, kondensiert dort und gibt dabei seine Wärme wieder ab.&lt;br /&gt;
&lt;br /&gt;
Heatpipes werden auch als Wärmesuperleiter bezeichnet, weil sie Wärme 100-10.000 mal besser leiten als ein massiver Kupferstab mit gleichen Abmessungen.&lt;br /&gt;
&lt;br /&gt;
Auch hier muss gesagt werden, dass eine Heatpipe allein &#039;&#039;&#039;kein&#039;&#039;&#039; Kühlsystem ist, denn die Seite, auf der das Wärmetransportmedium wieder kondensiert muss auch wieder klassisch gekühlt werden. Der grosse Vorteil ist die Abführung großer Wärmemengen auf engstem Raum, wie z.&amp;amp;nbsp;B. bei CPUs in Laptops.&lt;br /&gt;
&lt;br /&gt;
== Flüssigkühlung ==&lt;br /&gt;
&lt;br /&gt;
Im PC-Bereich ist es unter einigen Enthusiasten verbreitet, den Rechner entweder zu übertakten, um eine höhere Leistung zu erzielen oder super leise zu machen, um angenehmer arbeiten oder spielen zu können. In beiden Fällen muss eine große Wärmemenge abgeführt werden. Dabei wird die sehr hohe Wärmekapazität von Wasser genutzt, um auf kleinem Raum die Wärme von CPU, GPU, Festplatten etc. abzuführen. Aber auch hier ist zu beachten, dass am Ende einer Flüssigkühlung praktisch immer ein klassicher Wärmetauscher steht, welcher die Wärme an die Umgebung Luft abgibt. Dieser kann sich aber deutlich weiter entfernt vom zu kühlenden Objekt befinden als ein einfacher, direkt montierter Kühlkörper. &lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von Wasser statt Luft als Kühlmedium reduziert sich die Durchflußmasse in etwa um den Faktor 4,2, da die Wärmekapazität von Wasser bei ca. 4,182 kJ/kg/K liegt. Da Wasser aber auch eine deutlich höhere Dichte als Luft besitzt (Wasser = 1g/cm³; Luft = 1,3mg/cm³) kommt noch der Faktor von ~770 dazu, woraus sich ein Gesamtfaktor für das Durchflußvolumen von ~3230 ergibt.&lt;br /&gt;
&lt;br /&gt;
D.h. die Durchflußmenge in unserem oben genannten Beispiel (100W) sinkt auf ca. 2,9 ml/s bzw. 10,7 l/h.&lt;br /&gt;
&lt;br /&gt;
Vorteile&lt;br /&gt;
*Abtransport großer Wärmemengen auf kleinstem Raum&lt;br /&gt;
*nahezu lautlos&lt;br /&gt;
&lt;br /&gt;
Nachteile&lt;br /&gt;
*höherer Aufwand und Kosten&lt;br /&gt;
*Gefahr durch auslaufendes Kühlmittel&lt;br /&gt;
&lt;br /&gt;
Im Bereich der Leistungselektronik wird Flüssigkühlung eingesetzt, im Hobbybereich nahezu nicht.&lt;br /&gt;
&lt;br /&gt;
== Bauteilmontage auf dem Kühlkörper ==&lt;br /&gt;
Die Montage der klassischen Halbleitergehäuse nach TO220 und ähnlichen gestaltet sich augenscheinlich simpel: Die Kühlfahne hat ein Loch. Da ist es doch sehr verlockend, das Bauteil mit einer Schraube durch ebendieses Loch auf dem Kühlkörper zu befestigen...&lt;br /&gt;
&lt;br /&gt;
Bei fachgerechter Ausführung spricht auch wenig gegen diese Montageweise; dazu gehört dann zum Beispiel das richtige Anzugsmoment für die Schraube. Zu lose und zwischen Bauteilgehäuse und wärmeabführender Oberfläche entsteht ein Luftspalt. Ein Wärmeleitpad oder Wärmeleitpaste schaffen zwar Abhilfe, aber die Wärmeleitfähigkeit dieser Stoffe liegt um Größenordnungen unter der von dem Aluminium des Kühlkörpers und der Kühlfahne. Ein vorhandenes Wärmeleitpad wird mitunter auch nicht weit genug zusammengedrückt, sodass auch (wie gehabt, abseits der ohnehin bescheidenen Leitfähigkeit) noch Optimierung möglich wäre. Nämlich durch festeres Anziehen der Schraube.&lt;br /&gt;
Zu fest aber und die Kühlfahne wölbt sich minimal. Dabei hebt der Bauteilkörper von der Oberfläche des Kühlkörpers ab und es entsteht wieder ein Spalt. Ungünstigerweise aber liegt der &#039;&#039;Heat-Spot&#039;&#039;, also der Usprung des Wärmeflusses (Silizium-Chip) genau dort...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: kuehlkoerper-montage.jpeg | thumb | 300px | Montagebeispiel]] Weitaus einfacher zu handhaben ist folgende Montageweise: Die Bauteile werden, ungeachtet der Montagebohrung, lose auf den Kühlkörper gelegt. Falls notwending natürlich mit Isolierstoff dazwischen und in jedem Fall hauchdünn mit einem Wärmeleitmittel bestrichen. Über die Bauteile wird dann ein Aluminiumprofil gelegt und erst dieses wird -- weiterhin mit einer Schraube pro Bauteil -- auf den Kühlkörper gespannt.&lt;br /&gt;
Abgesehen davon, dass so auch SMD-Bauteile (IPAK!) auf einem Kühlkörper Platz finden, entsteht Druck genau über dem Hot-Spot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Hinweise ==&lt;br /&gt;
&lt;br /&gt;
*Große Hochlastwiderstände mit Keramikgehäuse werden im Normalbetrieb recht heiß (200..350°C). Diese Temperaturen sollten nicht auf die Platine kommen, denn das macht das Material nicht lange mit. Hier muss genau das Gegenteil von dem gemacht werden, was weiter oben für Bauteile ohne Kühlkörper empfohlen wurde. Die Anschlüsse müssen möglichst lang sein, damit wenig Wärme über sie abgegeben werden kann. Die Kühlung erfolgt nahezu nur über den Keramikkörper.&lt;br /&gt;
* Ein TO220 Gehäuse kann ca. 1W ohne Kühlkörper abgeben.&lt;br /&gt;
* Bei der Dimensionierung des Kühlkörpers sollte man sich nicht an der maximal zulässigen Sperrschichttemperatur orientieren, sondern möglichst um 10..50K kühler bleiben. Das verbessert die Funktionssicherheit und vor allem die Lebensdauer erheblich!&lt;br /&gt;
* Merksatz über den dicken Daumen: Pro 10 Grad Temperaturerhöhung halbiert sich die Lebenserwartung eines Bauteils. (Arrheniusgesetz, RGT-Regel, 10-Grad-Gesetz)&lt;br /&gt;
* Temperaturzyklen verkürzen die Lebensdauer von Schaltungen erheblich&lt;br /&gt;
* Meist sind mehrere kleine Kühlkkörper deutlich kleiner und billiger als ein Großer.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://sound.westhost.com/heatsinks.htm The Design of Heatsinks]. Eine ausführliche Seite zum Thema Kühlkörper, englisch&lt;br /&gt;
* [http://ludens.cl/Electron/Thermal.html Noch eine gute Seite, englisch]&lt;br /&gt;
* [http://wiki.oliverbetz.de/owiki.php/FormelSammlung Universelle Formelsammlung mit kurzen Erklärungen]&lt;br /&gt;
* [http://www.thermoconsult.de/01_TechInfo/Physik.pdf Grundlagen zur Kühlung, inhaltlich gut, Formatierung eher mies]&lt;br /&gt;
* [http://tangentsoft.net/elec/diy-hs.html DIY Heat Sinks]&lt;br /&gt;
* [http://www.fischerelektronik.de/ Kühlkörper bei Fischer Elektronik]&lt;br /&gt;
* [http://www.leiton.de/leiterplatten_teaser_alu.html Leiterplatten mit Alukern bei Leiton]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/84303 Guter Beitrag im Forum mit einer Beispielrechnung]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Leistungselektronik]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Kuehlkoerper-montage.jpeg&amp;diff=67875</id>
		<title>Datei:Kuehlkoerper-montage.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Kuehlkoerper-montage.jpeg&amp;diff=67875"/>
		<updated>2012-08-12T08:56:03Z</updated>

		<summary type="html">&lt;p&gt;Haku: Montagebeispiel mit IPAK&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Montagebeispiel mit IPAK&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Elektronikversender&amp;diff=66999</id>
		<title>Elektronikversender</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Elektronikversender&amp;diff=66999"/>
		<updated>2012-06-24T09:43:49Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* TME (Transfer Multisort Elektronik) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Liste der Versender ==&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;
* Seite aktuell nicht erreichbar (10.12.2011)&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;
=== 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;
=== 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;
=== Anvilex ===&lt;br /&gt;
Homepage: http://shop.anvilex.com/index.html&lt;br /&gt;
&lt;br /&gt;
* Liefert sehr günstige Break-Out Boards für diverse Packages&lt;br /&gt;
* Hat einige einfache und günstige Programmer auch für FPGAs etc&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;
=== bed - elektronik ===&lt;br /&gt;
Homepage: http://www.bed-elektronik.de&lt;br /&gt;
&lt;br /&gt;
* Restposten aktive und passive Bauelemente&lt;br /&gt;
* sehr günstige Preise&lt;br /&gt;
* alles ab Lager lieferbar&lt;br /&gt;
* Versand an Privat&lt;br /&gt;
* ab 60 EUR versandkostenfrei&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 Oberhaching (südlicher Landkreis 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 (incl. MwSt), darunter 7 EUR Bearbeitungskosten&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;
siehe [[#SE Spezial-Electronic AG|SE Spezial-Electronic AG]]&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 und http://www.business.conrad.de&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 Online überprüft werden.&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;
* ca. 4000 Bauteile lagernd&lt;br /&gt;
* günstig&lt;br /&gt;
* Mengenrabatte für fast jedes Produkt&lt;br /&gt;
* Versand innerhalb Deutschlands: &lt;br /&gt;
* DPD: 3,75€ (ab 50 EUR versandkostenfrei)&lt;br /&gt;
* DHL: 4,50€ (ab 100 EUR versandkostenfrei)&lt;br /&gt;
* Versand EU-weit ab 5,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 per Vorkasse (2% Skonto), PayPal, Nachnahme. 1 EUR Aufschlag bei PayPal-Zahlung&lt;br /&gt;
* Zahlung per Bankabbuchung, Kreditkarte oder Rechnung nur für Stammkunden (ab 4 bis 5 Bestellung), Für Institute/Firmen direkt auf Rechnung möglich&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;
=== Daschke LTD ===&lt;br /&gt;
PDF-Katalog (Achtung, grosse Datei): http://www.daschke-ltd.de/Catalog/&lt;br /&gt;
&lt;br /&gt;
* Prompte Antwort und Hilfe via info ät obige adresse&lt;br /&gt;
* Bezahlung per Paypal und Rechnung möglich. Ist auch Ebay-Händler.&lt;br /&gt;
* sehr faire Preise für Bauteile und Versand&lt;br /&gt;
* Führt eine Vielzahl an unüblichen Steckern und Buchsen&lt;br /&gt;
* Nicht verfügbare Bauteile wurden proaktiv nachbestellt, trotz geringer Bestellmenge. Prima!&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&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;
* macht merkwürdige Plausibilitäts-Checks: wenn man privat über ihrem Dollar Limit (z.B. 400 Dollar bestellt) kommt sofort die Rückfrage nach Firmenname und Firmenadresse&lt;br /&gt;
* Rückfragen nach dem Verwendungszweck kommen ebenfalls schon bei der Bestellung bei bestimmten Bauteilen die der Exportkontrolle unterliegen&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;
=== eHaJo ===&lt;br /&gt;
Homepage: http://www.eHaJo.de&lt;br /&gt;
&lt;br /&gt;
* Bausätze &lt;br /&gt;
* Lötübungen&lt;br /&gt;
* AVR-ISP-Stick&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;
* &amp;quot;Kein Verkauf an Endverbraucher i.S.d. §13 BGB&amp;quot;&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;
=== Elko-Verkauf ===&lt;br /&gt;
Homepage: http://www.elko-verkauf.de&lt;br /&gt;
&lt;br /&gt;
* Nur Low-ESR-Elkos&lt;br /&gt;
* Elko-Sets für ein Gerät&lt;br /&gt;
&lt;br /&gt;
=== Ellmitron ===&lt;br /&gt;
Homepage: http://www.ellmitron.de/&lt;br /&gt;
Katalog: http://www.ellmitron.de/katalog.pdf&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;
* Bearbeitungszeit (bis Warenausgang) 2-3 Tage.&lt;br /&gt;
* Versand bisher mit DHL&lt;br /&gt;
* gute bis sehr gute Verpackung&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&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;
Erklärte am 31. August 2010 &amp;quot;... den Betrieb bis auf weiteres zu schließen.&amp;quot; &lt;br /&gt;
=== Embedit Mikrocontrollertechnik ===&lt;br /&gt;
Online Shop: http://shop.embedit.de&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;
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://de.farnell.com&lt;br /&gt;
&lt;br /&gt;
* liefert nur an gewerbliche Abnehmer, Ausnahme sind Studenten und HTL-Schüler (Österreich, Farnell.at). 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;
=== Future Electronics ===&lt;br /&gt;
Homepage: http://de.futureelectronics.com&lt;br /&gt;
&lt;br /&gt;
* große Auswahl an Teilen&lt;br /&gt;
* Versand auch an Privatpersonen&lt;br /&gt;
* Preisangaben ohne MwSt.&lt;br /&gt;
* Zahlung nur mit Kreditkarte&lt;br /&gt;
* Versandkosten 7,14€ (Brutto)&lt;br /&gt;
* Versand aus den USA mit FedEx, Lieferzeit meist unter 5AT&lt;br /&gt;
* Verzollung usw. wird von FutureElectronics gemacht, keine Nachzahlungen etc.&lt;br /&gt;
&lt;br /&gt;
=== Geist Electronic-Versand GmbH ===&lt;br /&gt;
Homepage: http://www.geist-electronic.de&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;
* Homepage nicht aufrufbar (10.12.2011)&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;
=== guloshop.de ===&lt;br /&gt;
Homepage: http://guloshop.de&lt;br /&gt;
&lt;br /&gt;
* kleiner Shop, konzentriert sich auf Standard-AVRs im DIP-Gehäuse, ist dabei aber meist der billigste Versender in Deutschland&lt;br /&gt;
* ATtiny, ATmega, Breakout-Boards, Programmer, Adapterkabel, IC-Fassungen&lt;br /&gt;
* AVR mit geflashtem Arduino-Bootloader&lt;br /&gt;
* äußerst niedrige Preise&lt;br /&gt;
* liefert schnell und zuverlässig, jedoch nur gegen Vorkasse&lt;br /&gt;
* kein Mindestbestellwert, Versandkosten für kleine Bestellungen: 2,40 EUR&lt;br /&gt;
&lt;br /&gt;
=== H-Tronic ===&lt;br /&gt;
Homepage: http://www.h-tronic.eu/index.php&lt;br /&gt;
&lt;br /&gt;
* Online-Shop einer Entwicklungsfirma, in dem neben Baugruppen und Geräten auch einige Bauelemente und Elektronikzubehör angeboten werden&lt;br /&gt;
* kleines Angebot&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;
Homepage: http://www.hw-electronics.de &amp;lt;br&amp;gt;&lt;br /&gt;
Homepage EU: 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&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;
* sehr netter kompetenter Service&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;
* bietet auch Einsteigersortimente und Widerstandsortimente (auch SMD)&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;
&lt;br /&gt;
=== Mauritz Communication &amp;amp; Electronics ===&lt;br /&gt;
Homepage: http://www.mauritz-shop.eu&lt;br /&gt;
&lt;br /&gt;
* Online Shop für HF-Stecker und Kabel&lt;br /&gt;
* bietet HF-Stecker/Buchsen und Koaxkabel an&lt;br /&gt;
* große Auswahl, auch exotische Teile&lt;br /&gt;
* Kabelkonfektionierung nach Wunsch&lt;br /&gt;
* vernünftige Preise&lt;br /&gt;
* liefert nach Rücksprache auch weltweit&lt;br /&gt;
* Keine Mindestbestellwert, aber 5 € Aufschlag unter 15 €&lt;br /&gt;
* Versand bis 40 kg pauschal 5,95 € per GLS innerhalb DE&lt;br /&gt;
* schneller Versand&lt;br /&gt;
* Paypal oder Vorkasse&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&lt;br /&gt;
&lt;br /&gt;
* Keine Privatkunden&lt;br /&gt;
&lt;br /&gt;
=== myAVR Shop ===&lt;br /&gt;
Hompage http://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;
* Leiterplattenchemie (Entwickler, Ätzmittel, CRC-Sprays)&lt;br /&gt;
* Chemisch Zinn&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;
* Bungard Cotherm, Alukernbasismaterial&lt;br /&gt;
* Funkmodule 434MHz, 868MHz, 2.4GHz&lt;br /&gt;
* Löttechnik und Zubehör&lt;br /&gt;
* Gehäuse aller Art&lt;br /&gt;
* Messgeräte und Labornetzteile&lt;br /&gt;
* aktive, passive u. mechanische Bauelemente (Widerstände, Kondensatoren, Transistoren, Logik-ICs etc.)&lt;br /&gt;
* kein Mindestbestellwert&lt;br /&gt;
* Lieferung auch ins Ausland&lt;br /&gt;
* Versandkosten ab 4,50EUR&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 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, 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&lt;br /&gt;
&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;
Homepage: http://www.qrpshop.de/sitemap.htm&lt;br /&gt;
* Bausätze vor allem einfache Kurzwellen-Funkgeräte&lt;br /&gt;
&lt;br /&gt;
=== Reichelt ===&lt;br /&gt;
Homepage: http://www.reichelt.de&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€ wert ist).&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;
* Lieferzeiten normalerweise 2 - 4 Arbeitstage&lt;br /&gt;
* niedrige Preise (aber unbedingt Qualität des Artikel checken)&lt;br /&gt;
* Versandkosten 5,60€ (Deutschland); 10€ Österreich; Schweiz 16€; EU 15 - 19€;&lt;br /&gt;
* 10€ Mindestbestellwert für alle Länder&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&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;
&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ünstige Angebote für Hobbyelektroniker&lt;br /&gt;
* auch einzelne Platinen&lt;br /&gt;
&lt;br /&gt;
=== Robotik-Teile.de===&lt;br /&gt;
Homepage: http://www.robotik-teile.de&lt;br /&gt;
&lt;br /&gt;
* Große Auswahl an Elektronik Produkten &lt;br /&gt;
* Microcontroller, Sensoren, Zubehör, u.v.m.&lt;br /&gt;
* Versandkosten betragen immer 4,90 €&lt;br /&gt;
* Zahlbar ber PayPal, Sofortüberweisung, Vorkasse und Nachnahme&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://de.rs-online.com&lt;br /&gt;
&lt;br /&gt;
* lt. AGB nur an gewerbliche Abnehmer und an Studenten. Bei Internetbestellungen wird per Mail nach Belegen gefragt.&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;
* Macht anscheinend Abfragen bei SCHUFA &amp;amp; Co. ohne Einverständnis oder Hinweis in den AGB.&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;
=== Satistronics ===&lt;br /&gt;
Homepage: http://www.satistronics.com&lt;br /&gt;
&lt;br /&gt;
* typischer &amp;quot;China-Versender&amp;quot;, mit allen Vor- und Nachteilen&lt;br /&gt;
* Lieferzeit bei Standardversand sehr lange (etwa 1 Monat nach D), aber schnellere Lieferung gegen Aufpreis möglich&lt;br /&gt;
* tritt auch bei eBay in Erscheinung ([http://stores.ebay.de/satistronicsstore eBay-Shop]), die Preise dort sind in der Regel aber etwas höher als im Online-Shop&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&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&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&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&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&lt;br /&gt;
&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;
&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;
Homepage: http://www.smgdiffusion.com&lt;br /&gt;
( Seite nur französisch )&lt;br /&gt;
&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&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&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&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&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 oder PayPal&lt;br /&gt;
* Firmenvertretung in Leipzig, man spricht deutsch&lt;br /&gt;
* Versand mit UPS (etwa 8 Euro inkl. MwSt.); Trackingnummer wird sofort nach Kommissionierung zugesendet&lt;br /&gt;
* als Privatkunde: Mehrwertsteuer beachten (22%)&lt;br /&gt;
* sehr großes günstiges SMD Sortiment&lt;br /&gt;
* unmittelbar aktualisierter Lagerbestand, Mindestmengen und Vielfache beachten&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;
&amp;lt;i&amp;gt;&amp;lt;blockquote&amp;gt;voelkner - direkt günstiger&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;
Eine Verlinkung auf die Website der Firma Re-In Retail International GmbH bedarf einer schriftlichen Genehmigung. &amp;lt;/blockquote&amp;gt;&amp;lt;/i&amp;gt;&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 Deutschland: 4,95€; ab 25€ Warenwert und Sofortüberweisung.de versandkostenfrei / Versandkosten-Flatrate für 15€ pro Jahr&lt;br /&gt;
* Versandkosten EU: 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;
=== Diverse ===&lt;br /&gt;
* http://www.chip-flip.com - Europäisches Bauelementesuchsystem, franchised Lieferantensuche, Datenblätter und viele nützliche Informationen&lt;br /&gt;
* http://www.ecomponents-store.com/ Elektronische Bauelemente 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/ - Finden Sie Vertragsdistributoren von über 800 Halbleiterherstellern für elektronische und elektromechanische Bauelemente.&lt;br /&gt;
&lt;br /&gt;
TODO: elektronik-fundgrube&lt;br /&gt;
&lt;br /&gt;
==Ebay-Shops==&lt;br /&gt;
&lt;br /&gt;
===Ego-China===&lt;br /&gt;
http://stores.ebay.de/Ego-China-Electronics   TFTs und LCDs &amp;lt;br /&amp;gt; Versand aus China (2-3 Wochen)&lt;br /&gt;
&lt;br /&gt;
===Sure-Electronics===&lt;br /&gt;
http://stores.ebay.de/Sure-Electronics   Highpower LEDs und Verstärker &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat auch einen eigenen Shop: http://www.sureelectronics.net/ &amp;lt;br /&amp;gt;&lt;br /&gt;
Versand aus China&lt;br /&gt;
&lt;br /&gt;
===Ether-Deal===&lt;br /&gt;
http://stores.ebay.de/ether-deal   Unter sonstiges viele versch. Elektronik-teile &amp;lt;br /&amp;gt; Versand aus China&lt;br /&gt;
&lt;br /&gt;
===NooElec===&lt;br /&gt;
http://stores.ebay.de/NooElec USB-AVR Boards (mega32u2) und rgbled-matrizen &amp;lt;br /&amp;gt; Versand aus Kanada&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;
Shop: 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;
* &amp;lt;s&amp;gt;(Nicht an Privat)&amp;lt;/s&amp;gt; Bestellung von Privat problemlos möglich, Privatpersonen werden laut ABG per Vorkasse beliefert&lt;br /&gt;
* Studenten bekommen Rabatt, je nach dem, was bestellt wird&lt;br /&gt;
* Umständlicher Bestellvorgang, seitens DataTec teilweise auf dem Postweg -&amp;gt; Es dauert teil sehr lange bis die Ware ankommt&lt;br /&gt;
* Sehr freundlicher und kompetenter Service, per eMail als auch telefonisch&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;
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&amp;lt;br&amp;gt;&lt;br /&gt;
eBay 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;
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>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Haku/F%C3%BCr:Target&amp;diff=66924</id>
		<title>Benutzer:Haku/Für:Target</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Haku/F%C3%BCr:Target&amp;diff=66924"/>
		<updated>2012-06-17T18:02:26Z</updated>

		<summary type="html">&lt;p&gt;Haku: Die Seite wurde neu angelegt: „= Für Target =  Warum ich Target nicht mag. Ohne Geflame, nur objektiv nachvollziehbare Fakten. Nicht alles hiervon betrifft effektiv Programmfehler, das wenigst…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Für Target =&lt;br /&gt;
&lt;br /&gt;
Warum ich Target nicht mag. Ohne Geflame, nur objektiv nachvollziehbare Fakten. Nicht alles hiervon betrifft effektiv Programmfehler, das wenigste sogar. Viele Dinge sind einfach nur &#039;&#039;&#039;unnötig&#039;&#039;&#039; in der Art, dass es absolut keinen Mehraufwand für den Programmentwickler gemacht hätte, es sinnvoller (oder: in der &#039;&#039;üblichen&#039;&#039; Weise) zu lösen.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Obwohl ich &#039;&#039;Benutzerdefinierte&#039;&#039; wähle und alle Verknüpfungen (so nennen sich wohl die Pseudo-Links unter Windows) abstelle, erzeugt es Verknüpfungen im Startmenü.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
* Beim Programmstart blitzen Fenster ohne Titelzeile und Rahmen herum, das widerspricht &#039;&#039;&#039;unnötigerweise&#039;&#039;&#039; gängigen GUI-Standards und bringt Target beim Start immer wieder in den Vordergrund.&lt;br /&gt;
* Die Werkzeugleisten sind irgendein selbstgebastelter Blödsinn und nicht die Standardkomponenten von Windows. Lassen sich auch nicht verschieben oder mehrzeilig anordnen oder so. Bei zu kleiner Bildschirmauflösung oder zu kleinem Fenster fehlen halt rechts Knöpfe. Da kommt auch kein &#039;Nicht sichtbare Schaltflächen&#039;-Pfeil oder Ähnliches.&lt;br /&gt;
* Weiter dazu, manche Tasten klappen aus (kleiner Pfeil daneben). Man &#039;&#039;muss&#039;&#039; aber zwingend zweimal klicken und kann nicht einfach den Pfeil drücken, mit der Maus auf den Menüpunkt ziehen und lösen. Denn das Menü klappt erst beim lösen aus. All das hätte die Windows-Standardkomponente geboten.&lt;br /&gt;
* Die Tastenbelegungen in den Menüs sind wohl mit Leerzeichen eingerückt. Oder zumindest hat man das versucht, es ist Kraut-und-Rüben.&lt;br /&gt;
* Die Tastenbelegungen sind nicht einstellbar. Insbesondere gut, weil viele neue Tastaturen kein &#039;&#039;Einfg&#039;&#039; mehr haben.&lt;br /&gt;
* Mal heißt es, Target gibts mehrsprachig&amp;lt;ref&amp;gt;http://server.ibfriedrich.com/wiki/ibfwikide/index.php?title=TARGET_3001!&amp;lt;/ref&amp;gt;, im Datenblatt ist es dann wieder deutsch&amp;lt;ref&amp;gt;http://server.ibfriedrich.com/wiki/ibfwikide/index.php?title=TARGET_3001!_Datenblatt&amp;lt;/ref&amp;gt;. Effektiv lässt es sich nicht umschalten, sondern man muss die entsprechend-sprachige Version herunterladen und installieren.&lt;br /&gt;
* Ziemlich labiles Bibliothekskonzept. Insbesondere schon das dritte oder so (erst lokaler Binärkram, dann Online, dann SQLite-Datenbank). Mal gespannt.&lt;br /&gt;
* Das Datenbankschema ist aus informationstechnischer Sicht Schrott weil praktisch überhaupt nicht normalisiert. Beispiel: Tabelle &#039;components&#039; mit den Federn &#039;param_double1&#039;, &#039;param_double2&#039;, ..., &#039;param_double12&#039;. Target meldet sich dann mit &#039;Es sind nur 12 Gleitkommazahlen, 6 ganze Zahlen und 6 Bezeichner erlaubt.&#039;. Auch die Sprachen sind divers, es gibt Englisch, Deutsch und Französisch. Natürlich in allen Tabellen mit &#039;_de&#039;, &#039;_en&#039; und &#039;_fr&#039; vertreten. Weitere Sprachen sind also unwahrscheinlich...&lt;br /&gt;
* Lustige Beschreibungs-&#039;Sprache&#039; für die 3D-Modelle. Hätte man vielleicht doch lieber auf Povray setzen sollen, aber gut. Neuentwicklung irgendwie &#039;&#039;&#039;unnötig&#039;&#039;&#039;.&lt;br /&gt;
* Man kann &#039;Target-Bauteile&#039; nicht bearbeiten, sondern muss davon stets eine Kopie erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Bedienung ==&lt;br /&gt;
* Das ganze Programm ist als MDI konzipiert. Die Verwendung auf zwei Monitoren erübrigt sich damit. Selbst wenn man das Hauptfenster breitzieht über beide Monitore und Schaltplan und Platine darin auf separaten Monitoren hat, gibt es nur eine Werkzeugleiste auf dem linken Monitor und nur eine Sidebar (Einstellungen, Ebenen usw.).&lt;br /&gt;
* Da ist jede Menge Müll in den Menüs, mit Einträgen, die im CAD einfach nichts zu suchen haben. Sei es das &#039;Service&#039;-Menü oder die &#039;Versionen&#039;. Und Distrelec taucht dann auch ein zweites Mal im &#039;Datei&#039;-Menü auf. Ist ja schön, dass sowas eingebunden wird, aber dann doch irgendwie abschaltbar oder über einen zentralen Anlaufpunkt &#039;Beschaffung&#039; oder sowas. Aber nicht derart platzraubend. Gleiches im &#039;Hilfe&#039;-Menü: Lob, Forum, Email hin, Email zurück, Homepage, Empfehlen, über die Schulter. Voll überladen.&lt;br /&gt;
* Im &#039;Elemente&#039;-Menü musste man die Ziffern (zusätzlich zur Tastenbelegung rechts daneben) nochmal links davorsetzen, um sie für die Alt-Taste ansprechbar-unterstrichen zu bekommen.&lt;br /&gt;
* Die Sidebar ist wieder selbstgefrickelt. Wenn der Bildschirm klein ist und nicht alle Ebenen drauf passen, hat man halt Pech. Oder man versucht, alles andere einzuklappen, um Platz zu schaffen. Hat man offenbar auch im Ingenieurbüro gemerkt und einen Knopf plaziert, der zumindest die ersten oder zweiten 50 Ebenen anzeigt.&lt;br /&gt;
* Immerhin, man kann sie links und rechts andocken. Oben und unten wieder nicht.&lt;br /&gt;
* Immer mal wieder versteckt gibt es &#039;L&#039;- und &#039;S&#039;-Knöpfe um irgendeinen Teil der aktuellen Konfiguration zu speichern. Etwa die momentan sichtbaren Ebenen. Oder die Farben (&#039;Ansicht&#039;-&amp;gt;&#039;Farben&#039;).&lt;br /&gt;
* Die Farbwahldialoge sind auch wieder selbstgebastelt. Dabei bietet Windows auch die schon fix-und-fertig an.&lt;br /&gt;
* Irgendwie ist die 3D-Ansicht ja nett, noch netter wärs aber, wenn man damit irgendwas anfangen könnte. Etwa in ein Bild rendern oder so. Es gibt keinen Knopf dafür...&lt;br /&gt;
* Es gibt nur den Universal-Bus, in dem sämtliche Signale des Projektes auftauchen. Anklemmen an den Bus ist umständlich, man muss das gewünschte Signal aus einer Liste heraussuchen. Das ist bei Eagle deutlich effizienter gelöst (Kontextmenü).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Taktung_FPGA/CPLD&amp;diff=66759</id>
		<title>Taktung FPGA/CPLD</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Taktung_FPGA/CPLD&amp;diff=66759"/>
		<updated>2012-06-09T18:02:56Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Kombinatorik im Taktpfad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Von den drei Signalgruppen&lt;br /&gt;
&lt;br /&gt;
* interne Signale&lt;br /&gt;
* IO Signale&lt;br /&gt;
* Takt (Clock)&lt;br /&gt;
&lt;br /&gt;
ist letztere die mit den höchsten Anforderungen an Signalqualität und Laufzeit. Fehler im Taktnetzwerk führen zu ungewolltem, ja oft &#039;&#039;katastrophalem&#039;&#039; Verhalten der Schaltung. Um dies zu vermeiden sind besondere Aufbauregeln und Komponenten für die Taktverteilung in digitalen ICs entwickelt worden.&lt;br /&gt;
&lt;br /&gt;
== Grundanforderungen Taktnetzwerk ==&lt;br /&gt;
Der Takt muss möglichst störungsfrei an alle getakteten Bauelemente (FlipFlops, RAMs) im IC geführt werden. Das Taktnetzwerk muss damit sehr viele Gatter-Eingänge treiben (einige Dutzend bis einige Hundertausend!). Dazu wird ein spezieller Takttreiber genutzt (Xilinx: BUFG). Die Laufzeit vom Eingang des Takttreibers zu jedem Endpunkt des Netzes muss gleich sein. Nur so ist gewährleistet, dass alle FlipFlops zum gleichen Zeitpunkt schalten und die Synchronität gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Der Laufzeitunterschied zwischen verschiedenen Endpunkten des Taktnetzes wird Skew genannt und muss sehr klein gehalten werden (bei modernen Digitalschaltkreisen kleiner 100 ps).  Dazu wird das Taktnetzwerk als Baumstruktur gestaltet (gleiche Länge von der Baumwurzel zu jeder Astspitze). Man nennt diese Schaltungstechnik &amp;quot;Clock Tree&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:clock_tree.png | 320px]]&lt;br /&gt;
&lt;br /&gt;
In fast jeder Digitalschaltung kommt es nun vor, dass verschiedene Bereiche nicht bei jedem Takt eine Aktion ausführen sollen. Einige laufen sogar mit einer erheblich geringeren Taktrate als der Rest der Schaltung. Dazu muss aus dem relativ schnellen Systemtakt ein langsamer Takt gewonnen werden. Was auf den ersten Blick recht einfach aussieht, wird im Detail oft falsch gemacht.&lt;br /&gt;
&lt;br /&gt;
== Geschaltete Takte (Gated Clock)==&lt;br /&gt;
&lt;br /&gt;
Dieser Begriff bezieht sich auf geschaltete, also unterbrochene (engl. &amp;quot;gate&amp;quot;), Taktleitungen. Dies kann durch die Verwendung von:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Multiplexern&#039;&#039;&#039; (Auswahl zwischen Taktquelle 1 und 2) &lt;br /&gt;
oder &lt;br /&gt;
*&#039;&#039;&#039;kombinatorischer Logik&#039;&#039;&#039; (Schaltungsteile werden unter bestimmten Bedingungen vom Takt getrennt)&lt;br /&gt;
geschehen.&lt;br /&gt;
&lt;br /&gt;
===Taktmultiplexer===&lt;br /&gt;
Falls ein völliges Abschalten des Taktes wirklich erforderlich ist, z.&amp;amp;nbsp;B. um den Leistungsbedarf zeitweilig zu drosseln, sollte der Takttreiber selbst abgeschaltet werden. Bei Xilinx würde man statt eines BUFG einen BUFGMUX einsetzen. Dieser garantiert durch seinen speziellen Aufbau, daß während des Umschaltens keine [[Glitch]]es entstehen.&lt;br /&gt;
&lt;br /&gt;
===Kombinatorik im Taktpfad===&lt;br /&gt;
Ein solches Design ist aus zwei Gründen problematisch:&lt;br /&gt;
* es entstehen neben den gewünschten Schaltflanken zusätzliche, ultrakurze Flanken (-&amp;gt;[[Glitch]]es)&lt;br /&gt;
* bei CLK-Teilern hat der langsame Takt eine Phasenverschiebung zum schnellen Takt (-&amp;gt; Skew).&lt;br /&gt;
* bei &amp;quot;gegateten&amp;quot; Takten besitzt der ereugte Takt eine Phasenverschiebung zum Quell-Takt (-&amp;gt; Skew).&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall können durch die Glitches unerwünschte Schaltaktivitäten an FlipFlops in folgenden Schaltungsteilen ausgelöst werden. Das ist fatal! Schon deshalb ist diese Variante nicht brauchbar. Sie wurde dennoch oft in der Vergangenheit angewendet, weil die relativ langsamen ICs die Glitches gefiltert bzw. ignoriert haben. Doch heute sind CPLDs und FPGAs extrem schnell, dass man mit dieser Methode schnell scheitert.&lt;br /&gt;
&lt;br /&gt;
Im zweiten Fall erfolgt durch Skew eine Verschiebung der Schaltzeiten im anderen Schaltungsteil, die insgesamt weniger Zeitreserve für Signale lässt, die aus dem anderen Schaltungsteil wieder in den ersten Schaltungsteil übergeben werden sollen. In der Vorwärtsrichtung bestehen sogannnte race conditions, d.h. Daten innerhalb der Quelltaktdomäne gelangen eher an FlipFlops der Zieldomäne als Daten, die innerhalb der Zieldomäne erzeugt wurden. Sind Signale zu früh, werden sie ggfs. vom falschen Takt übernommen, wodurch das design &amp;quot;komisch&amp;quot; arbeitet, weil scheinbar ein Takt fehlt. Diese Methodik ohne Behandlung oder besondere Betrachung der Fälle nicht zuverlässig und damit allgemein nicht akzeptabel.&lt;br /&gt;
&lt;br /&gt;
In Sonderfällen kann durch einen ausreichende Verschiebung dafür gesorgt werden, dass die Schaltungsteile zueinander korrekt laufen und stabil arbeiten. Dies ist dann einfach zu erreichen, wenn kein Rückwärtspfad der Daten benötigt wird, der im selben Taktzyklus agieren muss.&lt;br /&gt;
&lt;br /&gt;
=== Asynchrone Taktleitung ===&lt;br /&gt;
&lt;br /&gt;
Durch diese Methodik der verschobenen Takte kann jedoch auch eine Geschwindigkeitssteigerung erreicht werden, wenn der Takt quasi wie ein Lauffeuer durch den Chip läuft und bei korrektem Timing der Daten (kurze Kombinatorik), jene aus der zukünftigen Zeitebene nie einholt. Damit sind asynchron gepipelinete Architekturen bildbar, die unterhalb der Taktebene arbeiten und lokal die typischen setup-hold-Bedingungen einhalten.&lt;br /&gt;
&lt;br /&gt;
Dies wird üblicherweise aber nur bei ASICs eingesetzt, bei denen ohnehin die Takte und Daten passend lokal optimiert werden. Im Bereich des typischen FPGA-Designs findet man hierzu jedoch bislang nur akademische Lösungen und manuell plazierte Teildesigns bei Sonderlösungen, z.B. auf dem Gebiet der TDC (Time to Digital Converter, schnelle PMW-Generierung z.B. im [[PICCOLO]] von TI), da die Tools allesamt auf einem FPGA-weit synchronen Takt und Design aufbauen, dies nicht automatisiert unterstützen und folglich ein Design extrem aufwändig und schwer zu testen ist. Geschwindigkeitssteigerungen lassen sich bei FPGAs daher meist einfacher, sicherer und billiger erreichen, wenn man stärker Pipelining oder Parallelisierung nutzt, ggf. unter Nutzung von mehreren FPGAs.&lt;br /&gt;
&lt;br /&gt;
=== Derived Clock ===&lt;br /&gt;
&lt;br /&gt;
Eine geringfügige Verbesserung des Gated Clock erreicht man durch das Anfügen eines FlipFlops hinter den kombinatorischen Dekoder. Durch diese Zwischenspeicherung wird der Takt zumindest frei von Glitches. Wenn im FPGA/CPLD nur ein langsamer Takt gebraucht wird, oder der langsame Schaltungsteil keine logische Verbindung zum schnellen Schaltungsteil hat, dann ist diese Lösung akzeptabel und sicher. Wenn jedoch zwischen dem langsamen Schaltungsteil und schnellen Schaltungsteil Daten oder Steuersignale ausgetauscht werden, dann muss man zu einer anderen Entwurfsmethode greifen.&lt;br /&gt;
&lt;br /&gt;
== Clock Enable ==&lt;br /&gt;
Jedes FlipFlop in FPGAs/CPLDs hat einen synchronen Steuereingang namens CE (Clock Enable). Damit kann man festlegen, ob das FlipFlop bei der nächsten Taktflanke neue Daten speichern oder die alten behalten soll. Da es sich um einen synchronen Eingang handelt, ist es vollkommen unkritisch, wenn diese Signal Glitches enthält. Es muss nur im Zeitraum beginnend kurz vor der Taktflanke (Setup Time, Aufbauzeit) bis kurz danach (Hold Time, Haltezeit) stabil anliegen. Eine Verschiebung dieses Signals zum Takt ist auch unkritisch, denn jedes normale Steuersignal ist phasenverschoben zum Takt (Schaltzeit der FlipFlops, Durchlaufzeit der Logik, Laufzeit der Verdrahtung (Routing)). Das CE-Signal kann von der Entwurfssoftware wie ein normales Steuersignal behandelt werden und vereinfacht damit erheblich die automatische Analyse der maximalen Schaltfreqeunz (Timing Analyses).&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Im nachfolgenden Bild sind alle drei Typen von Takt kurz skizziert. Der schnelle Takt treibt einen 4Bit Zähler (CNT1). Dessen Ausgänge werden über eine UND-Gatter (Gate1) kombinatorisch verknüpft. Der Ausgang des UND-Gatters ist nur dann HIGH, wenn alle Eingänge HIGH sind. Das ist nur einmal alle 16 Takte der Fall, wenn der Zählerstand binär 1111 erreicht ist. Dieses Signal als Takt zu verwenden wäre sträflich, denn es ist ein &amp;lt;B&amp;gt;Gated Clock&amp;lt;/B&amp;gt;. Wenn er jedoch noch einmal mittels FlipFlop (FF1) zwischengespeichert wird ist es ein &amp;lt;B&amp;gt;Derived Clock&amp;lt;/B&amp;gt;. Der beste und sinnvollste Weg ist jedoch die Verwendung des &amp;lt;B&amp;gt;CE-Eingang&amp;lt;/B&amp;gt;s der FlipFlops (FF2) wie es ganz unten im Bild dargestellt ist. &lt;br /&gt;
&lt;br /&gt;
[[bild:clock_types.png | thumb| left | 640px | verschiedene Taktteiler]]&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Umsetzung in VHDL ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
-- Die Verwendung von &amp;quot;Clock Enable&amp;quot; in VHDL&lt;br /&gt;
-- die Signale clk und ce sind hier natürlich nur Beispiele&lt;br /&gt;
-- es kann dafür jeder beliebige Signalname verwendet werden&lt;br /&gt;
&lt;br /&gt;
-- Das hier muss in die Signaldeklaration zwischen&lt;br /&gt;
-- achitecture ...   und  begin&lt;br /&gt;
&lt;br /&gt;
constant cnt_div: integer:=16;                  -- Teilerverhältnis&lt;br /&gt;
signal   cnt:     integer range 0 to cnt_div-1; -- Zähler für Teiler&lt;br /&gt;
signal   ce:      std_logic;&lt;br /&gt;
&lt;br /&gt;
-- die Prozesse logischerweise nach begin der Achritecture&lt;br /&gt;
&lt;br /&gt;
-- Prozess mit langsamen Clock Enable&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    if ce=&#039;1&#039; then&lt;br /&gt;
&lt;br /&gt;
    -- Aktionen hier einfügen, welche mit langsamen Takt laufen    &lt;br /&gt;
&lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
-- Clock Enable Generator&lt;br /&gt;
&lt;br /&gt;
process(clk)&lt;br /&gt;
begin&lt;br /&gt;
  if rising_edge(clk) then&lt;br /&gt;
    if cnt=cnt_div-1 then&lt;br /&gt;
      ce  &amp;lt;= &#039;1&#039;;&lt;br /&gt;
      cnt &amp;lt;= 0;&lt;br /&gt;
    else&lt;br /&gt;
      ce  &amp;lt;= &#039;0&#039;;&lt;br /&gt;
      cnt &amp;lt;= cnt +1 ;&lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clock Skew ==&lt;br /&gt;
Mithilfe der clock skew Einstellung kann ein Synthesewerkzeug angewiesen werden, den Zeitpunkt der Taktflanke entsprechend den Erfordernissen der Schaltungsverzögerungen einzustellen. Dies schafft mehr Reserven.&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Phase Shift==&lt;br /&gt;
Innerhalb der FPGA-PLLs können mehrere Takte von demselben Eingangstakt abgeleitet werden, die eine feste Verschiebung aufweisen.&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Typen&amp;diff=65866</id>
		<title>AVR Typen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Typen&amp;diff=65866"/>
		<updated>2012-04-22T16:06:21Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Weitere Vergleichstabellen */ Beiträge mit Tabellen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AT90S ==&lt;br /&gt;
Die &amp;quot;Basic Line&amp;quot; der Atmel [[AVR]]-Reihe. Sie beinhaltet die ersten [[AVR|AVRs]] die produziert wurden und deren Bezeichnung mit &amp;quot;AT90S&amp;quot; beginnt. Alle Typen wurden mit der Zeit von den beiden Nachfolgereihen ersetzt: ATmega bzw. ATtiny.&lt;br /&gt;
&lt;br /&gt;
Einige neue AVR-Controller tragen eine mit AT90-&#039;&#039;ohne S&#039;&#039; beginnende Bezeichnung, haben aber einen &amp;quot;moderneren&amp;quot; Kern. Z.B. sind die Typen AT90PWM2/3 und AT90CAN128 vom Funktionsumfang (interner RC, USART etc.) den ATmegas zuzuordnen.&lt;br /&gt;
&lt;br /&gt;
== ATmega ==&lt;br /&gt;
Die ATmega-[[Mikrocontroller]] sind ein Teil der AVR-Controllerfamilie. Zusammen mit den ATtiny lösen die ATmega die AT90S-Serie schrittweise ab, wobei es in den meisten Fällen weitgehend pin- und funktionskompatiblen Ersatz für abgekündigte Controller gibt (ATmega8 statt AT90S4433, ATmega8515 statt AT90S8515 usw.).&lt;br /&gt;
&lt;br /&gt;
Atmel ATmega AVRs werden mit aktiviertem internem Taktgeber ausgeliefert. Schließt man ein andere externe Taktquelle an (Quarz, Quarzoszillator o.ä), wird diese nicht automatisch genutzt. Zum Aktivieren müssen die Fuse-Bits des Controllers entsprechend eingestellt werden (siehe Datenblatt).&lt;br /&gt;
&lt;br /&gt;
ATmegas mit integriertem [[JTAG]]-Interface (z.Zt. solche ab 16kB Flash-Speicher und mehr als 28 Pins&amp;lt;!-- wg. ATmega168--&amp;gt;) werden ab Werk mit aktiviertem JTAG-Interface ausgeliefert. Dieses Interface belegt vier Port-Pins (z.&amp;amp;nbsp;B. am PORTC bei ATmega16/32), die nicht für eigene Anwendungen genutzt werden können, solange das JTAG-Interface aktiviert ist. Das Interface lässt sich über ein Fuse-Bit (JTAGEN) dauerhaft und über ein Bit (JTD) in dem (oder einem der) MC-Kontroll-Register (Datenblatt nach JTD durchsuchen) per Software zur Laufzeit an- und abschalten. Weiteres im Datenblatt des jeweiligen Controllers in den Abschnitten Memory-Programming (Fuse) und JTAG/ICE (JTD).&lt;br /&gt;
&lt;br /&gt;
Beim ATmega128 ist ab Werk die Mega103-Kompatibilitäts-fuse gesetzt. Um alle Erweiterungen des Mega128 gegenüber dem Mega103 zu nutzen muss diese deaktivert werden. Diese Fuse sorgt außerdem dafür, dass das SRAM in einem anderen Adressbereich liegt. Dadurch funktionieren C-Programme nur bis zum ersten Funktionsaufruf. Siehe auch [[AVR_Checkliste#Besonderheiten_bei_ATmega128_und_seinen_Derivaten_im_64-Pin-Gehäuse | AVR Checkliste: Besonderheiten bei ATmega64 / ATmega128]]&lt;br /&gt;
&lt;br /&gt;
== ATtiny ==&lt;br /&gt;
&lt;br /&gt;
Die ATtiny stellen das untere Ende der neuen AVR Linie von Atmel dar und waren zunächst durch das Fehlen von internem [[RAM#SRAM|SRAM]] gekennzeichnet. Mittlerweile gibt es aber so bemerkenswerte Controller wie den ATtiny4313, deren Möglichkeiten und Funktionen den ATmegas in nichts nachstehen.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Unterschied zu den ATmegas ist der fehlende Hardwaremultiplizierer. Jede Multiplikation muss also in Software ausgeführt werden. Eine Übersicht über die Verfügbarkeit verschiedener Befehle bietet die [[AVR_Assembler_-_Vergleichstabelle|AVR-Assembler Befehlsvergleichstabelle]].&lt;br /&gt;
&lt;br /&gt;
== ATxmega ==&lt;br /&gt;
Neueste Generation von AVR-Controllern mit neuem internen Aufbau, hoher Taktrate (32 MHz), niedriger Spannung (1,6 - 3,6V), vielen Schnittstellen, in 44 - 100 poligen SMD-Gehäusen. Besonderheiten: ADC mit 2 Megasample/12 Bit, vierpoliges Programm- und Debug- Interface PDI (VTref, CLK, DATA, GND)  erfordert z.B. einen AVR_JTAGICE-mkII Programmer. PDI (Flash und Debug) funktioniert mit C-Code z.B. mit AVR Studio 4.19. &lt;br /&gt;
&lt;br /&gt;
Leider ist die Xmega-Reihe zu den AVR-Prozessoren der Mega- oder Tiny-Serien nicht  kompatibel (viel komplizierter, anderer Aufbau der IO-Baugruppen, der Interrupts, der C-Funktionen etc.). Prozessor-Manuals zeigen weder Assembler noch C-Beispiele für Ansteuerung der IO-Baugruppen. C-Programmbeispiele (geeignet für AVR-Studio) findet man erst in Xmega Application Notes. Einen Überblick gibt [http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial Florian Grotz].&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
Die AT89-Familie gehört nicht zu den AVR-Typen mit dem AVR-RISC-Befehlssatz, sondern ist eine [[8051|Intel-8051]]-kompatible 8-Bit µC-Serie.&lt;br /&gt;
&lt;br /&gt;
=== Tiny vs Mega ===&lt;br /&gt;
Die modernen Typen sind die Tiny und die Mega. Die ATTiny haben kleinere Gehaeuse als die ATMega, mit weniger Pins. Dies fuehrt bei aehnlicher Funktionalitaet wie die Megas zu extremerer Mehrfachbelegungen der Pins und auch eher zu Ueberschneidungen der Pinfunktionalitaet. Die Tiny sind daher eher fuer sehr hohe Stueckzahlen geeignet, wo die Einsparung ueber die Stueckzahl kommt. Anfaenger und Bastler sind mit den ATMega besser bedient, da die weniger Limitationen besitzen.&lt;br /&gt;
&lt;br /&gt;
==Nomenklatur==&lt;br /&gt;
===ATmega===&lt;br /&gt;
Auch wenn die Namensgebung auf den ersten Blick bedingt durch die vielen verfügbaren Modelle kompliziert aussieht, so folgt sie doch immer (von wenigen Ausnahmen abgesehen) einem einfachen Schema. &lt;br /&gt;
&lt;br /&gt;
Nehmen wir einen aktuellen Baustein als Beispiel: *ATmega48PA-AU*. Der Name besteht aus 5 Teilen:&lt;br /&gt;
# Der Baureihe (hier: &amp;quot;ATmega&amp;quot;)&lt;br /&gt;
# Einer Nummer, immer eine Zweierpotenz (hier: 4). Diese Zahl gibt die Größe des Flashspeichers in Kibibyte an. &lt;br /&gt;
# Bis zu zwei weiteren Ziffern (hier: 8). Sie definieren die Zusatzfunktionen sowie Zahl der I/O-Ports.&lt;br /&gt;
# Bis zu zwei Buchstaben (hier: PA), die für die Revision sowie spezielle stromsparende Architekturen stehen.&lt;br /&gt;
# Einem Bindestrich und zwei weiteren Buchstaben, die die Bauform angeben (hier: AU).&lt;br /&gt;
&lt;br /&gt;
====Baureihe====&lt;br /&gt;
&lt;br /&gt;
Hier gibt es nur zwei Reihen: Den kleinen ATtiny mit reduziertem Funktionsumfang und den großen ATmega.&lt;br /&gt;
&lt;br /&gt;
====Speichergröße====&lt;br /&gt;
&lt;br /&gt;
Während die Größe des Flashspeichers (Programmspeicher) direkt im Namen angegeben ist, ergibt sich die Größe von RAM und EEPROM nur indirekt aus dieser Nummer, wobei natürlich die Bausteine mit großem Flash auch mehr RAM und EEPROM haben als kleinere. Grob gilt diese Zuordnung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Flash (kB)  !! EEPROM (B) !! RAM (B)&lt;br /&gt;
|-&lt;br /&gt;
| 2           ||   tiny: 128      ||  tiny: 128&lt;br /&gt;
|-&lt;br /&gt;
| 4           ||   tiny: var., mega: 256      ||  tiny: 256, mega: 512&lt;br /&gt;
|-&lt;br /&gt;
| 8           ||   tiny: var., mega: 512      ||  tiny: 512, mega: 1024&lt;br /&gt;
|-&lt;br /&gt;
| 16          ||   512      ||  1024&lt;br /&gt;
|-&lt;br /&gt;
| 32          ||   1024     ||  2048&lt;br /&gt;
|-&lt;br /&gt;
| 64          ||   2048*)   ||  4096*)&lt;br /&gt;
|-&lt;br /&gt;
| 128 - 256   ||   4096     ||  4K - 16K&lt;br /&gt;
|}&lt;br /&gt;
 *)Atmega640 verfügt über den doppelten Speicher&lt;br /&gt;
&lt;br /&gt;
====Zusatzfunktionen / Größe====&lt;br /&gt;
Die Ziffer(n) nach der Flashgröße geben die Ausstattungsmerkmale des Bausteins an. Die folgende Tabelle gilt für die Atmega-Reihe:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ziffer  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| - ||  Keine Ziffer markiert die Bausteine der ersten Generation. Sie verfügen in der Regel über eine niedrigere maximale Taktrate (8/16 MHz anstatt 10/20 MHz), eine höhere Minimal-Spannung (2,7 anstatt 1,8 Volt), weniger Interrupt-Quellen und PWM-Kanäle&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||  Reihe von 32 - 256 kB in einem größeren Gehäuse mit höherer Anzahl an I/O-Pins. Etwas älter als die aktuellen Reihen 4 und 8.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  Kennzeichnet eine verbesserte Version des Atmega128 / 256, aber älter als aktuelle 4er Reihe&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  Reihe von 16 bis 128 kB Flash, alle pinkompatibel in 40-44 poligem Gehäuse. Neueste Baureihe, alle in pico-power-Technologie mit vielen verbesserten Funktionen wie externen Interrupts, Timern, USART...&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  Reihe von 16 bis 64 kB&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  Reihe von 4 bis 32 kB, alle pinkompatibel in 28-32 poligem Gehäuse. Neueste Baureihe, alle in pico-power-Technologie mit vielen verbesserten Funktionen wie externen Interrupts, Timern, USART.... (auch in der Attiny-Reihe vorhanden)&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  Reihe von 16 bis 64 kB mit integriertem Controller für LC-Displays, folglich in großen Gehäusen (64-/100-polig)&lt;br /&gt;
|}&lt;br /&gt;
Aus dieser Liste stechen einige Bausteine als Außenseiter hervor:&lt;br /&gt;
* Atmega8515 / Atmega8535&lt;br /&gt;
* Atmega640: Im Prinzip ein Atmega64 mit deutlich mehr Hardware-Ressourcen (4 UARTs, 16 ADC-Kanäle...) und doppelt soviel EEPROM / SRAM.&lt;br /&gt;
&lt;br /&gt;
====Revision / Architektur====&lt;br /&gt;
Die (optionalen) Buchstaben vor dem Bindestrich geben Auskunft über den Stromverbrauch und Spannungsbereich&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Buchstabe  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| A ||  Zweite Revision - meist nur eine Umstellung der internen Strukturen ohne Auswirkung für den Benutzer&lt;br /&gt;
|-&lt;br /&gt;
| L / V ||  &amp;quot;Low-Voltage&amp;quot;: Speziell für niedrigere Taktraten (8 bzw. 10 MHz) sowie niedrigere Eingangsspannungen (1,8 bzw. 2,7V) selektierte Bausteine&lt;br /&gt;
|-&lt;br /&gt;
| P/PA ||  &amp;quot;Pico-Power&amp;quot;: Reduzierter Stromaufnahme, besonders in tiefen Sleep-Modes (&amp;lt; 1uA); Manche Bausteine (z.B. Mega48) gibt es als P und PA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bauform====&lt;br /&gt;
Die beiden Buchstaben nach dem Bindestrich geben Auskunft über die Bauform. Die Zahl der Pins des jeweiligen Gehäusetyps hängt vom Baustein ab.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Buchstaben  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| A ||  TQFP-Gehäuse&lt;br /&gt;
|-&lt;br /&gt;
| C ||  BGA-Gehäuse&lt;br /&gt;
|-&lt;br /&gt;
| I ||  Bleihaltig - nicht mehr erhältlich&lt;br /&gt;
|-&lt;br /&gt;
| J ||  PLCC-Gehäuse&lt;br /&gt;
|-&lt;br /&gt;
| M ||  (V)QFN- / MLF- Gehäuse&lt;br /&gt;
|-&lt;br /&gt;
| P ||  DIP-Gehäuse  (bastlerfreundlich!)&lt;br /&gt;
|-&lt;br /&gt;
| S ||  SOIC-Gehäuse&lt;br /&gt;
|-&lt;br /&gt;
| U ||  Bleifrei, RoHS-kompatibel&lt;br /&gt;
|-&lt;br /&gt;
| X ||  TSSOP-Gehäuse&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
===ATtiny===&lt;br /&gt;
Bei den ATtiny-Bausteinen ist die Nummerierung deutlich unübersichtlicher als in der ATmega-Reihe. Die erste Ziffer gibt wie auch bei ATmega die Größe des Flash-Speichers an. Die obenstehenden Tabellen für Baureihe, Bauform, Revision und Speichergröße gelten ebenfalls (Ausnahmen: ATtiny5 mit 0,5 Kilobytes Flash sowie ATtiny4 und ATtiny9 mit 0,5 bzw. 1 kB Flash). Die Zusatzfunktionen und Baugröße sind aber nicht deutlich&lt;br /&gt;
&lt;br /&gt;
== Vergleichstabelle(n) / Ausstattung ==&lt;br /&gt;
=== AT90S - Reihe ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;font-size:10px;&amp;quot; id=&amp;quot;AVR_Features_AT90S&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Typ||Flash (Kbytes)||EEPROM (Bytes)||SRAM (Bytes)||Max I/O Pins||F.max (MHz)||Vcc (V)||Analog &amp;lt;br/&amp;gt;Compa&amp;amp;shy;rator||16-bit Timer||8-bit Timer||Brown Out Detector||On Chip Oscillator||PWM Chan&amp;amp;shy;nels||RTC||Self Prog&amp;amp;shy;ram Memory||Boot Code||SPI||TWI (I2C)||UART||Watch&amp;amp;shy;dog||Bau&amp;amp;shy;form&lt;br /&gt;
|- &amp;lt;!-- START - AT90S2313 -------------------------------------&amp;gt;&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc0839.pdf AT90S2313]&amp;lt;ref&amp;gt;veraltet → ATtiny2313&amp;lt;/ref&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|15&lt;br /&gt;
|10&lt;br /&gt;
|2.7-6.0&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP20 SOIC20&lt;br /&gt;
|- &amp;lt;!-- START - AT90S2323 ---------------------------------------&amp;gt;&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc1004.pdf AT90S2323]&amp;lt;ref&amp;gt;veraltet → ATtiny25/45/85&amp;lt;/ref&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|3&lt;br /&gt;
|10&lt;br /&gt;
|2.7-6.0&lt;br /&gt;
|Nein&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|0&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
|- &amp;lt;!-- START - AT90S2343 ------------------------------&amp;gt;&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc1004.pdf AT90S2343]&amp;lt;ref&amp;gt;veraltet → ATtiny25/45/85&amp;lt;/ref&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|5&lt;br /&gt;
|10&lt;br /&gt;
|2.7-6.0&lt;br /&gt;
|Nein&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|0&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8 &lt;br /&gt;
|- &amp;lt;!-- START - AT90S8515 ----------------------------------&amp;gt;&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc0841.pdf AT90S8515]&amp;lt;ref&amp;gt;veraltet → ATmega16/162/32/644&amp;lt;/ref&amp;gt;&lt;br /&gt;
|8&lt;br /&gt;
|512&lt;br /&gt;
|512&lt;br /&gt;
|32&lt;br /&gt;
|8&lt;br /&gt;
|2.7-6.0&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|1 (16-Bit)&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 PLCC44 TQFP44&lt;br /&gt;
&amp;lt;!-- diesen Kommentar entfernen nach dem Kopieren dieser Eingabehilfe&lt;br /&gt;
|-&lt;br /&gt;
|Typ&lt;br /&gt;
|Flash (Kbytes)&lt;br /&gt;
|EEPROM (Bytes)&lt;br /&gt;
|SRAM (Bytes)&lt;br /&gt;
|Max I/O Pins&lt;br /&gt;
|F.max (MHz)&lt;br /&gt;
|Vcc (V)&lt;br /&gt;
|A/D Chan&amp;amp;shy;nels&lt;br /&gt;
|Ana&amp;amp;shy;log&amp;lt;br/&amp;gt;Compa&amp;amp;shy;rator&lt;br /&gt;
|16-bit Timer&lt;br /&gt;
|8-bit Timer&lt;br /&gt;
|Brown Out Detec&amp;amp;shy;tor&lt;br /&gt;
|On Chip Osci&amp;amp;shy;llator&lt;br /&gt;
|PWM Chan&amp;amp;shy;nels&lt;br /&gt;
|RTC&lt;br /&gt;
|Self Pro&amp;amp;shy;gram Memory&lt;br /&gt;
|Boot Code&lt;br /&gt;
|SPI&lt;br /&gt;
|TWI&lt;br /&gt;
|UART&lt;br /&gt;
|Watch&amp;amp;shy;dog&lt;br /&gt;
|Bau&amp;amp;shy;formen&lt;br /&gt;
|Preis&amp;lt;ref name=&amp;quot;preis&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!-- diesen Kommentar entfernen nach dem Kopieren dieser Eingabehilfe--&amp;gt;&lt;br /&gt;
&amp;lt;!-- ENDE - AT90Sxxxx ---------------------------------------------------------&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ATtiny - Reihe ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;font-size:10px;&amp;quot; id=&amp;quot;AVR_Features_ATtiny&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Typ||Flash (Kbytes)||EEPROM (Bytes)||SRAM (Bytes)||Max I/O Pins||F.max (MHz)||Vcc (V)||A/D Channels||Analog Comparator||16-bit Timer||8-bit Timer||Brown Out Detector||On Chip Oscillator||PWM Channels||RTC||Self Program Memory||Boot Code||SPI||TWI (I2C)||UART||Watchdog||Bauform(en)||Preis&amp;lt;ref name=&amp;quot;preis&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc1006.pdf ATtiny11]&lt;br /&gt;
|1&lt;br /&gt;
| --&lt;br /&gt;
| --&lt;br /&gt;
|6&lt;br /&gt;
|6&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
| --&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|1&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
| --&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
| 0.58-0.87&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc1006.pdf ATtiny12]&lt;br /&gt;
|1&lt;br /&gt;
|64&lt;br /&gt;
| --&lt;br /&gt;
|6&lt;br /&gt;
|8&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
| --&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
| 1.00-1.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/Images/doc8126.pdf ATtiny13A]&lt;br /&gt;
|1&lt;br /&gt;
|64&lt;br /&gt;
|64&lt;br /&gt;
|6&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|4 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref&amp;gt;Timer-PWM&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
| 0.70-1.20&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc1187.pdf ATtiny15]&lt;br /&gt;
|1&lt;br /&gt;
|64&lt;br /&gt;
| --&lt;br /&gt;
|6&lt;br /&gt;
|1.6&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|4 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|ONLY&lt;br /&gt;
|1&amp;lt;ref&amp;gt;150kHz 8bit&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
| 1.15&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2543.pdf ATtiny2313]&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
| --&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usip&amp;quot;&amp;gt;+USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usi&amp;quot;&amp;gt;USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP20 SOIC20 QFN20 MLF20&lt;br /&gt;
| 1.30&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/Images/doc8246.pdf ATtiny4313]&lt;br /&gt;
|4&lt;br /&gt;
|256&lt;br /&gt;
|256&lt;br /&gt;
|18&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
| --&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usip&amp;quot;&amp;gt;+USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usi&amp;quot;&amp;gt;USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP20 SOIC20 QFN20 MLF20&lt;br /&gt;
| 1.00-2.00&lt;br /&gt;
|-&lt;br /&gt;
|[http://atmel.com/dyn/resources/prod_documents/doc8006.pdf ATtiny24]&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|12&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usip&amp;quot;&amp;gt;+USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usi&amp;quot;&amp;gt;USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP14 SOIC14 QFN20/MLF20&lt;br /&gt;
|1.45&lt;br /&gt;
|-&lt;br /&gt;
|[http://atmel.com/dyn/resources/prod_documents/doc2588.pdf  ATtiny261]&lt;br /&gt;
|2&lt;br /&gt;
|128&lt;br /&gt;
|128&lt;br /&gt;
|16&lt;br /&gt;
|20&lt;br /&gt;
|1,8-5,5&lt;br /&gt;
|11&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|2&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usip&amp;quot;&amp;gt;+USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;usi&amp;quot;&amp;gt;USI&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP20 SOIC20 MLF20 (TSSOP20 bei Tiny261A)&lt;br /&gt;
|1,15&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2586.pdf ATtiny85]&lt;br /&gt;
|8&lt;br /&gt;
|512&lt;br /&gt;
|512&lt;br /&gt;
|6&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|4&lt;br /&gt;
|Ja&lt;br /&gt;
| --&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Nein&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP8 SOIC8&lt;br /&gt;
| 1.30-2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ATmega - Reihe ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;font-size: 10px;&amp;quot; id=&amp;quot;AVR_Features_ATMega&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Typ||Flash &amp;lt;br/&amp;gt;(Kbytes)||EEPROM &amp;lt;br/&amp;gt;(Bytes)||SRAM &amp;lt;br/&amp;gt;(Bytes)||Max I/O &amp;lt;br/&amp;gt;Pins||F.max &amp;lt;br/&amp;gt;(MHz)||Vcc (V)||A/D &amp;lt;br/&amp;gt;Chan&amp;amp;shy;nels||Ana&amp;amp;shy;log &amp;lt;br/&amp;gt;Compa&amp;amp;shy;rator||16-bit &amp;lt;br/&amp;gt;Timer||8-bit &amp;lt;br/&amp;gt;Timer||Brown Out Detec&amp;amp;shy;tor||On Chip Oscillator||PWM Chan&amp;amp;shy;nels||RTC||Self Pro&amp;amp;shy;gram Memory||Boot Code||SPI||TWI (I2C)||UART||Watch&amp;amp;shy;dog||Bau&amp;amp;shy;form||Preis&amp;lt;ref name=&amp;quot;preis&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/2486S.pdf ATmega8]&lt;br /&gt;
|8&lt;br /&gt;
|512&lt;br /&gt;
|1K&lt;br /&gt;
|23&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|6 10bit PDIP&amp;lt;br/&amp;gt;8 10bit TQFP QFN/MLF&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|3&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;br/&amp;gt;USART&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP28 TQFP32 QFN/MLF32&lt;br /&gt;
| 1.70-1.90&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf ATmega16]&lt;br /&gt;
|16&lt;br /&gt;
|512&lt;br /&gt;
|1K&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 TQFP44 QFN/MLF44&lt;br /&gt;
| 2.60-2.85&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2513.pdf ATmega162]&lt;br /&gt;
|16&lt;br /&gt;
|512&lt;br /&gt;
|1K&lt;br /&gt;
|35&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|Keine&lt;br /&gt;
|Ja&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|6&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|2&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 TQFP44 QFN/MLF44&lt;br /&gt;
| 2.70-3.80&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATmega32]&lt;br /&gt;
|32&lt;br /&gt;
|1K&lt;br /&gt;
|2K&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 TQFP44 QFN/MLF44&lt;br /&gt;
| 3.20-4.60&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/Images/doc8271.pdf ATmega328]&lt;br /&gt;
|32&lt;br /&gt;
|1K&lt;br /&gt;
|2K&lt;br /&gt;
|32&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|6&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP28 TQFP32 QFN/MLF32&lt;br /&gt;
| 2.00-4.50&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc2490.pdf ATmega64]&amp;lt;ref&amp;gt;Geliefert im ATmega103-Modus. Fuse ändern!&amp;lt;/ref&amp;gt;&lt;br /&gt;
|64&lt;br /&gt;
|2K&lt;br /&gt;
|4K&lt;br /&gt;
|53&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|2 8bit, 6 2-16bit&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
| TQFP64 QFN/MLF64&lt;br /&gt;
| 7.50-9.50&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf  ATmega644]&lt;br /&gt;
|64&lt;br /&gt;
|2K&lt;br /&gt;
|4K&lt;br /&gt;
|32&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|6&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt; 2&amp;lt;ref&amp;gt;beim 644P&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 TQFP44 QFN/MLF44&lt;br /&gt;
| 6.80-7.50&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf ATmega128]&lt;br /&gt;
|128&lt;br /&gt;
|4K&lt;br /&gt;
|4K&lt;br /&gt;
|53&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|2 8bit&amp;lt;br/&amp;gt;6 2-16bit&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|2&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|TQFP64 QFN/MLF64&lt;br /&gt;
|8.05-8.40  &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/products/product_card.asp?part_id=4331 ATmega1284P]&lt;br /&gt;
|128&lt;br /&gt;
|4K&lt;br /&gt;
|16K&lt;br /&gt;
|32&lt;br /&gt;
|20&lt;br /&gt;
|1.8-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|6 &lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|2&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP40 TQFP44 QFN/MLF44&lt;br /&gt;
|(5.25-8 EUR) &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/dyn/resources/prod_documents/doc2549.pdf ATmega2560]&lt;br /&gt;
|256&lt;br /&gt;
|4K&lt;br /&gt;
|8K&lt;br /&gt;
|86&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|16 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|16&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|4&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|TQFP100&lt;br /&gt;
|8-15  &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc2512.pdf ATmega8515]&lt;br /&gt;
|8&lt;br /&gt;
|512&lt;br /&gt;
|512&lt;br /&gt;
|35&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|Keine&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|1 8-bit, 1 16-bit&lt;br /&gt;
|Nein&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Nein&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP20 TQFP44 PLCC44 QFN/MLF44&lt;br /&gt;
|3.20-3.90&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.atmel.com/atmel/acrobat/doc2502.pdf ATmega8535]&lt;br /&gt;
|8&lt;br /&gt;
|512&lt;br /&gt;
|512&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|2.7-5.5&lt;br /&gt;
|8 10bit&lt;br /&gt;
|Ja&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|2 8-bit, 2 16-bit&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&lt;br /&gt;
|Ja&amp;lt;ref name=&amp;quot;ms&amp;quot;&amp;gt;Master/Slave&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|1&amp;lt;ref name=&amp;quot;usart&amp;quot;&amp;gt;USART&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Ja&lt;br /&gt;
|PDIP44 PLCC44 QFN/MLF44&lt;br /&gt;
|3.15-3.75&lt;br /&gt;
&amp;lt;!-- START - ATMegaxxxx -------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- diesen Kommentar entfernen nach dem Kopieren dieser Eingabehilfe -- &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Typ&lt;br /&gt;
|Flash (Kbytes)&lt;br /&gt;
|EEPROM (Bytes)&lt;br /&gt;
|SRAM (Bytes)&lt;br /&gt;
|Max I/O Pins&lt;br /&gt;
|F.max (MHz)&lt;br /&gt;
|Vcc (V)&lt;br /&gt;
|A/D Channels&lt;br /&gt;
|Analog Comparator&lt;br /&gt;
|16-bit Timer&lt;br /&gt;
|8-bit Timer&lt;br /&gt;
|Brown Out Detector&lt;br /&gt;
|On Chip Oscillator&lt;br /&gt;
|PWM Channels&lt;br /&gt;
|RTC&lt;br /&gt;
|Self Program Memory&lt;br /&gt;
|Boot Code&lt;br /&gt;
|SPI&lt;br /&gt;
|TWI&lt;br /&gt;
|UART&lt;br /&gt;
|Watchdog&lt;br /&gt;
|Bauform(en)&lt;br /&gt;
|Preis&amp;lt;ref name=&amp;quot;preis&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!-- diesen Kommentar entfernen nach dem Kopieren dieser Eingabehilfe--&amp;gt;&lt;br /&gt;
&amp;lt;!-- ENDE - ATMegaxxxx --------------------------------------------------------&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ATXMega - Reihe ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;font-size: 10px;&amp;quot; id=&amp;quot;AVR_Features_ATXMega&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Typ||Flash &amp;lt;br/&amp;gt;(Kbytes)||EEPROM &amp;lt;br/&amp;gt;(KBytes)||SRAM &amp;lt;br/&amp;gt;(KBytes)||Boot &amp;lt;br/&amp;gt;(Kbytes)||Max I/O &amp;lt;br/&amp;gt;Pins||F.max &amp;lt;br/&amp;gt;(MHz)||Vcc (V)||ADC||DAC||PWM &amp;lt;br/&amp;gt;Channels||16-Bit &amp;lt;br/&amp;gt;Timer||SPI||TWI&amp;lt;br/&amp;gt;(I2C)||UART||Bau&amp;amp;shy;formen&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega16a4&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|16&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega32a4&lt;br /&gt;
|32&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|16&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega64a4&lt;br /&gt;
|64&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|16&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega128a4&lt;br /&gt;
|128&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|16&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega64a3&lt;br /&gt;
|64&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|22&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega128a3&lt;br /&gt;
|128&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|22&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega192a3&lt;br /&gt;
|192&lt;br /&gt;
|2&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|22&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega256a3&lt;br /&gt;
|256&lt;br /&gt;
|4&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2-CH @ 12-Bit&lt;br /&gt;
|22&lt;br /&gt;
|7&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega64a1&lt;br /&gt;
|64&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|78&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2x 2-CH @ 12-Bit&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|TQFP100&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega128a1&lt;br /&gt;
|128&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|78&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2x 2-CH @ 12-Bit&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|TQFP100&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega192a1&lt;br /&gt;
|192&lt;br /&gt;
|2&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|78&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2x 2-CH @ 12-Bit&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|TQFP100&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega256a1&lt;br /&gt;
|256&lt;br /&gt;
|4&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|78&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2x 2-CH @ 12-Bit&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|TQFP100&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega384a1&lt;br /&gt;
|384&lt;br /&gt;
|4&lt;br /&gt;
|32&lt;br /&gt;
|8&lt;br /&gt;
|78&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|2x 8-CH @ 12-Bit&lt;br /&gt;
|2x 2-CH @ 12-Bit&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|TQFP100&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega16d4&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega32d4&lt;br /&gt;
|32&lt;br /&gt;
|1&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega64d4&lt;br /&gt;
|64&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega128d4&lt;br /&gt;
|128&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|34&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|12-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|TQFP44&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega64d3&lt;br /&gt;
|64&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|16-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|18&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega128d3&lt;br /&gt;
|128&lt;br /&gt;
|2&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|16-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|18&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega192d3&lt;br /&gt;
|192&lt;br /&gt;
|2&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|16-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|18&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|TQFP64&lt;br /&gt;
|-&lt;br /&gt;
|ATxmega256d3&lt;br /&gt;
|256&lt;br /&gt;
|4&lt;br /&gt;
|16&lt;br /&gt;
|8&lt;br /&gt;
|50&lt;br /&gt;
|32&lt;br /&gt;
|1,6 - 3,6&lt;br /&gt;
|16-CH @ 12-Bit&lt;br /&gt;
|0&lt;br /&gt;
|18&lt;br /&gt;
|5&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|TQFP64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weitere Vergleichstabellen ==&lt;br /&gt;
Vergleichstabellen zum Downloaden gibt es unter Anderem&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/242328 von Andreas], Stand 19.12.2011; vollständig,&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/232939 von Sven], Stand 22.09.2011; weiter eingedampft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ATtiny ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Device-specific Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Device&lt;br /&gt;
! Flash [KiB]&lt;br /&gt;
! Pin Anz&amp;amp;shy;ahl&lt;br /&gt;
! Max. &amp;amp;fnof;&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt; [MHz]&lt;br /&gt;
! of Touch Kan&amp;amp;shy;äle&lt;br /&gt;
! Hard&amp;amp;shy;ware Qtouch&lt;br /&gt;
! Max I/O Pins&lt;br /&gt;
! Ext Inter&amp;amp;shy;rupts&lt;br /&gt;
! SPI&lt;br /&gt;
! TWI&lt;br /&gt;
! UART&lt;br /&gt;
! LIN&lt;br /&gt;
! ADC Kan&amp;amp;shy;äle&lt;br /&gt;
! ADC Auf&amp;amp;shy;lö&amp;amp;shy;sung [bits]&lt;br /&gt;
! ADC Speed [ksps]&lt;br /&gt;
! Temp. Sensor&lt;br /&gt;
! SRAM [KiB]&lt;br /&gt;
! EEPROM [Bytes]&lt;br /&gt;
! Self Pro&amp;amp;shy;gram Memory&lt;br /&gt;
! pico&amp;amp;shy;Power&lt;br /&gt;
! Temp. Bereich [°C]&lt;br /&gt;
! I/O Supply Class [V]&lt;br /&gt;
! Opera&amp;amp;shy;ting Volt&amp;amp;shy;age [V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;]&lt;br /&gt;
! Timers&lt;br /&gt;
! Output Com&amp;amp;shy;pare Kan&amp;amp;shy;äle&lt;br /&gt;
! Input Capt&amp;amp;shy;ure Kan&amp;amp;shy;äle&lt;br /&gt;
! PWM Kan&amp;amp;shy;äle&lt;br /&gt;
! 32kHz RTC&lt;br /&gt;
! Device&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny28L&#039;&#039;&#039; || 2 || 28 || 4 || &amp;amp;mdash; || &amp;amp;mdash; || 11 || 10 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || &amp;amp;mdash; || 0.03 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 0 || 0 || 0 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny28L&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny26&#039;&#039;&#039; || 2 || 20 || 16 || &amp;amp;mdash; || &amp;amp;mdash; || 16 || 11 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;mdash; || 0.12 || 128 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 3 || 0 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny26&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny13&#039;&#039;&#039; || 1 || 8 || 20 || &amp;amp;mdash; || &amp;amp;mdash; || 6 || 6 || 0 || 0 || 0 || 0 || 4 || 10 || 15 || &amp;amp;mdash; || 0.06 || 64 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 0 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny13&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny2313&#039;&#039;&#039; || 2 || 20 || 20 || 4 || &amp;amp;mdash; || 18 || 18 || 2 || 1 || 1 || 0 || 0 || 0 || 15 || &amp;amp;mdash; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny2313&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny25&#039;&#039;&#039; || 2 || 8 || 20 || 4 || &amp;amp;mdash; || 6 || 6 || 1 || 1 || 0 || 0 || 4 || 10 || 15 || &amp;amp;radic; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 0 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny25&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny85&#039;&#039;&#039; || 8 || 8 || 20 || 3 || &amp;amp;mdash; || 6 || 6 || 1 || 1 || 0 || 0 || 4 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 0 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny85&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny45&#039;&#039;&#039; || 4 || 8 || 20 || 3 || &amp;amp;mdash; || 6 || 6 || 1 || 1 || 0 || 0 || 4 || 10 || 15 || &amp;amp;radic; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 0 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny45&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny24&#039;&#039;&#039; || 2 || 14 || 20 || 4 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny24&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny44&#039;&#039;&#039; || 4 || 14 || 20 || 6 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny44&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny84&#039;&#039;&#039; || 8 || 14 || 20 || 6 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny84&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny261&#039;&#039;&#039; || 2 || 20 || 20 || 4 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny261&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny461&#039;&#039;&#039; || 4 || 20 || 20 || 8 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny461&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny861&#039;&#039;&#039; || 8 || 20 || 20 || 8 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny861&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny13A&#039;&#039;&#039; || 1 || 8 || 20 || &amp;amp;mdash; || &amp;amp;mdash; || 6 || 6 || 0 || 0 || 0 || 0 || 4 || 10 || 15 || &amp;amp;mdash; || 0.06 || 64 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 0 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny13A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny48&#039;&#039;&#039; || 4 || 32 || 12 || 12 || &amp;amp;mdash; || 28 || 28 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.25 || 64 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny48&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny88&#039;&#039;&#039; || 8 || 32 || 12 || 12 || &amp;amp;mdash; || 28 || 28 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.5 || 64 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny88&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny24A&#039;&#039;&#039; || 2 || 14 || 20 || 4 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny24A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny44A&#039;&#039;&#039; || 4 || 14 || 20 || 6 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny44A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny43U&#039;&#039;&#039; || 4 || 20 || 8 || 8 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 4 || 10 || 15 || &amp;amp;radic; || 0.25 || 64 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 0.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 0.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 0 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny43U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny10&#039;&#039;&#039; || 1 || 6 || 12 || 1 || &amp;amp;mdash; || 4 || 4 || 0 || 0 || 0 || 0 || 4 || 8 || 15 || &amp;amp;mdash; || 0.03 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny10&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny4&#039;&#039;&#039; || 0.5 || 6 || 12 || 1 || &amp;amp;mdash; || 4 || 4 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || &amp;amp;mdash; || 0.03 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny5&#039;&#039;&#039; || 0.5 || 6 || 12 || 1 || &amp;amp;mdash; || 4 || 4 || 0 || 0 || 0 || 0 || 4 || 8 || 15 || &amp;amp;mdash; || 0.03 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny9&#039;&#039;&#039; || 1 || 6 || 12 || 1 || &amp;amp;mdash; || 4 || 4 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || &amp;amp;mdash; || 0.03 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 2 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny9&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny261A&#039;&#039;&#039; || 2 || 20 || 20 || 4 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny261A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny461A&#039;&#039;&#039; || 4 || 20 || 20 || 8 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny461A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny861A&#039;&#039;&#039; || 8 || 20 || 20 || 8 || &amp;amp;mdash; || 16 || 16 || 1 || 1 || 0 || 0 || 11 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 6 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny861A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny2313A&#039;&#039;&#039; || 2 || 20 || 20 || &amp;amp;mdash; || &amp;amp;mdash; || 18 || 18 || 2 || 1 || 1 || 0 || 0 || 0 || 15 || &amp;amp;mdash; || 0.12 || 128 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny2313A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny4313&#039;&#039;&#039; || 4 || 20 || 20 || &amp;amp;mdash; || &amp;amp;mdash; || 18 || 18 || 2 || 1 || 1 || 0 || 0 || 0 || 15 || &amp;amp;mdash; || 0.25 || 256 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny4313&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny167&#039;&#039;&#039; || 16 || 20 || 16 || 8 || &amp;amp;mdash; || 16 || 16 || 2 || 1 || 1 || 1 || 11 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 3 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;ATtiny167&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny87&#039;&#039;&#039; || 8 || 20 || 16 || &amp;amp;mdash; || &amp;amp;mdash; || 16 || 16 || 2 || 1 || 1 || 1 || 11 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 3 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;ATtiny87&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny20&#039;&#039;&#039; || 2 || 14 || 12 || 5 || &amp;amp;radic; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.12 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 3 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny20&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny40&#039;&#039;&#039; || 4 || 20 || 12 || 12 || &amp;amp;radic; || 18 || 18 || 1 || 1 || 0 || 0 || 12 || 10 || 15 || &amp;amp;radic; || 0.25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 2 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny40&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATtiny84A&#039;&#039;&#039; || 8 || 14 || 20 || 6 || &amp;amp;mdash; || 12 || 12 || 1 || 1 || 0 || 0 || 8 || 10 || 15 || &amp;amp;radic; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 4 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATtiny84A&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;General Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;CPU&#039;&#039;&#039; || 8-bit AVR&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Quadrature Decoder Kanäle&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;USB Transceiver&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;USB Speed&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;USB Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;CAN&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SSC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ethernet&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SD / eMMC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Segment LCD&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Grafik LCD&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Video Decoder&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kamera Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Analog Comparators&#039;&#039;&#039; || 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Resistive Touch Screen&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DAC Kanäle&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DAC Auflösung [bits]&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;External Bus Interface&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DRAM Memory&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NAND Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;FPU&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MPU / MMU&#039;&#039;&#039; || nein / nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypto Engine&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Calibrated RC Oscillator&#039;&#039;&#039; || ja&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ATmega ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Device-specific Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Device&lt;br /&gt;
! Flash [KiB]&lt;br /&gt;
! Pin Anz&amp;amp;shy;ahl&lt;br /&gt;
! Max. &amp;amp;fnof;&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt; [MHz]&lt;br /&gt;
! of Touch Kan&amp;amp;shy;äle&lt;br /&gt;
! Max I/O Pins&lt;br /&gt;
! Ext Inter&amp;amp;shy;rupts&lt;br /&gt;
! USB Trans&amp;amp;shy;cei&amp;amp;shy;ver&lt;br /&gt;
! USB Speed&lt;br /&gt;
! USB Inter&amp;amp;shy;face&lt;br /&gt;
! SPI&lt;br /&gt;
! TWI&lt;br /&gt;
! UART&lt;br /&gt;
! CAN&lt;br /&gt;
! LIN&lt;br /&gt;
! Seg&amp;amp;shy;ment LCD&lt;br /&gt;
! ADC Kan&amp;amp;shy;äle&lt;br /&gt;
! ADC Auf&amp;amp;shy;lö&amp;amp;shy;sung [bits]&lt;br /&gt;
! ADC Speed [ksps]&lt;br /&gt;
! Ana&amp;amp;shy;log Com&amp;amp;shy;para&amp;amp;shy;tors&lt;br /&gt;
! DAC Kan&amp;amp;shy;äle&lt;br /&gt;
! DAC Auf&amp;amp;shy;lö&amp;amp;shy;sung [bits]&lt;br /&gt;
! Temp. Sensor&lt;br /&gt;
! SRAM [KiB]&lt;br /&gt;
! EEPROM [Bytes]&lt;br /&gt;
! Self Pro&amp;amp;shy;gram Memory&lt;br /&gt;
! pico&amp;amp;shy;Power&lt;br /&gt;
! Temp. Bereich [°C]&lt;br /&gt;
! I/O Supply Class [V]&lt;br /&gt;
! Opera&amp;amp;shy;ting Volt&amp;amp;shy;age [V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;]&lt;br /&gt;
! Timers&lt;br /&gt;
! Output Com&amp;amp;shy;pare Kan&amp;amp;shy;äle&lt;br /&gt;
! Input Capt&amp;amp;shy;ure Kan&amp;amp;shy;äle&lt;br /&gt;
! PWM Kan&amp;amp;shy;äle&lt;br /&gt;
! 32kHz RTC&lt;br /&gt;
! Device&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega8&#039;&#039;&#039; || 8 || 32 || 16 || 12 || 23 || 2 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 3 || 1 || 3 || &amp;amp;radic; || &#039;&#039;&#039;ATmega8&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega8515&#039;&#039;&#039; || 8 || 44 || 16 || 16 || 35 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 3 || 1 || 3 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega8515&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega8535&#039;&#039;&#039; || 8 || 44 || 16 || 16 || 32 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega8535&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega16&#039;&#039;&#039; || 16 || 44 || 16 || 16 || 32 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega16&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega32&#039;&#039;&#039; || 32 || 44 || 16 || 16 || 32 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega32&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega64&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;ATmega64&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega128&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;ATmega128&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega162&#039;&#039;&#039; || 16 || 44 || 16 || 16 || 35 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 2 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 6 || 2 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega162&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega48&#039;&#039;&#039; || 4 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 256 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega48&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega88&#039;&#039;&#039; || 8 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega88&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega168&#039;&#039;&#039; || 16 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega168&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90CAN128&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 1 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;AT90CAN128&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega325&#039;&#039;&#039; || 32 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega325&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3250&#039;&#039;&#039; || 32 || 100 || 16 || 16 || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3250&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6450&#039;&#039;&#039; || 64 || 100 || 16 || &amp;amp;mdash; || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6450&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega645&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega645&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega329&#039;&#039;&#039; || 32 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega329&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3290&#039;&#039;&#039; || 32 || 100 || 16 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3290&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega649&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega649&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6490&#039;&#039;&#039; || 64 || 100 || 16 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6490&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega640&#039;&#039;&#039; || 64 || 100 || 16 || 16 || 86 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 1 || 4 || 0 || 0 || 0 || 16 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 6 || 16 || 4 || 15 || &amp;amp;radic; || &#039;&#039;&#039;ATmega640&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega1281&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 6 || 16 || 2 || 8 || &amp;amp;radic; || &#039;&#039;&#039;ATmega1281&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega2561&#039;&#039;&#039; || 256 || 64 || 16 || &amp;amp;mdash; || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 6 || 16 || 2 || 8 || &amp;amp;radic; || &#039;&#039;&#039;ATmega2561&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega2560&#039;&#039;&#039; || 256 || 100 || 16 || &amp;amp;mdash; || 86 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 1 || 4 || 0 || 0 || 0 || 16 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 6 || 16 || 4 || 15 || &amp;amp;radic; || &#039;&#039;&#039;ATmega2560&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega1280&#039;&#039;&#039; || 128 || 100 || 16 || 16 || 86 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 1 || 4 || 0 || 0 || 0 || 16 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 6 || 16 || 4 || 15 || &amp;amp;radic; || &#039;&#039;&#039;ATmega1280&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega644&#039;&#039;&#039; || 64 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega644&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90CAN32&#039;&#039;&#039; || 32 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 1 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;AT90CAN32&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90CAN64&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 1 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;AT90CAN64&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB1286&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 48 || 16 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 10 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;AT90USB1286&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB1287&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 48 || 16 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbo&amp;quot;&amp;gt;Device + OTG&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 8 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 10 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;AT90USB1287&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB647&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 48 || 16 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbo&amp;quot;&amp;gt;Device + OTG&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 10 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;AT90USB647&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB646&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 48 || 16 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 10 || 1 || 9 || &amp;amp;radic; || &#039;&#039;&#039;AT90USB646&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega164P&#039;&#039;&#039; || 16 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega164P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega324P&#039;&#039;&#039; || 32 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega324P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega165P&#039;&#039;&#039; || 16 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega165P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega169P&#039;&#039;&#039; || 16 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega169P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega644P&#039;&#039;&#039; || 64 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega644P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM1&#039;&#039;&#039; || 8 || 24 || 16 || 8 || 19 || 4 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 0 || 0 || 0 || 0 || 8 || 10 || 125 || 2 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 12 || 1 || 7 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega329P&#039;&#039;&#039; || 32 || 64 || 20 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega329P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3290P&#039;&#039;&#039; || 32 || 100 || 20 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3290P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega325P&#039;&#039;&#039; || 32 || 64 || 20 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega325P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3250P&#039;&#039;&#039; || 32 || 100 || 20 || 16 || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3250P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB82&#039;&#039;&#039; || 8 || 32 || 16 || 12 || 22 || 21 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;AT90USB82&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90USB162&#039;&#039;&#039; || 16 || 32 || 16 || &amp;amp;mdash; || 22 || 21 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;AT90USB162&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM216&#039;&#039;&#039; || 16 || 24 || 16 || 12 || 19 || 4 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 0 || 0 || 0 || 8 || 10 || 125 || 2 || 1 || 10 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 12 || 1 || 7 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM216&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM316&#039;&#039;&#039; || 16 || 32 || 16 || 12 || 27 || 4 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 0 || 0 || 0 || 11 || 10 || 125 || 3 || 1 || 10 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 5 || 16 || 1 || 12 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM316&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega48P&#039;&#039;&#039; || 4 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 0.5 || 256 || &amp;amp;mdash; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega48P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega88P&#039;&#039;&#039; || 8 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega88P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega168P&#039;&#039;&#039; || 16 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega168P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega328P&#039;&#039;&#039; || 32 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega328P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM3B&#039;&#039;&#039; || 8 || 32 || 16 || 8 || 27 || 4 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 0 || 0 || 0 || 11 || 10 || 125 || 3 || 1 || 10 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 5 || 16 || 1 || 12 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM3B&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM2B&#039;&#039;&#039; || 8 || 24 || 16 || 8 || 19 || 4 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 0 || 0 || 0 || 8 || 10 || 125 || 2 || 1 || 10 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;105 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 12 || 1 || 7 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM2B&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega32U4&#039;&#039;&#039; || 32 || 44 || 16 || 14 || 26 || 13 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 12 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 2.5 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 12 || 2 || 8 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega32U4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega1284P&#039;&#039;&#039; || 128 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 16 || 4096 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega1284P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega16U4&#039;&#039;&#039; || 16 || 44 || 16 || 14 || 26 || 13 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 0 || 0 || 0 || 12 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1.25 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 12 || 2 || 8 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega16U4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega16A&#039;&#039;&#039; || 16 || 44 || 16 || 16 || 32 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega16A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega32A&#039;&#039;&#039; || 32 || 44 || 16 || 16 || 32 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega32A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega88PA&#039;&#039;&#039; || 8 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega88PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega324PA&#039;&#039;&#039; || 32 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega324PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega48PA&#039;&#039;&#039; || 4 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 0.5 || 256 || &amp;amp;mdash; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega48PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega164PA&#039;&#039;&#039; || 16 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega164PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega64A&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;ATmega64A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega128A&#039;&#039;&#039; || 128 || 64 || 16 || 16 || 53 || 8 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 4 || 8 || 2 || 7 || &amp;amp;radic; || &#039;&#039;&#039;ATmega128A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega8A&#039;&#039;&#039; || 8 || 32 || 16 || 12 || 23 || 2 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || &amp;amp;radic; || &#039;&#039;&#039;ATmega8A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega168PA&#039;&#039;&#039; || 16 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega168PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega8U2&#039;&#039;&#039; || 8 || 32 || 16 || &amp;amp;mdash; || 22 || 20 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega8U2&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega16U2&#039;&#039;&#039; || 16 || 32 || 16 || 12 || 22 || 21 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 0.5 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega16U2&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega32U2&#039;&#039;&#039; || 32 || 32 || 16 || 12 || 22 || 20 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 5 || 1 || 4 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega32U2&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega644PA&#039;&#039;&#039; || 64 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega644PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega16M1&#039;&#039;&#039; || 16 || 32 || 16 || 12 || 27 || 27 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 1 || 1 || 0 || 11 || 10 || 125 || 4 || 1 || 10 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 14 || 1 || 10 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega16M1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega32M1&#039;&#039;&#039; || 32 || 32 || 16 || 12 || 27 || 27 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 1 || 1 || 0 || 11 || 10 || 125 || 4 || 1 || 10 || &amp;amp;radic; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 14 || 1 || 10 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega32M1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega64M1&#039;&#039;&#039; || 64 || 32 || 16 || 12 || 27 || 27 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 1 || 1 || 1 || 0 || 11 || 10 || 125 || 4 || 1 || 10 || &amp;amp;radic; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2 || 14 || 1 || 10 || &amp;amp;mdash; || &#039;&#039;&#039;ATmega64M1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega169PA&#039;&#039;&#039; || 16 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega169PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega48A&#039;&#039;&#039; || 4 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 0.5 || 256 || &amp;amp;mdash; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega48A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega88A&#039;&#039;&#039; || 8 || 32 || 20 || 12 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega88A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega168A&#039;&#039;&#039; || 16 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega168A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega328&#039;&#039;&#039; || 32 || 32 || 20 || 16 || 23 || 24 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;radic; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega328&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega164A&#039;&#039;&#039; || 16 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega164A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega324A&#039;&#039;&#039; || 32 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega324A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega644A&#039;&#039;&#039; || 64 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega644A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega1284&#039;&#039;&#039; || 128 || 44 || 20 || 16 || 32 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 3 || 1 || 2 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 16 || 4096 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 6 || 1 || 6 || &amp;amp;radic; || &#039;&#039;&#039;ATmega1284&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AT90PWM81&#039;&#039;&#039; || 8 || 20 || 16 || &amp;amp;mdash; || 20 || 3 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 1 || 0 || 0 || 0 || 0 || 0 || 11 || 10 || 125 || 3 || 1 || 10 || &amp;amp;radic; || 0.25 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;125 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 2.7&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1 || 8 || 1 || 6 || &amp;amp;mdash; || &#039;&#039;&#039;AT90PWM81&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega165PA&#039;&#039;&#039; || 16 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega165PA&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega325A&#039;&#039;&#039; || 32 || 64 || 20 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega325A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3250A&#039;&#039;&#039; || 32 || 100 || 20 || 16 || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3250A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega645A&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega645A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega645P&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega645P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6450P&#039;&#039;&#039; || 64 || 100 || 20 || &amp;amp;mdash; || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6450P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6450A&#039;&#039;&#039; || 64 || 100 || 20 || &amp;amp;mdash; || 69 || 25 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 0 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6450A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega169A&#039;&#039;&#039; || 16 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 1 || 512 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega169A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega329A&#039;&#039;&#039; || 32 || 64 || 20 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega329A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega649A&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega649A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega3290A&#039;&#039;&#039; || 32 || 100 || 20 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega3290A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega649P&#039;&#039;&#039; || 64 || 64 || 16 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega649P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6490A&#039;&#039;&#039; || 64 || 100 || 20 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;mdash; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6490A&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega6490P&#039;&#039;&#039; || 64 || 100 || 20 || 16 || 69 || 32 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 160 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 4 || 2048 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega6490P&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATmega329PA&#039;&#039;&#039; || 32 || 64 || 20 || 16 || 54 || 17 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 2 || 1 || 1 || 0 || 0 || 100 || 8 || 10 || 15 || 1 || 0 || 0 || &amp;amp;mdash; || 2 || 1024 || &amp;amp;radic; || &amp;amp;radic; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 1.8&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;5.5 || 3 || 4 || 1 || 4 || &amp;amp;radic; || &#039;&#039;&#039;ATmega329PA&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;General Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;CPU&#039;&#039;&#039; || 8-bit AVR&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hardware Qtouch&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Quadrature Decoder Kanäle&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SSC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ethernet&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SD / eMMC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Grafik LCD&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Video Decoder&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kamera Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Resistive Touch Screen&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;External Bus Interface&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DRAM Memory&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NAND Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;FPU&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MPU / MMU&#039;&#039;&#039; || nein / nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypto Engine&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Calibrated RC Oscillator&#039;&#039;&#039; || ja&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ATxmega ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Device-specific Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Device&lt;br /&gt;
! Flash [KiB]&lt;br /&gt;
! Pin Anz&amp;amp;shy;ahl&lt;br /&gt;
! of Touch Kan&amp;amp;shy;äle&lt;br /&gt;
! Max I/O Pins&lt;br /&gt;
! Ext Inter&amp;amp;shy;rupts&lt;br /&gt;
! USB Trans&amp;amp;shy;cei&amp;amp;shy;ver&lt;br /&gt;
! USB Speed&lt;br /&gt;
! USB Inter&amp;amp;shy;face&lt;br /&gt;
! SPI&lt;br /&gt;
! TWI&lt;br /&gt;
! UART&lt;br /&gt;
! Seg&amp;amp;shy;ment LCD&lt;br /&gt;
! ADC Kan&amp;amp;shy;äle&lt;br /&gt;
! ADC Speed [ksps]&lt;br /&gt;
! Ana&amp;amp;shy;log Com&amp;amp;shy;para&amp;amp;shy;tors&lt;br /&gt;
! DAC Kan&amp;amp;shy;äle&lt;br /&gt;
! DAC Auf&amp;amp;shy;lö&amp;amp;shy;sung [bits]&lt;br /&gt;
! SRAM [KiB]&lt;br /&gt;
! EEPROM [Bytes]&lt;br /&gt;
! Ext&amp;amp;shy;ern&amp;amp;shy;al Bus Inter&amp;amp;shy;face&lt;br /&gt;
! DRAM Memory&lt;br /&gt;
! Crypto Engine&lt;br /&gt;
! Timers&lt;br /&gt;
! Output Com&amp;amp;shy;pare Kan&amp;amp;shy;äle&lt;br /&gt;
! Input Capt&amp;amp;shy;ure Kan&amp;amp;shy;äle&lt;br /&gt;
! PWM Kan&amp;amp;shy;äle&lt;br /&gt;
! Device&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64A1&#039;&#039;&#039; || 64 || 100 || 16 || 78 || 78 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 12 || 4 || 8 || 0 || 16 || 2000 || 4 || 4 || 12 || 4 || 2048 || 1 || ja&amp;lt;ref name=&amp;quot;sdram&amp;quot;&amp;gt;SDRAM&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 8 || 24 || 24 || 24 || &#039;&#039;&#039;ATxmega64A1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128A1&#039;&#039;&#039; || 128 || 100 || 16 || 78 || 78 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 12 || 4 || 8 || 0 || 16 || 2000 || 4 || 4 || 12 || 8 || 2048 || 1 || ja&amp;lt;ref name=&amp;quot;sdram&amp;quot;&amp;gt;SDRAM&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 8 || 24 || 24 || 24 || &#039;&#039;&#039;ATxmega128A1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64A3&#039;&#039;&#039; || 64 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 4 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega64A3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128A3&#039;&#039;&#039; || 128 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 8 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega128A3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega192A3&#039;&#039;&#039; || 192 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega192A3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega256A3&#039;&#039;&#039; || 256 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 4096 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega256A3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega16A4&#039;&#039;&#039; || 16 || 44 || 16 || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 3.3 || 1024 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega16A4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega32A4&#039;&#039;&#039; || 32 || 44 || 16 || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 4 || 1024 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega32A4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64A4&#039;&#039;&#039; || 64 || 44 || &amp;amp;mdash; || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 4 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega64A4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128A4&#039;&#039;&#039; || 128 || 44 || &amp;amp;mdash; || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 8 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega128A4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega256A3B&#039;&#039;&#039; || 256 || 64 || 16 || 47 || 49 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 8 || 2 || 6 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 4096 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega256A3B&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega256D3&#039;&#039;&#039; || 256 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 2 || 3 || 0 || 16 || 200 || 2 || 0 || 0 || 16 || 4096 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 18 || 18 || 18 || &#039;&#039;&#039;ATxmega256D3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega192D3&#039;&#039;&#039; || 192 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 2 || 3 || 0 || 16 || 200 || 2 || 0 || 0 || 16 || 2048 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 18 || 18 || 18 || &#039;&#039;&#039;ATxmega192D3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128D3&#039;&#039;&#039; || 128 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 2 || 3 || 0 || 16 || 200 || 2 || 0 || 0 || 8 || 2048 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 18 || 18 || 18 || &#039;&#039;&#039;ATxmega128D3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64D3&#039;&#039;&#039; || 64 || 64 || 16 || 50 || 50 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 2 || 3 || 0 || 16 || 200 || 2 || 0 || 0 || 4 || 2048 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 5 || 18 || 18 || 18 || &#039;&#039;&#039;ATxmega64D3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128D4&#039;&#039;&#039; || 128 || 44 || &amp;amp;mdash; || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 2 || 2 || 0 || 12 || 200 || 2 || 0 || 0 || 8 || 2048 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 14 || 14 || 14 || &#039;&#039;&#039;ATxmega128D4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64D4&#039;&#039;&#039; || 64 || 44 || &amp;amp;mdash; || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 2 || 2 || 0 || 12 || 200 || 2 || 0 || 0 || 4 || 2048 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 14 || 14 || 14 || &#039;&#039;&#039;ATxmega64D4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega32D4&#039;&#039;&#039; || 32 || 44 || 16 || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 2 || 2 || 0 || 12 || 200 || 2 || 0 || 0 || 4 || 1024 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 14 || 14 || 14 || &#039;&#039;&#039;ATxmega32D4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega16D4&#039;&#039;&#039; || 16 || 44 || 16 || 34 || 34 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 2 || 2 || 0 || 12 || 200 || 2 || 0 || 0 || 2 || 1024 || 0 || &amp;amp;mdash; || &amp;amp;mdash; || 4 || 14 || 14 || 14 || &#039;&#039;&#039;ATxmega16D4&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega16A4U&#039;&#039;&#039; || 16 || 44 || 16 || 34 || 34 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 3.3 || 1024 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega16A4U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega32A4U&#039;&#039;&#039; || 32 || 44 || 16 || 34 || 34 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 7 || 2 || 5 || 0 || 12 || 2000 || 2 || 2 || 12 || 4 || 1024 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 5 || 16 || 16 || 16 || &#039;&#039;&#039;ATxmega32A4U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64A3U&#039;&#039;&#039; || 64 || 64 || 16 || 50 || 50 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 4 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega64A3U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128A3U&#039;&#039;&#039; || 128 || 64 || 16 || 50 || 50 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 8 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega128A3U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega192A3U&#039;&#039;&#039; || 192 || 64 || 16 || 50 || 50 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega192A3U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega256A3U&#039;&#039;&#039; || 256 || 64 || 16 || 50 || 50 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 10 || 2 || 7 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 4096 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega256A3U&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega256A3BU&#039;&#039;&#039; || 256 || 64 || 16 || 47 || 49 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 8 || 2 || 6 || 0 || 16 || 2000 || 4 || 2 || 12 || 16 || 4096 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 7 || 22 || 22 || 22 || &#039;&#039;&#039;ATxmega256A3BU&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64B3&#039;&#039;&#039; || 64 || 64 || 16 || 36 || 36 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 100 || 8 || 2000 || 2 || 0 || 0 || 4 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 2 || 6 || 6 || 6 || &#039;&#039;&#039;ATxmega64B3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128B3&#039;&#039;&#039; || 128 || 64 || 16 || 36 || 36 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 2 || 1 || 1 || 100 || 8 || 2000 || 2 || 0 || 0 || 4 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 2 || 6 || 6 || 6 || &#039;&#039;&#039;ATxmega128B3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega128B1&#039;&#039;&#039; || 128 || 100 || 16 || 53 || 53 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 3 || 1 || 2 || 160 || 16 || 2000 || 4 || 0 || 0 || 8 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 3 || 10 || 10 || 10 || &#039;&#039;&#039;ATxmega128B1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ATxmega64B1&#039;&#039;&#039; || 64 || 100 || 16 || 53 || 53 || 1 || ja&amp;lt;ref name=&amp;quot;usbs&amp;quot;&amp;gt;Full Speed&amp;lt;/ref&amp;gt; || ja&amp;lt;ref name=&amp;quot;usbd&amp;quot;&amp;gt;Device&amp;lt;/ref&amp;gt; || 3 || 1 || 2 || 160 || 16 || 2000 || 4 || 0 || 0 || 8 || 2048 || 0 || &amp;amp;mdash; || ja&amp;lt;ref name=&amp;quot;cry&amp;quot;&amp;gt;AES/DES&amp;lt;/ref&amp;gt; || 3 || 10 || 10 || 10 || &#039;&#039;&#039;ATxmega64B1&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;General Features&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Max. &amp;amp;fnof;&amp;lt;sub&amp;gt;CPU&amp;lt;/sub&amp;gt; [MHz]&#039;&#039;&#039; || 32&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;CPU&#039;&#039;&#039; || 8-bit AVR&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hardware Qtouch&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Quadrature Decoder Kanäle&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;CAN&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LIN&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SSC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ethernet&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SD / eMMC&#039;&#039;&#039; || 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Grafik LCD&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Video Decoder&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kamera Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ADC Auflösung [bits]&#039;&#039;&#039; || 12&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Resistive Touch Screen&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Temp. Sensor&#039;&#039;&#039; || ja&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Self Program Memory&#039;&#039;&#039; || ja&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NAND Interface&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;picoPower&#039;&#039;&#039; || ja&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Temp. Bereich [°C]&#039;&#039;&#039; || &amp;amp;minus;40&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;85&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Supply Class [V]&#039;&#039;&#039; || 1.6&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;3.6&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Operating Voltage [V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;]&#039;&#039;&#039; || 1.6&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;3.6&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;FPU&#039;&#039;&#039; || nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MPU / MMU&#039;&#039;&#039; || nein / nein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;32kHz RTC&#039;&#039;&#039; || ja&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Calibrated RC Oscillator&#039;&#039;&#039; || ja&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Referenzen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.avrfreaks.net/index.php?module=Freaks%20Devices&amp;amp;func=devCompare Vergleichstabelle] von AVRFreaks&lt;br /&gt;
* [http://www.atmel.com/dyn/products/param_table.asp?family_id=607&amp;amp;OrderBy=part_no&amp;amp;Direction=ASC#760 Vergleichstabelle aller aktuellen AVR Controller bei Atmel]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65863</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65863"/>
		<updated>2012-04-22T15:25:52Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; und dem Generator &#039;&#039;PM5192&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM5&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Zähler auf 1337Hz einstellen:&lt;br /&gt;
 $ echo &amp;quot;REMOTE 15&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 15;OUT 15;WSLA4F1337&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 001.3370011E+3&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
[[Datei:gpib-rs232-sch.png|miniatur|Schaltplan]]&lt;br /&gt;
[[Datei:gpib-rs232-brd.png|miniatur|Board]]&lt;br /&gt;
Die Schaltung ist in EAGLE realisiert; Maßstab des Board ist 1:2, also nicht wundern... Das ganze hat mit drei Drahtbrücken einseitig funktioniert. Die Drahtbrücke oben links verbindet die Schirmung mit Masse.&lt;br /&gt;
&lt;br /&gt;
Schaltplan und Board stelle ich vorerst unter der aktuellen [http://creativecommons.org/licenses/by-nc-sa/3.0/de/ CC-BY-NC-SA] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
Die jeweils aktuelle Version hängt am jüngsten Beitrag im Thread.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/256475 Thread zum Artikel]&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65862</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65862"/>
		<updated>2012-04-22T15:24:20Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; und dem Generator &#039;&#039;PM5192&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM5&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Zähler auf 1337Hz einstellen:&lt;br /&gt;
 $ echo &amp;quot;REMOTE 15&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 15;OUT 15;WSLA4F1337&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 001.3370011E+3&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
[[Datei:gpib-rs232-sch.png|miniatur|Schaltplan]]&lt;br /&gt;
[[Datei:gpib-rs232-brd.png|miniatur|Board]]&lt;br /&gt;
Die Schaltung ist in EAGLE realisiert; Maßstab des Board ist 1:2, also nicht wundern... Das ganze hat mit drei Drahtbrücken einseitig funktioniert. Die Drahtbrücke oben links verbindet die Schirmung mit Masse.&lt;br /&gt;
&lt;br /&gt;
Schaltplan und Board stelle ich vorerst unter der aktuellen [http://creativecommons.org/licenses/by-nc-sa/3.0/de/ CC-BY-NC-SA] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/256475 Thread zum Artikel]&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232-brd.png&amp;diff=65638</id>
		<title>Datei:Gpib-rs232-brd.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232-brd.png&amp;diff=65638"/>
		<updated>2012-04-12T14:50:49Z</updated>

		<summary type="html">&lt;p&gt;Haku: Board RS232-GPIB-Schnittstelle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Board RS232-GPIB-Schnittstelle&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232-sch.png&amp;diff=65637</id>
		<title>Datei:Gpib-rs232-sch.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232-sch.png&amp;diff=65637"/>
		<updated>2012-04-12T14:49:36Z</updated>

		<summary type="html">&lt;p&gt;Haku: Schaltplan RS232-GPIB-Schnittstelle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltplan RS232-GPIB-Schnittstelle&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65636</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65636"/>
		<updated>2012-04-12T14:49:04Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; und dem Generator &#039;&#039;PM5192&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM5&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Zähler auf 1337Hz einstellen:&lt;br /&gt;
 $ echo &amp;quot;REMOTE 15&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 15;OUT 15;WSLA4F1337&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 001.3370011E+3&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
[[Datei:gpib-rs232-sch.png|miniatur|Schaltplan]]&lt;br /&gt;
[[Datei:gpib-rs232-brd.png|miniatur|Board]]&lt;br /&gt;
Die Schaltung ist in EAGLE realisiert; Maßstab des Board ist 1:2, also nicht wundern... Das ganze hat mit drei Drahtbrücken einseitig funktioniert. Die Drahtbrücke oben links verbindet die Schirmung mit Masse.&lt;br /&gt;
&lt;br /&gt;
Schaltplan und Board stelle ich vorerst unter der aktuellen [http://creativecommons.org/licenses/by-nc-sa/3.0/de/ CC-BY-NC-SA] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65503</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65503"/>
		<updated>2012-04-06T08:51:46Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Beispiel */ kHz -&amp;gt; Hz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; und dem Generator &#039;&#039;PM5192&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM5&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Zähler auf 1337Hz einstellen:&lt;br /&gt;
 $ echo &amp;quot;REMOTE 15&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 15;OUT 15;WSLA4F1337&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 001.3370011E+3&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65500</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65500"/>
		<updated>2012-04-06T08:09:59Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; und dem Generator &#039;&#039;PM5192&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM5&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Zähler auf 1337kHz einstellen:&lt;br /&gt;
 $ echo &amp;quot;REMOTE 15&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 15;OUT 15;WSLA4F1337&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 001.3370011E+3&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65498</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65498"/>
		<updated>2012-04-06T06:49:20Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Eine Sitzung mit dem Universalzähler &#039;&#039;PM6652&#039;&#039; könnte etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Die Baudrate wird automatisch am ersten empfangenen Zeilenvorschub ermittelt:&lt;br /&gt;
 $ echo &amp;gt; ttyUSB1&lt;br /&gt;
Schnittstelle einschalten und den Zähler (Adresse 14) parametrisieren:&lt;br /&gt;
 $ echo &amp;quot;ONLINE&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;REMOTE 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT 14;D&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;F1TE1G0SM1&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Interne 10MHz-Referenz aufschalten:&lt;br /&gt;
 $ echo &amp;quot;OUTPUT;CH1&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
Messung durchführen und Ergebnis abholen:&lt;br /&gt;
 $ echo &amp;quot;TRIGGER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ echo &amp;quot;ENTER 14&amp;quot; &amp;gt; ttyUSB1&lt;br /&gt;
 $ line &amp;lt; ttyUSB1&lt;br /&gt;
 FA 0010.000000E+6&lt;br /&gt;
&lt;br /&gt;
Die Anführungszeichen sind nötig, damit die Shell das Semikolon nicht als Befehlsende interpretiert.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65445</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65445"/>
		<updated>2012-04-02T14:24:56Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu &#039;&#039;&#039;nehmen&#039;&#039;&#039;&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns). Und da sind noch nicht die vier Takte drin, die bis zum Interruptvektor vergehen, denn es muss ja noch der Programmzähler auf den Stack gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232.jpeg&amp;diff=65444</id>
		<title>Datei:Gpib-rs232.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Gpib-rs232.jpeg&amp;diff=65444"/>
		<updated>2012-04-02T14:15:43Z</updated>

		<summary type="html">&lt;p&gt;Haku: Fertig aufgebaute Schnittstelle.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fertig aufgebaute Schnittstelle.&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65443</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65443"/>
		<updated>2012-04-02T14:14:35Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
[[Datei:gpib-rs232.jpeg|miniatur|GPIB-RS232-Schnittstelle]]&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu nehmen&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65425</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65425"/>
		<updated>2012-04-01T18:51:11Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Terminologie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu nehmen&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
Mit der DAV-Botschaft (data valid) wird signalisiert, dass der Datenbus gültige Daten enthält, die nun gelesen werden können. Wird die EOI-Botschaft (end or identify) zusammen mit einem Byte übertragen, so handelt es sich um das letzte Byte einer längeren Nachricht. Die ATN-Botschaft (attention) fordert alle Busteilnehmer auf, sämtliche Bustätigkeit zu unterbrechen und den Datenbus freizugeben (etwaige Talker nehmen ihr Byte vom Bus).&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65424</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65424"/>
		<updated>2012-04-01T18:48:29Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Controller-Betrieb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu nehmen&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle &#039;&#039;nur&#039;&#039; als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Der Betrieb als Hörer leidet am gleichen Problem, hier ist allerdings das Lesen vom Bus kritisch. Ein Sprecher könnte ein Datenbyte auf den Bus legen und dies mit der DAV-Botschaft signalisieren. Das bemerken wir und beginnen mit dem Lesevorgang (Interrupt betreten und so weiter). Indes unterbricht ein Controller die Übertragung mit der ATN-Botschaft der Bus enthält dann ungültige Daten. Und wir fahren munter mit dem begonnenen Lesevorgang fort...&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65423</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65423"/>
		<updated>2012-04-01T18:42:10Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terminologie ==&lt;br /&gt;
Sämtliche Signale auf dem Bus sind Low-aktiv.&lt;br /&gt;
&lt;br /&gt;
Der Bus besteht aus den acht Datenleitungen des &#039;&#039;Datenbus&#039;&#039;, die das Datenbyte aufnehmen (invertiert, da Low-aktiv). Ein Byte kann &#039;&#039;auf den Bus gelegt&#039;&#039; werden, indem die Treiber eingeschaltet werden und die Datenleitungen entsprechend gesetzt werden. Um das Byte wieder &#039;&#039;vom Bus zu nehmen&#039;&#039;, werden die Treiber wieder abgeschaltet. Das ist etwas anderes, als ein Byte &#039;&#039;vom Bus zu &#039;&#039;&#039;lesen&#039;&#039;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Dazu kommt der &#039;&#039;Übergabebus&#039;&#039; mit den drei Handshakeleitungen DAV (data available), NDAC (no data accepted) und NRFD (not ready for data). Schließlich bilden ein paar Steuerleitungen den &#039;&#039;Steuerbus&#039;&#039;; die wichtigsten wären&lt;br /&gt;
* ATN (attention),&lt;br /&gt;
* REN (remote enable) und&lt;br /&gt;
* EOI (end or identify).&lt;br /&gt;
&lt;br /&gt;
Man spricht beim GPIB eigentlich immer von irgendwelchen &#039;&#039;Botschaften&#039;&#039;, die abgesetzt oder zurückgezogen werden. Es kann sich dabei um Bytes handeln, die über den Bus gehen, oder auch schlicht um eine der Steuer- oder Handshakeleitungen, die einen bestimmten Pegel annimmt. Da der Bus Low-aktiv arbeitet, sind insbesondere die Steuerleitungen &#039;&#039;aktiv&#039;&#039;, wenn sie einen niedrigen Spannungspegel annehmen. Die entsprechende Botschaft ist dann &#039;&#039;gesendet&#039;&#039; (oder &#039;&#039;abgesetzt&#039;&#039;). Wegen Wired-and können auch mehrere Busteilnehmer eine Botschaft zugleich absetzen. Sie bleibt dann solange abgesetzt, bis sämtliche Teilnehmer sie wieder &#039;&#039;zurückgezogen&#039;&#039; haben.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65422</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65422"/>
		<updated>2012-04-01T18:33:06Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65421</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65421"/>
		<updated>2012-04-01T18:32:30Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Controller-Betrieb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann. Würde man die Schnittstelle als &#039;&#039;Sprecher&#039;&#039; (Talker) betreiben, könnte der momentane Controller die ATN-Botschaft versenden und gleich darauf ein paar Daten auf den Bus legen. Tut er das so schnell wie möglich, also nach 200ns, hätte die Schnittstelle keine Chance, etwaige Daten vom Bus zu nehmen, denn mit zwei Prozessorzyklen des AVR (bei 8MHz) wären die 200ns schon beim Sprung in den Interrupt verstrichen (rjmp mit zwei Zyklen = 250ns).&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. Und zwar nach folgendem Szenario:&lt;br /&gt;
* Wir legen ein Byte auf den Bus und&lt;br /&gt;
* signalisieren das mit der DAV-Botschaft.&lt;br /&gt;
* Ein paar Hörer lesen das Byte vom Bus.&lt;br /&gt;
* Der Controller setzt die ATN-Botschaft ab,&lt;br /&gt;
* er wartet die 200ns und&lt;br /&gt;
* legt seinerseits ein Byte auf den Bus (dieses kollidiert mit unserem) und&lt;br /&gt;
* signalisiert das mit der DAV-Botschaft. Die DAV-Botschaft bleibt also bestehen (Wired-and).&lt;br /&gt;
* Ein paar andere Hörer lesen das (&#039;&#039;&#039;kaputte&#039;&#039;&#039;) Byte vom Bus.&lt;br /&gt;
* Wir bemerken die ATN-Botschaft und ziehen Byte und ATN-Botschaft zurück.&lt;br /&gt;
* Wegen Wired-and ist die DAV-Botschaft noch immer aktiv.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65420</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65420"/>
		<updated>2012-04-01T17:14:16Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. &#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus &amp;lt;small&amp;gt;Ja ich weiß, GPIB Bus ist wie LCD-Display, aber die Seite heißt nunmal so...&amp;lt;/small&amp;gt;&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* http://www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65419</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65419"/>
		<updated>2012-04-01T17:11:36Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. &#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Architektur ===&lt;br /&gt;
Die Firmware ist mehrschichtig konstruiert. Ganz unten liegen zwei Ringpuffer, einer für die serielle Schnittstelle und einer für den GPIB. Diese Puffer kümmern sich um die Handshakes (Dreileitung für GPIB und RTS/CTS für die serielle).&lt;br /&gt;
&lt;br /&gt;
Darüber liegt eine Strom-Schicht (Strom von Datenstrom), die aus den eingehenden Datenströmen der Ringpuffer die Zeilenenden herausfischt und die Zeilenenden in den ausgehenden Strömen erzeugt. Von da an sind beide Schnittstellen an die C-Laufzeitbibliothek angeschlossen, sodass die Kommunikation in weiten Teilen wie gewohnt mit puts()/printf()/... abläuft. Die Zeilenenden in den Eingangsströmen werden dabei als End-of-file (EOF) dargestellt. Da man allerdings kein EOF in den Ausgangsströmen erzeugen kann (könnte man schon, mit fclose(); diese Funktion ist aber schon anderweitig vergeben), werden die Zeilenenden mit einem &#039;&#039;flush&#039;&#039; ausgelöst. Blöderweise ist auch fflush() schon vergeben, daher zwei spezifische Routinen.&lt;br /&gt;
&lt;br /&gt;
Obenauf liegt ein Terminal und verbindet die beiden Schnittstellen über das ULI.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65418</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65418"/>
		<updated>2012-04-01T17:02:33Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. &#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus&lt;br /&gt;
* http://linux-gpib.sourceforge.net/doc_html/index.html Typischer Satz von Bibliotheksfunktionen&lt;br /&gt;
* www.ni.com/pdf/manuals/370915a.pdf Universal Language Interface&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65417</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65417"/>
		<updated>2012-04-01T17:01:29Z</updated>

		<summary type="html">&lt;p&gt;Haku: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Controller-Betrieb ===&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. &#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protokoll ===&lt;br /&gt;
Für das Protokoll über die serielle Schnittstelle habe ich mich vom &#039;&#039;Universal Language Interface&#039;&#039; (ULI) von Hewlett-Packard inspirieren lassen. Das Heftchen von 1993 fiel mir zufällig in die Hände und ich fand das ganz passend.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip dahinter ist recht einfach. Früher hat man eine GPIB-Karte in den Computer gesteckt und bekam einen Treiber für ein recht bekanntes Betriebssystem seiner Zeit. Dazu kamen ein paar Bibliotheken für BASIC, C, Pascal und so weiter, die entsprechende Funktionen boten. Dazu gehörten Lese- und Schreibbefehle &#039;&#039;ibrd()&#039;&#039; und &#039;&#039;ibwr()&#039;&#039;, Funktionen zur Adressiereung und allerlei Zubehör. Je nach Hersteller waren diese Funktionen dann mehr oder weniger ähnlich und/oder inkompatibel.&lt;br /&gt;
&lt;br /&gt;
Beim ULI dagegen erzeugte der Treiber quasi eine Gerätedatei, die man in der jeweiligen Programmiersprache dann mit Standard-E/A öffnen konnte. Das entspricht in etwa dem, was sich unter *nix schon länger bewährt hat. Eine Bibliothek gibt es nicht mehr, stattdessen werden Befehle zeilenweise in dieses Gerät geschrieben und Antworten kommen zeilenweise wieder heraus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zeilenweise&#039;&#039; ist in diesem Zusammenhang schwierig. Einerseits könnten Zeilenendzeichen (Wagenrücklauf CR, Zeilenvorschub LF) auch im Nutzdatenstrom vorkommen, andererseits konstruierte sich anfangs jeder Hersteller von GPIB-Messgeräten ein eigenes Bild vom Zeilenende. Manche wollten nur ein CR oder LF, manche CRLF, ein Semikolon oder die EOI-Botschaft (die EOI-Steuerleitung kann zusammen mit dem letzten übertragenen Byte gesetzt werden und signalisiert dann das Zeilenende). Glücklicherweise waren und sind die meisten Geräte recht tolerant und akzeptieren eine Vielzahl dieser Möglichkeiten, wenn man mit ihnen spricht. Tragischerweise antworten sie aber auch mit einer Vielzahl dieser Möglichkeiten, wenn sie umgekehrt mit uns sprechen...&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65415</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65415"/>
		<updated>2012-04-01T16:46:45Z</updated>

		<summary type="html">&lt;p&gt;Haku: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* GPIB-Controller, also SH, AH, C,&lt;br /&gt;
* HP Universal Language Interface auf der seriellen,&lt;br /&gt;
* Zustandsanzeige über Blinkmuster...,&lt;br /&gt;
* Vernünftige Pegelwandler und keine Spannungsteiler,&lt;br /&gt;
* umfangreiche End-of-string-Behandlung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss also der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen sich die Treiber auch aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronics-Stecker (&#039;&#039;micro ribbon connector&#039;&#039;) verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt auf der Platine keine diskrete Logik für die ATN-Leitung. Das mag mancheinem vielleicht schon aufgefallen sein, der alte GPIB-PCI-Steckkarten gesehen hat -- die glichen anfangs einem TTL-Grab. Hintergrund ist, dass in der Spezifikation ein recht zeitkritisches Verhalten als Antwort auf die ATN-Botschaft (beim GPIB spricht man quasi immer von Botschaften, auch wenn es sich dabei nur um eine der Steuerleitungen handelt, die ihren Pegel ändert) vereinbart ist. Nämlich haben alle Busteilnehmer bei Empfang der ATN-Botschaft (die ATN-Steuerleitung wird Low) ihren Busbetrieb binnen 200ns einzustellen und die Treiber zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Das Zeitfenster von 200ns ist recht sportlich, um es mit einem Interrupt aufzufangen, gerade bei den alten Mikroprozessors, die auf den Steckkarten verbaut wurden, und auch für den AVR. Daher hat man diese Spezifikation (und noch ein paar weitere) mit diskreter Logik erschlagen. Diese hat sich dann schnell um die Bustreiber gekümmert und einfach ein Flipflop gesetzt. Dieses hat der Mikroprozessor dann bei nächster Gelegenheit abgeholt und hatte damit wieder genug Zeit, zu reagieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C für avr-gcc geschrieben.&lt;br /&gt;
&lt;br /&gt;
Die fehlende diskrete Logik hat zur Konsequenz, dass die Schnittstelle eigentlich nur als Controller standardkonform funktioniert. Denn nur dann kümmert sie sich selbst um die ATN-Botschaft und muss demnach nicht auf fremde ATN-Botschaften reagieren, was sie ja aus Zeitgründen nicht innerhalb des spezifizierten Zeitfensters kann.&lt;br /&gt;
&lt;br /&gt;
Praktisch ist der Bus in Wired-and ausgeführt, d.h. es entstehen zumindest keine Kurzschlüsse, wenn zwei gleichzeitig reden, weil die Treiber nicht schnell genug abgeschaltet werden. Es können aber Daten kaputt gehen, wenn andere Teilnehmer die Daten früher vom Bus lesen, als jemand anderes seine Treiber abschaltet. &#039;&#039;Jemand anderes&#039;&#039; sind genaugenommen wir, also arbeiten wir nur als Controller... und wären wieder beim Ausgangsproblem.&lt;br /&gt;
&lt;br /&gt;
Unterm Strich: Meistens funktioniert es.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65412</id>
		<title>GPIB-RS232-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPIB-RS232-Schnittstelle&amp;diff=65412"/>
		<updated>2012-04-01T13:21:15Z</updated>

		<summary type="html">&lt;p&gt;Haku: Die Seite wurde neu angelegt: „Achtung, Baustelle.  &amp;#039;&amp;#039;von Sven Pauli&amp;#039;&amp;#039;  Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).  == Einleitung == Viele Messgeräte sind (auch heute immer…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Achtung, Baustelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;von Sven Pauli&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Einfacher GPIB-Controller mit serieller Schnittstelle (RS232).&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Viele Messgeräte sind (auch heute immer noch) mit einer GPIB-Schnittstelle ausgerüstet. Es hadelt sich dabei um einen eher antiquierten, parallelen Datenbus, den Hewlett-Packard vor nunmehr vierzig Jahren in die Welt gesetzt hat und der mittlerweile vielfach genormt ist. Unter anderem als IEEE488 und als IEC-625, daher auch die gängige Bezeichnung als &#039;&#039;IEC-BUS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Bus ist acht Bit breit und beinhaltet neben einer Reihe von Steuerleitungen ein Drei-Leitungs-Handshake. Dieses ist in Wired-And-Methodik ausgeführt, d.h. der Bus wird terminiert und mit Pull-up versehen, welchen die Busteilnehmer dann aktiv nach Masse ziehen können. Das Handshake gewährleistet, dass der Bus nur so schnell betrieben wird, wie das langsamste Gerät am Bus Daten aufnehmen kann. Der genaue Ablauf des Bustransfers ist in [http://www.interfacebus.com/Design_Connector_GPIB.html#d dieser Graphik] recht anschaulich beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Schnittstelle wurde vollständig in bedrahteter Technologie auf einer einseitigen Platine aufgebaut. Für die serielle Schnittstelle kommt der MAX232 zum Einsatz, die Busankopplung nehmen die klassichen SN75160 (Daten) und SN75162 (Steuerleitungen). Zusammengehalten wird beides von einem ATmega16 oder pinkompatiblen. Die Bustreiber sind eigentlich typisch; den -160 bekommt man bei Reichelt. Den zweiten gibt es dort noch als -161; dem fehlen allerdings zwei wichtige Signale, es muss der -162 sein.&lt;br /&gt;
&lt;br /&gt;
Notfalls lassen die Treiber sich aus alten GPIB-Karten ausschlachten...&lt;br /&gt;
&lt;br /&gt;
Zuletzt habe ich noch ein geregeltes Netzteil (7805) spendiert, um die Karte über Hohlstecker zu versorgen. Man halte sich dabei die vergleichsweise große Verlustleistung der Bustreiber vor Augen, wenn man mit dem Gedanken spielt, die Karte über USB zu versorgen: Im Leerlauf insgesamt etwa 150mA.&lt;br /&gt;
&lt;br /&gt;
Zum Bus hin habe ich den typischen Centronic-Stecker verbaut. Da ist etwas Vorsicht geboten, denn die gibt es auch in gespiegelter Bauform. Der Stecker ist trapezförmig; die normale Bauform hat das schmale Ende unten (Richtung Platine), die gespiegelte Version nach oben. Ich habe die normale Version gewählt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* http://www.interfacebus.com/Design_Connector_GPIB.html GPIB Bus&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Haku</name></author>
	</entry>
</feed>