<?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=Xaos</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=Xaos"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Xaos"/>
	<updated>2026-04-12T08:52:53Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Platinenhersteller&amp;diff=78115</id>
		<title>Platinenhersteller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Platinenhersteller&amp;diff=78115"/>
		<updated>2013-08-24T10:36:24Z</updated>

		<summary type="html">&lt;p&gt;Xaos: punkt &amp;quot;preis eindeutig ersichtlich&amp;quot; entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Vor- und Nachteile von Platinenherstellern/-lieferanten werden relativ häufig im [http://www.mikrocontroller.net/forum/platinen Forum] diskutiert (und führen ab und zu zu Flamewars :-). Damit man schnell einen Überblick über die verschiedenen Möglichkeiten erhält, soll hier eine Liste zusammengetragen werden.&lt;br /&gt;
&lt;br /&gt;
Jeder kann/soll seinen Beitrag leisten, d.h. wenn man einen Platinenlieferanten kennt, der noch nicht erwähnt ist, einfach hinzufügen. Falls man den Hersteller nicht so gut kennt, einfach mal den Namen und die URL hinzufügen, es gibt sicherlich andere, die den Hersteller so gut kennen, dass sie sich zutrauen, ein Urteil über die Leistung zu fällen.&lt;br /&gt;
&lt;br /&gt;
Eigentümer oder Mitarbeiter der gelisteten Firmen mögen bitte der Versuchung widerstehen, die Einträge mit werbeähnlichen Texten oder Werbung zu ergänzen. Zufriedene Kunden mögen bitte darauf achten, ihre Zufriedenheit so zu formulieren, dass nicht der Eindruck entsteht, der Eintrag sei von einem Hersteller zur &amp;quot;Verschönerung&amp;quot; gemacht worden.&lt;br /&gt;
&lt;br /&gt;
PS.: Das Ganze soll so ähnlich werden wie [[Elektronik-Versender]], da hat das auch sehr gut geklappt!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diese Seite kann nur von angemeldeten Benutzern bearbeitet werden!&#039;&#039;&#039; Bei neuen Einträgen bitte die Sortierung beachten.&lt;br /&gt;
&lt;br /&gt;
Einige Hinweise, Hilfestellungen zur Platinenfertigung und Auftragsvergabe gibt es auch in der [http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.6 de.sci.electronics-FAQ].&lt;br /&gt;
&lt;br /&gt;
===Preise===&lt;br /&gt;
Zur besseren Vergleichbarkeit bei jedem Hersteller dazu schreiben, was &#039;&#039;&#039;eine doppelseitige durchkontaktierte Eurokarte (160mm x 100mm) mit deutscher MwSt.&#039;&#039;&#039; ohne Versand kostet.&lt;br /&gt;
Dazu noch die Lieferzeit und ob Lötstopplack und Bestückungsdruck dabei ist.&lt;br /&gt;
&#039;&#039;Zusätzlich&#039;&#039; kann man noch die Preise für andere Formate, Stückzahlen etc. dazu schreiben.&lt;br /&gt;
&lt;br /&gt;
== Liste der Hersteller ==&lt;br /&gt;
&lt;br /&gt;
=== Deutschland ===&lt;br /&gt;
&lt;br /&gt;
==== Ätzwerk GmbH ====&lt;br /&gt;
Homepage: http://www.aetzwerk.de&lt;br /&gt;
&lt;br /&gt;
Eigendarstellung:&lt;br /&gt;
* 100x160mm, Lötstopp doppelseitig, Bestückungsdruck einseitig, Stuktur&amp;gt;0,15mm, Bohrungen&amp;gt;0,3mm, 7AT, 59€&lt;br /&gt;
* scheint auch an privat zu liefern&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
* Expressfertigung&lt;br /&gt;
&lt;br /&gt;
Erfahrungen:&lt;br /&gt;
* verschicken unaufgeforderte Newsletter&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/246385 Diskussionsfaden &amp;quot;Ätzwerk GmbH&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==== am2s ====&lt;br /&gt;
Homepage: http://www.am2s.de&lt;br /&gt;
* Leiterplatten (Prototypen und Kleinserien, bis hin zur Großserie)&lt;br /&gt;
* Eildienst möglich&lt;br /&gt;
* Ein- und doppelseitige Leiterplatten, Multilayer. &lt;br /&gt;
* Layoutservice&lt;br /&gt;
* günstige Preise&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* Lieferzeit ab 3 AT&lt;br /&gt;
* KEINE eigene Leiterplattenfertigung - nur Vertrieb&lt;br /&gt;
&lt;br /&gt;
==== andus electronic ====&lt;br /&gt;
Homepage: http://www.andus.de&lt;br /&gt;
* Prototypen Fertigung&lt;br /&gt;
* Top Qualität&lt;br /&gt;
* Top Service&lt;br /&gt;
* Vergleichsweise Teuer&lt;br /&gt;
&lt;br /&gt;
==== ANTtronic ====&lt;br /&gt;
Homepage: http://www.anttronic.de/pcb/&lt;br /&gt;
&amp;lt;!-- früher http://www.gsel.de --&amp;gt;&lt;br /&gt;
* gute Preise, aber Lieferzeit beachten!&lt;br /&gt;
* 1 Europlatine einseitig kein Lötstoplack 17€ inkl. MwSt +7€ Versand&lt;br /&gt;
* 1 Europlatine doppelseitig &#039;&#039;nicht durchkontaktiert&#039;&#039; kein Lötstoplack 23€ inkl. MwSt +7€ Versand; 2Stück 37€&lt;br /&gt;
&lt;br /&gt;
==== Basista Leiterplatten ====&lt;br /&gt;
Homepage: http://www.basista.de&lt;br /&gt;
* Eurokarte doppelseitig für 52€ inkl. MwSt / mit Stopplack + Best.Druck 94€ inkl. MwSt&lt;br /&gt;
* Prototypen standardmäßig chemisch zinnbehandelt&lt;br /&gt;
* Preise OK&lt;br /&gt;
* Früher geliefert ohne Aufpreis (7 statt 10 AT)&lt;br /&gt;
* Qualität OK&lt;br /&gt;
* &#039;&#039;Onlinekalkulator&#039;&#039;&lt;br /&gt;
* 100x160mm, zweiseitig, durchkontaktiert, mit Lötstop, 8AT, 82€&lt;br /&gt;
&lt;br /&gt;
==== Bauer-Elektronik ====&lt;br /&gt;
Homepage: http://www.bauer-leiterplatten.de/&lt;br /&gt;
* Eurokarte doppelseitig für 61€ inkl. MwSt 8AT Lieferzeit / Stopplack +10% / Best.Druck +10%&lt;br /&gt;
* Prototypen aktivzinnbehandelt, dieses lässt sich laut Firmenangaben noch nach Jahren löten&lt;br /&gt;
* Eildienst 2h: Versand am selben Tag bei Einsendung bis 13:00 400€ für 2dm²&lt;br /&gt;
&lt;br /&gt;
==== Britze ====&lt;br /&gt;
Homepage: http://www.britze.de&lt;br /&gt;
* Leiterplatten in kleinen und mittlere Serien&lt;br /&gt;
* Musterleiterplatten / Prototypen&lt;br /&gt;
* 1- und 2-lagige Leiterplatten&lt;br /&gt;
* Multilayer bis 10 Lagen&lt;br /&gt;
* Aluminiumträgerleiterplatten&lt;br /&gt;
* &#039;&#039;Online-Kalkulator&#039;&#039; für Multinutzen und Leiterplatten&lt;br /&gt;
* Beratung/Layout/Entflechtung von Leiterplatten&lt;br /&gt;
* 100x160mm, zweiseitig, durchkontaktiert, mit Lötstop, 10AT, 73€&lt;br /&gt;
* scheint auch an privat zu liefern&lt;br /&gt;
&lt;br /&gt;
==== B&amp;amp;B Gruppe ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.bb-gruppe.de&lt;br /&gt;
&lt;br /&gt;
Hersteller aus Mittweida/Sachsen &amp;lt;br&amp;gt;&lt;br /&gt;
Klein- und Musterserien, Spezialist Sondertechniken&amp;lt;br&amp;gt;&lt;br /&gt;
Zusätzliche Partner für Großserien in Asien mit eigenen Mitarbeitern &lt;br /&gt;
&lt;br /&gt;
* Ein- und Doppelseitige Leiterplatten&lt;br /&gt;
* Multilayer&lt;br /&gt;
* Schleifringe&lt;br /&gt;
* Starrflex&lt;br /&gt;
* Hochstromleiterplatte&lt;br /&gt;
* Dickkupfer&lt;br /&gt;
* Flexlam&lt;br /&gt;
* Dünnstleiterplatte&lt;br /&gt;
* IMS&lt;br /&gt;
* HDI Leiterplatte&lt;br /&gt;
* E-Test inklusive&lt;br /&gt;
* Datenformate: Ger­ber, Eagle, Excel­lon, Sieb &amp;amp; Meier&lt;br /&gt;
* Eildienst möglich&lt;br /&gt;
* Abrufeinteilung und Konsignationslager möglich&lt;br /&gt;
&lt;br /&gt;
B&amp;amp;B Sachsenelektronik GmbH&amp;lt;br&amp;gt;&lt;br /&gt;
Leipziger Straße 40&amp;lt;br&amp;gt;&lt;br /&gt;
09648 Mittweida&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tel: 03727/62 97 0&amp;lt;br&amp;gt;&lt;br /&gt;
Fax: 03727/ 62 97 24&amp;lt;br&amp;gt;&lt;br /&gt;
Email: info@bb-gruppe.de&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Contag====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.contag.de&lt;br /&gt;
* SAUSCHNELL- ab 4 STUNDEN(!)&lt;br /&gt;
* Aber auch sehr teuer&lt;br /&gt;
* Qualität sehr gut&lt;br /&gt;
&lt;br /&gt;
==== Deutschlaender Electronic GmbH ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.deutschlaender.net&amp;lt;br&amp;gt;&lt;br /&gt;
E-Mail: vertrieb@deutschlaender.net&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausführung:&amp;lt;br&amp;gt;&lt;br /&gt;
• Leiterbahnbreite und -abstand ab 100 µm&amp;lt;br&amp;gt;&lt;br /&gt;
• Bohrdurchmesser (Endmaß) ab 0,2 mm&amp;lt;br&amp;gt;&lt;br /&gt;
• Sacklöcher&amp;lt;br&amp;gt;&lt;br /&gt;
• Halblöcher&amp;lt;br&amp;gt;&lt;br /&gt;
• Tiefenfräsung&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Materialien:&amp;lt;br&amp;gt;&lt;br /&gt;
• Materialstärke ab 0,5 mm bis 2,4mm&amp;lt;br&amp;gt;&lt;br /&gt;
• Kupferauflagen: 35 µm, 70 µm, 105 µm,145 µm und 235 µm&amp;lt;br&amp;gt;&lt;br /&gt;
• Hoch-Tg oder Aluminiummaterial&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Servicedrucke:&amp;lt;br&amp;gt;&lt;br /&gt;
• Fotosensitiver Lötstoplack (grün,schwarz,rot und weiß)&amp;lt;br&amp;gt;&lt;br /&gt;
• Bestückungsdruck (weiß,gelb,schwarz und rot)&amp;lt;br&amp;gt;&lt;br /&gt;
• Carbondruck (Kontaktflächen)&amp;lt;br&amp;gt;&lt;br /&gt;
• Abziehlack&amp;lt;br&amp;gt;&lt;br /&gt;
• Viadruck&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mechanische Bearbeitung:&amp;lt;br&amp;gt;&lt;br /&gt;
CNC-Fräsen für:&amp;lt;br&amp;gt;&lt;br /&gt;
• Kontur&amp;lt;br&amp;gt;&lt;br /&gt;
• Schlitze - auch durchkontaktiert&amp;lt;br&amp;gt;&lt;br /&gt;
• Kerb Ritzen für Kontur, Sollbruchstellen, Sprungritzen&amp;lt;br&amp;gt;&lt;br /&gt;
• Kontur anfasen, z.B. für Steckerkamm&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oberflächenveredelung:&amp;lt;br&amp;gt;&lt;br /&gt;
• HAL bleifrei / PbSn&amp;lt;br&amp;gt;&lt;br /&gt;
• Chemisch Nickel/Gold(Ni/Au)&amp;lt;br&amp;gt;&lt;br /&gt;
• Chemisch Zinn (Sn)&amp;lt;br&amp;gt;&lt;br /&gt;
• Galvanisch Nickel/Gold (Ni/Au, Hartgold)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datenformate: Ger­ber, Eagle, Target, Autocad, Excel­lon, Sieb &amp;amp; Meier&amp;lt;br&amp;gt;&lt;br /&gt;
* Eildienst möglich (3AT/5AT/7AT)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EPN Electroprint GmbH ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.epn.de&lt;br /&gt;
* Hersteller aus Neustadt an der Orla/Thüringen&lt;br /&gt;
* 8 Tage Lieferzeit, Eilservice 24h auch möglich&lt;br /&gt;
* Single-Layer, Multi-Layer (bis 22 Lagen als Spezialanfertigung!), Dickkupfer&lt;br /&gt;
* Verzinnung: Hot-Air-Leveling oder chemisch Zinn&lt;br /&gt;
* Lötstopplack verschiedene Farben nach Absprache möglich&lt;br /&gt;
* Stencil-Fertigung&lt;br /&gt;
* Thüringer Staatspreis für Qualität&lt;br /&gt;
&lt;br /&gt;
==== Elischer Leiterplatten ====&lt;br /&gt;
e-mail: aurel-elischer@t-online.de&lt;br /&gt;
* Firmensitz / Post-Adresse: Dipl.-Ing. Aurel Elischer, Leiterplatten, Am Forst 7, 72574 Bad Urach, Tel. 07125/4498, Ust.Id.-Nr.: DE 223 09 4959&lt;br /&gt;
* Layoutentwurf, LP Entwicklung, herstellen, bestücken, löten, prüfen&lt;br /&gt;
* 3 KW Lieferzeit (nach Vereinbarung auch kürzer)&lt;br /&gt;
* sehr gute Preise, Qual.1A&lt;br /&gt;
* einen Preis zu nennen, wäre Unfair. Es ist abhängig davon ob:&lt;br /&gt;
** 1 oder 2-seitig&lt;br /&gt;
** Leiterbahnenabstand und Lötflächenanstände kleiner oder größer als 0,3 mm&lt;br /&gt;
** Cu 30, 70, 110 µm&lt;br /&gt;
** Stärke der LP 1,0; 1,6; 2,0; ... mm&lt;br /&gt;
** mit (1- oder 2-seitig, grün, blau, weiß, schwarz,...)oder ohne Beschriftung&lt;br /&gt;
** mit oder ohne Stoplack&lt;br /&gt;
** gefräst oder nur geritzt&lt;br /&gt;
** einzeln oder X-Fach-Montage&lt;br /&gt;
* BITTE BEACHTEN: unter 10 St lohnt es sich für Sie nicht: für die erste Lieferung müssen wir einmalig ca 65€ berechnen (Film, Maske, Bohrdatei, ...)&lt;br /&gt;
* ab 10 St unbedingt Gerber 274X und Exellon für das Angebot (Angebot kostenlos) beifügen; keine Angst: Gerber 274X und Exellon kann man aus jedem Programm generieren&lt;br /&gt;
&lt;br /&gt;
==== Elk Tronic ====&lt;br /&gt;
&lt;br /&gt;
Homepage [http://www.elk-tronic.de/ http://www.elk-tronic.de]&lt;br /&gt;
*Entwicklung und Fertigung von Kleingeräten und Kleinserien&lt;br /&gt;
*Verkauf von IC-Adaptern und Bauteilen&lt;br /&gt;
&lt;br /&gt;
==== Fischer Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.fischer-leiterplatten.de&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, ohne Bestückungsdruck für 46,41€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, Best.-Druck top oder bottom für 58,31€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, Best.-Druck doppelseitig für 117,81€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* max. 4 lagig&lt;br /&gt;
* Bestückungsdruck doppelseitig&lt;br /&gt;
* Bohrungen no limit&lt;br /&gt;
* min Clearance 0,15mm (Standard)&lt;br /&gt;
* min Bohrdurchmesser 0,3mm (Standard)&lt;br /&gt;
* Gerber/Eagle/Protel/Target&lt;br /&gt;
* mehrere Leiterplatten können auf einer Europakarte, zum Preis einer Europakarte, zusammengefasst werden und werden automatisch vereinzelt.&lt;br /&gt;
* Überlieferung wird kostenlos beigelegt. (Sprich: in der Regel werden mehr Leiterplatten geliefert als bestellt.)&lt;br /&gt;
* Verkauf nur an Gewerbetreibende (aber es wird kein Gewerbenachweis verlangt ;) )&lt;br /&gt;
* Erfahrungen: [http://www.mikrocontroller.net/topic/209947#2078731]&lt;br /&gt;
&lt;br /&gt;
==== GLS Leiterplatten-Service GmbH ====&lt;br /&gt;
Homepage: http://www.leiterplattenprototypen.de&lt;br /&gt;
* Prototypenfertigung bei Chemnitz&lt;br /&gt;
* Top Qualität (mittleres Preisniveau)&lt;br /&gt;
* Top Service&lt;br /&gt;
* Prüfung der Layoutdaten in der CAM&lt;br /&gt;
* Standardlieferzeit: 10 Arbeitstage&lt;br /&gt;
* Eilservice bis 3 Arbeitstage (mit Aufpreis)&lt;br /&gt;
* Oberfläche Standard: HAL bleifrei; aber auch z.&amp;amp;nbsp;B. chem. Gold, chem. Zinn und HAL bleihaltig&lt;br /&gt;
* einseitige, nichtdurchkontaktierte Leiterplatten &lt;br /&gt;
* durchkontaktierte Leiterplatten&lt;br /&gt;
* Multilayer: bis 8-Lagen&lt;br /&gt;
* bietet zusätzlichen Service rund um die Leiterplatte: Erstellung von Leiterplattenlayouts und Digitalisierung/Scannen von alten Fertigungsfilmen, Papierausdrucken oder vorhandenen Musterleiterplatten&lt;br /&gt;
* SMD Schablonen&lt;br /&gt;
&lt;br /&gt;
==== HAKA Elektronik-Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.haka-lp.de/&lt;br /&gt;
* Zwillingsangebot: 2 identische Europakarten für 50€ (durchkontaktiert, Lötstop, kein Bestückungsdruck, nur Eagle- oder Target-Dateien), auch hierbei kostenlose Duplizierung kleinerer Layouts&lt;br /&gt;
* Zwillingsangebot: 2 identische Doppel-Eurokarten (200x160) für 90€, gleiche Bedingungen wie oben&lt;br /&gt;
* Prototypenangebot (min. Abstand 0,15 mm, min. Leiterbahnbreite 0,15 mm, kleinste Bohrung 0,3 mm, durchkontaktiert, Lötstop), 160x100mm in 2AT = 260EUR .. 8AT = 72 EUR .. 15AT = 63 EUR&lt;br /&gt;
* bei Platinen kleiner 1 qdm gibt es entsprechend mehr ohne Aufpreis&lt;br /&gt;
* Lieferzeit ab 3 Werktage; Achtung: Lieferzeit sind nur Circa-Werte und nicht verbindlich. Auch bei Aufpreis (AGB)!&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Auf der Homepage ist von Platinen nichts mehr zu sehen --Esko&lt;br /&gt;
==== LED-Hobby ====&lt;br /&gt;
Homepage: http://www.led-hobby.de/&lt;br /&gt;
* Kleinster Leiterbahnabstand: 0,2mm&lt;br /&gt;
* Kleinste Leiterbahnbreite: 0,2mm&lt;br /&gt;
* Kleinste Bohrung: 0,3mm&lt;br /&gt;
* Preis 0,35 EUR pro 1 x 1 cm (folglich 56,- EUR für eine doppelseitige Europakarte)&lt;br /&gt;
* RoHS-konform, made in Germany.&lt;br /&gt;
* Es sind alle Konturen, durchkontaktierte Bohrungen, Verzinnung (bleifrei) und beidseitiger grüner Lötstopplack enthalten. Kein Aufpreis, kein Grundpreis, keine Nacharbeit. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IBR Leiterplatten GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.ringler.de&lt;br /&gt;
* sehr freundlicher und kompetenter Service&lt;br /&gt;
* reagiert sehr schnell&lt;br /&gt;
* Qualität TOP&lt;br /&gt;
* Preise TOP - günstige Einmalkosten/Setup&lt;br /&gt;
* kann auch Dinge wie Alu, Starrflex, fine pitch oder 0,1 er vias&lt;br /&gt;
* Lieferzeit ab 2 Tage&lt;br /&gt;
* 2 Lagen in 10 Tagen - 10 Lagen Multilayer ohne besondere Nachfrage binnen 18 Tagen geliefert&lt;br /&gt;
* liefert generell schneller als bestätigt / macht auch Rahmenaufträge&lt;br /&gt;
* Mehrmengen bei Prototypen werden kostenlos geliefert&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
&lt;br /&gt;
==== ILFA Feinstleitertechnik GmbH ====&lt;br /&gt;
Homepage: http://www.ilfa.de&lt;br /&gt;
&lt;br /&gt;
==== Eurocircuits GmbH&lt;br /&gt;
&lt;br /&gt;
Hompage: http://www.eurocircuits.de&lt;br /&gt;
&lt;br /&gt;
* ideal für kleine Stückzahlen ab 1 Stück&lt;br /&gt;
* Lieferzeit ab 2 AT&lt;br /&gt;
* gute Preise bei Prototypen aber auch bei mittleren Stückzahlen&lt;br /&gt;
* Online Datenvisualisierung und DRC Check&lt;br /&gt;
* SMD - Schablonen&lt;br /&gt;
* Preisberechnung eindeutig ohne versteckte Kosten&lt;br /&gt;
&lt;br /&gt;
==== kessler systems GmbH ====&lt;br /&gt;
Homepage: http://www.kesslersystems.de&lt;br /&gt;
* Leiterplatten und Bestückung (Prototypen und Kleinserien, bis hin zur Großserie)&lt;br /&gt;
* Sehr schnell&lt;br /&gt;
* Ein- und doppelseitige Leiterplatten, Multilayer. &lt;br /&gt;
* Layoutservice&lt;br /&gt;
* SMD- und THT Bestückung&lt;br /&gt;
* Gerätebau&lt;br /&gt;
* günstige Preise&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* Lieferzeit an 3 AT&lt;br /&gt;
* Bauelementebeschaffung auch schon bei 1 Stück (super funktioniert)&lt;br /&gt;
&lt;br /&gt;
==== LEITON ====&lt;br /&gt;
Homepage: [http://www.leiton.de/ leiterplatten-online.de]&lt;br /&gt;
* Flexible Leiterplatten online kalkulieren&lt;br /&gt;
* Alle Layouts werden in der CAM eingehend geprüft&lt;br /&gt;
* Schnellste Bearbeitung von Anfragen &lt;br /&gt;
* Diverse Spezialfertigungen (Aluminiumkern, HF, hoch-Tg etc.)&lt;br /&gt;
* Fließender Übergang vom Prototyp in die Serie möglich&lt;br /&gt;
* Niederlassungen in Hongkong &amp;amp; China für Großserien (LeitOn HK Ltd.)&lt;br /&gt;
* Relativ günstig&lt;br /&gt;
* bei mehreren kleinen Leiterplatten wird nach Gesamtfläche berechnet, nicht nach Mindestfläche x Mindestpreis x Stückzahl&lt;br /&gt;
* Doppelseitige Europlatine mit Lötstop in 8 Tagen 61,25 Eur&lt;br /&gt;
* In 15 Tagen 49 Eur&lt;br /&gt;
* Gute Qualität&lt;br /&gt;
* Bis 8-lagig und ab 12 Std.&lt;br /&gt;
&lt;br /&gt;
==== Leiterplatten-Express-Service GmbH ====&lt;br /&gt;
Homepage: http://www.les-gmbh.com&lt;br /&gt;
&lt;br /&gt;
==== Microcirtec  ====&lt;br /&gt;
Homepage: http://www.microcirtec.de&lt;br /&gt;
* Direct - Online - Shop — zum Kalkulieren-Bestellen und Kaufen&lt;br /&gt;
* Mit Auftragsverfolgung per Online&lt;br /&gt;
* Vom Rapid Prototyping bis zur Rapid Mass-Production&lt;br /&gt;
* Qualität betrachten wir als selbstverständlich&lt;br /&gt;
* Allerdings ist die Anmelde-Prozedur ein Drama&lt;br /&gt;
* Preiswert&lt;br /&gt;
&lt;br /&gt;
==== MME-Leiterplatten ====&lt;br /&gt;
Homepage: http://mme-pcb.de&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/73790 Thread &#039;MME-PCB, Erfahrungen&#039;](bereits 4 Jahre alt)&lt;br /&gt;
* Verkauft über seine Homepage (Onlinekalkulator)&lt;br /&gt;
* Europakarte: ES: 20,60 EUR, DSDK: 41,50 EUR&lt;br /&gt;
* Durchkontaktierung bei zweiseitigen Leiterplatten ist im Preis inbegriffen&lt;br /&gt;
* Trennen und Bohren inklusive&lt;br /&gt;
* Stopplack inklusive&lt;br /&gt;
* Bestückungsdruck (16€) kosten extra&lt;br /&gt;
* min. Abstand 0,20 mm,  min. Leiterbahnbreite 0,20 mm, kleinste Bohrung 0,4 mm&lt;br /&gt;
&amp;lt;!-- * sehr gute Qualität --&amp;gt;&lt;br /&gt;
* Lieferzeit 8-12 Arbeitstage (bei mir waren es nur 5 Werktage)&lt;br /&gt;
* Überlieferung kostet nichts (häufig wird eine Leiterplatte mehr geliefert, bei mir waren es bei vier bestellten Platinen zwei mehr)&lt;br /&gt;
* Mit einer bestellten einseitigen Platine (DIL Bauteile) bin ich sehr zufrieden&lt;br /&gt;
* Die auf der Seite beworbene Lierferzeit wird meist eingehalten.&lt;br /&gt;
* Bis zu zehn unterschiedliche Karten können in einem Auftrag gepoolt werden -&amp;gt; preiswerter weil dm² kosten über alle gerechnet werden.&lt;br /&gt;
* Antwortet bei mir nicht auf emails, telefonisch kaum zu erreichen.&lt;br /&gt;
*Kommunikation hat sich erheblich verbesssert.&lt;br /&gt;
&lt;br /&gt;
==== Multi Printed Circuit Boards Ltd. ====&lt;br /&gt;
Homepage: http://www.multi-circuit-boards.eu&lt;br /&gt;
* nur für Gewerbetreibende&lt;br /&gt;
* Eurokarte doppelseitig mit Lötstopplack, Bestückungsdruck und E-Test in 6AT:  68,54€ inkl. MwSt&lt;br /&gt;
* Online Kalkulator&lt;br /&gt;
&amp;lt;!-- (wurde von &amp;quot;ordentlich&amp;quot; auf &amp;quot;hervorragend&amp;quot; vom einem sehr zufriedenen Kunden umgeändert oder vom Anbieter? Anbieter finden ihre Produkte hoffentlich alle hervorragend. &amp;quot;Sehr gute Qualität&amp;quot; nun ohnehin schon unten) * hervoragende Qualität bei gutem Preis  * interessant für Serien; neuer günstiger Service für Prototypen --&amp;gt;&lt;br /&gt;
* farbiger Lötstopplack und Bestückungsdruck möglich&lt;br /&gt;
* 48 Stunden Express&lt;br /&gt;
* Kompletter Design-Rule-Check der CAM-Daten&lt;br /&gt;
* Diverse Spezialfertigungen (Flex, Starrflex, Metallkern, HF, hoch-Tg, etc.)&lt;br /&gt;
* Sehr gute Qualität&lt;br /&gt;
* Liefertermine werden gerne etwas überschritten( auch bei Eilservice)&lt;br /&gt;
&lt;br /&gt;
==== M &amp;amp; V Leiterplatten - Vertriebs GmbH ====&lt;br /&gt;
Homepage: &amp;lt;!-- http://www.mvpcb.de/ alte Adresse--&amp;gt; http://pcb-center.de/&lt;br /&gt;
* Bin sehr zufrieden, gute Preise, 10 - 14 Tage&lt;br /&gt;
* Top Qualität, nichts auszusetzen&lt;br /&gt;
* Qualität sehr gut, hohe Auflösung, auch SMD fine pitch möglich&lt;br /&gt;
* Eurokarte doppelseitig 2xStopplack FR4 bleifrei konturgefräst  63€ inkl. MwSt zzgl. Versand&lt;br /&gt;
* Eurokarte einseitig    1xStopplack FR4 bleifrei konturgefräst  44€ inkl. MwSt zzgl. Versand&lt;br /&gt;
&lt;br /&gt;
* Freundlicher Kontakt, Leiterplatten sehen gut aus, lieferten 6 Tage zu frueh!&lt;br /&gt;
* Biszu fünf unterschiedliche Karten können in einem Auftrag gepoolt werden -&amp;gt; preiswerter weil dm² kosten über alle gerechnet werden.&lt;br /&gt;
&lt;br /&gt;
==== PCB Joker ====&lt;br /&gt;
Homepage: http://www.pcb-joker.com/&lt;br /&gt;
* Poolkonzept extrem! &lt;br /&gt;
* 1- bis 4 Lagen Multilayer&lt;br /&gt;
* Allgemein schnell und geringe Terminzuschläge&lt;br /&gt;
* Leiterplatten werden bei verschiedenen deutschen Herstellern platziert&lt;br /&gt;
* Sehr günstig , sehr übersichtliche Onlinekalkulation&lt;br /&gt;
* Bezahlung per PayPal oder Vorkasse&lt;br /&gt;
* Farbe, Dicke, Kupferauflage und Oberfläche können nicht festgelegt werden, sondern sind &amp;quot;Joker&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== PCB Pool ====&lt;br /&gt;
Homepage: http://www.pcb-pool.de/ &lt;br /&gt;
Alternativname: BETA Layout&lt;br /&gt;
* Standort: Im Aartal 14, 65326 Aarbergen, [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=50.23705&amp;amp;lon=8.06361&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* ideal für einzelne Boards und Klein(st)serien&lt;br /&gt;
* Preise im üblichen Rahmen&lt;br /&gt;
* Günstigere Preise für 10er oder 20er Auflage&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* Lieferzeit ab 2 AT&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
* Aktzeptieren von den gängigsten Layoutprogrammen die Boarddaten direkt. AUCH von KiCAD. Siehe http://www.pcb-pool.com/ppde/info_dataformat.html&lt;br /&gt;
&lt;br /&gt;
==== Precoplat ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.precoplat.de/&lt;br /&gt;
&lt;br /&gt;
* Standort: Krefeld, Oberdiessemer Str. 15, 47805 Krefeld, [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.32818&amp;amp;lon=6.58062&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* Prototypen, Großserien und alles dazwischen.&lt;br /&gt;
* Extrem flexibel im Angebot (Fläche/Lieferzeit, Blitz-Prototyping, Rapid-Mass-Produktion) &lt;br /&gt;
* Online Bestellung&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* bis 24 Lagen&lt;br /&gt;
* Mikro-Vias 100-200u&lt;br /&gt;
* Carbonlack&lt;br /&gt;
* Elektrischer Test (Flying probe + Nadelbett)&lt;br /&gt;
&lt;br /&gt;
==== Q-print/Q-PCB ====&lt;br /&gt;
Homepage: http://www.Q-PCB.de&lt;br /&gt;
* ideal für einzelne Boards und Klein(st)serien&lt;br /&gt;
* supergünstige Preise &lt;br /&gt;
* gute Qualität (u.U. Lötstop etwas unsauber)&lt;br /&gt;
* keine Zusatzpreise für 2x Lötstoplack o.ä.&lt;br /&gt;
* 150 µm kleinste Strukturbreite&lt;br /&gt;
* ohne Aufpreis bekommt man entweder HAL oder Ni/Au, gegen Aufpreis kann man aus einem von beiden wählen&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
* Lieferzeit ab 4 AT&lt;br /&gt;
* Platine 50mm x 60mm, doppelseitig: ~45€ incl. Versand und ~5€ Nachnahme&lt;br /&gt;
* Platine 85mm x 58mm, doppelseitig: 33€ zzgl 6,80 Versand&lt;br /&gt;
* Platine 100mm x 160mm, doppelseitig: 49€ +7€ für Lötstopp +6,80€ Versand&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ruwel ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.ruwel.com/&lt;br /&gt;
&lt;br /&gt;
* Standort: Am Holländer See 70, 47608 Geldern, [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.50451&amp;amp;lon=6.32046&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* Werke in Deutschland und China&lt;br /&gt;
* Überwiegend Großserien.&lt;br /&gt;
* Hochtemperatur, Dickkupfer, Kupferinlays, Semiflex, Sacklochbohren.&lt;br /&gt;
&lt;br /&gt;
==== SMTstencil (Großbritannien) ====&lt;br /&gt;
SMD-Schablonen aus Polyester gelasert, preiswert, kleinste Strukturen 0,25 x 0,25 mm², kleinster Abstand 0,3 mm&lt;br /&gt;
&lt;br /&gt;
Homepage: http://smtstencil.co.uk/&lt;br /&gt;
&lt;br /&gt;
==== Steimer Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.steimer.de&lt;br /&gt;
&lt;br /&gt;
==== The PCB-Shop / Europrint Deutschland GmbH ====&lt;br /&gt;
Homepage: http://www.thepcbshop.com&lt;br /&gt;
* Punktabzug, da der Preisrechner nur mit Internet Explorer funktioniert&lt;br /&gt;
* gute Qualität&lt;br /&gt;
* guter Preis (inkl. gratis Überlieferungen - 30 kleine Platinen bestellt, 35 bekommen)&lt;br /&gt;
* wenig Statusinformationen (Link zur Statusseite kommt per Mail, dort ändert sich der Status und der Empfänger eigentlich täglich - ist aber trotzdem fristgerecht angekommen)&lt;br /&gt;
&lt;br /&gt;
==== Würth Elektronik GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.we-online.de&lt;br /&gt;
* gehört sicherlich nicht zu den preisgünstigsten&lt;br /&gt;
* kann Bauteile in der Leiterplatte fertigen (R, C, Potis u.a.)&lt;br /&gt;
* beherrscht Microvias in allen erdenklichen Varianten&lt;br /&gt;
* sehr kompetentes Ansprechpersonal&lt;br /&gt;
&lt;br /&gt;
==== Onlineshop WEdirekt ====&lt;br /&gt;
&amp;lt;!-- Benutzer:Bede hat diese Beitrag eingefügt und sonst nie etwas im Wiki geschrieben, daher höchstwahrscheinlich Spam. Daher positive Meinung entfernt --&amp;gt;&lt;br /&gt;
Homepage: http://www.wedirekt.de&lt;br /&gt;
* PCB&#039;s in Basistechnologie, 2-8 Lagen&lt;br /&gt;
* SMD Schablonen in allen Ausführungen&lt;br /&gt;
* Europlatine doppelseitig mit Lötstopplack 67€ inkl. MwSt&lt;br /&gt;
* Design- und Applikationsfachbücher rund um EMV&lt;br /&gt;
&amp;lt;!-- * online kalkulieren und bestellen&lt;br /&gt;
* günstig, super Qualität  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deutschland sehr günstige===&lt;br /&gt;
Diese Hersteller zeichnen sich durch einen sehr günstigen Preis von &#039;&#039;&#039;unter 30€ pro doppelseitiger Eurokarte&#039;&#039;&#039; aus und können (bis auf pcb-devboards) &#039;&#039;&#039;keine Durchkontaktierungen&#039;&#039;&#039; herstellen.&lt;br /&gt;
&lt;br /&gt;
==== EBC Utz Kohl ====&lt;br /&gt;
Homepage: [http://www.e-b-c-elektronik.de http://www.e-b-c-elektronik.de]&lt;br /&gt;
* recht einfach gehalten, daher wirklich günstig&lt;br /&gt;
* Ideal für den Bastler, denen es auf den Preis ankommt&lt;br /&gt;
* Geätzt einseitig Euroformat 160 x 100mm 16,- EUR (zzgl 1,- EUR  Entsorgungspauschale pro Platine)&lt;br /&gt;
* Geätzt doppelseitig Euroformat 160 x 100mm 26,20 (zzgl 2,- EUR  Entsorgungspauschale pro Platine)&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt;0.3/0.3mm; Bohrdurchmesser &amp;gt;0.8mm?; Bohrrestring &amp;gt;? = D-d; Leiterplattengröße &amp;lt;160x100mm?; ein- und doppelseitig&lt;br /&gt;
* doppelseitige Platinen sind nicht durchkontaktiert !&lt;br /&gt;
* eigentlich ein Ladengeschäft, versendet jedoch auch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Platinenbelichter ====&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.platinenbelichter.de&lt;br /&gt;
* eine doppelseitige Europlatine kostet 14,90 EUR Grundpreis + 2,6 Cent je Bohrung&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt;0.18/0.18mm; Bohrdurchmesser &amp;gt;0.4mm; Bohrrestring &amp;gt;0.25mm = D-d; Leiterplattengröße &amp;lt;300x200mm; ein- und doppelseitig&lt;br /&gt;
* Lötstopplack grün auf anfrage möglich&lt;br /&gt;
* Express Service möglich&lt;br /&gt;
* Scannservice&lt;br /&gt;
* Layoutherstellung vom Schaltplan bis zur fertigen Platine&lt;br /&gt;
* Macht auch Bestückungsarbeiten in Top Qualität&lt;br /&gt;
* Qualität ist mehr als ausreichend für TQFP&lt;br /&gt;
* gute Lötbarkeit der Platinen&lt;br /&gt;
&lt;br /&gt;
Nachteile&lt;br /&gt;
* Keine Durchkontaktierungen möglich&lt;br /&gt;
* Zum Teil lange Lieferzeit (Bis zu 2 Monate)&lt;br /&gt;
* Bei Nachfrage spärliche oder gar keine Antwort&lt;br /&gt;
&lt;br /&gt;
==== Platinendesign ====&lt;br /&gt;
Homepage: http://www.platinendesign.de/&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt; 0.25/0.25mm; Bohrdurchmesser &amp;gt;?; Bohrrestring &amp;gt; 0.3mm = D-d; Leiterplattengröße &amp;lt; 300×200mm; ein- und doppelseitig&lt;br /&gt;
* eine doppelseitige Europlatine kostet 14 EUR Grundpreis + Bohrung 2cent + Optionen&lt;br /&gt;
* keine Durchkontaktierungen möglich&lt;br /&gt;
* Lötstopplack grün&lt;br /&gt;
* Lieferzeit von bis zu 8 Arbeitstagen nach Geldeingang&lt;br /&gt;
* Zeitweise geschlossen, Neueröffnung am 31.3.2013&lt;br /&gt;
&lt;br /&gt;
==== Ertürk Electronic ====&lt;br /&gt;
Website: http://www.erturk.de&lt;br /&gt;
&lt;br /&gt;
e-mail: [mailto:info@erturk.de info@erturk.de]&lt;br /&gt;
* Wir rechnen nach dm², in unserem Homepage können Sie selber sehen was Ihre Platine kostet (zur Zeit noch in Aufbau)&lt;br /&gt;
* Platine 1seitig FR4, 8€/dm²&lt;br /&gt;
* Chemische Verzinnung optional erhältlich&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt; 0.2/0.2mm; Bohrdurchmesser &amp;gt; 0.4mm; Bohrrestring &amp;gt;0.3mm, Leiterplattengröße &amp;lt; 200×300mm; ein- und doppelseitig &lt;br /&gt;
* Sehr hohe Qualität&lt;br /&gt;
* Bohrung möglich (ab 10 dm² CNC gesteuert), 0,03 Euro pro Bohrung&lt;br /&gt;
* Lieferzeit meistens nach Geldeingang oder bis 3 Arbeitstage&lt;br /&gt;
* Ab 15 Platinen sind Durchkontaktierungen, Lötstoplack, Bohrungen und Positionsdruck möglich (Lieferzeit bis zu 2 Wochen). Anfrage und Auftragsannahme nur mit Gerberdaten oder Eagle Daten möglich.&lt;br /&gt;
* Für ein Prototyp-Angebot reicht eine Eagle, Sprintlayout- Target3001 oder PDF-Datei schon aus. PDF muss im Maßstab 1:1 und schwarz/weiß sein&lt;br /&gt;
* Verpackung und Versand von 2,50 bis 5,90 Euro innerhalb Deutschland egal wieviel Sie bestellen&lt;br /&gt;
* Mindestauftragsannahme ab 10,50,-- Euro Inklusiver Verpackung/Versand.&lt;br /&gt;
* Stand: Juli 2013&lt;br /&gt;
&lt;br /&gt;
==== Cadgrafik Bauriedl (nur Filme) ====&lt;br /&gt;
Homepage: [http://cadgrafik-bauriedl.de/leiterplattenfilme.htm]&lt;br /&gt;
* Überträgt Layouts auf hochwertige Folie/Film zum Selberätzen&lt;br /&gt;
* 1,15 € / 100 cm² Film, 2,50 € Mindestbestellwert (Stand März 2009)&lt;br /&gt;
* 2 € Porto (Stand März 2009)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== pcb-devboards.de (Leiterplatten, HF- und Mikrowellen-Prototypen inkl. Durchkontaktierung)====&lt;br /&gt;
&lt;br /&gt;
++++++ FR4-Standard 0,5-3,20mm, 35-105µmCu, Farbe(FR4): Standard, Schwarz ++++++&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.pcb-devboards.de/catalog/index.php?cPath=38_55_157&lt;br /&gt;
&lt;br /&gt;
* Einseitige und doppelseitige &amp;lt;b&amp;gt;durchkontaktierte&amp;lt;/b&amp;gt; Leiterplatten&lt;br /&gt;
* Oberfläche: chemisch Zinn&lt;br /&gt;
* Basismaterial FR4 Farbe: Standard, Schwarz.&lt;br /&gt;
* Kupfer-Endstärke; 35µmCU, 70µmCU und 105µmCU.&lt;br /&gt;
* Fertigung im Nutzen, folgende Rohling-Größen verfügbar:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;FR4 1.60mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 45x90mm (0,41dm²) - doppelseitig DK = 8,99 €.&lt;br /&gt;
* 95x90mm (0,85dm²) - doppelseitig DK = 13,99 €.&lt;br /&gt;
* 195x90mm (1,75dm²) - doppelseitig DK = 23,49 €.&lt;br /&gt;
* 195x140mm (2,7dm²) - doppelseitig DK = 29,99 €.&lt;br /&gt;
* 290x90mm (2,7dm²) - doppelseitig DK = 29,99 €.&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 49,99 €. &lt;br /&gt;
&lt;br /&gt;
* 45x90mm (0,41dm²) - einseitig = 5,99 €.&lt;br /&gt;
* 95x90mm (0,85dm²) - einseitig = 9,99 €.&lt;br /&gt;
* 200x90mm (1,80dm²) - einseitig = 16,49 €.&lt;br /&gt;
* 290x95mm (2,75dm²) - einseitig = 22,99 €.&lt;br /&gt;
* 200x140mm (2,80dm²) - einseitig = 22,99 €.&lt;br /&gt;
* 290x200mm (5,80dm²) - einseitig = 39,99 €.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;FR4 0.5mm/0.8mm/1.0mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 49,99 €.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;FR4 2.0mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 54,99 €.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;FR4 3.2mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 59,99 €.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Fertigungsvorgaben, Standard Leiterplatten:&amp;lt;/b&amp;gt;:&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite =&amp;gt;0.2/0.2mm; &lt;br /&gt;
* Kleinster Restring umlaufend: 0.20mm = (PAD - Bohrung)/2; &lt;br /&gt;
* max. Leiterplattengröße &amp;lt;290x195mm (5,65dm²); &lt;br /&gt;
* Unlimitierte Bohrungen ab 0,4mm (bei LP-Dicke: 3,20mm ab 0,5mm) bis 6,3mm, ab 6,3mm werden die Bohrungen gefräst.&lt;br /&gt;
* ohne Lötstoppmaske und Bestückungsdruck&lt;br /&gt;
&lt;br /&gt;
++++++ ENDE FR4-Standard ++++++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
++++++ HF-Leiterplatten, Basismaterial RO4003C, 0,51mm/0,81mm/1.52mm, 35µmCU ++++++&lt;br /&gt;
&lt;br /&gt;
Homepage: http://www.pcb-devboards.de/catalog/index.php?cPath=38_55_181_165&lt;br /&gt;
&lt;br /&gt;
* Doppelseitige &amp;lt;b&amp;gt;durchkontaktierte&amp;lt;/b&amp;gt; HF-Leiterplatten&lt;br /&gt;
* Oberfläche: chemisch Silber/Zinn&lt;br /&gt;
* Basismaterial RO4003C, Farbe: Weiß&lt;br /&gt;
* Kupfer-Endstärke; 35µmCU&lt;br /&gt;
* Fertigung im Nutzen, folgende Rohling-Größen verfügbar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;RO4003C 0.51mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 195x90mm (1,75dm²) - doppelseitig DK = 39,99 €.&lt;br /&gt;
* 195x140mm (2,7dm²) - doppelseitig DK = 51,99 €.&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 87,49 €. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;RO4003C 0.81mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 195x90mm (1,75dm²) - doppelseitig DK = 39,99 €.&lt;br /&gt;
* 195x140mm (2,7dm²) - doppelseitig DK = 51,99 €.&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 87,49 €. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;RO4003C 1.52mm&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 195x90mm (1,75dm²) - doppelseitig DK = 53,49 €.&lt;br /&gt;
* 195x140mm (2,7dm²) - doppelseitig DK = 69,00 €.&lt;br /&gt;
* 290x195mm (5,65dm²) - doppelseitig DK = 117,49 €.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Fertigungsvorgaben, HF-Leiterplatten:&amp;lt;/b&amp;gt;:&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite =&amp;gt;150/150µm; &lt;br /&gt;
* Kleinster Restring umlaufend: 150µm = (PAD - Bohrung)/2; &lt;br /&gt;
* max. Leiterplattengröße &amp;lt;290x195mm (5,65dm²); &lt;br /&gt;
* Unlimitierte Bohrungen ab 0,3mm bis 6,3mm, ab 6,3mm werden die Bohrungen gefräst.&lt;br /&gt;
* ohne Lötstoppmaske und Bestückungsdruck&lt;br /&gt;
&lt;br /&gt;
++++++ ENDE HF-Leiterplatten ++++++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Allgemeine Informationen:&amp;lt;/b&amp;gt;:&lt;br /&gt;
* Beliebige Stückzahlen von Einzelplatinen, auch im Nutzen, der Abstand von Platinen muss mindesten 4mm betragen&lt;br /&gt;
* Lieferzeit, Fertigung alle 10-15 Arbeitstage, die Fertigungstermine werden auf der Webseite angegeben.&lt;br /&gt;
* Anfrage und Auftragsannahme mit Eagle, Target (freeware), Design Spark oder extended Gerberdaten möglich.&lt;br /&gt;
* Verpackung und Versand ab 4,75 Euro (für Stammkunden ab 2,75EUR) innerhalb Deutschland&lt;br /&gt;
&lt;br /&gt;
++++++ ENDE ++++++&lt;br /&gt;
&lt;br /&gt;
=== Ausland ===&lt;br /&gt;
&lt;br /&gt;
==== BatchPCB ====&lt;br /&gt;
Homepage: http://www.batchpcb.com (USA)&lt;br /&gt;
* Vermittler und keine eigene Herstellung (&amp;quot;PCB pooling service&amp;quot;), Hersteller vermutlich meist [[Platinenhersteller#Gold Phoenix|Gold Phoenix]]&lt;br /&gt;
* verbandelt mit Sparkfun (&amp;quot;off shoot of Spark Fun Electronics&amp;quot;)&lt;br /&gt;
* &amp;quot;We only offer one service at this time: 2 layer PCBs with soldermask both sides and silkscreen both sides. The minimum trace width is 8mil with 8 mil spacing.&amp;quot;&lt;br /&gt;
* relativ günstig, lange Lieferzeiten, weiteres siehe Homepage und [http://batchpcb.com/index.php/Faq BatchPCB FAQ]&lt;br /&gt;
&lt;br /&gt;
==== BILEX-LP ====&lt;br /&gt;
Homepage http://www.bilex-lp.com/ (Bulgarien)&lt;br /&gt;
* deutschsprechender Ansprechpartner&lt;br /&gt;
* liefern bleifreie Platinen(RoHs konform)&lt;br /&gt;
* 31€ für eine doppelseitige Eurokarte ohne Lack und Druck&lt;br /&gt;
* SMD- und THT Bestückung &lt;br /&gt;
* Layoutservice &lt;br /&gt;
* Lieferzeit ab 3-4 AT &lt;br /&gt;
* insgesamt von 5 bis 7 AT Anlieferung bei Airmail (Porto ab 4,-Euro)&lt;br /&gt;
* FedEx wollte von Bulgarien aus ab 27,-Euro, 1-2AT)&lt;br /&gt;
* Löcher größer 6 mm wurden nicht gebohrt, sondern gefräst(gegen Anfrage)&lt;br /&gt;
* Berichtete Qualitätsmängel (in Einzelfällen): ausgefranste Platinenfräsung, Lötstoplack hebt ab(nur bei Sn-Pb beschichtung, nicht bei Ni-Au).&lt;br /&gt;
* Fräsungen müssen extra bestellt werden! Aber trotzdem günstig&lt;br /&gt;
&lt;br /&gt;
==== CUBE CZ s.r.o. ====&lt;br /&gt;
Homepage http://www.cube.cz/ (Tschechische Republik)&lt;br /&gt;
&lt;br /&gt;
* kein Termineinhaltung bei Eilservice - Lieferung hat sich durch wiederholte DRC Checks (dauern jeweils einen Tag) und Vorauskassa statt Zahlungsziel 20 Tage wie auf der Rechnung angegeben von 4AT auf 10AT verzögert&lt;br /&gt;
* Keine Design Rules auf der Homepage verfügbar&lt;br /&gt;
* UL Zertifikat aus 2001 für nur 6 Mil Traces&lt;br /&gt;
* für Deutsche Verhältnisse günstig&lt;br /&gt;
&lt;br /&gt;
==== dfrobot ====&lt;br /&gt;
Homepage http://www.dfrobot.com/ (China)&lt;br /&gt;
&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* 10Stk 5x5 cm 9.9USD =&amp;gt; 1USD/Stk&lt;br /&gt;
* 200Stk 5x5 cm 69.5USD =&amp;gt; 0.35USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 64.90USD =&amp;gt; 6.49USD/Stk&lt;br /&gt;
&lt;br /&gt;
==== Euro PCB Ltd. ====&lt;br /&gt;
Homepage http://www.europcb.com/ (Großbritannien)&lt;br /&gt;
* Günstige Leiterplatten&lt;br /&gt;
* Schnelle Lieferung&lt;br /&gt;
* Qualitativ OK&lt;br /&gt;
&lt;br /&gt;
12.02.2012: Webseite ist leer; Firma terminiert?&lt;br /&gt;
&lt;br /&gt;
==== Gold Phoenix ====&lt;br /&gt;
Homepage http://www.goldphoenixpcb.biz/ (VR China)&lt;br /&gt;
&lt;br /&gt;
==== ITead Studio PCB prototyping service ====&lt;br /&gt;
Homepage http://iteadstudio.com/store/index.php?main_page=index&amp;amp;cPath=19_20 (VR China)&lt;br /&gt;
* Sehr günstige Leiterplatten&lt;br /&gt;
* Relativ günstige Lieferung&lt;br /&gt;
* 10 Stück mit jeweils 5x5cm für 9,90€&lt;br /&gt;
* Qulität relativ gut&lt;br /&gt;
* 100% E-Test&lt;br /&gt;
* Teilweise Probleme mit Gerberdateien, die knapp am Limit (6 mil) sind&lt;br /&gt;
* Testvideo: [http://www.eevblog.com/2011/03/11/eevblog-155-itead-studio-pcb-prototype-goof/ EEVBlog #155]&lt;br /&gt;
&lt;br /&gt;
==== LNAFIN ====&lt;br /&gt;
Homepage: http://electronics-pcb.com (Finland)&lt;br /&gt;
Produkte: http://electronics-pcb.com/shop (Finland)&lt;br /&gt;
Email   : pcb@lnafin.com&lt;br /&gt;
&lt;br /&gt;
* PCB Vertrieb mit Mikrowellenbereich und Multilagig HDI Kompetenz&lt;br /&gt;
* Leiterplatten fuer Industrie und auch als Kleinserien (kein MOQ)&lt;br /&gt;
* Elektronik und Layout Design Hilfe (bitte siehe Produkte)&lt;br /&gt;
* Auch ASIC design und PCBA (14 ASIC Erfahrung)&lt;br /&gt;
* Sicher Service auf Deutsch.&lt;br /&gt;
&lt;br /&gt;
==== MakePCB ====&lt;br /&gt;
Homepage http://www.makepcb.com/ (Shanghai, VR China)&lt;br /&gt;
* Ich habe bei MakePCB Platinen geordert und als Zahlungsart Paypal angegeben. Die automatische Bestaetigung kam, es stand nochmal explizit drin dass ich Paypal als Zahlungsart gewaehlt habe und die Bemerkung, dass bei Zahlungsart Paypal in 2 Tagen eine Mail an die gleiche Adresse kaeme mit den Daten für Paypal. Naja, nach 4 Tagen war immernoch nichts da, ich habe denen eine Mail geschrieben und nochmal nach den &amp;quot;versprochenen&amp;quot; Paypaldaten gefragt. Drei Tage spaeter war immernoch nichts da, also habe ich die Bestellung abgebrochen. Am 8. Tag kam die Zahlungsforderung über Paypal, kein Wort der Erklaerung. Am 10. Tag kamen zwei identische Mails, die sagten man haette die PayPal-Zahlungsaufforderung schon geschickt. Irgendwas laeuft in dem Laden also schief.&lt;br /&gt;
* Weiterer Erfahrungsbericht zu MakePCB: Nach einiger Überlegung habe ich mich entschieden, es zu wagen, bei MakePCB Platinen zu bestellen. Meine Platine hatte halbes Euro-Format, aus Kostengründen habe ich gleich 5 Stück bestellt. Der gesamte Preis betrug ca. 45 €, Zahlung per PayPal funktionierte ohne Probleme. Auf der Internetseite von MakePCB wurde für die Produktion 14 Tage, für Shipment 10-14 Tage veranschlagt. Nach der Bestellung konnte ich den Status der Bestellung online in einer Tabelle einsehen. Nach etwas mehr als den veranschlagten 4 Wochen kamen heute die Platinen am. Die Verpackung wirkte nicht sehr professionell (gepolsterter Umschlag, auf den mit Filzstift meine Anschrift geschrieben war), nach dem Aufreissen des Umschlags hielt ich ein mehrfach mit gepolsterter Folie und Klebeband umklebtes Päckchen in der Hand. Erst als ich die Folie entfernt hatte kam eine professionell mit Luftpolsterfolie verschweisste Packung zum Vorschein. Die Platinen sehen, so weit ich bisher beurteilen kann, gut aus, lediglich der Bestückungsdruck ist ein wenig versetzt. Ein kurzer exemplarischer Test mit dem Multimeter sah auch in Ordnung aus. Alles in allem macht das Angebot, insbesondere zu dem Preis, einen echt guten Eindruck. Ich kann es nur empfehlen. &lt;br /&gt;
&lt;br /&gt;
==== OLIMEX Ltd. ====&lt;br /&gt;
Homepage http://www.olimex.com (Bulgarien)&lt;br /&gt;
&lt;br /&gt;
Habe mehrere Jahre bei Olimex meine Prototypen herstellen lassen. Stets saubere Arbeit erhalten. Bis ich denen mal falsche Gerber-Dateien zusandte. Als ich einige Stunden spaeter den Fehler bemerkt hatte, bat ich um Stornierung und Neuzusendung. Gegen ein zusaetzliches Entgelt wurde dies akzeptiert.&lt;br /&gt;
Die angesagten Zusatzkosten wurden zwar von mir nicht abgebucht, aber ich erhielt  1 Woche spaeter die anfaenglich falsch zugesandten PCB&#039;s.&lt;br /&gt;
Die Zusammenfassung des darauffolgenden Email-Verkehrs: Ein Schulterzucken seitens Olimex und die Bitte, eine neue, kostenpflichte Bestellung zu taetigen.&lt;br /&gt;
&lt;br /&gt;
==== PAD2PAD ====&lt;br /&gt;
Homepage http://www.pad2pad.com/ (USA)&lt;br /&gt;
* Bestücken die Platinen auch mit Digikey-Bauteilen.&lt;br /&gt;
&lt;br /&gt;
==== PCBCart ====&lt;br /&gt;
Homepage http://www.pcbcart.com/ (China)&lt;br /&gt;
* auch kompliziertere Designs&lt;br /&gt;
* schnell und zuverlässig&lt;br /&gt;
* Eurokarte doppelseitig mit Lötstopp beidseitig und Bestückungsdruck kostet 60€ ohne MwSt +15€ Versand&lt;br /&gt;
* 2Stück 64€ ohne MwSt +15€ Versand&lt;br /&gt;
* 10Stück 90€ ohne MwSt +15€ Versand&lt;br /&gt;
* Eurokarte einseitig ohne Lötstopp und ohne Bestückungsdruck kosten 10Stück 71€ ohne MwSt +19€ Versand&lt;br /&gt;
&lt;br /&gt;
==== PCBPro ====&lt;br /&gt;
Homepage http://www.pcbpro.com/ (USA)&lt;br /&gt;
* Bei größeren Mengen (z.&amp;amp;nbsp;B. 100 Stück) sehr niedrige Preise&lt;br /&gt;
&lt;br /&gt;
==== Top-Tec-PCB ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Geschäftsbetrieb eingestellt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Homepage http://www.top-tec-pcb.com/ (Großbritannien)&lt;br /&gt;
* Günstig für Klein- bis Großserien&lt;br /&gt;
* Discount bei Nachbestellung&lt;br /&gt;
* sehr gute Technik (z.&amp;amp;nbsp;B. 100µm Bohren oder 75µm Leiterbahn)&lt;br /&gt;
* deutschsprechender Ansprechpartner&lt;br /&gt;
* liefern bleifreie Platinen (HAL, chem. Gold, Silber u. Zinn)&lt;br /&gt;
* 48h Eildienst&lt;br /&gt;
&lt;br /&gt;
==== The PCB Shop ====&lt;br /&gt;
Homepage http://www.thepcbshop.com/ (Belgien)&lt;br /&gt;
* Für einfache Sachen&lt;br /&gt;
* Preisrechner funktioniert nur mit IE&lt;br /&gt;
&lt;br /&gt;
==== PIU-Printex ====&lt;br /&gt;
Homepage http://www.piu-printex.at/ (Österreich)&lt;br /&gt;
* Bei größeren Mengen (&amp;gt; 20 Stück, einseitig, viele Bohrungen) günstig&lt;br /&gt;
* Bearbeitung innerhalb 6 AT&lt;br /&gt;
* Telefonische Kontaktaufnahme bei Rückfragen&lt;br /&gt;
* Ich war sehr positiv überrascht.&lt;br /&gt;
&lt;br /&gt;
==== Seeed ====&lt;br /&gt;
Homepage http://www.seeedstudio.com (China)&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* 10Stk 5x5 cm 9.9USD =&amp;gt; 1USD/Stk&lt;br /&gt;
* 4 Lagig  5Stk 5x5 cm 39.90USD =&amp;gt; 8USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 49.90USD =&amp;gt; 5USD/Stk&lt;br /&gt;
* Blaue, weiße, rote, gelbe, schwarze platinen für 10USD Aufpreis&lt;br /&gt;
* Überproduktion wird mit geliefert, bei einer 2cmx1cm Platine wurden 24Stk anstatt 10Stk geliefert.&lt;br /&gt;
* Kostenloser Standardversand bei Bestellungen über 50USD&lt;br /&gt;
&lt;br /&gt;
==== smart prototyping ====&lt;br /&gt;
Homepage http://smart-prototyping.com/ (China)&lt;br /&gt;
&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* Auch 6 lagige boards&lt;br /&gt;
* Maximal 30x30cm&lt;br /&gt;
* 10Stk 5x5 cm 8.9USD =&amp;gt; 0.9USD/Stk&lt;br /&gt;
* 500Stk 5x5 cm 132.92USD =&amp;gt; 0.27USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 39.9USD =&amp;gt; 4USD/Stk&lt;br /&gt;
* 6 Lagig 10Stk 5x5 cm 239.9USD =&amp;gt; 24USD/Stk&lt;br /&gt;
&lt;br /&gt;
==== Vi&amp;amp;Rus International ====&lt;br /&gt;
Euro 160x100 für Euro 58,- incl. Express-Versand&lt;br /&gt;
&lt;br /&gt;
http://www.vrint-pcb.com (Bulgarien)&lt;br /&gt;
&lt;br /&gt;
* 3 (!) Arbeitstage&lt;br /&gt;
* RoHS, ENIG&lt;br /&gt;
* 2 Lagen, durchkontaktiert&lt;br /&gt;
* Lötstop beideitig&lt;br /&gt;
* Bestückungsdruck&lt;br /&gt;
* E-Test&lt;br /&gt;
* incl. Vereinzelungen (gefräst)&lt;br /&gt;
* incl. Versand (1 AT), also am 4. AT geliefert&lt;br /&gt;
* Erstklassige Qualität, auch bei Fine-Pitch; schneller, freundlicher Support.&lt;br /&gt;
&lt;br /&gt;
== Preisvergleichstabellen (Stand Februar 2010) ==&lt;br /&gt;
&lt;br /&gt;
Preise für 1, 2 Europlatinen (160x100), FR4 1.6mm, HAL bleifrei, 150µm Leiter, 0.3mm Bohren, doppelseitig, 8AT, kein Bestückungsdruck, inkl. MwSt, ohne Versand.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot; |Hersteller !!Preis (€) 1x !!Preis (€) 2x&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;3&amp;quot; |&#039;&#039;ohne Lötstopp, ohne E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Basista Leiterplatten&#039;&#039;&#039;|| 43,66 || 81,61&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT, immer mit LS.+E-T.)|| 46,41 || 73,07&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;HAKA Elektronik-Leiterplatten GmbH&#039;&#039;&#039;|| 64,54 || 106,13&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 54,98 || 104,51&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;MME-Leiterplatten&#039;&#039;&#039; (200µm Leiter)|| 41,44 || ?&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;PCB Pool&#039;&#039;&#039;|| 50,27 || 100,54&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Q-print/Q-PCB&#039;&#039;&#039;|| 55,62 || 95,89&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;3&amp;quot; |&#039;&#039;mit Lötstopp, mit E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Basista Leiterplatten&#039;&#039;&#039;|| 77,66 || 115,61&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT)|| 46,41 || 73,07&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 88,79 || 147,39&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Multi PCB Ltd. Leiterplatten&#039;&#039;&#039; (6AT)|| 78,06 || 156,13&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;M &amp;amp; V Leiterplatten - Vertriebs GmbH&#039;&#039;&#039;|| 62,83 || 125,66 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Onlineshop WEdirekt&#039;&#039;&#039;|| 128,75 || 172,38&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preise für 1, 2, 10 Europlatinen (160x100), FR4 1.6mm, HAL bleifrei, 150µm Leiter, 0.3mm Bohren, doppelseitig, 8AT, 1x Bestückungsdruck, 2x Lötstopp, E-Test, inkl. MwSt, ohne Versand.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Hersteller !! Preis (€) 1x !!Preis (€) 2x !!Preis (€) 10x !! Nachbest. (€) 10x&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;5&amp;quot; |&#039;&#039;mit Lötstopp, mit Bestückungsdruck, mit E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT)|| 58,31 || 84,97 || 337,72 || 219,91 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;HAKA Elektronik-Leiterplatten GmbH&#039;&#039;&#039;|| 82,54 || 124,13 || 302,08 || 284,08 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 124,37 || 187,15 || 389,84 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Multi PCB Ltd. Leiterplatten&#039;&#039;&#039;|| 78,06 || 156,13 || 272,27 || 180,64&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;M &amp;amp; V Leiterplatten - Vertriebs GmbH&#039;&#039;&#039;|| 110,43 || 173,26 || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;PCB Pool&#039;&#039;&#039;|| 122,29 || 129,26 || 407,58 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Q-print/Q-PCB&#039;&#039;&#039;|| 96,80 || 166,90 || 834,48 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Onlineshop WEdirekt&#039;&#039;&#039;|| 145,18 || 190,64 || 379,49 || x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.jackaltac.com/faq --&amp;gt; grafischer Vergleich der Platinenkosten]&lt;br /&gt;
&lt;br /&gt;
== Lohnbestücker - Kleinserien ==&lt;br /&gt;
&lt;br /&gt;
==== kessler systems GmbH ====&lt;br /&gt;
Homepage: http://www.kesslersystems.de&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* BGAs&lt;br /&gt;
* macht auch Großserien&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile, Express möglich&lt;br /&gt;
&lt;br /&gt;
==== PCB Pool ====&lt;br /&gt;
Homepage: http://www.pcb-pool.com/ppde/info_pcb_assembling.html&lt;br /&gt;
* Prototyp &amp;amp; Kleinserien, Größere Stückzahlen auf Anfrage&lt;br /&gt;
* SMD bis 0402, THT&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile &lt;br /&gt;
&lt;br /&gt;
==== REDER Domotic GmbH ====&lt;br /&gt;
Homepage: http://reder.eu&lt;br /&gt;
* Prototypen, Kleinserie, Serie&lt;br /&gt;
* THT, SMD ab 0201 Baugröße&lt;br /&gt;
* Komplette Materialbeschaffung&lt;br /&gt;
* Prototypen über Nacht möglich&lt;br /&gt;
* riesen Vorteil: der Mann an der Maschine ist selbst Entwickler&lt;br /&gt;
  &lt;br /&gt;
==== riese electronic GmbH ====&lt;br /&gt;
Homepage: http://www.riese-electronic.de/leistungen_prototype.html&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* BGAs inkl Röntgen&lt;br /&gt;
* macht auch Großserien&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile, Express möglich&lt;br /&gt;
&lt;br /&gt;
==== D-E-K Dischereit GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.dischereit.de&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* SMD bis 0402, THT&lt;br /&gt;
* Bauteilbeschaffung&lt;br /&gt;
&lt;br /&gt;
==== PBS-Electronic ====&lt;br /&gt;
Homepage: http://www.pbs-electronic.de&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* BGA, QFN, TQPF, Fine Pitch, SMD bis 0402, THT&lt;br /&gt;
* Einzel IC Bestückung möglich&lt;br /&gt;
* Spezialist für LED Technik&lt;br /&gt;
&lt;br /&gt;
==== Traffitec ====&lt;br /&gt;
Homepage:http://www.traffitec.de/&lt;br /&gt;
* Standort: Hervorster Str. 175, 47574 Goch [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.6904&amp;amp;lon=6.14378&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* Bestückt Prototypen, Kleinserien, Normalserien&lt;br /&gt;
* In THT, SMD und gemischt.&lt;br /&gt;
* und von allen Seiten&lt;br /&gt;
* Einpresstechnik&lt;br /&gt;
* Starrflex&lt;br /&gt;
* Komponentenbau&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://www.cadsoft.de/services/board-houses/?language=de Übersicht von Cadsoft, sortiert nach PLZ]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/245590 Forum: Platinensammler - Leiterkarten für 30ct/cm²]&lt;br /&gt;
&lt;br /&gt;
[[Category:Platinen| ]]&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-%22Birnen%22&amp;diff=70976</id>
		<title>LED-&quot;Birnen&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-%22Birnen%22&amp;diff=70976"/>
		<updated>2013-01-17T15:50:51Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Vor- und Nachteile der LED-Lampen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Beitrag beschreibt Aufbau und Funktion von [[LED]]-basierten Leuchtmitteln, gelegentlich auch als &#039;&#039;&#039;&amp;quot;LED-Birnen&amp;quot;&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Immer häufiger werden neben Kompaktleuchtstofflampen (Quecksilberdampf-Niederdrucklampe) auch LED-Lampen als Ersatz für die herkömmlichen Glühfadenlampen (&amp;quot;Glühbirnen&amp;quot;) verwendet. Dabei existieren kostengünstige Versionen mit Gruppen aneinander gereihter Standard-LEDs, sowie Ausführungen, die gezielt in Form  klassischer Glühfadenbirnen gestaltet sind und für 230V optimierte Halbleiter enthalten.&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit anderen Leuchtmitteln ==&lt;br /&gt;
Auf den Packungen der Hersteller sind sowohl bei Kompaktleuchtstofflampen, als auch bei LED-Birnen sehr optimistische Werte für die Lebensdauer und die Helligkeit angegeben. Diese sind mit Vorsicht zu geniessen und ausdrücklich als Werbeaussage aufzufassen:&lt;br /&gt;
&lt;br /&gt;
=== Lebensdauervergleich===&lt;br /&gt;
Kompaktleuchtstofflampen werden gerne mit bis zu 10.000h - LED-Lampen sogar mit bis zu 50.000h angegeben. In der Praxis zeigt sich aber, daß diese Werte nicht einmal von 10% der Lampen erreicht werden. Ein Großteil ist bereits vor Ablauf der halben Periode defekt - nicht wenige sogar schon nach 10% der angegebenen Zeit!&lt;br /&gt;
&lt;br /&gt;
Real sollte man davon ausgehen, dass einfache LED-Lampen ca 1000h-5000h leuchten, bevor die Elektronik defekt geht- bessere Lampen halten etwa das 2-3fache an Zeit.&lt;br /&gt;
&lt;br /&gt;
=== Leistungsvergleich===&lt;br /&gt;
Bei der Leistung werden oft subjektive Empfindungen des Menschen, wie die spektale Empfindlichkeit in die gemessenen Spektren eingerechnet und speziell bei den Leuchtstoffröhren die Alterung verschwiegen, um in Lampen mit wenigen Watt eine gewaltige subjektive Leuchtwirkung hineinzurechnen.&lt;br /&gt;
&lt;br /&gt;
Grob gesagt, sollte man bei ESL und besonders bei LED-Lampen 20%-40% auf die Leistung zugeben, um sie mit einer Glühbirne vergleichen zu können.&lt;br /&gt;
&lt;br /&gt;
=== Vor- und Nachteile der LED-Lampen ===&lt;br /&gt;
&lt;br /&gt;
LED-Lampen haben einige Vorteile gegenüber den Kompaktleuchtstofflampen und vor allem gegenüber den Glühfadenlampen: &lt;br /&gt;
&lt;br /&gt;
* Die Energieeffizienz ist in der Regel höher, als bei Kompaktleuchststofflampen&lt;br /&gt;
* Die Kosteneffizienz ist bei einfachen Ausführungen ähnlich gut&lt;br /&gt;
* Die Lichtfarbe bzw. Farbtemperatur der LED-Lampe ist flexibler und kann auf Wunsch der Glühfadenlampen besser angepasst werden. Dazu gibt es kaltweiße, warmweiße und auch farbige Ausführungen&lt;br /&gt;
* enthält keine leicht freisetzbare Giftstoffe, wie Quecksilber&lt;br /&gt;
* erreicht bereits nach wenigen Millisekunden nach dem Einschalten die volle Leuchtkraft&lt;br /&gt;
* kann eine sehr lange Lebensdauer haben (meist &amp;gt;= 30000 Stunden)&lt;br /&gt;
&lt;br /&gt;
Jedoch gibt es auch einige Nachteile:&lt;br /&gt;
&lt;br /&gt;
* begrenzte Maximalleistung: LED-Lampen erreichen bei gleicher Grösse nicht dieselbe Helligkeit wie Kompaktleuchststofflampen&lt;br /&gt;
* hat einen grösseren Platzbedarf bei gleicher Leuchtkraft&lt;br /&gt;
* bei birnenähnlichen Designs und höheren Leistungen höherer Preis &lt;br /&gt;
* enthält schwer zu recycelnde Giftstoffe wie Arsenverbindungen&lt;br /&gt;
* Derzeit noch nicht in allen Elektrogeschäften verfügbar&lt;br /&gt;
* ähnlich wie bei ESLs befinden sich sehr viel billige Produkte am Markt, bei denen die Elektronik rasch kaputt geht&lt;br /&gt;
&lt;br /&gt;
=== Kostenvergleich von Energiesparlampen ===&lt;br /&gt;
[[Datei:Kostenvergleich-led-esl-birnen.jpg|left|300px|Kostenvergleich]]&lt;br /&gt;
&lt;br /&gt;
Die Grafik zeigt 3 Fälle von Kostenrechnungen für konventionelle Glühlampen, Kompaktleuchtstofflampe (als ESL bezeichnet) und LED-Lampen.&lt;br /&gt;
&lt;br /&gt;
Berechnet werden jeweils die beiden Extremfälle einer Lampe mit niedrigem Preis und hoher Lebensdauer (günstiger Fall) und einer &amp;quot;Montagslampe&amp;quot;, die schnell kaputt geht, trotz hohen Preises. Daraus wird ein wahrscheinlichster Mittelwert (geometrische Mitte) - einmal für geringe und einmal für starke Nutzung gebildet.&lt;br /&gt;
&lt;br /&gt;
Aufgeführt ist auch die Unterscheidung der privaten und geschäftlichen Nutzung, bei der die Beschaffungs- und Wartungszeiten viel stärker zu Buche schlagen, da ein Angestellter bezahlt werden muss. Hier zeigt sich der Vorteil der langen Nutzungsdauer der LED-Lampen besonders deutlich.&lt;br /&gt;
&lt;br /&gt;
Es zeigt sich auch, dass Privatnutzer durchaus noch einen geringen Sparvorteil haben können, wenn sie auf LED-Lampen umrüsten.&lt;br /&gt;
&lt;br /&gt;
Excel für eigene Berechnungen: [http://www.mikrocontroller.net/wikifiles/0/09/Lampenrechner.xls Lampenvergleichsrechner]&lt;br /&gt;
&lt;br /&gt;
Externer Link auf Excel:&lt;br /&gt;
[http://shop.bioledex.de/files/BIOLEDEX-LED-Stromkosten-Rechner.xls Stromkostenrechner]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
== Bauformen ==&lt;br /&gt;
=== Hochvolt-LED-Lampen===&lt;br /&gt;
&lt;br /&gt;
=== Niederspannungs-LED-Lampen===&lt;br /&gt;
==== Halogenersatzlampen ====&lt;br /&gt;
Üblicherweise werden Niederspannungs-LED-Lampen an einem dezentralen Transformator betrieben, wie z.B mit 24V. Mit einer geeigneten Vorschaltung zur Spannungsherabsetzung im Lampengehäuse, sind sie auch indirekt an 230V-Netzen benutzbar.&lt;br /&gt;
&lt;br /&gt;
==== Betrieb von Standard-LEDs an 230V ====&lt;br /&gt;
[[Datei:led_230v.png|left|300px|230V-Vorschaltung]]&lt;br /&gt;
Mit der nebenstehenden Schaltung besteht die Möglichkeit, eine normale LED direkt an 230V anzuschließen. Diese Schaltung funktioniert so, dass die Spannung mittels Z-Dioden begrenzt wird; in diesem Fall auf 30V. Diese sind deshalb wichtig, weil die Gleichrichtdioden für hohen Frequenzanteile als Kapazität wirken und der Elko diese nicht aufnehmen kann, wodurch sie direkt auf die LEDs wirken würden. Gfs sollte dem Elko noch eine keramischer Kondensator beigefügt werden.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:Led an 220V.png|left|300px|230V-Schaltung]]&lt;br /&gt;
Statt eines Gleichrichters, kann auch eine Antiparallelschaltung von LEDs verwendet werden. Auch dabei werden beide Halbwellen genutzt. Die Ausfallwahrscheinlichkeit ist geringer, weil weniger Bauteile und vor allem kein Elko genutzt wird. Allerdings muss die Schaltung genau dimensioniert werden, d.h. die strombegrenzte Wirkung des Kondnesators ist sehr wichtig. daher werden zur Sicherheit einige in Serie geschaltet, um das Problem der Alterung oder Defektbildung zu minimieren. Die LEDs leuchten bei dieser Schaltungsform aber etwas dunkler, als oben, weil kein konstanter Strom fliessen kann und man mit Rücksicht auf die Lebensdauer der LEDs nicht einfach die Spannung so erhöhen kann, dass der Effektivwert erreicht wird.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{warnung|Spannungen ab 60V sind lebensgefährlich!}}&lt;br /&gt;
&lt;br /&gt;
== Funktion einer LED-Lampe am Beispiel==&lt;br /&gt;
von [[Benutzer:Didi34 Didi]]&lt;br /&gt;
=== Aufbau ===&lt;br /&gt;
[[Datei:aufbau.JPG|left|300px]]&lt;br /&gt;
Ich beschreibe in diesem Beitrag den Aufbau eines 4W Philips LED-Leuchtmittels mit E-14 Sockel. Über dem LED-Chip befindet sich ein Glaskolben, der in den weißen Kunststoffsockel geklebt ist. Der Glaskolben ist aus Milchglas, dies dient als Diffusor. Um näher in die Lampe zu kommen, muss der Glaskolben abgenommen werden.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:sockel.JPG|left|300px]]&lt;br /&gt;
Nun sieht man den LED-Chip in der Mitte der Lampe. Über dem Chip befindet sich eine weitere Abdeckung, die abgenommen werden muss. &lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:chip_anschluss.JPG|left|300px]]&lt;br /&gt;
Auf dem nächsten Bild sieht man die Aluminium-Platine, worauf sich der LED-Chip befindet. Die beiden Drähte stellen die Versorgung der LED (300V Gleichspannung) dar. Die Platine besteht aus dem Basismaterial Aluminium, um eine bessere Kühlung zu erreichen.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Innenleben ===&lt;br /&gt;
[[Datei:platine_unten.jpg|left|300px]]&lt;br /&gt;
Im Inneren der LED-Lampe befindet sich folgende Platine:&lt;br /&gt;
&lt;br /&gt;
Man sieht nun auf der Platine eine kleine Gleichrichterschaltung. Die Anschlüsse Blau und Braun sind Neutralleiter(N) und Außenleiter(L1) unserer Energieversorgung mit 230V Wechselspannung.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:platine_oben.JPG|left|300px]]&lt;br /&gt;
&lt;br /&gt;
Die beiden Drähte Rot(+) und Schwarz(-) sind die Ausgänge der Schaltung. Sie führen eine Gleichspannung von 300V und werden direkt an der Aluminiumplatine der LED angeschlossen, da die LED für diese Spannung ausgelegt ist. Näheres zur Schaltung:&lt;br /&gt;
[http://www.mikrocontroller.net/articles/LED-Gl%C3%BChbirne#Schaltung/ Schaltung]&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== LED-Chip ====&lt;br /&gt;
[[Datei:ledchip_dunkel.jpg|left|300px]]&lt;br /&gt;
Der LED-Chip besteht aus mehreren in Serie geschalteten LEDs. Die in Serie geschalteten LEDs sind um eine warm-weiße Farbe zu erreichen teils rot und teils weiß. Die LED ist für 300V DC ausgelegt. Auf dem LED-Chip befinden sich zwei weiße und zwei rote LED-Arrays. Die gelbe Schicht der weißen LEDs ist ein Phosphor (also ein Leuchtstoff) der aus dem blauen Licht der Kristalle weißes Licht macht.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ledchip_hell.jpg|left|300px]]&lt;br /&gt;
Eine weitere Ansicht des LED-Chips im Betrieb unter Spannung.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== Schaltung ====&lt;br /&gt;
[[Datei:netzteilschaltung.png|left|300px|Einfache Gleichrichterschaltung für LEDs]]&lt;br /&gt;
Für den Betieb an Netzspannung wird ein Kondensatornetzteil verwendet, welches aus 230V AC 300V DC macht. Die Schaltung ist mit 1A abgesichert. {{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Messung ===&lt;br /&gt;
[[Datei:messung.bmp|left|300px|Messung]]&lt;br /&gt;
Es wurde zwischen dem roten und schwarzen Ausgang der oben genannten Schaltung gemessen. CH1 roter Anschluss CH2 schwarzer Anschluss.&lt;br /&gt;
Die rote Linie am Oszillogramm ist Die Spannung zwischen den beiden Drähten (CH1-CH2).&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
{{warnung|Spannungen ab 60V sind lebensgefährlich!}}&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* [[LED]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Leuchtdiode Wikipedia: LED]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Kompaktleuchtstofflampe Wikipedia: Kompaktleuchtstofflampe]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Glühlampe Wikipedia: Glühbirne ]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Kondensatornetzteil Wikipedia: Kondensatornetzteil]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Energiesparende Leuchtmittel Wikipedia: Energiesparende Leuchtmittel allgemein]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Atmel_Studio&amp;diff=68262</id>
		<title>Atmel Studio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Atmel_Studio&amp;diff=68262"/>
		<updated>2012-09-03T22:15:06Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Direktlinks Zusatzsoftware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das &#039;&#039;&#039;Atmel Studio&#039;&#039;&#039; (vor Version 6: &amp;quot;&#039;&#039;&#039;AVR Studio&#039;&#039;&#039;&amp;quot;) ist eine kostenlose Entwicklungsumgebung ([[Editoren/IDEs|IDE]]) für die Programmierung der [[AVR]]-[[Mikrocontroller]] und [[ARM]]-[[Mikrocontroller]] (ab Version 6) von Atmel. Sie basiert ab Version 5 auf der Visual Studio Shell von Microsoft und besteht aus einer Projektverwaltung, einem [[Editoren/IDEs#Texteditoren für Programmierer|Editor]], einem [[AVR-Studio#Debugger|Debugger]] und Werkzeugen zum beschreiben der Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Mit dem Atmel Studio kann in [[Assembler]] sowie in [[C]]/[[C-Plusplus|C++]] programmiert werden. Für die Unterstützung von C/C++ musste bis einschließlich Version 4 vor der Installation des AVR Studio der GNU C Compiler für AVRs [[WinAVR]] installiert werden. Ab AVR Studio 5 ist eine vollständige Toolchain zur Entwicklung von C-Projekten enthalten. Atmel bietet weiterhin eine Erweiterung zwecks Erstellung von Projekten mit eingeschränkter C++-Unterstützung an (siehe [[AVR_Studio#Tipps_.26_Tricks|Tipps &amp;amp; Tricks]]).&lt;br /&gt;
&lt;br /&gt;
== Debugger ==&lt;br /&gt;
Die Atmel-Studio-Umgebung sieht unabhängig von der speziellen Debug-Plattform größtenteils identisch aus. Es existieren folgende Debug-Möglichkeiten:&lt;br /&gt;
# [[AVR-Simulation#AVR_Studio|AVR Simulator]]&lt;br /&gt;
# AVR In-Circuit Emulator / [[JTAG]]-Adapter: AVR Dragon, AVR ONE!, JTAGICE3, JTAGICE mkII, SAM-ICE&lt;br /&gt;
&#039;&#039;&#039;Simulation&#039;&#039;&#039;&lt;br /&gt;
* die meisten AVR-Mikrocontroller werden unterstützt&lt;br /&gt;
* z.T langsamer als eine Emulation (insbesondere bei größeren Projekten)&lt;br /&gt;
* Wechselwirkung mit Peripherie nur über vordefinierte Stimuli möglich&lt;br /&gt;
* Anzeige aller Register zu jeder Zeit möglich&lt;br /&gt;
&#039;&#039;&#039;Emulation&#039;&#039;&#039;&lt;br /&gt;
* Unterstützung von Mikrocontrollern plattformabhängig eingeschränkt&lt;br /&gt;
* z.T. schneller als Simulation&lt;br /&gt;
* Debugging in tatsächlicher Hardwareumgebung&lt;br /&gt;
* Register nicht uneingeschränkt lesbar&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Studio Bugs]]&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Simulation]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/193587#1894280 Pfad zum Hexfile]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/237681#2411339 Anzeige der Größe benutzter Speicherbereiche in AVR Studio 5]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/236601#2413654 C++ Templates (beta) für AVR Studio 5] (Vorsicht: kein vollständiger Funktionsumfang, siehe [http://support.atmel.no/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=1001 FAQ])&lt;br /&gt;
&lt;br /&gt;
* [http://www.rn-wissen.de/index.php/AVR_Studio_5#Eigene_Templates_erzeugen Erstellung eigener Templates in AVR Studio 5] &lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
=== Offizielle Seite ===&lt;br /&gt;
* http://www.atmel.com/atmelstudio&lt;br /&gt;
* http://www.atmel.no/beta_ware/ (gelegentlich Aktualisierungen und Testversionen)&lt;br /&gt;
&lt;br /&gt;
=== Direktlinks Installer ===&lt;br /&gt;
&lt;br /&gt;
Anm.: Die MD5 Checksumme dient zum Überprüfen der Downloads auf Vollständigkeit. Die aktuelle Version ist &#039;&#039;&#039;fett&#039;&#039;&#039; markiert.&lt;br /&gt;
&lt;br /&gt;
Im Falle nicht eingepflegter Updates hier der Direktlink-Präfix (entsprechenden Dateinamen aus dem Formularlink kopieren und hinter dem letzten Schrägstrich einfügen):&lt;br /&gt;
&lt;br /&gt;
http://www.atmel.com/Images/&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as6installer-patch-6.0.1882.exe as6installer-patch-6.0.1882.exe] &#039;&#039;&#039;Atmel Studio 6.0 Patch 2 (25MB, updated 2012/08)&#039;&#039;&#039; Patch update für Atmel Studio 6.0 (build 1843) und (6.0.1863) kleinere Bugfixes und Upgrade auf 6.0.1882.&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as6installer-6.0.1843.exe as6installer-6.0.1843.exe] &#039;&#039;&#039;Atmel Studio 6 Release installer   (743MB, updated 2012/05)&#039;&#039;&#039;&lt;br /&gt;
Achtung: Atmel Studio 6.0 zeigt die RAM-Nutzung falsch an, egal welche Toolchain genutzt wird. Es addiert die EEPROM-Belegung dazu. [http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;p=963389#963389 Work-Around]&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as6installer-6.0.1843.noVSSnoDotNet.exe as6installer-6.0.1843.noVSSnoDotNet.exe] &#039;&#039;&#039;Atmel Studio 6 Release installer   (528MB, updated 2012/05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as6installer-6.0.1703-full.exe as6installer-6.0.1703-full.exe] Atmel Studio 6 BETA installer   (731MB, updated 2012/03)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as6installer-6.0.1703-small.exe as6installer-6.0.1703-small.exe] Atmel Studio 6 BETA installer   (516MB, updated 2012/03)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as5installer-stable-5.1.208-full.exe as5installer-stable-5.1.208-full.exe] AVR Studio 5.1 installer (includes VSS, .NET4.0, ASF 2.11.0 and Toolchain 3.3.1)   (616MB, updated 2012/02)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/as5installer-stable-5.1.208-small.exe as5installer-stable-5.1.208-small.exe] AVR Studio 5.1 installer (includes ASF 2.11.0 and Toolchain 3.3.1)  (396 MB, updated 2012/02)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as5installer-5.1.148.beta-full.exe as5installer-5.1.148.beta-full.exe] AVR Studio 5.1 Beta installer (includes VSS and .NET) (523 MB, updated 2011/12)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/as5installer-5.1.148.beta-small.exe as5installer-5.1.148.beta-small.exe] AVR Studio 5.1 Beta installer  (308 MB, updated 2011/12)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio4Setup.exe AvrStudio4Setup.exe] &#039;&#039;&#039;AVR Studio 4.19 (build 730) (124 MB, updated 2011/09/11)&#039;&#039;&#039;  MD5:609209DB9A1C6191945421299101DC15&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AVRStudio4.18Setup.exe AVRStudio4.18Setup.exe] AVR Studio 4.18 (build 684) (117 MB, updated July 2009)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AVRStudio4.18SP3.exe AVRStudio4.18SP3.exe] Service Pack 3 for AVR Studio 4.18 (build 716) (33 MB, updated July 2009)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio417Setup.exe AvrStudio417Setup.exe] AVR Studio 4.17 (build 666) (112 MB, updated 07/09)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/AvrStudio416Setup.exe AvrStudio416Setup.exe] AVR Studio 4.16 (build 628) (126 MB, updated 02/09) (last version for Win98)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/aStudio4b589.exe aStudio4b589.exe] AVR Studio 4.14 (build 589) (89 MB, updated 04/08)&lt;br /&gt;
&lt;br /&gt;
*[http://www.atmel.com/Images/aStudio4b528.exe aStudio4b528.exe]  AVR Studio 4.13 (build 528) (73 MB, updated 03/07)&lt;br /&gt;
&lt;br /&gt;
=== Direktlinks Zusatzsoftware ===&lt;br /&gt;
====Atmel QTOuch====&lt;br /&gt;
* [http://www.atmel.com/Images/AVRQTouchStudioSetup_VSS_dotNET.exe AVRQTouchStudioSetup_VSS_dotNET.exe] AVR QTouch Studio mit .NET (373 MB, updated 03/10)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/Atmel_QTouch_Libraries_5.0.exe Atmel_QTouch_Libraries_5.0.exe] Atmel QTouch Library 5.0 (34.3MB, updated April 2011)&lt;br /&gt;
&lt;br /&gt;
====AVR Toolchain====&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.4.1.1195-win32.win32.x86.exe avr-toolchain-installer-3.4.1.1195-win32.win32.x86.exe] &#039;&#039;&#039;AVR Toolchain 3.4.1 (95.9 MB, AVR-GCC: 4.6.2, AVR-LIBC: 1.8.0, updated 2012/08)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.4.0.1146-win32.win32.x86.exe avr-toolchain-installer-3.4.0.1146-win32.win32.x86.exe] AVR Toolchain 3.4.0 (91 MB, AVR-GCC: 4.6.2, AVR-LIBC: 1.8.0, updated 2012/06)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.3.1.1020-win32.win32.x86.exe avr-toolchain-installer-3.3.1.1020-win32.win32.x86.exe] AVR Toolchain 3.3.1 (94 MB, AVR-GCC: 4.5.1, AVR-LIBC: 1.7.1, updated 2012/04)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe] AVR Toolchain 3.3.0 (94 MB, AVR-GCC: 4.5.1, AVR-LIBC: 1.7.1, updated 2011/09/11)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.2.3.579-win32.win32.x86.exe avr-toolchain-installer-3.2.3.579-win32.win32.x86.exe] AVR Toolchain 3.2.3 (95 MB, AVR-GCC: 4.5.1, AVR-LIBC: 1.7.1, updated 2011/06/11)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/avr-toolchain-installer-3.0.0.240-win32.win32.x86.exe avr-toolchain-installer-3.0.0.240-win32.win32.x86.exe] AVR Toolchain 3.0.0 (87 MB, AVR-GCC: 4.4.3, AVR-LIBC: 1.7.0, updated 2010/09/10) &lt;br /&gt;
&lt;br /&gt;
====Atmel Software Framework====&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-3.3.0.zip asf-standalone-archive-3.3.0.zip] &#039;&#039;&#039;AVR Softwware Framework 3.3.0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-2.10.0.zip asf-standalone-archive-2.10.0.zip] &#039;&#039;&#039;AVR SoftwareFramework 2.10.0 - drivers and libraries (87 MB, revision 2.10.0, updated 2012/1/12)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/asf-standalone-archive-2.9.0.zip asf-standalone-archive-2.9.0.zip] AVR SoftwareFramework 2.9.0 - drivers and libraries (79 MB, revision 2.9.0, updated 2011/12/11)&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/as5.1-asf-vsix-stable-2.11.1.30-win32.win32.x86.zip as5.1-asf-vsix-stable-2.11.1.30-win32.win32.x86.zip] &#039;&#039;&#039;AVRStudio5-ASF-Update-2.11.1.30 (174 MB, revision 2.11.1, updated 2012/02/)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/Images/AVRStudio5-ASF-Update-2.8.1.76.exe AVRStudio5-ASF-Update-2.8.1.76.exe] AVRStudio5-ASF-Update-2.8.1.76 (222 MB, revision 2.8.1, updated 2011/10/11)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.youtube.com/user/AtmelCorporation#g/c/8F325BE889E62E50 YouTube-Playlist: AVR Studio 5 Tutorial]&lt;br /&gt;
&lt;br /&gt;
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=82994 How to install JTAGICE mkII (and AVR Dragon and AVRISP mkII) on Windows 7 x64] auf avrfreaks.net (ggf. kostenlos registrieren). Siehe auch Hinweis von Denny [http://www.mikrocontroller.net/topic/146857#1476962] im Forum.&lt;br /&gt;
&lt;br /&gt;
*[http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR Eclipse Plugin]&lt;br /&gt;
&lt;br /&gt;
*[http://avrstudio5.wordpress.com/ AVR Studio 5 Blog] - Useful hints and tips for installation troubleshooting with the new AVR Studio 5&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:IGBT&amp;diff=68258</id>
		<title>Diskussion:IGBT</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:IGBT&amp;diff=68258"/>
		<updated>2012-09-03T21:29:16Z</updated>

		<summary type="html">&lt;p&gt;Xaos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;quot;Keine parasitäre Freilaufdiode vorhanden (externe Freilaufdiode zwingend erforderlich!)&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Freilaufdiode ist keine Bauteileeigenschaft, sondern ein Teil einer Schaltung beim Schalten von Induktivitäten. Genau so gut fehlt beim BC547 die Freilaufdiode.&lt;br /&gt;
Ich würde das deshalb entfernen.&lt;br /&gt;
&lt;br /&gt;
Ein MOSFet hat eine parasitäre Diode, wodurch man beim Schalten von Induktivitäten bei niedrigen Frequenzen auf eine zusätzliche Diode verzichten kann. Bei höhren Frequenzen ist auch dort eine schnelle (Schottky)diode als Freilaufdiode notwendig.&lt;br /&gt;
&lt;br /&gt;
Im Prinzip ja, aber da die IGBTs jetzt teilweise auch schon für 200V++ sinnvoll einsetzbar sind steigen viele Nutzer vom FET her kommend auf den IGBT um. Aus diesem Grund würde ich diesen Gruß noch einige Jahre mit &amp;quot;drin&amp;quot; lassen. Inzwischen gibt es die ersten, bezahlbaren IGBTs im z.B. TO247 die schon eine &amp;quot;gute&amp;quot; Diode als separates Bauteil integriert haben. Bis sich das aber durchsetzt und in den Köpfen ankomme sollte de o.g. Passus drinbleiben.&lt;br /&gt;
&lt;br /&gt;
Es ist keine Bauteileigenschaft, keine Frage. Ich hatte es nur reingeschrieben da viele Bastler es wahrscheinlich sonst ohne machen (falls sie wie erwähnt wie vorher MOSFETs benutzt haben mit Body-Diode) und ihnen dann das ganze um die Ohren fliegt - daher finde ich es in diesem Kontext sinnvoll es zu erwähnen.&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IGBT&amp;diff=68248</id>
		<title>IGBT</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IGBT&amp;diff=68248"/>
		<updated>2012-09-02T21:40:58Z</updated>

		<summary type="html">&lt;p&gt;Xaos: Änderung 68226 von 87.176.241.254 (Diskussion) wurde rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nsulated &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;T&#039;&#039;&#039;ransistor&lt;br /&gt;
&lt;br /&gt;
Ein IGBT kann im ersten Ansatz wie eine Kombination aus [[FET | Feldeffekt]]-Transistor  und [[Transistor|Bipolarem Transistor]] betrachtet werden, bei der ein N-Kanal FET einen PNP Bipolartransistor ansteuert. Daher ist der IGBT bezüglich der Ansteuereigenschaften wie der FET als spannungsgesteuertes Bauelement (Achtung Treiberleistung!) zu betrachten, und hat ein &amp;quot;Gate&amp;quot;.  Die weiteren Eigenschaften ähneln aber einem Bipolartransistor (Sättigungsverhalten), daher werden diese Anschlüsse mit &amp;quot;Kollektor&amp;quot; und &amp;quot;Emitter&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des IGBT ===&lt;br /&gt;
&lt;br /&gt;
* Leistungslose Ansteuerung wie beim FET im statischen Betrieb&lt;br /&gt;
* Verfügbarkeit für deutlich höhere Betriebsspannungen gegenüber FET Aufgrund des internen Aufbaus.&lt;br /&gt;
* Niedrigere Verluste als die eines FETs ab einer Spannungsfestigkeit von derzeit (2009) ca. 250V .&lt;br /&gt;
* Höhere Impulsbelastbarkeit (Faktor 4..5 für sehr kurze Pulse &amp;lt;5..10µs, bei neuster Chiptechnologie &amp;lt;3..5µs).&lt;br /&gt;
* Keine parasitäre Freilaufdiode vorhanden. Es kann eine Diode verwendet werden, die auf den Anwendungsfall optimiert ist. Diese wird teilweise schon im selben Gehäuse platziert.&lt;br /&gt;
* Geringe Erhöhung der Verluste bei steigender Temperatur. (Beim FET steigt der &amp;lt;math&amp;gt;R_{DS(on)}&amp;lt;/math&amp;gt; mit der Temperatur).&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des IGBT ===&lt;br /&gt;
 &lt;br /&gt;
* Zum schnellen Schalten wird wie beim MOSFET ein starker [[MOSFET-Übersicht#MOSFET-Treiber | Gatetreiber]] benötigt.&lt;br /&gt;
* Kann unter bestimmten Umständen (zu großes dU/dt) wie ein [[TRIAC|Tyristor]] zünden (Latch-Up Effekt). Der Strom ist hier nicht mehr kontrollierbar. (wird bei modernen Typen durch strukturelle Maßnhamen effektiv verhindert)&lt;br /&gt;
* Schaltverluste beim Abschalten sind vergleichsweise hoch, bedingt durch den sogenannten &amp;quot;Tail current&amp;quot;. Dieser wird verursacht durch Ladungsträger, die nach dem eigentlichen Ausschalten noch vollständig abgeführt werden, was zu einem langsam abklingenden Strom führt.&lt;br /&gt;
* Nur für relativ geringe Schaltfrequenzen einsetzbar (&amp;quot;hart schaltend&amp;quot;, je nach Typ bis ca. 50kHz, Spezialtypen auch bis ca. 300kHz)&lt;br /&gt;
* Nicht rückwärts leitfähig&lt;br /&gt;
* Keine parasitäre Freilaufdiode vorhanden (externe Freilaufdiode zwingend erforderlich!)&lt;br /&gt;
* Kein Durchbruch zweiter Art wie beim FET. Vorgänge dieser Art führen beim IGBT im Allgemeinen zur sofortigen Zerstörung.&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;
! Parameter || Symbol || Value (Beispiel) || Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| Collector Emitter (Breakdown) Voltage || &amp;lt;math&amp;gt;BV_\mathrm{CES}&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;V_\mathrm{CE}&amp;lt;/math&amp;gt; || 600V || Maximale Sperrspannung zwischen Kollektor und Emitter&lt;br /&gt;
|-&lt;br /&gt;
| DC collector current  || &amp;lt;math&amp;gt;I_\mathrm{C}&amp;lt;/math&amp;gt;   || 60A @90°C  || Maximaler, dauerhaft zulässiger Kollektorstrom bei 90°C&lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Collector Current || &amp;lt;math&amp;gt;C_\mathrm{pulse}&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;I_\mathrm{CM}&amp;lt;/math&amp;gt; || 150A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Short Circuit Withstand Time || &amp;lt;math&amp;gt;t_\mathrm{sc}&amp;lt;/math&amp;gt; ||  10µs || Maximale Zeit, nach der ein Kurzschluß abgeschaltet sein muß&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  &amp;lt;math&amp;gt;R_\mathrm{th,JC}&amp;lt;/math&amp;gt; ||  0,33K/W || [[Kühlkörper|Thermischer Widerstand]] vom Siliziumchip bis zur Rückseite des Transistorgehäuses&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Emitter Thresold Voltage ||  &amp;lt;math&amp;gt;V_\mathrm{GE(th)}&amp;lt;/math&amp;gt; || 4,8V || Gatespannung, ab welcher der Transistor minimal leitend wird&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  &amp;lt;math&amp;gt;t_\mathrm{d(on)}&amp;lt;/math&amp;gt; || 50ns ||  Verzögerung zwischen einschalten am Gate zur Reaktion am Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  &amp;lt;math&amp;gt;t_\mathrm{r}&amp;lt;/math&amp;gt; || 45ns ||  Anstiegszeit des Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || &amp;lt;math&amp;gt;t_\mathrm{d(off)}&amp;lt;/math&amp;gt; || 600ns ||  Verzögerung zwischen Abschalten am Gate zur Reaktion am Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  &amp;lt;math&amp;gt;t_\mathrm{f}&amp;lt;/math&amp;gt; || 130ns || Abfallzeit des Kollektorstromes&lt;br /&gt;
|}&lt;br /&gt;
Für die o.g. Zeiten gibt es exakte Definitionen, oft auch in den Datenblättern &lt;br /&gt;
selbst grafisch dargestellt, bitte dort nachvollziehen!&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Angaben im Datenblatt bzw. dieser Tabelle sind SEHR stark von den Ansteuerbedingungen abhängig und nur unter den im Datenblatt genannten Randbedingungen gültig. Die Werte gelten meist für eine Temperatur von 25°C.&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 plus Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem IGBT wird es immer eine parasitäre Induktivität geben. Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Überspannungsspitze produziert. Dieser Peak addiert sich auf die aktuelle Versorgungsspannung. Die dabei entstehende Spannungsspitze darf die maximale Spannungsfestigkeit zu &#039;&#039;&#039;keinem&#039;&#039;&#039; Zeitpunkt überschreiten.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit im Kurzschlußfall:  dI/dt = 100A/µs,&lt;br /&gt;
* Induktivität:   L = 1µH&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der parasitären Induktivität zwischen IGBT und Kondensator auf grund 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;
Welchen Strom muß der IGBT wie lange leiten? In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C und bei meist 100°C angegeben. Warm wird es dem IGBT im Betrieb von alleine, daher unbedingt den Wert bei z.&amp;amp;nbsp;B. 100°C verwenden. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend. &lt;br /&gt;
* Liegt dieser Wert mit ca. 30% Abstand darunter ist das OK. &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 100°C muß entweder ein anderer Typ eingesetzt oder mehrere IGBTs parallel geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Achtung bei sehr kurzen Strompulsen! Bedingt durch den Chipaufbau können entsprechende Pulse zum Zünden der parasitären Thyristorstruktur führen, was die sofortigen Zerstörung des IGBTs bedeutet.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für die getaktete Anwendung dargestellt. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der eingeschalteten Zeit 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 IGBTs nennen im Datenblatt eine Temperatur von 150°C als ihre maximale Chiptemperatur, manchmal auch schon 175°C. &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_N || 400V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I_N || 5A&lt;br /&gt;
|-&lt;br /&gt;
| Spannungsabfall bei I_N, Chiptemperatur = 150°C und einer Gatespannung von 15V || V_CE_sat || 2,0V&lt;br /&gt;
|-&lt;br /&gt;
| Taktfrequenz || f_schalt || 5kHz, (T=200µs)&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t_on || 150µs,&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t_r || 1,5µs&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t_f || 1µs &lt;br /&gt;
|-&lt;br /&gt;
| Überhöhungsfaktor Einschalten || F_üein || 1,2&lt;br /&gt;
|-&lt;br /&gt;
| Überhöhungsfaktor Ausschalten || F_üaus || 1,4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Hintergrund für diese Überhöhungsfaktoren sind das übliche Überschwingen beim Schalten, sowie der Einfluß des Tailstromes. Diese Werte sind Erfahrungswerte.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== On-Verluste ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\mathrm{on} = V_\mathrm{CE,sat} \cdot I_\mathrm{N} \cdot t_\mathrm{on}/T = 2,0\,\mathrm{V} \cdot 5\,\mathrm{A} \cdot 150\,\mathrm{\mu s} / 200\,\mathrm{\mu s} = 7,5\,\mathrm{W}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste (vereinfachter Ansatz) ====&lt;br /&gt;
&lt;br /&gt;
  Einschalten:&lt;br /&gt;
  P_sw_on = 0,5 * U_N * I_N * F_üein * t_r/T &lt;br /&gt;
          = 0,5 * 400V * 5A *1,2 * 1,5µs / 200µs = 9W &lt;br /&gt;
  (Oder alternativ und genauer, wenn bekannt, P_sw_r=f_schalt * E_on d.h. Schaltrequenz mal Einschaltverlustenergie.&amp;lt;br&amp;gt;  Aber Achtung... die  Randbedingungen unter denen die genannte Energie ermittelt wurde müssen genau so zutreffen.)&lt;br /&gt;
&lt;br /&gt;
  Ausschalten:&lt;br /&gt;
  P_sw_off = 0,5 * U_N * I_N * F_üaus * t_f/T  &lt;br /&gt;
           = 0,5 * 400V * 5A *1,4 * 1µs / 200µs = 7W&lt;br /&gt;
  (Oder alternativ und genauer, wenn bekannt, P_sw_f=f_schalt * E_off d.h. Schaltrequenz mal Einschaltverlustenergie.&amp;lt;br&amp;gt;  Aber Achtung... die  Randbedingungen unter denen die genannte Energie ermittelt wurde müssen genau so zutreffen.)&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 23,5W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt, und die Chiptemperatur berechnet werden. Z.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 IGBTs 0,7K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen IGBT und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 2,9K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 23,5W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 23,5W * 2,9K/W +60°C = 128°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 einigen&lt;br /&gt;
Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf einen Bereich von ca. 125°C zu beschränken. Darüberhinaus sollte der Entwickler wissen was er tut.&lt;br /&gt;
&lt;br /&gt;
=== Treiberleistung ===&lt;br /&gt;
&lt;br /&gt;
Auch wenn der IGBT wie der MOSFET ein spannungsgesteuertes Bauelement ist, muß trotzdem bei jedem Einschalten und bei jedem Ausschalten&lt;br /&gt;
die Gatekapazität von z.&amp;amp;nbsp;B. -8V auf +15V (dUg beträgt in diesem Beispiel 23V) und zurück umgeladen werden. Dafür benötigt man einen starken und schnellen [[MOSFET-Übersicht#MOSFET-Treiber | Treiber]]. Da die Gatekapazität nicht im Datenblatt enthalten ist kann man sich mit der Eingangskappazität (Cies) behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Cies angegebene Wert. Daher berechnet sich die Treiberleistung wie folgt:&lt;br /&gt;
&lt;br /&gt;
 P_treiber = 2 x 0,5 x 5 x Cies x dUg² x f_schalt&lt;br /&gt;
           = 5 x Cies x dUg² x f_schalt&lt;br /&gt;
&lt;br /&gt;
Bei dUg = 23V, Cies=4nF und f_schalt=5kHz  beträgt P_treiber = 53mW. Aber Achtung, jeder Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
Bei größeren Strömen mit einer höheren Frequenz - z.&amp;amp;nbsp;B. Induktionsheizung - wird die Ansteuerleistung schon sehr interessant: z.&amp;amp;nbsp;B. dUg = 23V, Cies=20nF und f_schalt=250kHz, hier beträgt P_treiber = 13,3W (zuzüglich Eigenverbrauch).&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Bei IGBTs mit im Gehäuse integrierter Diode muß die Verlustleistung an der Diode separat berechnet und in obige Verlustleistungs- und Temperaturberechnung mit einbezogen werden. (P_D = I_D_rms * V_D)&lt;br /&gt;
* Bei Spannungen &amp;gt; 60V unbedingt die einschlägigen Normen und Vorschriften beachten. (Potentialtrennung für Ansteuerung und Hilfsspannungsversorgung, [[Leiterbahnabstände]], Berührschutz,...)&lt;br /&gt;
* Prüfen, ob der IGBT wirklich abgeschaltet ist und bleibt (Gatespannung deutlich unter Schwellenspannung bzw. KEIN Stromfluß im ausgeschalteten Zustand)! Ansonsten muß zum sicheren Sperren des IGBTs eine negative Gatespannung (-5..-8V) angelegt werden. Hintergrund: In einer geschalteten Anwendung treten große Spannungssteilheiten z.&amp;amp;nbsp;B. am Kollektor auf. Aufgrund der internen parasitären Kapazitäten zwischen Gate, Emitter und Kollektor findet eine Überkopplung des Schaltpulses - z.&amp;amp;nbsp;B. beim Schalter gegen GND - vom Kollektoranschluß auf den Gateanschluß (kapazitiver Spannungsteiler zwischen K_G und G_E) statt. Dadurch wird das Gatepotential um einige Volt angehoben. Dies führt unter Umständen zu einem ungewollten Einschalten bzw. in einer Halbbrückenapplikation zu einem Brückenkurzschluß.&lt;br /&gt;
* Um einen Leistungstransistor richtig ein- bzw. auszuschalten wird der Einsatz eines [[Treiber|Treiberbausteines]] unbedingt empfohlen. Um den IGBT vor Schaden durch Kurzschluß zu schützen, sollte ein Treiber mit einer sogenannten Entsättigungsüberwachung (schnelle Überwachung von U_CE) verwendet werden. Des Weiteren sollte der Strom im Betrieb ständig gemessen werden um im Fehlerfalle eine Zerstörung zu verhindern.&lt;br /&gt;
* Zum Einschalten eines IGBTs ist eine Spannung von ca. 12..15V zu empfehlen. Eine größere Spannung führt zu höheren Umladeverlusten, bei einer geringeren Spannung verschenkt man meist Leistungsfähigkeit. &lt;br /&gt;
* Die Verbindung zwischen Treiber und Leistungsschalter ist unbedingt so niederinduktiv und kurz wie möglich zu halten (verdrillte Kabel bzw. dicht nebeneinander bzw. übereinander geführte Leiterbahnen). Bei der Auswahl des Leitungsdurchmessers bzw. der Leiterbahnbreite beachten, daß die Ansteuerströme durchaus im Bereich von einigen Ampere liegen können.&lt;br /&gt;
* Die Schaltgeschwindigkeit und damit die Verluste und EMV-Abstrahlung wird stark durch die Gatebeschaltung beeinflußt. Im Datenblatt sind bei der Beschreibung der Ein- bzw. Ausschaltzeiten (meist bei &amp;quot;Test Conditions&amp;quot;) Widerstandswerte  im einstelligen Ohmbereich angegeben, für die diese dort genannten Schaltzeiten gültig sind. Es wird  im Allgemeinen empfohlen die dort genannten Widerstandswerte NICHT zu UNTERschreiten.  Die Wahl des Gatewiderstandes ist eine Wissenschalft für sich und immer ein zweischneidiges Schwert. Einerseits möchte man geringste Schalt- Verlustleistungen, d.h. eine kleine Schaltzeit = geringen Gatewiderstand, (1..15Ω). Achtung auf die Höhe der Ströme! Andererseits jedoch ein gutmütiges EMV-Verhalten und weniger hohe Ströme in der Gateleitung, d.h. größere Schaltzeit = höherer Gatewiderstand (evtl. bis zu 100..250Ω). Der Widerstandswert ist sehr stark von den Anforderungen abhängig. Meist ist ein asymmetrische Ansteuerung das Mittel der Wahl, d.h. R_g1 PARALLEL zu einer Serienschaltung aus D und R_g2. Ausschalten: Wahl eines größerer Widerstandswertes R_g1 direkt zwischen Gate und Treiberausgang. Einschalten: Wahl eines geringerer Wertes R_g2 + Seriendiode. R_g2 sorgt für ein zügiges Einschalten bei geringen Verlusten, R_g1 reduziert die durch parasitäre Induktivitäten hervorgerufene Abschaltüberspannung auf ein erträgliches Maß.&lt;br /&gt;
* Speziell in der Entwicklungsphase sollten die Ströme über &#039;&#039;&#039;Shunt&#039;&#039;&#039; oder einen schnellen Stromsensor überwacht werden. Eine Schnellabschaltung bei Überstrom ist sehr empfehlenswert.&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;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[FET]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=IGBT&amp;diff=68225</id>
		<title>IGBT</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=IGBT&amp;diff=68225"/>
		<updated>2012-09-02T09:05:17Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Nachteile des IGBT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nsulated &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;B&#039;&#039;&#039;ipolar &#039;&#039;&#039;T&#039;&#039;&#039;ransistor&lt;br /&gt;
&lt;br /&gt;
Ein IGBT kann im ersten Ansatz wie eine Kombination aus [[FET | Feldeffekt]]-Transistor  und [[Transistor|Bipolarem Transistor]] betrachtet werden, bei der ein N-Kanal FET einen PNP Bipolartransistor ansteuert. Daher ist der IGBT bezüglich der Ansteuereigenschaften wie der FET als spannungsgesteuertes Bauelement (Achtung Treiberleistung!) zu betrachten, und hat ein &amp;quot;Gate&amp;quot;.  Die weiteren Eigenschaften ähneln aber einem Bipolartransistor (Sättigungsverhalten), daher werden diese Anschlüsse mit &amp;quot;Kollektor&amp;quot; und &amp;quot;Emitter&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Vorteile des IGBT ===&lt;br /&gt;
&lt;br /&gt;
* Leistungslose Ansteuerung wie beim FET im statischen Betrieb&lt;br /&gt;
* Verfügbarkeit für deutlich höhere Betriebsspannungen gegenüber FET Aufgrund des internen Aufbaus.&lt;br /&gt;
* Niedrigere Verluste als die eines FETs ab einer Spannungsfestigkeit von derzeit (2009) ca. 250V .&lt;br /&gt;
* Höhere Impulsbelastbarkeit (Faktor 4..5 für sehr kurze Pulse &amp;lt;5..10µs, bei neuster Chiptechnologie &amp;lt;3..5µs).&lt;br /&gt;
* Keine parasitäre Freilaufdiode vorhanden. Es kann eine Diode verwendet werden, die auf den Anwendungsfall optimiert ist. Diese wird teilweise schon im selben Gehäuse platziert.&lt;br /&gt;
* Geringe Erhöhung der Verluste bei steigender Temperatur. (Beim FET steigt der &amp;lt;math&amp;gt;R_{DS(on)}&amp;lt;/math&amp;gt; mit der Temperatur).&lt;br /&gt;
&lt;br /&gt;
=== Nachteile des IGBT ===&lt;br /&gt;
 &lt;br /&gt;
* Zum schnellen Schalten wird wie beim MOSFET ein starker [[MOSFET-Übersicht#MOSFET-Treiber | Gatetreiber]] benötigt.&lt;br /&gt;
* Kann unter bestimmten Umständen (zu großes dU/dt) wie ein [[TRIAC|Tyristor]] zünden (Latch-Up Effekt). Der Strom ist hier nicht mehr kontrollierbar. (wird bei modernen Typen durch strukturelle Maßnhamen effektiv verhindert)&lt;br /&gt;
* Schaltverluste beim Abschalten sind vergleichsweise hoch, bedingt durch den sogenannten &amp;quot;Tail current&amp;quot;. Dieser wird verursacht durch Ladungsträger, die nach dem eigentlichen Ausschalten noch vollständig abgeführt werden, was zu einem langsam abklingenden Strom führt.&lt;br /&gt;
* Nur für relativ geringe Schaltfrequenzen einsetzbar (&amp;quot;hart schaltend&amp;quot;, je nach Typ bis ca. 50kHz, Spezialtypen auch bis ca. 300kHz)&lt;br /&gt;
* Nicht rückwärts leitfähig&lt;br /&gt;
* Keine parasitäre Freilaufdiode vorhanden (externe Freilaufdiode zwingend erforderlich!)&lt;br /&gt;
* Kein Durchbruch zweiter Art wie beim FET. Vorgänge dieser Art führen beim IGBT im Allgemeinen zur sofortigen Zerstörung.&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;
! Parameter || Symbol || Value (Beispiel) || Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| Collector Emitter (Breakdown) Voltage || &amp;lt;math&amp;gt;BV_\mathrm{CES}&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;V_\mathrm{CE}&amp;lt;/math&amp;gt; || 600V || Maximale Sperrspannung zwischen Kollektor und Emitter&lt;br /&gt;
|-&lt;br /&gt;
| DC collector current  || &amp;lt;math&amp;gt;I_\mathrm{C}&amp;lt;/math&amp;gt;   || 60A @90°C  || Maximaler, dauerhaft zulässiger Kollektorstrom bei 90°C&lt;br /&gt;
|-&lt;br /&gt;
| Pulsed Collector Current || &amp;lt;math&amp;gt;C_\mathrm{pulse}&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;I_\mathrm{CM}&amp;lt;/math&amp;gt; || 150A || Maximaler Pulsstrom (Achtung die zulässige Zeitdauer des Pulses kann nur über die maximale Junctiontemperatur ermittelt werden)&lt;br /&gt;
|-&lt;br /&gt;
| Short Circuit Withstand Time || &amp;lt;math&amp;gt;t_\mathrm{sc}&amp;lt;/math&amp;gt; ||  10µs || Maximale Zeit, nach der ein Kurzschluß abgeschaltet sein muß&lt;br /&gt;
|-&lt;br /&gt;
| Thermal Resistance (junction-case) ||  &amp;lt;math&amp;gt;R_\mathrm{th,JC}&amp;lt;/math&amp;gt; ||  0,33K/W || [[Kühlkörper|Thermischer Widerstand]] vom Siliziumchip bis zur Rückseite des Transistorgehäuses&lt;br /&gt;
|-&lt;br /&gt;
| Gate-Emitter Thresold Voltage ||  &amp;lt;math&amp;gt;V_\mathrm{GE(th)}&amp;lt;/math&amp;gt; || 4,8V || Gatespannung, ab welcher der Transistor minimal leitend wird&lt;br /&gt;
|-&lt;br /&gt;
| Turn-on Delay ||  &amp;lt;math&amp;gt;t_\mathrm{d(on)}&amp;lt;/math&amp;gt; || 50ns ||  Verzögerung zwischen einschalten am Gate zur Reaktion am Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Rise Time ||  &amp;lt;math&amp;gt;t_\mathrm{r}&amp;lt;/math&amp;gt; || 45ns ||  Anstiegszeit des Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Turn-off Delay || &amp;lt;math&amp;gt;t_\mathrm{d(off)}&amp;lt;/math&amp;gt; || 600ns ||  Verzögerung zwischen Abschalten am Gate zur Reaktion am Kollektorstromes&lt;br /&gt;
|-&lt;br /&gt;
| Fall Time ||  &amp;lt;math&amp;gt;t_\mathrm{f}&amp;lt;/math&amp;gt; || 130ns || Abfallzeit des Kollektorstromes&lt;br /&gt;
|}&lt;br /&gt;
Für die o.g. Zeiten gibt es exakte Definitionen, oft auch in den Datenblättern &lt;br /&gt;
selbst grafisch dargestellt, bitte dort nachvollziehen!&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Angaben im Datenblatt bzw. dieser Tabelle sind SEHR stark von den Ansteuerbedingungen abhängig und nur unter den im Datenblatt genannten Randbedingungen gültig. Die Werte gelten meist für eine Temperatur von 25°C.&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 plus Abschaltüberspannung soll kleiner als ca. 80% der Spannungsfestigkeit des Bauteiles sein. Achtung: Zwischen dem je nach Anwendungsfall erforderlichen Pufferkondensator und dem IGBT wird es immer eine parasitäre Induktivität geben. Abhängig von Schaltgeschwindigkeit und Induktivität wird im Schaltmoment eine mehr oder weniger große Überspannungsspitze produziert. Dieser Peak addiert sich auf die aktuelle Versorgungsspannung. Die dabei entstehende Spannungsspitze darf die maximale Spannungsfestigkeit zu &#039;&#039;&#039;keinem&#039;&#039;&#039; Zeitpunkt überschreiten.&lt;br /&gt;
&lt;br /&gt;
Überschlagsrechnung als Beispiel:&lt;br /&gt;
* Schaltgeschwindigkeit im Kurzschlußfall:  dI/dt = 100A/µs,&lt;br /&gt;
* Induktivität:   L = 1µH&lt;br /&gt;
* dU=-L*dI/dt = -1µH * 100A / 1µs = 100V&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, daß an der parasitären Induktivität zwischen IGBT und Kondensator auf grund 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;
Welchen Strom muß der IGBT wie lange leiten? In jedem Datenblatt ist eine Stromtragfähigkeit bei 25°C und bei meist 100°C angegeben. Warm wird es dem IGBT im Betrieb von alleine, daher unbedingt den Wert bei z.&amp;amp;nbsp;B. 100°C verwenden. Dieser Wert ist als ERSTE Entscheidungsgrundlage ausreichend. &lt;br /&gt;
* Liegt dieser Wert mit ca. 30% Abstand darunter ist das OK. &lt;br /&gt;
* Ist der benötigte Strom im Bereich oder größer als der zulässige bei 100°C muß entweder ein anderer Typ eingesetzt oder mehrere IGBTs parallel geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Achtung bei sehr kurzen Strompulsen! Bedingt durch den Chipaufbau können entsprechende Pulse zum Zünden der parasitären Thyristorstruktur führen, was die sofortigen Zerstörung des IGBTs bedeutet.&lt;br /&gt;
&lt;br /&gt;
=== Verlustleistung ===&lt;br /&gt;
&lt;br /&gt;
Hier wird eine Näherung für die getaktete Anwendung dargestellt. In einem Transistor treten sowohl beim Ein- und Ausschalten, als auch während der eingeschalteten Zeit 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 IGBTs nennen im Datenblatt eine Temperatur von 150°C als ihre maximale Chiptemperatur, manchmal auch schon 175°C. &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_N || 400V&lt;br /&gt;
|-&lt;br /&gt;
| Nennstrom || I_N || 5A&lt;br /&gt;
|-&lt;br /&gt;
| Spannungsabfall bei I_N, Chiptemperatur = 150°C und einer Gatespannung von 15V || V_CE_sat || 2,0V&lt;br /&gt;
|-&lt;br /&gt;
| Taktfrequenz || f_schalt || 5kHz, (T=200µs)&lt;br /&gt;
|-&lt;br /&gt;
| on-Zeit || t_on || 150µs,&lt;br /&gt;
|-&lt;br /&gt;
| Einschaltzeit (risetime) || t_r || 1,5µs&lt;br /&gt;
|-&lt;br /&gt;
| Ausschaltzeit (falltime) || t_f || 1µs &lt;br /&gt;
|-&lt;br /&gt;
| Überhöhungsfaktor Einschalten || F_üein || 1,2&lt;br /&gt;
|-&lt;br /&gt;
| Überhöhungsfaktor Ausschalten || F_üaus || 1,4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Hintergrund für diese Überhöhungsfaktoren sind das übliche Überschwingen beim Schalten, sowie der Einfluß des Tailstromes. Diese Werte sind Erfahrungswerte.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== On-Verluste ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_\mathrm{on} = V_\mathrm{CE,sat} \cdot I_\mathrm{N} \cdot t_\mathrm{on}/T = 2,0\,\mathrm{V} \cdot 5\,\mathrm{A} \cdot 150\,\mathrm{\mu s} / 200\,\mathrm{\mu s} = 7,5\,\mathrm{W}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schaltverluste (vereinfachter Ansatz) ====&lt;br /&gt;
&lt;br /&gt;
  Einschalten:&lt;br /&gt;
  P_sw_on = 0,5 * U_N * I_N * F_üein * t_r/T &lt;br /&gt;
          = 0,5 * 400V * 5A *1,2 * 1,5µs / 200µs = 9W &lt;br /&gt;
  (Oder alternativ und genauer, wenn bekannt, P_sw_r=f_schalt * E_on d.h. Schaltrequenz mal Einschaltverlustenergie.&amp;lt;br&amp;gt;  Aber Achtung... die  Randbedingungen unter denen die genannte Energie ermittelt wurde müssen genau so zutreffen.)&lt;br /&gt;
&lt;br /&gt;
  Ausschalten:&lt;br /&gt;
  P_sw_off = 0,5 * U_N * I_N * F_üaus * t_f/T  &lt;br /&gt;
           = 0,5 * 400V * 5A *1,4 * 1µs / 200µs = 7W&lt;br /&gt;
  (Oder alternativ und genauer, wenn bekannt, P_sw_f=f_schalt * E_off d.h. Schaltrequenz mal Einschaltverlustenergie.&amp;lt;br&amp;gt;  Aber Achtung... die  Randbedingungen unter denen die genannte Energie ermittelt wurde müssen genau so zutreffen.)&lt;br /&gt;
&lt;br /&gt;
Die Gesamtverlustleistung beträgt also in etwa 23,5W.&lt;br /&gt;
&lt;br /&gt;
Damit muß ein entsprechender [[Kühlkörper]] ausgelegt, und die Chiptemperatur berechnet werden. Z.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 IGBTs 0,7K/W&lt;br /&gt;
* R_th der Wärmeleitfolie zwischen IGBT und Kühlkörper ca. 2,0K/W&lt;br /&gt;
* R_th gesamt: 2,9K/W &amp;lt;br&amp;gt;&lt;br /&gt;
* Bei einer Verlustleistung von 23,5W und einer Umgebungstemperatur von 60°C hat der Chip eine Temperatur von ca. 23,5W * 2,9K/W +60°C = 128°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 einigen&lt;br /&gt;
Sicherheitsabstand zu den zulässigen Maximalwerten einzuhalten. Daher ist es empfehlenswert, die Chiptemperatur auf einen Bereich von ca. 125°C zu beschränken. Darüberhinaus sollte der Entwickler wissen was er tut.&lt;br /&gt;
&lt;br /&gt;
=== Treiberleistung ===&lt;br /&gt;
&lt;br /&gt;
Auch wenn der IGBT wie der MOSFET ein spannungsgesteuertes Bauelement ist, muß trotzdem bei jedem Einschalten und bei jedem Ausschalten&lt;br /&gt;
die Gatekapazität von z.&amp;amp;nbsp;B. -8V auf +15V (dUg beträgt in diesem Beispiel 23V) und zurück umgeladen werden. Dafür benötigt man einen starken und schnellen [[MOSFET-Übersicht#MOSFET-Treiber | Treiber]]. Da die Gatekapazität nicht im Datenblatt enthalten ist kann man sich mit der Eingangskappazität (Cies) behelfen. Im Arbeitspunkt ist die Gatekapazität ungefähr 5x größer als der im Datenblatt für Cies angegebene Wert. Daher berechnet sich die Treiberleistung wie folgt:&lt;br /&gt;
&lt;br /&gt;
 P_treiber = 2 x 0,5 x 5 x Cies x dUg² x f_schalt&lt;br /&gt;
           = 5 x Cies x dUg² x f_schalt&lt;br /&gt;
&lt;br /&gt;
Bei dUg = 23V, Cies=4nF und f_schalt=5kHz  beträgt P_treiber = 53mW. Aber Achtung, jeder Treiber hat auch einen Eigenverbrauch der leicht zwischen 0,5 und 1 W liegen kann.&lt;br /&gt;
&lt;br /&gt;
Bei größeren Strömen mit einer höheren Frequenz - z.&amp;amp;nbsp;B. Induktionsheizung - wird die Ansteuerleistung schon sehr interessant: z.&amp;amp;nbsp;B. dUg = 23V, Cies=20nF und f_schalt=250kHz, hier beträgt P_treiber = 13,3W (zuzüglich Eigenverbrauch).&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Bei IGBTs mit im Gehäuse integrierter Diode muß die Verlustleistung an der Diode separat berechnet und in obige Verlustleistungs- und Temperaturberechnung mit einbezogen werden. (P_D = I_D_rms * V_D)&lt;br /&gt;
* Bei Spannungen &amp;gt; 60V unbedingt die einschlägigen Normen und Vorschriften beachten. (Potentialtrennung für Ansteuerung und Hilfsspannungsversorgung, [[Leiterbahnabstände]], Berührschutz,...)&lt;br /&gt;
* Prüfen, ob der IGBT wirklich abgeschaltet ist und bleibt (Gatespannung deutlich unter Schwellenspannung bzw. KEIN Stromfluß im ausgeschalteten Zustand)! Ansonsten muß zum sicheren Sperren des IGBTs eine negative Gatespannung (-5..-8V) angelegt werden. Hintergrund: In einer geschalteten Anwendung treten große Spannungssteilheiten z.&amp;amp;nbsp;B. am Kollektor auf. Aufgrund der internen parasitären Kapazitäten zwischen Gate, Emitter und Kollektor findet eine Überkopplung des Schaltpulses - z.&amp;amp;nbsp;B. beim Schalter gegen GND - vom Kollektoranschluß auf den Gateanschluß (kapazitiver Spannungsteiler zwischen K_G und G_E) statt. Dadurch wird das Gatepotential um einige Volt angehoben. Dies führt unter Umständen zu einem ungewollten Einschalten bzw. in einer Halbbrückenapplikation zu einem Brückenkurzschluß.&lt;br /&gt;
* Um einen Leistungstransistor richtig ein- bzw. auszuschalten wird der Einsatz eines [[Treiber|Treiberbausteines]] unbedingt empfohlen. Um den IGBT vor Schaden durch Kurzschluß zu schützen, sollte ein Treiber mit einer sogenannten Entsättigungsüberwachung (schnelle Überwachung von U_CE) verwendet werden. Des Weiteren sollte der Strom im Betrieb ständig gemessen werden um im Fehlerfalle eine Zerstörung zu verhindern.&lt;br /&gt;
* Zum Einschalten eines IGBTs ist eine Spannung von ca. 12..15V zu empfehlen. Eine größere Spannung führt zu höheren Umladeverlusten, bei einer geringeren Spannung verschenkt man meist Leistungsfähigkeit. &lt;br /&gt;
* Die Verbindung zwischen Treiber und Leistungsschalter ist unbedingt so niederinduktiv und kurz wie möglich zu halten (verdrillte Kabel bzw. dicht nebeneinander bzw. übereinander geführte Leiterbahnen). Bei der Auswahl des Leitungsdurchmessers bzw. der Leiterbahnbreite beachten, daß die Ansteuerströme durchaus im Bereich von einigen Ampere liegen können.&lt;br /&gt;
* Die Schaltgeschwindigkeit und damit die Verluste und EMV-Abstrahlung wird stark durch die Gatebeschaltung beeinflußt. Im Datenblatt sind bei der Beschreibung der Ein- bzw. Ausschaltzeiten (meist bei &amp;quot;Test Conditions&amp;quot;) Widerstandswerte  im einstelligen Ohmbereich angegeben, für die diese dort genannten Schaltzeiten gültig sind. Es wird  im Allgemeinen empfohlen die dort genannten Widerstandswerte NICHT zu UNTERschreiten.  Die Wahl des Gatewiderstandes ist eine Wissenschalft für sich und immer ein zweischneidiges Schwert. Einerseits möchte man geringste Schalt- Verlustleistungen, d.h. eine kleine Schaltzeit = geringen Gatewiderstand, (1..15Ω). Achtung auf die Höhe der Ströme! Andererseits jedoch ein gutmütiges EMV-Verhalten und weniger hohe Ströme in der Gateleitung, d.h. größere Schaltzeit = höherer Gatewiderstand (evtl. bis zu 100..250Ω). Der Widerstandswert ist sehr stark von den Anforderungen abhängig. Meist ist ein asymmetrische Ansteuerung das Mittel der Wahl, d.h. R_g1 PARALLEL zu einer Serienschaltung aus D und R_g2. Ausschalten: Wahl eines größerer Widerstandswertes R_g1 direkt zwischen Gate und Treiberausgang. Einschalten: Wahl eines geringerer Wertes R_g2 + Seriendiode. R_g2 sorgt für ein zügiges Einschalten bei geringen Verlusten, R_g1 reduziert die durch parasitäre Induktivitäten hervorgerufene Abschaltüberspannung auf ein erträgliches Maß.&lt;br /&gt;
* Speziell in der Entwicklungsphase sollten die Ströme über &#039;&#039;&#039;Shunt&#039;&#039;&#039; oder einen schnellen Stromsensor überwacht werden. Eine Schnellabschaltung bei Überstrom ist sehr empfehlenswert.&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;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[FET]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Kühlkörper]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]] [[Kategorie:Leistungselektronik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67827</id>
		<title>Brushless-Controller für Modellbaumotoren</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67827"/>
		<updated>2012-08-07T14:48:34Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Internet gibt es einige grundlegende Informationen zur Funktionsweise und Ansteuerung von Brushless-Motoren (BLDC). Für die Entwicklung eines solchen Reglers findet man aber nur wenig richtig detaillierte Informationen und Erfahrungsberichte. In diesem Artikel sollen genau diese Lücken geschlossen werden. Es soll hier aber kein fertiges Produkt (Schaltplan + Layout + Software) angeboten werden. Viel mehr soll es die Eigenentwicklung unterstützen, Ideen und Erfahrungen anbieten.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle weise ich noch darauf hin, dass man bei den [[#Weblinks]] noch einige sehr gute Informationen findet! Es gibt dort Hardware und Software, es lohnt sich die Links mal anzuschauen.&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es genau? ====&lt;br /&gt;
&lt;br /&gt;
Es geht hier um die sogenannten elektrisch kommutierten bürstenlosen Gleichstrommotoren (BLDC) aus dem Modellbaubereich. &lt;br /&gt;
&lt;br /&gt;
Deren Eigenschaften sind:&lt;br /&gt;
* Haben drei Anschlüsse für die drei Phasen, ansonsten sind keine weiteren Anschlüsse vorhanden&lt;br /&gt;
* Werden in der Regel mit LiPo Akkus versorgt&lt;br /&gt;
* Leistung im Bereich von ca. 100W bis 2kW&lt;br /&gt;
* Spannungen im Bereich von ca. 10 bis 50V&lt;br /&gt;
* Ströme im Bereich von ca. 5 bis 120A&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es hier nicht? ====&lt;br /&gt;
&lt;br /&gt;
* Motoren mit Hallsensoren für die Rückmeldung&lt;br /&gt;
* Festplattenmotoren&lt;br /&gt;
&lt;br /&gt;
Unter Umständen kann aber dieser Artikel auch für solche Motoren nützlich sein.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise dieser Motoren ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_Spannungs_Diagramm.png|thumb|right|250px|Ansteuerung der 3 Phasen]]&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich werden die 3 Phasen nacheinander bestromt, die Phasenspannungen wären also drei um 120° phasenverschobene Rechteckspannungen. Ein sinusförmiger Drehstrom ist nicht nötig, es genügen Rechteckspannungen. Mit einer Raumzeigermodulation könnte man die Stromaufnahme und die Geräuschentwicklung zwar noch verringern, macht die Ansteuerung aber einiges aufwändiger. Sogar die käuflichen Regler arbeiten nur mit Rechtecksignalen, zumindest die die ich kenne. &lt;br /&gt;
&lt;br /&gt;
Dabei gibt es für jede Phase die Zustände „Low“, „High“ und „Floating“. Low bedeutet 0V (GND), High entspricht der Versorgungsspannung und Floating ist keines von beidem, die Phase „hängt in der Luft“. Bei „High“ wird aber noch der Mittelwert der Spannung per PWM eingestellt, über das Tastverhältnis wird schlussendlich die Drehzahl verändert! Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
In der Grafik rechts kann man den Spannungsverlauf sehr gut erkennen. Das Diagramm zeigt aber nur den theoretischen Verlauf der Spannungen, wobei die gestrichelten Linien den Zustand &amp;quot;floating&amp;quot; symbolisieren. Dies kann man in einem Diagramm ja nicht wirklich darstellen, das ist einfach symbolisch gemeint. Interessanterweise sehen die Spannungen aufgrund der BEMF aber tatsächlich ziemlich ähnlich aus wie im Diagramm!&lt;br /&gt;
&lt;br /&gt;
=== Die 6 Zustände ===&lt;br /&gt;
&lt;br /&gt;
Wie man erkennen kann, werden 6 Zustände gebraucht, die sich dann immer wiederholen. Die Kommutierung ist also einfach ein Weiterschalten des Zustandes. &lt;br /&gt;
&#039;&#039;Diese 6 Zustände sind nicht mit den drei Zuständen von oben (High, Low, Floating) zu verwechseln, das ist ein anderes Thema!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In einer Tabelle dargestellt würde das folgendermassen aussehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand || Phase A || Phase B || Phase C || Stromfluss || Komparator-Eingänge&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM || Floating || GND || A --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Floating || PWM || GND || B --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GND || PWM || Floating || B --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GND || Floating || PWM || C --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Floating || GND || PWM || C --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PWM || GND || Floating || A --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* Die Nummern in der ersten Spalte entsprechen genau den sechs Zuständen, die auch im obigen Diagramm nummeriert sind (Alle 6 Zustände zusammen bilden einen Zyklus, wie es auch im Diagramm dargestellt ist)&lt;br /&gt;
* Den Inhalt der letzten Spalte wird später noch erläutert. Die Bezeichnungen beziehen sich auf die [[#BEMF-Schaltung]].&lt;br /&gt;
&lt;br /&gt;
=== Einsatz der BEMF ===&lt;br /&gt;
Das schaut bis jetzt eigentlich wie ein Synchronmotor oder Schrittmotor aus, was ein BLDC im Prinzip auch ist.  &lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt wurde, wird ein BLDC elektronisch kommutiert. Das heisst, die Kommutierung wird nicht einfach stur vorgegeben, sondern es wird immer Rücksicht auf die Ankerposition genommen. Dazu muss man allerdings wissen, wann man die Kommutierung genau auslösen soll. &lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren heißt Block-Kommutierung und ist ein Kompromiss aus Aufwand und Ergebnis:&lt;br /&gt;
Idealerweise werden die Ströme im Stator so eingeprägt, dass der Statorfluss dem Rotorfluss immer um 90° vorauseilt. Nur so wir das ideale Drehmoment erzeugt (siehe Literatur zur permanenterregten Synchronmaschine). Allerdings hat dieses Verfahren, auch Feldorientierte Regelung oder Vektor-Regelung genannt, den Nachteil, dass meistens teure Positionssensorik für den Rotor nowendig ist und auch die nötige Rechenleistung stark ansteigt. Die komplette Regelung muss für jede PWM-Periode gerechnet werden, damit sich der Aufwand lohnt. &lt;br /&gt;
Im Fall der Block-Kommutierung ist der ideale Kommutierungszeitpunkt also der, bei dem das Stator-Feld dem Rotor-Feld im Mittel um 90 ° vorauseilt. Dieser ideale Kommutierungszeitpunkt ist wegen der als konstant angenommenen Rechenzeit für die Kommutierung drehzahlabhängig.&lt;br /&gt;
&lt;br /&gt;
Zur Erreichung einer höheren Maximaldrehzahl kann das Rotorfeld durch das Statorfeld im sogenannten Feldschwäch-Betrieb geschwächt werden. Es ergeben sich Feldschwäch-(Blind)ströme im Bereich der Nennströme.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann auch ein BLDC nicht ohne Kenntnis der Lage des Rotors kommutiert werden. Und hier kommt die sogenannte Back Electromotive Force (BEMF) zum Einsatz. Von den drei Phasen liegt ja zu jedem Zeitpunkt genau eine Phase in der Luft wie man am Diagramm oben erkennen kann. Aufgrund des drehenden Magnetfeldes im Motor wird an dieser Phase nun eine Spannung induziert. Und genau diese induzierte Spannung gibt nun Auskunft darüber, in welchem Winkel sich der Anker befindet, und daraus kann man dann auch den Zeitpunkt der nächsten Kommutierung bestimmen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird aber auch noch die Sternmittelpunktspannung der drei Phasen benötigt, welche aber leider nicht direkt zur Verfügung steht. Das ist aber kein Problem, mit drei Widerständen kann man sich die selber erzeugen (siehe [[#BEMF-Schaltung]]).&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten die BEMF-Spannungen die Sternmittelpunktspannung ständig kreuzen, was man dann mit einem Komparator erfassen kann. Und den Interrupt, den der Komparator auslöst, ist nun verantwortlich für die nächste Kommutierung.&lt;br /&gt;
Der Komparator wird natürlich nacheinander mit den drei Phasen gefüttert, es darf immer nur die Phase an den Komparator angeschlossen sein, die auch in der Luft hängt! In der Tabelle [[#Die 6 Zustände]] sieht man, welche zwei Spannungen der Komparator jeweils vergleichen muss.&lt;br /&gt;
&lt;br /&gt;
Als Komparator kann man übrigens den integrierten nehmen, den es in den AVRs gibt. Diese (alle?) haben auch den benötigten Multiplexer, um zwischen den drei Analogquellen wählen zu können. Näheres dazu im Abschnitt [[#Software]].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
&lt;br /&gt;
==== Treiber ====&lt;br /&gt;
&lt;br /&gt;
Um die drei notwendigen Zustände (&#039;&#039;Low&#039;&#039;, &#039;&#039;High&#039;&#039; und &#039;&#039;Floating&#039;&#039;) für jede der drei Phasen realisieren zu können, werden drei Halbbrücken mit Mosfets benötigt. Hier gibt es dann auch schon mehrere Varianten, wie man das aufbauen kann. Grundsätzlich muss man sich mal überlegen ob fertige FET-Treiber oder diskrete Treiber verwendet werden sollen. Die FET-Treiber haben einige sehr schöne Vorteile, deshalb sollte man diese meiner Meinung nach bevorzugen.&lt;br /&gt;
&lt;br /&gt;
Die Vorteile wären:&lt;br /&gt;
&lt;br /&gt;
* Integrierter Kurzschlussschutz mit dead time, ein Softwarefehler kann die FETs nicht zerstören. Das kann in der Entwicklungsphase sehr von Vorteil sein :-)&lt;br /&gt;
* Die FETs können mit ordentlicher Geschwindigkeit geschaltet werden, und die Mikrocontroller-Ports werden trotzdem nicht stark belastet. So kann die Wärmeentwicklung der FETs noch etwas reduziert werden.&lt;br /&gt;
* Bei Treibern die mit nur einem Eingang zwischen Lowside und Highside Mosfets toggeln (z.B. IR2104), ist der sogenannte „aktiver Freilauf“ bereits in Hardware realisiert und ermöglicht so mit wenig Aufwand eine extrem niedrige Erwärmung der Mosfets. Das ermöglicht schon sehr grosse Ströme auch ohne Kühlkörper!&lt;br /&gt;
* Es können günstigere Mosfets verwendet werden, es müssen keine TTL-Kompatible FETs sein. Auch ist eine niedrige Gatekapazität nicht so von Bedeutung wie bei direkter Ansteuerung mit einem Mikrocontroller.&lt;br /&gt;
* Je nach dem welchen Treiber man verwendet, kann der Softwareaufwand und die Fehleranfälligkeit deutlich reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Nachteile von Treiber sind:&lt;br /&gt;
&lt;br /&gt;
* Mehr Bauteile auf der Platine.&lt;br /&gt;
* Vermutlich insgesamt etwas teurer, auch wenn die FETs günstiger sind.&lt;br /&gt;
* Bei vielen Treibern ist eine Minimalspannung von ca. 10V notwendig, damit sie funktionieren. Bei einem fast leeren 3S LiPo Akku könnte das vielleicht schon kritisch werden. Auch darf z.B. beim IR2104 eine Spannung von 20V nicht überschritten werden. Daher kommt (ohne StepUp und StepDown Wandler) eigentlich fast nur noch ein 4S Akku in Frage. Möchte man einen grösseren Eingangsspannungsbereich haben muss man noch entsprechende Spannungsregler einbauen.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe es schon mit einem IR2104S probiert, dieser erscheint mir sehr geeignet für diese Aufgabe. Ich betreibe ihn mit einem 4S LiPo, damit läuft das Teil perfekt. Kann ich nur weiterempfehlen!&lt;br /&gt;
&lt;br /&gt;
==== Beispielschaltung ====&lt;br /&gt;
[[Datei:BLDC_Leistungsteil_1.png|thumb|right|300px|Beispiel einer Halbbrücke inklusive Strommessung]]&lt;br /&gt;
Hier ein Beispiel, wie der Leistungsteil einer Phase aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
Für die exakte Beschaltung der Treiber muss man natürlich dessen Datenblatt studieren!&lt;br /&gt;
&lt;br /&gt;
Hier sieht man auch gleich noch die Strommessung, die man natürlich nicht für jede Phase einzeln aufbauen muss. Man kann sie sogar ganz weglassen, sie könnte aber nützlich sein um eine Überlast des Motores erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Widerstand R20 ist dazu da, dass auf dem Treiber das PWM-Signal liegt, sobald die Leitung „IN_A“ in der Luft hängt (uC Pin als Eingang definiert). So wird nur ein einziger PWM-Ausgang vom Mikrocontroller benötigt für alle drei Phasen, erfordert also kein Soft-PWM oder sonst irgend ein Murks. Diese Schaltung habe ich übrigens beim Mikrokopter-Projekt abgeschaut.&lt;br /&gt;
&lt;br /&gt;
Übrigens muss an die Versorgung unbedingt noch ein grosser Elko gehängt werden, am besten möglichst nahe an die Mosfets (keine langen Leitungen zwischen Elko und Mosfets). Die erforderliche Kapazität hängt davon ab, wieviel Strom der Motor braucht. bei kleinen bis mittleren Motoren sollten so 220uF bis 680uF ausreichend sein.&lt;br /&gt;
&lt;br /&gt;
=== BEMF-Schaltung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_BEMF_schaltung.png|thumb|right|300px|BEMF-Schaltung]]&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Teil ist aber auch die BEMF-Schaltung. Dabei wird häufig die Schaltung vom Mikrokopter eingesetzt (siehe Schaltung rechts).&lt;br /&gt;
&lt;br /&gt;
Die Schaltung besteht erstmal aus drei Spannungsteilern, die die Phasenspannungen auf ein Spannungsniveau heruntersetzen, das man auf die Mikrokontrollereingänge legen darf. Keramikkondensatoren glätten diese Spannungen, weil die aufgrund der PWM sonst sehr stark ausschlagen. Dann gehen diese drei Spannungen (&#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039;) auf drei ADC-Eingänge des Mikrocontrollers.&lt;br /&gt;
&lt;br /&gt;
Und dann sind da noch die drei Widerstände, die aus den Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; einen virtuellen Sternmittelpunkt bilden. Diese Mittelpunktspannung (&#039;&#039;MITTEL&#039;&#039;) kommt dann auf den Komparatoreingang &#039;&#039;AIN0&#039;&#039; vom AVR. Diese Spannung soll der Komparator später dann mit jeweils einer der Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; vergleichen um den Kommutierungszeitpunkt bestimmen zu können.&lt;br /&gt;
&lt;br /&gt;
Man kann die Widerstands-/ und Kapazitätswerte auch noch anpassen. Bei höheren Eingangsspannungen muss man darauf achten, dass die Eingänge vom AVR keine zu hohe Spannung abkriegen! Ein Regler, den ich gekauft habe, hat einiges höhere Widerstandswerte und kommt sogar ohne Kondensatoren aus. Hier hat man also durchaus noch Spielraum um ein bisschen zu tüfteln, für den Anfang ist die abgebildete Schaltung aber bestens geeignet.&lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller ===&lt;br /&gt;
&lt;br /&gt;
Als Mikrocontroller sind viele Typen aus der AVR-Serie geeignet. Bei der BrushlessCtrl wird zum Beispiel ein ATMega168 eingesetzt. Mit diesem habe ich auch mal angefangen, der scheint wirklich gut geeignet zu sein. Es reicht aber auch ein ATMega88 wenn man nicht alle möglichen Protokolle und Ansteuerungsarten (I2C, SPI, PPM) gleichzeitig einbauen will.&lt;br /&gt;
&lt;br /&gt;
Viele Regler verwenden auch einen AT90PWM, vorallem wenn mehrere PWM-Kanäle gebraucht werden.&lt;br /&gt;
&lt;br /&gt;
Übrigens wird bei käuflichen Reglern extrem häufig ein ATMega8 eingesetzt! Wenn man nur Software entwickeln möchte kann man auch einen solchen Regler kaufen und das eigene Programm aufspielen. Bei den [[#Weblinks]] findet man dazu auch noch Informationen.&lt;br /&gt;
&lt;br /&gt;
Um eine Raumzeigermodulation zu implementieren wird dann aber vermutlich schon ein 32-Bit Mikrocontroller nötig sein. Aber wie schon erwähnt ist für ein Modellbaumotor eine Raumzeigermodulation keinesfalls ein must-have.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Bei der Software kommt es jetzt natürlich sehr stark darauf an, wie die Hardware aufgebaut ist. Ich möchte hier aber nicht auf jede Variante eingehen, das gäbe viel zu viel Arbeit. Auch will ich ja kein fertiger Code bereitstellen, sondern nur Hinweise und Tipps geben. Wer nicht selber programmieren will, der kann ja mal die Mikrokopter-Firmware herunterladen, die älteren Versionen davon gibt es auf der Mikrokopter-Seite zum downloaden.&lt;br /&gt;
&lt;br /&gt;
Wichtig sind auf jeden Fall [[#Die 6 Zustände]]. Der Mikrocontroller muss die Phasen jeweils nacheinander so wie in der Tabelle ansteuern. Das ist soweit ja kein Problem, schwierig ist aber immer der richtige Zeitpunkt für die Kommutierung zu finden.&lt;br /&gt;
&lt;br /&gt;
Falls man einen IR2104 oder einen ähnlichen Treiber verwendet, würde die Software ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
* Beim Programmstart wird schonmal der PWM-Ausgang mit einem Timer aktiviert. Die Frequenz liegt normalerweise so im Bereich 12 bis 25kHz. Ich selber verwende 20kHz, da hört man dann auch dieses Pfeifen nicht mehr.&lt;br /&gt;
* Der Interrupt vom Analogkomparator muss aktiviert werden, um die Kommutierungszeitpunkte bestimmen zu können.&lt;br /&gt;
* Dann habe ich eine Funktion, welche den Zustand (1 bis 6) eins weiterschaltet und die Ausgänge entsprechend setzt. Dabei werden die Pins, die das PWM-Signal enthalten sollen, einfach als Eingang definiert, wie ich schonmal erwähnte.&lt;br /&gt;
* Wichtig ist ausserdem, dass bei jeder Kommutierung auch noch der richtige ADC-Kanal auf den Komparator geleitet wird per Multiplexer. Dieser Kanal wird bei jeder Kommutierung eins weitergeschaltet.&lt;br /&gt;
* Danach muss nur noch gewartet werden bis der Analogkomparator einen Interrupt auslöst. Sobald dies geschieht, wird die nächste Kommutierung per Timer (30° Verzögerung) ausgelöst, und das Spiel beginnt wieder von vorne.&lt;br /&gt;
&lt;br /&gt;
Je nach Komplexität des BLDC Controllers und des damit verbundenen Programmieraufwands ist es aber auch möglich (wie von sehr vielen Nutzern implementiert) die Kommutierung direkt nach dem Analog-Komparator Interrupt auszulösen - d.h. mit 0° Verzögerung. In diesem Fall spricht man von Phasenvoreilender (phaseadvance) Ansteuerung. Der Motor kann dadurch eine höhere Maximaldrehzahl erreichen, jedoch mit geringerem Drehmoment - die Stromaufnahme ist höher und der Wirkungsgrad geringer (siehe [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf AN1083, Seite 18]). Der Effekt ist ähnlich dem Feldschwächebetrieb einer Asynchronmaschine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Ich glaube aber, dass dies noch nicht die ganz richtige Art ist, wie man die Kommutierung auslöst. Ich denke, man müsste nach einem Interrupt eine gewisse Zeit warten (je nach Kommutierungswinkel oder wie das heisst) und erst kurz vor dem nächsten Interrupt die Kommutierung auslösen. Also quasi immer einen Zustand später. Dazu muss aber die Verzögerungszeit ständig ausgerechnet werden, damit die auch bei jeder Drehzahl stimmt. Ich habe es selber noch nicht so implementiert, kann daher nicht sagen ob das so dann richtig funktioniert. &#039;&#039;&#039;Falls hier jemand besser Bescheid weiss, wäre es cool wenn man das hier noch ergänzen könnte.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Laut Literatur liegt der optimale Kommutierungszeitpunkt 30° nach dem Nulldurchgang der Spannung am nicht beschalteten Eingang. Die naheliegendste Möglichkeit wäre also die Zeit, die bei der aktuellen Drehzahl für eine Umdrehung benötigt wird, durch zwölf zu dividieren und so lange bis zur Kommutierung zu warten.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausserdem scheint es auch Regler zu geben, die eine Kommutierung nicht mit dem Analogkomparator erfassen, sondern direkt mit ADC-Wandlungen. Dazu weiss ich aber leider auch nichts näheres, deshalb auch hier: &#039;&#039;&#039;Wenn jemand weiss, was es damit auf sich hat, bitte melden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Drehzahl des Motores lässt sich jetzt ganz bequem ändern, indem man den Duty-Cycle des PWM-Signales verändert. Der Motor beschleunigt bzw. bremst dann von alleine.&lt;br /&gt;
&lt;br /&gt;
=== Anlauf ===&lt;br /&gt;
&lt;br /&gt;
So, das war jetzt die Beschreibung für einen Motor, der bereits läuft. &#039;&#039;&#039;Bis&#039;&#039;&#039; der Motor allerdings mal dreht, muss man anders vorgehen, weil der stillstehende Motor ja keine Komparator-Interrupts auslöst, da keine BEMF vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Daher muss man den Motor zuerst mit einem starren Drehfeld auf eine gewisse Drehzahl beschleunigen, wie bei einem Schrittmotor. Sobald eine genügend hohe Drehzahl erreicht wurde, kann man in den geregelten Betrieb schalten. Am besten schaltet man dazu einfach alle Phasen ab und aktiviert den Komparator. Sobald der erste Interrupt vom Komparator ausgelöst wird, werden die Phasen wieder eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Der ganze Startvorgang ist aber schon eine Wissenschaft für sich. Es braucht (nach meiner Erfahrung) viel Zeit und Nerven, bis alles richtig funktioniert. Man kann aber am Anfang den Motor auch von Hand anwerfen, das geht viel einfacher als mit einer Zwangskommutierung. Ein Oszilloskop ist eigentlich auch absolut notwendig, um analysieren zu können was der Regler und die BEMF genau macht. &lt;br /&gt;
&lt;br /&gt;
Ganz wichtig aber an dieser Stelle: &#039;&#039;&#039;Wenn der Motor mit einem starren Drehfeld angesteuert wird, sieht die BEMF alles andere als schön aus!&#039;&#039;&#039; Das liegt daran, dass der Motor bei jeder Kommutierung beschleunigt, und danach wieder abgebremst wird, der Motor läuft einfach nicht „rund“. Wenn ihr also irgendwas komisches auf dem Oszilloskop seht, ist das kein Fehler in eurer Schaltung, das ist normal bei Zwangskommutierung!&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr die BEMF auf dem Oszilloskop anschauen wollt, könnt Ihr entweder den Motor einfach von Hand drehen, oder ihr dreht den Motor mit Zwangskommutierung hoch, und schaltet dann alle Phasen ab (nicht auf GND, in der Luft hängend). Direkt nach dem Abschalten der Phasen sollte die BEMF einen relativ schönen Drehstrom zeigen (muss ich selbst noch kontrollieren ob das wirklich der Fall ist :-) )&lt;br /&gt;
&lt;br /&gt;
Bis jetzt habe ich es mit dieser Variante aber noch nicht so richtig geschafft, einen brauchbaren Anlaufvorgang hinzukriegen. Ich glaube auch, dass gekaufte Regler das nicht so machen. Diese scheinen nur einen kräftigen Strom auf eine Phase zu geben, und werten dann die entstandene BEMF aus, aus der dann berechnet werden kann, welche Phase als nächstes bestromt werden muss. So richtig habe ich das aber noch nicht angeschaut, &#039;&#039;&#039;vielleicht weiss hier jemand besser Bescheid und könnte es hier beschreiben?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip eines Anlaufvorgangs eines sensorlosen BLDC ist folgendes:&lt;br /&gt;
- Man präge ein Feld ein, bei dem angenommen werden muss, dass der Motor diesem ab Stillstand auch folgt.&lt;br /&gt;
- Sobald diese Annahme durch Auftreten eines durch BEMF erzeugten Ereignisses bestätigt wird, kann in den geregelten Betrieb umgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Komparator ===&lt;br /&gt;
&lt;br /&gt;
Wenn man sich für die Kommutierungs-Erkennung per Analogkomparator entscheidet, muss man noch ein sehr nützliches Feature von den AVRs kennen. Da man ja abwechslungsweise drei verschiedene Signale (BEMF_A...C) mit der Mittelpunktspannung vergleichen muss, aber nur ein einziger Analogkomparator vorhanden ist, muss man den sogenannten Analog-Multiplexer benutzen. Mit diesem in den AVRs integrierten Multiplexer kann man nun die Spannung am Pin &amp;quot;AIN0&amp;quot; mit einem beliebigen Analogeingang (ADC0...ADC7) vergleichen. Natürlich kann man nicht mehrere Kanäle gleichzeitig anwählen, da es nur einen einzigen Komparator gibt. Das ist für unsere Anwendung allerdings kein Problem, wir müssen immer nur eines der BEMF-Signale mit der Mittelpunktspannung vergleichen.&lt;br /&gt;
&lt;br /&gt;
Näheres dazu und wie man den Multiplexer benutzt erfährt man im Datenblatt des verwendeten Mukrocontrollers. Der entsprechende Abschnitt heisst &amp;quot;Analog Comparator Multiplexed Input&amp;quot; (unter &amp;quot;Analog Comparator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Schnittstellen ===&lt;br /&gt;
&lt;br /&gt;
Man kann nun den Sollwert der Drehzahl wahlweise über einen PPM-Eingang, über [[UART]], [[SPI]], [[I2C]] oder mit einem Potentiometer vorgeben. Welche Ansteuerung man wählt hängt davon ab, wie und wo der Motor eingesetzt werden soll und ist deshalb jedem selber überlassen.&lt;br /&gt;
&lt;br /&gt;
== Bildmaterial ==&lt;br /&gt;
=== Oszillogramme ===&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_PWM.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Die drei Phasen während dem geregelten Betrieb, die BEMF ist sehr schön zu erkennen (immer zwischen den Zuständen &amp;quot;PWM&amp;quot; und &amp;quot;LOW&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_Vollgas.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sehen die drei Phasen bei Vollgas aus (100% PWM). Die BEMF ist jetzt sogar so steil, dass sie die beiden Zustände &#039;&#039;Low&#039;&#039; und &#039;&#039;High&#039;&#039; mit einer fast perfekten Geraden verbindet!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_richtig.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* Gelb: Phase A, BEMF sehr schön erkennbar&lt;br /&gt;
* Blau: Mittelpunktspannung&lt;br /&gt;
* Rot: BEMF von Phase A (nach der BEMF-Schaltung!)&lt;br /&gt;
* Grün: Komparator-Interrupts (steigende Flanke) Jeder dritte Interrupt gehört zur Phase A, die anderen Interrupts stammen von den anderen Phasen, die nicht auf dem Bild zu sehen sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_falsch.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So kann z.B. die BEMF während der Zwangskommutierung aussehen. Dadurch werden auch zu viele Komparator-Interrupts (Grün, jede Flanke) ausgelöst. Kein schöner Anblick...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Anlauf_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sieht der Anlaufvorgang bei einem gekauften Regler aus. eine extrem kurze Geschichte im Vergleich mit meinen paar Umdrehungen mit Zwangskommutierung. Wer kennt das Geheimnis?&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
Als Anregung, wie so ein Regler aussehen könnte (nur 40x26mm klein, inklusive Optokoppler, drei Treibern und drei schönen Stecker!):&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_top_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_bot_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Der HCPL-0600 auf der Unterseite ist übrigens ein Optokoppler um das PPM-Eingangssignal galvanisch zu entkoppeln. Ist nicht zwingend nötig, war aber grad Platz da... :-)&lt;br /&gt;
&lt;br /&gt;
== Siehe Auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/248509 Diskussion zum Artikel]&lt;br /&gt;
* [[BLDC Demo Board]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[Leiterbahnbreite]] Unbedingt beachten bei grösseren Strömen!&lt;br /&gt;
* [[Kühlkörper]] Bei sehr hohen Strömen evtl. nötig&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.atmel.com/Images/doc8012.pdf AppNote AVR444 von Atmel]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00885a.pdf BLDC Theorie(AN885 Microchip)]&lt;br /&gt;
* [http://www.mikrokopter.de/ucwiki/BrushlessCtrl BrushlessCtrl vom Mikrokopter]&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=BL-Ctrl&amp;amp; Software vom Mikrokopter Brushless-Regler]&lt;br /&gt;
* [http://home.versanet.de/~b-konze/ Die Seite von B. Konze, einer der Pioniere in diesem Bereich]&lt;br /&gt;
* [http://www.rcgroups.com/forums/showthread.php?t=1513678 Ein Thema auf rcgroups.com (Englisch) wo einige käuflichen Regler näher angeschaut wurden und eine eigene Firmware angeboten wird]&lt;br /&gt;
* [http://rmmx.gmxhome.de/bldchv/start.html Ein Regler-Projekt für etwas grössere Motoren]&lt;br /&gt;
* [http://www.fc00.de/quadrokopter_6_kw.htm Regler für sehr grosse Motoren]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf Appnote AN1083 von Microchip, sehr detailliert]&lt;br /&gt;
[[Kategorie:Motoren]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67810</id>
		<title>Brushless-Controller für Modellbaumotoren</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67810"/>
		<updated>2012-08-06T12:32:48Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Internet gibt es einige grundlegende Informationen zur Funktionsweise und Ansteuerung von Brushless-Motoren (BLDC). Für die Entwicklung eines solchen Reglers findet man aber nur wenig richtig detaillierte Informationen und Erfahrungsberichte. In diesem Artikel sollen genau diese Lücken geschlossen werden. Es soll hier aber kein fertiges Produkt (Schaltplan + Layout + Software) angeboten werden. Viel mehr soll es die Eigenentwicklung unterstützen, Ideen und Erfahrungen anbieten.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle weise ich noch darauf hin, dass man bei den [[#Weblinks]] noch einige sehr gute Informationen findet! Es gibt dort Hardware und Software, es lohnt sich die Links mal anzuschauen.&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es genau? ====&lt;br /&gt;
&lt;br /&gt;
Es geht hier um die sogenannten elektrisch kommutierten bürstenlosen Gleichstrommotoren (BLDC) aus dem Modellbaubereich. &lt;br /&gt;
&lt;br /&gt;
Deren Eigenschaften sind:&lt;br /&gt;
* Haben drei Anschlüsse für die drei Phasen, ansonsten sind keine weiteren Anschlüsse vorhanden&lt;br /&gt;
* Werden in der Regel mit LiPo Akkus versorgt&lt;br /&gt;
* Leistung im Bereich von ca. 100W bis 2kW&lt;br /&gt;
* Spannungen im Bereich von ca. 10 bis 50V&lt;br /&gt;
* Ströme im Bereich von ca. 5 bis 120A&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es hier nicht? ====&lt;br /&gt;
&lt;br /&gt;
* Motoren mit Hallsensoren für die Rückmeldung&lt;br /&gt;
* Festplattenmotoren&lt;br /&gt;
&lt;br /&gt;
Unter Umständen kann aber dieser Artikel auch für solche Motoren nützlich sein.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise dieser Motoren ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_Spannungs_Diagramm.png|thumb|right|250px|Ansteuerung der 3 Phasen]]&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich werden die 3 Phasen nacheinander bestromt, die Phasenspannungen wären also drei um 120° phasenverschobene Rechteckspannungen. Ein sinusförmiger Drehstrom ist nicht nötig, es genügen Rechteckspannungen. Mit einer Raumzeigermodulation könnte man die Stromaufnahme und die Geräuschentwicklung zwar noch verringern, macht die Ansteuerung aber einiges aufwändiger. Sogar die käuflichen Regler arbeiten nur mit Rechtecksignalen, zumindest die die ich kenne. &lt;br /&gt;
&lt;br /&gt;
Dabei gibt es für jede Phase die Zustände „Low“, „High“ und „Floating“. Low bedeutet 0V (GND), High entspricht der Versorgungsspannung und Floating ist keines von beidem, die Phase „hängt in der Luft“. Bei „High“ wird aber noch der Mittelwert der Spannung per PWM eingestellt, über das Tastverhältnis wird schlussendlich die Drehzahl verändert! Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
In der Grafik rechts kann man den Spannungsverlauf sehr gut erkennen. Das Diagramm zeigt aber nur den theoretischen Verlauf der Spannungen, wobei die gestrichelten Linien den Zustand &amp;quot;floating&amp;quot; symbolisieren. Dies kann man in einem Diagramm ja nicht wirklich darstellen, das ist einfach symbolisch gemeint. Interessanterweise sehen die Spannungen aufgrund der BEMF aber tatsächlich ziemlich ähnlich aus wie im Diagramm!&lt;br /&gt;
&lt;br /&gt;
=== Die 6 Zustände ===&lt;br /&gt;
&lt;br /&gt;
Wie man erkennen kann, werden 6 Zustände gebraucht, die sich dann immer wiederholen. Die Kommutierung ist also einfach ein Weiterschalten des Zustandes. &lt;br /&gt;
&#039;&#039;Diese 6 Zustände sind nicht mit den drei Zuständen von oben (High, Low, Floating) zu verwechseln, das ist ein anderes Thema!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In einer Tabelle dargestellt würde das folgendermassen aussehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand || Phase A || Phase B || Phase C || Stromfluss || Komparator-Eingänge&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM || Floating || GND || A --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Floating || PWM || GND || B --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GND || PWM || Floating || B --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GND || Floating || PWM || C --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Floating || GND || PWM || C --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PWM || GND || Floating || A --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* Die Nummern in der ersten Spalte entsprechen genau den sechs Zuständen, die auch im obigen Diagramm nummeriert sind (Alle 6 Zustände zusammen bilden einen Zyklus, wie es auch im Diagramm dargestellt ist)&lt;br /&gt;
* Den Inhalt der letzten Spalte wird später noch erläutert. Die Bezeichnungen beziehen sich auf die [[#BEMF-Schaltung]].&lt;br /&gt;
&lt;br /&gt;
=== Einsatz der BEMF ===&lt;br /&gt;
Das schaut bis jetzt eigentlich wie ein Synchronmotor oder Schrittmotor aus, was ein BLDC im Prinzip auch ist.  &lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt wurde, wird ein BLDC elektronisch kommutiert. Das heisst, die Kommutierung wird nicht einfach stur vorgegeben, sondern es wird immer Rücksicht auf die Ankerposition genommen. Dazu muss man allerdings wissen, wann man die Kommutierung genau auslösen soll. &lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren heißt Block-Kommutierung und ist ein Kompromiss aus Aufwand und Ergebnis:&lt;br /&gt;
Idealerweise werden die Ströme im Stator so eingeprägt, dass der Statorfluss dem Rotorfluss immer um 90° vorauseilt. Nur so wir das ideale Drehmoment erzeugt (siehe Literatur zur permanenterregten Synchronmaschine). Allerdings hat dieses Verfahren, auch Feldorientierte Regelung oder Vektor-Regelung genannt, den Nachteil, dass meistens teure Positionssensorik für den Rotor nowendig ist und auch die nötige Rechenleistung stark ansteigt. Die komplette Regelung muss für jede PWM-Periode gerechnet werden, damit sich der Aufwand lohnt. &lt;br /&gt;
Im Fall der Block-Kommutierung ist der ideale Kommutierungszeitpunkt also der, bei dem das Stator-Feld dem Rotor-Feld im Mittel um 90 ° vorauseilt. Dieser ideale Kommutierungszeitpunkt ist wegen der als konstant angenommenen Rechenzeit für die Kommutierung drehzahlabhängig.&lt;br /&gt;
&lt;br /&gt;
Zur Erreichung einer höheren Maximaldrehzahl kann das Rotorfeld durch das Statorfeld im sogenannten Feldschwäch-Betrieb geschwächt werden. Es ergeben sich Feldschwäch-(Blind)ströme im Bereich der Nennströme.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann auch ein BLDC nicht ohne Kenntnis der Lage des Rotors kommutiert werden. Und hier kommt die sogenannte Back Electromotive Force (BEMF) zum Einsatz. Von den drei Phasen liegt ja zu jedem Zeitpunkt genau eine Phase in der Luft wie man am Diagramm oben erkennen kann. Aufgrund des drehenden Magnetfeldes im Motor wird an dieser Phase nun eine Spannung induziert. Und genau diese induzierte Spannung gibt nun Auskunft darüber, in welchem Winkel sich der Anker befindet, und daraus kann man dann auch den Zeitpunkt der nächsten Kommutierung bestimmen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird aber auch noch die Sternmittelpunktspannung der drei Phasen benötigt, welche aber leider nicht direkt zur Verfügung steht. Das ist aber kein Problem, mit drei Widerständen kann man sich die selber erzeugen (siehe [[#BEMF-Schaltung]]).&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten die BEMF-Spannungen die Sternmittelpunktspannung ständig kreuzen, was man dann mit einem Komparator erfassen kann. Und den Interrupt, den der Komparator auslöst, ist nun verantwortlich für die nächste Kommutierung.&lt;br /&gt;
Der Komparator wird natürlich nacheinander mit den drei Phasen gefüttert, es darf immer nur die Phase an den Komparator angeschlossen sein, die auch in der Luft hängt! In der Tabelle [[#Die 6 Zustände]] sieht man, welche zwei Spannungen der Komparator jeweils vergleichen muss.&lt;br /&gt;
&lt;br /&gt;
Als Komparator kann man übrigens den integrierten nehmen, den es in den AVRs gibt. Diese (alle?) haben auch den benötigten Multiplexer, um zwischen den drei Analogquellen wählen zu können. Näheres dazu im Abschnitt [[#Software]].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
&lt;br /&gt;
==== Treiber ====&lt;br /&gt;
&lt;br /&gt;
Um die drei notwendigen Zustände (&#039;&#039;Low&#039;&#039;, &#039;&#039;High&#039;&#039; und &#039;&#039;Floating&#039;&#039;) für jede der drei Phasen realisieren zu können, werden drei Halbbrücken mit Mosfets benötigt. Hier gibt es dann auch schon mehrere Varianten, wie man das aufbauen kann. Grundsätzlich muss man sich mal überlegen ob fertige FET-Treiber oder diskrete Treiber verwendet werden sollen. Die FET-Treiber haben einige sehr schöne Vorteile, deshalb sollte man diese meiner Meinung nach bevorzugen.&lt;br /&gt;
&lt;br /&gt;
Die Vorteile wären:&lt;br /&gt;
&lt;br /&gt;
* Integrierter Kurzschlussschutz mit dead time, ein Softwarefehler kann die FETs nicht zerstören. Das kann in der Entwicklungsphase sehr von Vorteil sein :-)&lt;br /&gt;
* Die FETs können mit ordentlicher Geschwindigkeit geschaltet werden, und die Mikrocontroller-Ports werden trotzdem nicht stark belastet. So kann die Wärmeentwicklung der FETs noch etwas reduziert werden.&lt;br /&gt;
* Bei Treibern die mit nur einem Eingang zwischen Lowside und Highside Mosfets toggeln (z.B. IR2104), ist der sogenannte „aktiver Freilauf“ bereits in Hardware realisiert und ermöglicht so mit wenig Aufwand eine extrem niedrige Erwärmung der Mosfets. Das ermöglicht schon sehr grosse Ströme auch ohne Kühlkörper!&lt;br /&gt;
* Es können günstigere Mosfets verwendet werden, es müssen keine TTL-Kompatible FETs sein. Auch ist eine niedrige Gatekapazität nicht so von Bedeutung wie bei direkter Ansteuerung mit einem Mikrocontroller.&lt;br /&gt;
* Je nach dem welchen Treiber man verwendet, kann der Softwareaufwand und die Fehleranfälligkeit deutlich reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Nachteile von Treiber sind:&lt;br /&gt;
&lt;br /&gt;
* Mehr Bauteile auf der Platine.&lt;br /&gt;
* Vermutlich insgesamt etwas teurer, auch wenn die FETs günstiger sind.&lt;br /&gt;
* Bei vielen Treibern ist eine Minimalspannung von ca. 10V notwendig, damit sie funktionieren. Bei einem fast leeren 3S LiPo Akku könnte das vielleicht schon kritisch werden. Auch darf z.B. beim IR2104 eine Spannung von 20V nicht überschritten werden. Daher kommt (ohne StepUp und StepDown Wandler) eigentlich fast nur noch ein 4S Akku in Frage. Möchte man einen grösseren Eingangsspannungsbereich haben muss man noch entsprechende Spannungsregler einbauen.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe es schon mit einem IR2104S probiert, dieser erscheint mir sehr geeignet für diese Aufgabe. Ich betreibe ihn mit einem 4S LiPo, damit läuft das Teil perfekt. Kann ich nur weiterempfehlen!&lt;br /&gt;
&lt;br /&gt;
==== Beispielschaltung ====&lt;br /&gt;
[[Datei:BLDC_Leistungsteil_1.png|thumb|right|300px|Beispiel einer Halbbrücke inklusive Strommessung]]&lt;br /&gt;
Hier ein Beispiel, wie der Leistungsteil einer Phase aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
Für die exakte Beschaltung der Treiber muss man natürlich dessen Datenblatt studieren!&lt;br /&gt;
&lt;br /&gt;
Hier sieht man auch gleich noch die Strommessung, die man natürlich nicht für jede Phase einzeln aufbauen muss. Man kann sie sogar ganz weglassen, sie könnte aber nützlich sein um eine Überlast des Motores erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Widerstand R20 ist dazu da, dass auf dem Treiber das PWM-Signal liegt, sobald die Leitung „IN_A“ in der Luft hängt (uC Pin als Eingang definiert). So wird nur ein einziger PWM-Ausgang vom Mikrocontroller benötigt für alle drei Phasen, erfordert also kein Soft-PWM oder sonst irgend ein Murks. Diese Schaltung habe ich übrigens beim Mikrokopter-Projekt abgeschaut.&lt;br /&gt;
&lt;br /&gt;
Übrigens muss an die Versorgung unbedingt noch ein grosser Elko gehängt werden, am besten möglichst nahe an die Mosfets (keine langen Leitungen zwischen Elko und Mosfets). Die erforderliche Kapazität hängt davon ab, wieviel Strom der Motor braucht. bei kleinen bis mittleren Motoren sollten so 220uF bis 680uF ausreichend sein.&lt;br /&gt;
&lt;br /&gt;
=== BEMF-Schaltung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_BEMF_schaltung.png|thumb|right|300px|BEMF-Schaltung]]&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Teil ist aber auch die BEMF-Schaltung. Dabei wird häufig die Schaltung vom Mikrokopter eingesetzt (siehe Schaltung rechts).&lt;br /&gt;
&lt;br /&gt;
Die Schaltung besteht erstmal aus drei Spannungsteilern, die die Phasenspannungen auf ein Spannungsniveau heruntersetzen, das man auf die Mikrokontrollereingänge legen darf. Keramikkondensatoren glätten diese Spannungen, weil die aufgrund der PWM sonst sehr stark ausschlagen. Dann gehen diese drei Spannungen (&#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039;) auf drei ADC-Eingänge des Mikrocontrollers.&lt;br /&gt;
&lt;br /&gt;
Und dann sind da noch die drei Widerstände, die aus den Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; einen virtuellen Sternmittelpunkt bilden. Diese Mittelpunktspannung (&#039;&#039;MITTEL&#039;&#039;) kommt dann auf den Komparatoreingang &#039;&#039;AIN0&#039;&#039; vom AVR. Diese Spannung soll der Komparator später dann mit jeweils einer der Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; vergleichen um den Kommutierungszeitpunkt bestimmen zu können.&lt;br /&gt;
&lt;br /&gt;
Man kann die Widerstands-/ und Kapazitätswerte auch noch anpassen. Bei höheren Eingangsspannungen muss man darauf achten, dass die Eingänge vom AVR keine zu hohe Spannung abkriegen! Ein Regler, den ich gekauft habe, hat einiges höhere Widerstandswerte und kommt sogar ohne Kondensatoren aus. Hier hat man also durchaus noch Spielraum um ein bisschen zu tüfteln, für den Anfang ist die abgebildete Schaltung aber bestens geeignet.&lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller ===&lt;br /&gt;
&lt;br /&gt;
Als Mikrocontroller sind viele Typen aus der AVR-Serie geeignet. Bei der BrushlessCtrl wird zum Beispiel ein ATMega168 eingesetzt. Mit diesem habe ich auch mal angefangen, der scheint wirklich gut geeignet zu sein. Es reicht aber auch ein ATMega88 wenn man nicht alle möglichen Protokolle und Ansteuerungsarten (I2C, SPI, PPM) gleichzeitig einbauen will.&lt;br /&gt;
&lt;br /&gt;
Viele Regler verwenden auch einen AT90PWM, vorallem wenn mehrere PWM-Kanäle gebraucht werden.&lt;br /&gt;
&lt;br /&gt;
Übrigens wird bei käuflichen Reglern extrem häufig ein ATMega8 eingesetzt! Wenn man nur Software entwickeln möchte kann man auch einen solchen Regler kaufen und das eigene Programm aufspielen. Bei den [[#Weblinks]] findet man dazu auch noch Informationen.&lt;br /&gt;
&lt;br /&gt;
Um eine Raumzeigermodulation zu implementieren wird dann aber vermutlich schon ein 32-Bit Mikrocontroller nötig sein. Aber wie schon erwähnt ist für ein Modellbaumotor eine Raumzeigermodulation keinesfalls ein must-have.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Bei der Software kommt es jetzt natürlich sehr stark darauf an, wie die Hardware aufgebaut ist. Ich möchte hier aber nicht auf jede Variante eingehen, das gäbe viel zu viel Arbeit. Auch will ich ja kein fertiger Code bereitstellen, sondern nur Hinweise und Tipps geben. Wer nicht selber programmieren will, der kann ja mal die Mikrokopter-Firmware herunterladen, die älteren Versionen davon gibt es auf der Mikrokopter-Seite zum downloaden.&lt;br /&gt;
&lt;br /&gt;
Wichtig sind auf jeden Fall [[#Die 6 Zustände]]. Der Mikrocontroller muss die Phasen jeweils nacheinander so wie in der Tabelle ansteuern. Das ist soweit ja kein Problem, schwierig ist aber immer der richtige Zeitpunkt für die Kommutierung zu finden.&lt;br /&gt;
&lt;br /&gt;
Falls man einen IR2104 oder einen ähnlichen Treiber verwendet, würde die Software ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
* Beim Programmstart wird schonmal der PWM-Ausgang mit einem Timer aktiviert. Die Frequenz liegt normalerweise so im Bereich 12 bis 25kHz. Ich selber verwende 20kHz, da hört man dann auch dieses Pfeifen nicht mehr.&lt;br /&gt;
* Der Interrupt vom Analogkomparator muss aktiviert werden, um die Kommutierungszeitpunkte bestimmen zu können.&lt;br /&gt;
* Dann habe ich eine Funktion, welche den Zustand (1 bis 6) eins weiterschaltet und die Ausgänge entsprechend setzt. Dabei werden die Pins, die das PWM-Signal enthalten sollen, einfach als Eingang definiert, wie ich schonmal erwähnte.&lt;br /&gt;
* Wichtig ist ausserdem, dass bei jeder Kommutierung auch noch der richtige ADC-Kanal auf den Komparator geleitet wird per Multiplexer. Dieser Kanal wird bei jeder Kommutierung eins weitergeschaltet.&lt;br /&gt;
* Danach muss nur noch gewartet werden bis der Analogkomparator einen Interrupt auslöst. Sobald dies geschieht, wird die nächste Kommutierung ausgelöst, und das Spiel beginnt wieder von vorne.&lt;br /&gt;
&lt;br /&gt;
Ich glaube aber, dass dies noch nicht die ganz richtige Art ist, wie man die Kommutierung auslöst. Ich denke, man müsste nach einem Interrupt eine gewisse Zeit warten (je nach Kommutierungswinkel oder wie das heisst) und erst kurz vor dem nächsten Interrupt die Kommutierung auslösen. Also quasi immer einen Zustand später. Dazu muss aber die Verzögerungszeit ständig ausgerechnet werden, damit die auch bei jeder Drehzahl stimmt. Ich habe es selber noch nicht so implementiert, kann daher nicht sagen ob das so dann richtig funktioniert. &#039;&#039;&#039;Falls hier jemand besser Bescheid weiss, wäre es cool wenn man das hier noch ergänzen könnte.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Laut Literatur liegt der optimale Kommutierungszeitpunkt 30° nach dem Nulldurchgang der Spannung am nicht beschalteten Eingang. Die naheliegendste Möglichkeit wäre also die Zeit, die bei der aktuellen Drehzahl für eine Umdrehung benötigt wird, durch zwölf zu dividieren und so lange bis zur Kommutierung zu warten.&lt;br /&gt;
&lt;br /&gt;
Ausserdem scheint es auch Regler zu geben, die eine Kommutierung nicht mit dem Analogkomparator erfassen, sondern direkt mit ADC-Wandlungen. Dazu weiss ich aber leider auch nichts näheres, deshalb auch hier: &#039;&#039;&#039;Wenn jemand weiss, was es damit auf sich hat, bitte melden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Drehzahl des Motores lässt sich jetzt ganz bequem ändern, indem man den Duty-Cycle des PWM-Signales verändert. Der Motor beschleunigt bzw. bremst dann von alleine.&lt;br /&gt;
&lt;br /&gt;
=== Anlauf ===&lt;br /&gt;
&lt;br /&gt;
So, das war jetzt die Beschreibung für einen Motor, der bereits läuft. &#039;&#039;&#039;Bis&#039;&#039;&#039; der Motor allerdings mal dreht, muss man anders vorgehen, weil der stillstehende Motor ja keine Komparator-Interrupts auslöst, da keine BEMF vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Daher muss man den Motor zuerst mit einem starren Drehfeld auf eine gewisse Drehzahl beschleunigen, wie bei einem Schrittmotor. Sobald eine genügend hohe Drehzahl erreicht wurde, kann man in den geregelten Betrieb schalten. Am besten schaltet man dazu einfach alle Phasen ab und aktiviert den Komparator. Sobald der erste Interrupt vom Komparator ausgelöst wird, werden die Phasen wieder eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Der ganze Startvorgang ist aber schon eine Wissenschaft für sich. Es braucht (nach meiner Erfahrung) viel Zeit und Nerven, bis alles richtig funktioniert. Man kann aber am Anfang den Motor auch von Hand anwerfen, das geht viel einfacher als mit einer Zwangskommutierung. Ein Oszilloskop ist eigentlich auch absolut notwendig, um analysieren zu können was der Regler und die BEMF genau macht. &lt;br /&gt;
&lt;br /&gt;
Ganz wichtig aber an dieser Stelle: &#039;&#039;&#039;Wenn der Motor mit einem starren Drehfeld angesteuert wird, sieht die BEMF alles andere als schön aus!&#039;&#039;&#039; Das liegt daran, dass der Motor bei jeder Kommutierung beschleunigt, und danach wieder abgebremst wird, der Motor läuft einfach nicht „rund“. Wenn ihr also irgendwas komisches auf dem Oszilloskop seht, ist das kein Fehler in eurer Schaltung, das ist normal bei Zwangskommutierung!&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr die BEMF auf dem Oszilloskop anschauen wollt, könnt Ihr entweder den Motor einfach von Hand drehen, oder ihr dreht den Motor mit Zwangskommutierung hoch, und schaltet dann alle Phasen ab (nicht auf GND, in der Luft hängend). Direkt nach dem Abschalten der Phasen sollte die BEMF einen relativ schönen Drehstrom zeigen (muss ich selbst noch kontrollieren ob das wirklich der Fall ist :-) )&lt;br /&gt;
&lt;br /&gt;
Bis jetzt habe ich es mit dieser Variante aber noch nicht so richtig geschafft, einen brauchbaren Anlaufvorgang hinzukriegen. Ich glaube auch, dass gekaufte Regler das nicht so machen. Diese scheinen nur einen kräftigen Strom auf eine Phase zu geben, und werten dann die entstandene BEMF aus, aus der dann berechnet werden kann, welche Phase als nächstes bestromt werden muss. So richtig habe ich das aber noch nicht angeschaut, &#039;&#039;&#039;vielleicht weiss hier jemand besser Bescheid und könnte es hier beschreiben?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip eines Anlaufvorgangs eines sensorlosen BLDC ist folgendes:&lt;br /&gt;
- Man präge ein Feld ein, bei dem angenommen werden muss, dass der Motor diesem ab Stillstand auch folgt.&lt;br /&gt;
- Sobald diese Annahme durch Auftreten eines durch BEMF erzeugten Ereignisses bestätigt wird, kann in den geregelten Betrieb umgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Komparator ===&lt;br /&gt;
&lt;br /&gt;
Wenn man sich für die Kommutierungs-Erkennung per Analogkomparator entscheidet, muss man noch ein sehr nützliches Feature von den AVRs kennen. Da man ja abwechslungsweise drei verschiedene Signale (BEMF_A...C) mit der Mittelpunktspannung vergleichen muss, aber nur ein einziger Analogkomparator vorhanden ist, muss man den sogenannten Analog-Multiplexer benutzen. Mit diesem in den AVRs integrierten Multiplexer kann man nun die Spannung am Pin &amp;quot;AIN0&amp;quot; mit einem beliebigen Analogeingang (ADC0...ADC7) vergleichen. Natürlich kann man nicht mehrere Kanäle gleichzeitig anwählen, da es nur einen einzigen Komparator gibt. Das ist für unsere Anwendung allerdings kein Problem, wir müssen immer nur eines der BEMF-Signale mit der Mittelpunktspannung vergleichen.&lt;br /&gt;
&lt;br /&gt;
Näheres dazu und wie man den Multiplexer benutzt erfährt man im Datenblatt des verwendeten Mukrocontrollers. Der entsprechende Abschnitt heisst &amp;quot;Analog Comparator Multiplexed Input&amp;quot; (unter &amp;quot;Analog Comparator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Schnittstellen ===&lt;br /&gt;
&lt;br /&gt;
Man kann nun den Sollwert der Drehzahl wahlweise über einen PPM-Eingang, über [[UART]], [[SPI]], [[I2C]] oder mit einem Potentiometer vorgeben. Welche Ansteuerung man wählt hängt davon ab, wie und wo der Motor eingesetzt werden soll und ist deshalb jedem selber überlassen.&lt;br /&gt;
&lt;br /&gt;
== Bildmaterial ==&lt;br /&gt;
=== Oszillogramme ===&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_PWM.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Die drei Phasen während dem geregelten Betrieb, die BEMF ist sehr schön zu erkennen (immer zwischen den Zuständen &amp;quot;PWM&amp;quot; und &amp;quot;LOW&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_Vollgas.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sehen die drei Phasen bei Vollgas aus (100% PWM). Die BEMF ist jetzt sogar so steil, dass sie die beiden Zustände &#039;&#039;Low&#039;&#039; und &#039;&#039;High&#039;&#039; mit einer fast perfekten Geraden verbindet!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_richtig.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* Gelb: Phase A, BEMF sehr schön erkennbar&lt;br /&gt;
* Blau: Mittelpunktspannung&lt;br /&gt;
* Rot: BEMF von Phase A (nach der BEMF-Schaltung!)&lt;br /&gt;
* Grün: Komparator-Interrupts (steigende Flanke) Jeder dritte Interrupt gehört zur Phase A, die anderen Interrupts stammen von den anderen Phasen, die nicht auf dem Bild zu sehen sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_falsch.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So kann z.B. die BEMF während der Zwangskommutierung aussehen. Dadurch werden auch zu viele Komparator-Interrupts (Grün, jede Flanke) ausgelöst. Kein schöner Anblick...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Anlauf_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sieht der Anlaufvorgang bei einem gekauften Regler aus. eine extrem kurze Geschichte im Vergleich mit meinen paar Umdrehungen mit Zwangskommutierung. Wer kennt das Geheimnis?&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
Als Anregung, wie so ein Regler aussehen könnte (nur 40x26mm klein, inklusive Optokoppler, drei Treibern und drei schönen Stecker!):&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_top_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_bot_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Der HCPL-0600 auf der Unterseite ist übrigens ein Optokoppler um das PPM-Eingangssignal galvanisch zu entkoppeln. Ist nicht zwingend nötig, war aber grad Platz da... :-)&lt;br /&gt;
&lt;br /&gt;
== Siehe Auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/248509 Diskussion zum Artikel]&lt;br /&gt;
* [[BLDC Demo Board]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[Leiterbahnbreite]] Unbedingt beachten bei grösseren Strömen!&lt;br /&gt;
* [[Kühlkörper]] Bei sehr hohen Strömen evtl. nötig&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.atmel.com/Images/doc8012.pdf AppNote AVR444 von Atmel]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00885a.pdf BLDC Theorie(AN885 Microchip)]&lt;br /&gt;
* [http://www.mikrokopter.de/ucwiki/BrushlessCtrl BrushlessCtrl vom Mikrokopter]&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=BL-Ctrl&amp;amp; Software vom Mikrokopter Brushless-Regler]&lt;br /&gt;
* [http://home.versanet.de/~b-konze/ Die Seite von B. Konze, einer der Pioniere in diesem Bereich]&lt;br /&gt;
* [http://www.rcgroups.com/forums/showthread.php?t=1513678 Ein Thema auf rcgroups.com (Englisch) wo einige käuflichen Regler näher angeschaut wurden und eine eigene Firmware angeboten wird]&lt;br /&gt;
* [http://rmmx.gmxhome.de/bldchv/start.html Ein Regler-Projekt für etwas grössere Motoren]&lt;br /&gt;
* [http://www.fc00.de/quadrokopter_6_kw.htm Regler für sehr grosse Motoren]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf Appnote AN1083 von Microchip, sehr detailliert]&lt;br /&gt;
[[Kategorie:Motoren]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67809</id>
		<title>Brushless-Controller für Modellbaumotoren</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=67809"/>
		<updated>2012-08-06T12:13:10Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Internet gibt es einige grundlegende Informationen zur Funktionsweise und Ansteuerung von Brushless-Motoren (BLDC). Für die Entwicklung eines solchen Reglers findet man aber nur wenig richtig detaillierte Informationen und Erfahrungsberichte. In diesem Artikel sollen genau diese Lücken geschlossen werden. Es soll hier aber kein fertiges Produkt (Schaltplan + Layout + Software) angeboten werden. Viel mehr soll es die Eigenentwicklung unterstützen, Ideen und Erfahrungen anbieten.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle weise ich noch darauf hin, dass man bei den [[#Weblinks]] noch einige sehr gute Informationen findet! Es gibt dort Hardware und Software, es lohnt sich die Links mal anzuschauen.&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es genau? ====&lt;br /&gt;
&lt;br /&gt;
Es geht hier um die sogenannten elektrisch kommutierten bürstenlosen Gleichstrommotoren (BLDC) aus dem Modellbaubereich. &lt;br /&gt;
&lt;br /&gt;
Deren Eigenschaften sind:&lt;br /&gt;
* Haben drei Anschlüsse für die drei Phasen, ansonsten sind keine weiteren Anschlüsse vorhanden&lt;br /&gt;
* Werden in der Regel mit LiPo Akkus versorgt&lt;br /&gt;
* Leistung im Bereich von ca. 100W bis 2kW&lt;br /&gt;
* Spannungen im Bereich von ca. 10 bis 50V&lt;br /&gt;
* Ströme im Bereich von ca. 5 bis 120A&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es hier nicht? ====&lt;br /&gt;
&lt;br /&gt;
* Motoren mit Hallsensoren für die Rückmeldung&lt;br /&gt;
* Festplattenmotoren&lt;br /&gt;
&lt;br /&gt;
Unter Umständen kann aber dieser Artikel auch für solche Motoren nützlich sein.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise dieser Motoren ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_Spannungs_Diagramm.png|thumb|right|250px|Ansteuerung der 3 Phasen]]&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich werden die 3 Phasen nacheinander bestromt, die Phasenspannungen wären also drei um 120° phasenverschobene Rechteckspannungen. Ein sinusförmiger Drehstrom ist nicht nötig, es genügen Rechteckspannungen. Mit einer Raumzeigermodulation könnte man die Stromaufnahme und die Geräuschentwicklung zwar noch verringern, macht die Ansteuerung aber einiges aufwändiger. Sogar die käuflichen Regler arbeiten nur mit Rechtecksignalen, zumindest die die ich kenne. &lt;br /&gt;
&lt;br /&gt;
Dabei gibt es für jede Phase die Zustände „Low“, „High“ und „Floating“. Low bedeutet 0V (GND), High entspricht der Versorgungsspannung und Floating ist keines von beidem, die Phase „hängt in der Luft“. Bei „High“ wird aber noch der Mittelwert der Spannung per PWM eingestellt, über das Tastverhältnis wird schlussendlich die Drehzahl verändert! Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
In der Grafik rechts kann man den Spannungsverlauf sehr gut erkennen. Das Diagramm zeigt aber nur den theoretischen Verlauf der Spannungen, wobei die gestrichelten Linien den Zustand &amp;quot;floating&amp;quot; symbolisieren. Dies kann man in einem Diagramm ja nicht wirklich darstellen, das ist einfach symbolisch gemeint. Interessanterweise sehen die Spannungen aufgrund der BEMF aber tatsächlich ziemlich ähnlich aus wie im Diagramm!&lt;br /&gt;
&lt;br /&gt;
=== Die 6 Zustände ===&lt;br /&gt;
&lt;br /&gt;
Wie man erkennen kann, werden 6 Zustände gebraucht, die sich dann immer wiederholen. Die Kommutierung ist also einfach ein Weiterschalten des Zustandes. &lt;br /&gt;
&#039;&#039;Diese 6 Zustände sind nicht mit den drei Zuständen von oben (High, Low, Floating) zu verwechseln, das ist ein anderes Thema!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In einer Tabelle dargestellt würde das folgendermassen aussehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand || Phase A || Phase B || Phase C || Stromfluss || Komparator-Eingänge&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM || Floating || GND || A --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Floating || PWM || GND || B --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GND || PWM || Floating || B --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GND || Floating || PWM || C --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Floating || GND || PWM || C --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PWM || GND || Floating || A --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* Die Nummern in der ersten Spalte entsprechen genau den sechs Zuständen, die auch im obigen Diagramm nummeriert sind (Alle 6 Zustände zusammen bilden einen Zyklus, wie es auch im Diagramm dargestellt ist)&lt;br /&gt;
* Den Inhalt der letzten Spalte wird später noch erläutert. Die Bezeichnungen beziehen sich auf die [[#BEMF-Schaltung]].&lt;br /&gt;
&lt;br /&gt;
=== Einsatz der BEMF ===&lt;br /&gt;
Das schaut bis jetzt eigentlich wie ein Synchronmotor oder Schrittmotor aus, was ein BLDC im Prinzip auch ist.  &lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt wurde, wird ein BLDC elektronisch kommutiert. Das heisst, die Kommutierung wird nicht einfach stur vorgegeben, sondern es wird immer Rücksicht auf die Ankerposition genommen. Dazu muss man allerdings wissen, wann man die Kommutierung genau auslösen soll. &lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren heißt Block-Kommutierung und ist ein Kompromiss aus Aufwand und Ergebnis:&lt;br /&gt;
Idealerweise werden die Ströme im Stator so eingeprägt, dass der Statorfluss dem Rotorfluss immer um 90° vorauseilt. Nur so wir das ideale Drehmoment erzeugt (siehe Literatur zur permanenterregten Synchronmaschine). Allerdings hat dieses Verfahren, auch Feldorientierte Regelung oder Vektor-Regelung genannt, den Nachteil, dass meistens teure Positionssensorik für den Rotor nowendig ist und auch die nötige Rechenleistung stark ansteigt. Die komplette Regelung muss für jede PWM-Periode gerechnet werden, damit sich der Aufwand lohnt. &lt;br /&gt;
Im Fall der Block-Kommutierung ist der ideale Kommutierungszeitpunkt also der, bei dem das Stator-Feld dem Rotor-Feld im Mittel um 90 ° vorauseilt. Dieser ideale Kommutierungszeitpunkt ist wegen der als konstant angenommenen Rechenzeit für die Kommutierung drehzahlabhängig.&lt;br /&gt;
&lt;br /&gt;
Zur Erreichung einer höheren Maximaldrehzahl kann das Rotorfeld durch das Statorfeld im sogenannten Feldschwäch-Betrieb geschwächt werden. Es ergeben sich Feldschwäch-(Blind)ströme im Bereich der Nennströme.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann auch ein BLDC nicht ohne Kenntnis der Lage des Rotors kommutiert werden. Und hier kommt die sogenannte Back Electromotive Force (BEMF) zum Einsatz. Von den drei Phasen liegt ja zu jedem Zeitpunkt genau eine Phase in der Luft wie man am Diagramm oben erkennen kann. Aufgrund des drehenden Magnetfeldes im Motor wird an dieser Phase nun eine Spannung induziert. Und genau diese induzierte Spannung gibt nun Auskunft darüber, in welchem Winkel sich der Anker befindet, und daraus kann man dann auch den Zeitpunkt der nächsten Kommutierung bestimmen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird aber auch noch die Sternmittelpunktspannung der drei Phasen benötigt, welche aber leider nicht direkt zur Verfügung steht. Das ist aber kein Problem, mit drei Widerständen kann man sich die selber erzeugen (siehe [[#BEMF-Schaltung]]).&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten die BEMF-Spannungen die Sternmittelpunktspannung ständig kreuzen, was man dann mit einem Komparator erfassen kann. Und den Interrupt, den der Komparator auslöst, ist nun verantwortlich für die nächste Kommutierung.&lt;br /&gt;
Der Komparator wird natürlich nacheinander mit den drei Phasen gefüttert, es darf immer nur die Phase an den Komparator angeschlossen sein, die auch in der Luft hängt! In der Tabelle [[#Die 6 Zustände]] sieht man, welche zwei Spannungen der Komparator jeweils vergleichen muss.&lt;br /&gt;
&lt;br /&gt;
Als Komparator kann man übrigens den integrierten nehmen, den es in den AVRs gibt. Diese (alle?) haben auch den benötigten Multiplexer, um zwischen den drei Analogquellen wählen zu können. Näheres dazu im Abschnitt [[#Software]].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
&lt;br /&gt;
==== Treiber ====&lt;br /&gt;
&lt;br /&gt;
Um die drei notwendigen Zustände (&#039;&#039;Low&#039;&#039;, &#039;&#039;High&#039;&#039; und &#039;&#039;Floating&#039;&#039;) für jede der drei Phasen realisieren zu können, werden drei Halbbrücken mit Mosfets benötigt. Hier gibt es dann auch schon mehrere Varianten, wie man das aufbauen kann. Grundsätzlich muss man sich mal überlegen ob fertige FET-Treiber oder diskrete Treiber verwendet werden sollen. Die FET-Treiber haben einige sehr schöne Vorteile, deshalb sollte man diese meiner Meinung nach bevorzugen.&lt;br /&gt;
&lt;br /&gt;
Die Vorteile wären:&lt;br /&gt;
&lt;br /&gt;
* Integrierter Kurzschlussschutz mit dead time, ein Softwarefehler kann die FETs nicht zerstören. Das kann in der Entwicklungsphase sehr von Vorteil sein :-)&lt;br /&gt;
* Die FETs können mit ordentlicher Geschwindigkeit geschaltet werden, und die Mikrocontroller-Ports werden trotzdem nicht stark belastet. So kann die Wärmeentwicklung der FETs noch etwas reduziert werden.&lt;br /&gt;
* Bei Treibern die mit nur einem Eingang zwischen Lowside und Highside Mosfets toggeln (z.B. IR2104), ist der sogenannte „aktiver Freilauf“ bereits in Hardware realisiert und ermöglicht so mit wenig Aufwand eine extrem niedrige Erwärmung der Mosfets. Das ermöglicht schon sehr grosse Ströme auch ohne Kühlkörper!&lt;br /&gt;
* Es können günstigere Mosfets verwendet werden, es müssen keine TTL-Kompatible FETs sein. Auch ist eine niedrige Gatekapazität nicht so von Bedeutung wie bei direkter Ansteuerung mit einem Mikrocontroller.&lt;br /&gt;
* Je nach dem welchen Treiber man verwendet, kann der Softwareaufwand und die Fehleranfälligkeit deutlich reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Nachteile von Treiber sind:&lt;br /&gt;
&lt;br /&gt;
* Mehr Bauteile auf der Platine.&lt;br /&gt;
* Vermutlich insgesamt etwas teurer, auch wenn die FETs günstiger sind.&lt;br /&gt;
* Bei vielen Treibern ist eine Minimalspannung von ca. 10V notwendig, damit sie funktionieren. Bei einem fast leeren 3S LiPo Akku könnte das vielleicht schon kritisch werden. Auch darf z.B. beim IR2104 eine Spannung von 20V nicht überschritten werden. Daher kommt (ohne StepUp und StepDown Wandler) eigentlich fast nur noch ein 4S Akku in Frage. Möchte man einen grösseren Eingangsspannungsbereich haben muss man noch entsprechende Spannungsregler einbauen.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe es schon mit einem IR2104S probiert, dieser erscheint mir sehr geeignet für diese Aufgabe. Ich betreibe ihn mit einem 4S LiPo, damit läuft das Teil perfekt. Kann ich nur weiterempfehlen!&lt;br /&gt;
&lt;br /&gt;
==== Beispielschaltung ====&lt;br /&gt;
[[Datei:BLDC_Leistungsteil_1.png|thumb|right|300px|Beispiel einer Halbbrücke inklusive Strommessung]]&lt;br /&gt;
Hier ein Beispiel, wie der Leistungsteil einer Phase aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
Für die exakte Beschaltung der Treiber muss man natürlich dessen Datenblatt studieren!&lt;br /&gt;
&lt;br /&gt;
Hier sieht man auch gleich noch die Strommessung, die man natürlich nicht für jede Phase einzeln aufbauen muss. Man kann sie sogar ganz weglassen, sie könnte aber nützlich sein um eine Überlast des Motores erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Widerstand R20 ist dazu da, dass auf dem Treiber das PWM-Signal liegt, sobald die Leitung „IN_A“ in der Luft hängt (uC Pin als Eingang definiert). So wird nur ein einziger PWM-Ausgang vom Mikrocontroller benötigt für alle drei Phasen, erfordert also kein Soft-PWM oder sonst irgend ein Murks. Diese Schaltung habe ich übrigens beim Mikrokopter-Projekt abgeschaut.&lt;br /&gt;
&lt;br /&gt;
Übrigens muss an die Versorgung unbedingt noch ein grosser Elko gehängt werden, am besten möglichst nahe an die Mosfets (keine langen Leitungen zwischen Elko und Mosfets). Die erforderliche Kapazität hängt davon ab, wieviel Strom der Motor braucht. bei kleinen bis mittleren Motoren sollten so 220uF bis 680uF ausreichend sein.&lt;br /&gt;
&lt;br /&gt;
=== BEMF-Schaltung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_BEMF_schaltung.png|thumb|right|300px|BEMF-Schaltung]]&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Teil ist aber auch die BEMF-Schaltung. Dabei wird häufig die Schaltung vom Mikrokopter eingesetzt (siehe Schaltung rechts).&lt;br /&gt;
&lt;br /&gt;
Die Schaltung besteht erstmal aus drei Spannungsteilern, die die Phasenspannungen auf ein Spannungsniveau heruntersetzen, das man auf die Mikrokontrollereingänge legen darf. Keramikkondensatoren glätten diese Spannungen, weil die aufgrund der PWM sonst sehr stark ausschlagen. Dann gehen diese drei Spannungen (&#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039;) auf drei ADC-Eingänge des Mikrocontrollers.&lt;br /&gt;
&lt;br /&gt;
Und dann sind da noch die drei Widerstände, die aus den Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; einen virtuellen Sternmittelpunkt bilden. Diese Mittelpunktspannung (&#039;&#039;MITTEL&#039;&#039;) kommt dann auf den Komparatoreingang &#039;&#039;AIN0&#039;&#039; vom AVR. Diese Spannung soll der Komparator später dann mit jeweils einer der Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; vergleichen um den Kommutierungszeitpunkt bestimmen zu können.&lt;br /&gt;
&lt;br /&gt;
Man kann die Widerstands-/ und Kapazitätswerte auch noch anpassen. Bei höheren Eingangsspannungen muss man darauf achten, dass die Eingänge vom AVR keine zu hohe Spannung abkriegen! Ein Regler, den ich gekauft habe, hat einiges höhere Widerstandswerte und kommt sogar ohne Kondensatoren aus. Hier hat man also durchaus noch Spielraum um ein bisschen zu tüfteln, für den Anfang ist die abgebildete Schaltung aber bestens geeignet.&lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller ===&lt;br /&gt;
&lt;br /&gt;
Als Mikrocontroller sind viele Typen aus der AVR-Serie geeignet. Bei der BrushlessCtrl wird zum Beispiel ein ATMega168 eingesetzt. Mit diesem habe ich auch mal angefangen, der scheint wirklich gut geeignet zu sein. Es reicht aber auch ein ATMega88 wenn man nicht alle möglichen Protokolle und Ansteuerungsarten (I2C, SPI, PPM) gleichzeitig einbauen will.&lt;br /&gt;
&lt;br /&gt;
Viele Regler verwenden auch einen AT90PWM, vorallem wenn mehrere PWM-Kanäle gebraucht werden.&lt;br /&gt;
&lt;br /&gt;
Übrigens wird bei käuflichen Reglern extrem häufig ein ATMega8 eingesetzt! Wenn man nur Software entwickeln möchte kann man auch einen solchen Regler kaufen und das eigene Programm aufspielen. Bei den [[#Weblinks]] findet man dazu auch noch Informationen.&lt;br /&gt;
&lt;br /&gt;
Um eine Raumzeigermodulation zu implementieren wird dann aber vermutlich schon ein 32-Bit Mikrocontroller nötig sein. Aber wie schon erwähnt ist für ein Modellbaumotor eine Raumzeigermodulation keinesfalls ein must-have.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Bei der Software kommt es jetzt natürlich sehr stark darauf an, wie die Hardware aufgebaut ist. Ich möchte hier aber nicht auf jede Variante eingehen, das gäbe viel zu viel Arbeit. Auch will ich ja kein fertiger Code bereitstellen, sondern nur Hinweise und Tipps geben. Wer nicht selber programmieren will, der kann ja mal die Mikrokopter-Firmware herunterladen, die älteren Versionen davon gibt es auf der Mikrokopter-Seite zum downloaden.&lt;br /&gt;
&lt;br /&gt;
Wichtig sind auf jeden Fall [[#Die 6 Zustände]]. Der Mikrocontroller muss die Phasen jeweils nacheinander so wie in der Tabelle ansteuern. Das ist soweit ja kein Problem, schwierig ist aber immer der richtige Zeitpunkt für die Kommutierung zu finden.&lt;br /&gt;
&lt;br /&gt;
Falls man einen IR2104 oder einen ähnlichen Treiber verwendet, würde die Software ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
* Beim Programmstart wird schonmal der PWM-Ausgang mit einem Timer aktiviert. Die Frequenz liegt normalerweise so im Bereich 12 bis 25kHz. Ich selber verwende 20kHz, da hört man dann auch dieses Pfeifen nicht mehr.&lt;br /&gt;
* Der Interrupt vom Analogkomparator muss aktiviert werden, um die Kommutierungszeitpunkte bestimmen zu können.&lt;br /&gt;
* Dann habe ich eine Funktion, welche den Zustand (1 bis 6) eins weiterschaltet und die Ausgänge entsprechend setzt. Dabei werden die Pins, die das PWM-Signal enthalten sollen, einfach als Eingang definiert, wie ich schonmal erwähnte.&lt;br /&gt;
* Wichtig ist ausserdem, dass bei jeder Kommutierung auch noch der richtige ADC-Kanal auf den Komparator geleitet wird per Multiplexer. Dieser Kanal wird bei jeder Kommutierung eins weitergeschaltet.&lt;br /&gt;
* Danach muss nur noch gewartet werden bis der Analogkomparator einen Interrupt auslöst. Sobald dies geschieht, wird die nächste Kommutierung ausgelöst, und das Spiel beginnt wieder von vorne.&lt;br /&gt;
&lt;br /&gt;
Ich glaube aber, dass dies noch nicht die ganz richtige Art ist, wie man die Kommutierung auslöst. Ich denke, man müsste nach einem Interrupt eine gewisse Zeit warten (je nach Kommutierungswinkel oder wie das heisst) und erst kurz vor dem nächsten Interrupt die Kommutierung auslösen. Also quasi immer einen Zustand später. Dazu muss aber die Verzögerungszeit ständig ausgerechnet werden, damit die auch bei jeder Drehzahl stimmt. Ich habe es selber noch nicht so implementiert, kann daher nicht sagen ob das so dann richtig funktioniert. &#039;&#039;&#039;Falls hier jemand besser Bescheid weiss, wäre es cool wenn man das hier noch ergänzen könnte.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Laut Literatur liegt der optimale Kommutierungszeitpunkt 30° nach dem Nulldurchgang der Spannung am nicht beschalteten Eingang. Die naheliegendste Möglichkeit wäre also die Zeit, die bei der aktuellen Drehzahl für eine Umdrehung benötigt wird, durch zwölf zu dividieren und so lange bis zur Kommutierung zu warten.&lt;br /&gt;
&lt;br /&gt;
Ausserdem scheint es auch Regler zu geben, die eine Kommutierung nicht mit dem Analogkomparator erfassen, sondern direkt mit ADC-Wandlungen. Dazu weiss ich aber leider auch nichts näheres, deshalb auch hier: &#039;&#039;&#039;Wenn jemand weiss, was es damit auf sich hat, bitte melden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Drehzahl des Motores lässt sich jetzt ganz bequem ändern, indem man den Duty-Cycle des PWM-Signales verändert. Der Motor beschleunigt bzw. bremst dann von alleine.&lt;br /&gt;
&lt;br /&gt;
=== Anlauf ===&lt;br /&gt;
&lt;br /&gt;
So, das war jetzt die Beschreibung für einen Motor, der bereits läuft. &#039;&#039;&#039;Bis&#039;&#039;&#039; der Motor allerdings mal dreht, muss man anders vorgehen, weil der stillstehende Motor ja keine Komparator-Interrupts auslöst, da keine BEMF vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Daher muss man den Motor zuerst mit einem starren Drehfeld auf eine gewisse Drehzahl beschleunigen, wie bei einem Schrittmotor. Sobald eine genügend hohe Drehzahl erreicht wurde, kann man in den geregelten Betrieb schalten. Am besten schaltet man dazu einfach alle Phasen ab und aktiviert den Komparator. Sobald der erste Interrupt vom Komparator ausgelöst wird, werden die Phasen wieder eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Der ganze Startvorgang ist aber schon eine Wissenschaft für sich. Es braucht (nach meiner Erfahrung) viel Zeit und Nerven, bis alles richtig funktioniert. Man kann aber am Anfang den Motor auch von Hand anwerfen, das geht viel einfacher als mit einer Zwangskommutierung. Ein Oszilloskop ist eigentlich auch absolut notwendig, um analysieren zu können was der Regler und die BEMF genau macht. &lt;br /&gt;
&lt;br /&gt;
Ganz wichtig aber an dieser Stelle: &#039;&#039;&#039;Wenn der Motor mit einem starren Drehfeld angesteuert wird, sieht die BEMF alles andere als schön aus!&#039;&#039;&#039; Das liegt daran, dass der Motor bei jeder Kommutierung beschleunigt, und danach wieder abgebremst wird, der Motor läuft einfach nicht „rund“. Wenn ihr also irgendwas komisches auf dem Oszilloskop seht, ist das kein Fehler in eurer Schaltung, das ist normal bei Zwangskommutierung!&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr die BEMF auf dem Oszilloskop anschauen wollt, könnt Ihr entweder den Motor einfach von Hand drehen, oder ihr dreht den Motor mit Zwangskommutierung hoch, und schaltet dann alle Phasen ab (nicht auf GND, in der Luft hängend). Direkt nach dem Abschalten der Phasen sollte die BEMF einen relativ schönen Drehstrom zeigen (muss ich selbst noch kontrollieren ob das wirklich der Fall ist :-) )&lt;br /&gt;
&lt;br /&gt;
Bis jetzt habe ich es mit dieser Variante aber noch nicht so richtig geschafft, einen brauchbaren Anlaufvorgang hinzukriegen. Ich glaube auch, dass gekaufte Regler das nicht so machen. Diese scheinen nur einen kräftigen Strom auf eine Phase zu geben, und werten dann die entstandene BEMF aus, aus der dann berechnet werden kann, welche Phase als nächstes bestromt werden muss. So richtig habe ich das aber noch nicht angeschaut, &#039;&#039;&#039;vielleicht weiss hier jemand besser Bescheid und könnte es hier beschreiben?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip eines Anlaufvorgangs eines sensorlosen BLDC ist folgendes:&lt;br /&gt;
- Man präge ein Feld ein, bei dem angenommen werden muss, dass der Motor diesem ab Stillstand auch folgt.&lt;br /&gt;
- Sobald diese Annahme durch Auftreten eines durch BEMF erzeugten Ereignisses bestätigt wird, kann in den geregelten Betrieb umgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Komparator ===&lt;br /&gt;
&lt;br /&gt;
Wenn man sich für die Kommutierungs-Erkennung per Analogkomparator entscheidet, muss man noch ein sehr nützliches Feature von den AVRs kennen. Da man ja abwechslungsweise drei verschiedene Signale (BEMF_A...C) mit der Mittelpunktspannung vergleichen muss, aber nur ein einziger Analogkomparator vorhanden ist, muss man den sogenannten Analog-Multiplexer benutzen. Mit diesem in den AVRs integrierten Multiplexer kann man nun die Spannung am Pin &amp;quot;AIN0&amp;quot; mit einem beliebigen Analogeingang (ADC0...ADC7) vergleichen. Natürlich kann man nicht mehrere Kanäle gleichzeitig anwählen, da es nur einen einzigen Komparator gibt. Das ist für unsere Anwendung allerdings kein Problem, wir müssen immer nur eines der BEMF-Signale mit der Mittelpunktspannung vergleichen.&lt;br /&gt;
&lt;br /&gt;
Näheres dazu und wie man den Multiplexer benutzt erfährt man im Datenblatt des verwendeten Mukrocontrollers. Der entsprechende Abschnitt heisst &amp;quot;Analog Comparator Multiplexed Input&amp;quot; (unter &amp;quot;Analog Comparator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Schnittstellen ===&lt;br /&gt;
&lt;br /&gt;
Man kann nun den Sollwert der Drehzahl wahlweise über einen PPM-Eingang, über [[UART]], [[SPI]], [[I2C]] oder mit einem Potentiometer vorgeben. Welche Ansteuerung man wählt hängt davon ab, wie und wo der Motor eingesetzt werden soll und ist deshalb jedem selber überlassen.&lt;br /&gt;
&lt;br /&gt;
== Bildmaterial ==&lt;br /&gt;
=== Oszillogramme ===&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_PWM.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Die drei Phasen während dem geregelten Betrieb, die BEMF ist sehr schön zu erkennen (immer zwischen den Zuständen &amp;quot;PWM&amp;quot; und &amp;quot;LOW&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_Vollgas.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sehen die drei Phasen bei Vollgas aus (100% PWM). Die BEMF ist jetzt sogar so steil, dass sie die beiden Zustände &#039;&#039;Low&#039;&#039; und &#039;&#039;High&#039;&#039; mit einer fast perfekten Geraden verbindet!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_richtig.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* Gelb: Phase A, BEMF sehr schön erkennbar&lt;br /&gt;
* Blau: Mittelpunktspannung&lt;br /&gt;
* Rot: BEMF von Phase A (nach der BEMF-Schaltung!)&lt;br /&gt;
* Grün: Komparator-Interrupts (steigende Flanke) Jeder dritte Interrupt gehört zur Phase A, die anderen Interrupts stammen von den anderen Phasen, die nicht auf dem Bild zu sehen sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_falsch.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So kann z.B. die BEMF während der Zwangskommutierung aussehen. Dadurch werden auch zu viele Komparator-Interrupts (Grün, jede Flanke) ausgelöst. Kein schöner Anblick...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Anlauf_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sieht der Anlaufvorgang bei einem gekauften Regler aus. eine extrem kurze Geschichte im Vergleich mit meinen paar Umdrehungen mit Zwangskommutierung. Wer kennt das Geheimnis?&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
Als Anregung, wie so ein Regler aussehen könnte (nur 40x26mm klein, inklusive Optokoppler, drei Treibern und drei schönen Stecker!):&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_top_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_bot_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Der HCPL-0600 auf der Unterseite ist übrigens ein Optokoppler um das PPM-Eingangssignal galvanisch zu entkoppeln. Ist nicht zwingend nötig, war aber grad Platz da... :-)&lt;br /&gt;
&lt;br /&gt;
== Siehe Auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/248509 Diskussion zum Artikel]&lt;br /&gt;
* [[BLDC Demo Board]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[Leiterbahnbreite]] Unbedingt beachten bei grösseren Strömen!&lt;br /&gt;
* [[Kühlkörper]] Bei sehr hohen Strömen evtl. nötig&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.atmel.com/Images/doc8012.pdf AppNote AVR444 von Atmel]&lt;br /&gt;
* [http://electrathonoftampabay.org/www/Documents/Motors/Brushless%20DC%20(BLDC)%20Motor%20Fundamentals.pdf BLDC Theorie]&lt;br /&gt;
* [http://www.mikrokopter.de/ucwiki/BrushlessCtrl BrushlessCtrl vom Mikrokopter]&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=BL-Ctrl&amp;amp; Software vom Mikrokopter Brushless-Regler]&lt;br /&gt;
* [http://home.versanet.de/~b-konze/ Die Seite von B. Konze, einer der Pioniere in diesem Bereich]&lt;br /&gt;
* [http://www.rcgroups.com/forums/showthread.php?t=1513678 Ein Thema auf rcgroups.com (Englisch) wo einige käuflichen Regler näher angeschaut wurden und eine eigene Firmware angeboten wird]&lt;br /&gt;
* [http://rmmx.gmxhome.de/bldchv/start.html Ein Regler-Projekt für etwas grössere Motoren]&lt;br /&gt;
* [http://www.fc00.de/quadrokopter_6_kw.htm Regler für sehr grosse Motoren]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf Appnote AN1083 von Microchip, sehr detailliert]&lt;br /&gt;
[[Kategorie:Motoren]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67790</id>
		<title>Bitmanipulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67790"/>
		<updated>2012-08-04T22:45:15Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Hilfsfunktionen als Inline-Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitoperatoren ==&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren stammen ursprünglich aus einer Hochsprache wie C.&lt;br /&gt;
&lt;br /&gt;
* &amp;gt;&amp;gt; = Rechts schieben&lt;br /&gt;
* &amp;lt;&amp;lt; = Links schieben (Bsp: &#039;&#039;a&amp;lt;&amp;lt;b&#039;&#039; ist das gleiche wie &#039;&#039;a * 2^b&#039;&#039;; bzw. bei 1&amp;lt;&amp;lt;3 wird die 1 um drei Stellen nach links geschoben)&lt;br /&gt;
* |  = binäres ODER&lt;br /&gt;
* &amp;amp;  = binäres UND&lt;br /&gt;
* usw.&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren in dieser Schreibweise können in Assemblercode für&lt;br /&gt;
konstante Ausdrücke benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, (1&amp;lt;&amp;lt;3) | (1&amp;lt;&amp;lt;1) | (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0)&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 8 | 2 | 4 | 1&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 15&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmaske ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ist häufiger von dem Begriff &#039;&#039;Bitmaske&#039;&#039; die Rede. Damit wird eine Folge von einzelnen Bit bezeichnet, die den Zustand Null (&#039;0&#039;) oder Eins (&#039;1&#039;) darstellen können.&lt;br /&gt;
&lt;br /&gt;
Bitmasken werden im allgemeinen dazu verwendet, um unter Anwendung eines Operators (z.&amp;amp;nbsp;B. UND, ODER, XOR), eine Eingabe zu manipulieren. Das Ergebnis ist dann die Anwendung des Operators auf die Eingabe und der Bitmaske.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Operator eine Funktion mit zwei Argumenten ist, dann lässt sich dessen Anwendung wie folgt schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Ergebnis = Operator( Eingabe, Bitmaske )&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bitmaske ist häufig eine Konstante, da diese z.&amp;amp;nbsp;B. die Information über die Position einer Information in einem Register darstellt. Das kann z.&amp;amp;nbsp;B. ein Überlaufflag in einem Timer Statusregister sein.&lt;br /&gt;
&lt;br /&gt;
== Bits setzen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Eins gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#ODER | ODER]]-Verknüpfung erreicht.  Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden auf &#039;1&#039; gesetzt. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbr r16, 0b11110000     ; setzt Bits 4-7 in r16, ist ein Pseudobefehl&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
ori r16, 0b11110000     ; setzt Bits 4-7 in r16, ori ist identisch mit sbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
sbi PORTB, 5            ; setzt Bit 5 in PortB&lt;br /&gt;
sbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..0x1F&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden&lt;br /&gt;
in  r16, TIMSK          ; setzt Bit TOIE1 in TIMSK&lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;TOIE1)    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; setzt Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;RXCIE0)    &lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von sbr als &amp;quot;setze Bit 2 und 0&amp;quot; gedeutet (=0b00000101), während sbi sie als &amp;quot;setze Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;sbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine ODER-Verknüpfung, während der Befehlt &#039;&#039;&#039;sbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] (C) ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= 0xF0;   // Kurzschreibweise, entspricht PORTB = PORTB | 0xF0; bitweises ODER&lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */&lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1&lt;br /&gt;
#define MEINBIT2 2&lt;br /&gt;
&lt;br /&gt;
PORTB |= ((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // setzt Bit 0 und 2 in PORTB auf &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile &amp;quot;entschlüsselt&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben.  Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft, also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;|=&#039;&#039;&#039; : Diese Maske wird mit dem aktuellen Inhalt von PORTB bitweise ODER-verknüpft und das Ergebnis PORTB wieder zugewiesen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= variable;         // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB | variable; // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111010, dann ist der Inhalt nach der Operation 0b01111010 &#039;&#039;or&#039;&#039; 0b00000101 = 0b01111111, die gewünschten Bits sind somit gesetzt!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man das gezeigte Beispiel der Bitmanipulation auf größere Datentypen anwenden, ist zu beachten, dass der Compiler in der Operation (1 &amp;lt;&amp;lt; MEINBIT1) stillschweigend gemäss, den C-Regeln, die 1 als Integer Typ ansieht. Beim AVR-GCC bedeutet das 16-Bit/signed und die folgende Operation bringt ggf. nicht das gewünschte Ergebnis. (Stichwort: &amp;quot;Integer Promotion&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Angenommen Bit 15 soll in einer 32-Bit weiten Variable gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define MEINBIT15 15&lt;br /&gt;
#define MEINBIT42 42&lt;br /&gt;
&lt;br /&gt;
uint32_t reg_32; /* uint32_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
uint64_t reg_64; /* uint64_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= (1 &amp;lt;&amp;lt; MEINBIT15);              /* FEHLER: Setzt die Bits 31 - 15, da ((int)1 &amp;lt;&amp;lt; 15) == 0xFFFF8000 */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= ((uint32_t)1 &amp;lt;&amp;lt; MEINBIT15);    /* Hier wird nur Bit 15 gesetzt. */&lt;br /&gt;
reg_32 |= (1U &amp;lt;&amp;lt; MEINBIT15);             /* */&lt;br /&gt;
reg_32 |= (1L &amp;lt;&amp;lt; MEINBIT15);             /* andere Schreibweise. */&lt;br /&gt;
reg_64 |= (1LL &amp;lt;&amp;lt; MEINBIT42);            /* Hier wird nur Bit 42 gesetzt,&lt;br /&gt;
                                            andere Schreibweise für 64 Bit (long long). */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Compilern für 32bit Controller (z.&amp;amp;nbsp;B. ARM7TDMI) sind Integers per default 32-bit und Konstanten sind somit implizit ebenfalls 32-bit. Man sollte aber dennoch die oben gezeigte Vorgehenweise verwenden, um Probleme zu vermeiden die entstehen könnten, wenn Code unter verschiedenen Plattformen/Compilern verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Bits löschen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Null gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#UND | UND]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;0&#039; sind, werden auf &#039;0&#039; gesetzt. Alle Bits, die in der Maske auf &#039;1&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cbr r16, 0b00001111     ; löscht Bits 0-3 in r16, ist ein Pseudobefehl &lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, 0b11110000    ; löscht Bits 0-3 in r16, andi ist identisch mit cbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, ~0b00001111   ; andere Schreibweise, hier wird die Bitmaske durch ~ invertiert&lt;br /&gt;
                        ; dadurch kann man einfach alle zu löschenden Bit als &#039;1&#039; angeben&lt;br /&gt;
                        ; so wie bei den Bitmasken für das setzen von Bits (positive Logik)&lt;br /&gt;
&lt;br /&gt;
cbi PORTB, 5            ; löscht Bit 5 in PortB&lt;br /&gt;
cbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..31&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden weil dieser Bereich nicht&lt;br /&gt;
                        ; bitadressierbar ist&lt;br /&gt;
in  r16, TIMSK          ; löscht Bit TOIE1 in TIMSK&lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;TOIE1    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; löscht Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;RXCIE0&lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier gilt: Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von cbr als &amp;quot;lösche Bit 2 und 0&amp;quot; gedeutet, während cbi sie als &amp;quot;lösche Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;cbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine UND-NOT-Verknüpfung (nicht zu verwechseln mit NAND), während der Befehl &#039;&#039;&#039;cbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation &amp;lt;&amp;lt; erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= 0xF0;   // entspricht PORTB = PORTB &amp;amp; 0xF0; bitweises UND&lt;br /&gt;
                 // Bits 0-3 (das &amp;quot;niederwertige&amp;quot; Nibble) werden geloescht &lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */ &lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1  &lt;br /&gt;
#define MEINBIT2 2  &lt;br /&gt;
&lt;br /&gt;
PORTB &amp;amp;= ~((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // löscht Bit 0 und 2 in PORTB&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile entschlüsselt:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;~&#039;&#039;&#039; : Der Wert in der Klammer wird bitweise invertiert, aus 0b00000101 wird 0b11111010.&lt;br /&gt;
# &#039;&#039;&#039;&amp;amp;=&#039;&#039;&#039; : PORTB wird mit der berechneten Maske UND-verknüpft und das Ergebnis wieder PORTB zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= variable;          // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB &amp;amp; variable;  // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111111, dann ist der Inhalt nach der Operation 0b011111111 &#039;&#039;and&#039;&#039; 0b11111010 = 0b01111010, die gewünschten Bits 0 und 2 sind somit gelöscht.&lt;br /&gt;
&lt;br /&gt;
Die C-Ausdrücke mittels Definitionen von Bitnummern und Schieboperator (&amp;lt;&amp;lt;) sehen auf den ersten Blick etwas &amp;quot;erschreckend&amp;quot; aus und sind mehr &amp;quot;Tipparbeit&amp;quot;, funktionieren aber universell und sind deutlicher und nachvollziehbarer als &amp;quot;handoptimierte&amp;quot; Konstanten. Bei eingeschalteter Optimierung löst der Compiler die Ausdücke mit konstanten Werten bereits zur Compilierungszeit auf und es entsteht kein zusätzlicher Maschinencode. Bei AVR sind die Definitionen meist Teil der Entwicklungsumgebungen (bei avr-libc z.&amp;amp;nbsp;B. implizit durch #include &amp;lt;avr/io.h&amp;gt;). Sie entsprechen den Angaben und Beispielen in den Datenblättern und sind damit de-facto ein Standard beim Zugriff auf Bits in Hardware-Registern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtiger Hinweis&#039;&#039;&#039;: Die ODER-Verknüpfung und die anschliessende Invertierung kann man nicht vertauschen! (Theorem von DeMorgan) Folgendes Beispiel soll die Richtigkeit der Aussage zeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 ~(0b0001 | 0b0010) == 0b1100&lt;br /&gt;
  ~0b0001 | ~0b0010 == 0b1111&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Niederwertigstes gesetztes Bit löschen (Standard C) ===&lt;br /&gt;
&lt;br /&gt;
Folgender Code löscht von allen 1-Bits in einer Integer-Variable das niederwertigste, unabhängig von der Position desselben.&lt;br /&gt;
&lt;br /&gt;
Beispiel: 01101000 -&amp;gt; 01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t byte;&lt;br /&gt;
&lt;br /&gt;
byte = irgendwas();&lt;br /&gt;
&lt;br /&gt;
byte = byte &amp;amp; (byte - 1); /* Diese seltsame Operation löscht das&lt;br /&gt;
                             niederwertigste 1-Bit */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Byte  :  01101000 &lt;br /&gt;
Byte-1:  01100111&lt;br /&gt;
Ergebnis:01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Das funktioniert also mit jeder beliebigen Zahl.&lt;br /&gt;
&lt;br /&gt;
Dies kann bspw. zur schnellen Paritätsgenerierung eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t pareven(uint8_t byte) {&lt;br /&gt;
  uint8_t par = 0;&lt;br /&gt;
&lt;br /&gt;
  while(byte) {&lt;br /&gt;
    byte = byte &amp;amp; (byte - 1);&lt;br /&gt;
    par = ~par;&lt;br /&gt;
  }&lt;br /&gt;
  return par;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das genannte gilt natürlich nicht nur für 8-Bit-Integers, sondern für beliebige, vom Compiler unterstützte Wortlängen.&lt;br /&gt;
&lt;br /&gt;
== Bits invertieren ==&lt;br /&gt;
&lt;br /&gt;
Im allgemeinen Sprachgebrauch oft Toggeln genannt (aus dem Englischen). Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] invertiert (getoggelt) werden sollen, wird die durch eine [[AVR-Tutorial:_Logik#XOR_.28Exlusives_Oder.29 | XOR]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden invertiert. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Bei [[AVR]]s erlaubt dies folgender Assemblercode. Hier wird ein Ausgangspin invertiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
  sbic  PortB, 0    ; Überspringe den nächsten Befehl, wenn das Bit 0 im Port gelöscht ist&lt;br /&gt;
  rjmp  ClrBitNow   ; Springe zu ClrBitNow   &lt;br /&gt;
  sbi   PortB, 0    ; Setze Bit 0 in PortB&lt;br /&gt;
  rjmp  BitReady    ; Springe BitReady&lt;br /&gt;
ClrBitNow:&lt;br /&gt;
   cbi  PortB, 0    ; Lösche Bit 0 in PortB&lt;br /&gt;
BitReady:&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Noch kürzer gehts so:&amp;lt;br&amp;gt;&lt;br /&gt;
Die zweite Zeile mit dem Befehl &#039;&#039;&#039;ldi&#039;&#039;&#039; lädt die Bitmaske, in welcher die zu toggelnden Bits auf &#039;1&#039; gesetzt sind. In diesem Beispiel wird das dritte Bit invertiert. Der Vorteil dieser Methode ist neben der Kürze und Übersichtlichkeit auch die Möglichkeit, bis zu 8 Bit gleichzeitig zu toggeln. Diese Methode ist natürlich auch auf normale Daten anwendbar, nicht nur auf IO-Ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in     R24, PORTE   ; Daten lesen&lt;br /&gt;
 ldi    R25, 0x04    ; Bitmaske laden, hier Bit #2&lt;br /&gt;
 eor    R24, R25     ; Exklusiv ODER&lt;br /&gt;
 out    PORTE, R24   ; Daten zurückschreiben&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit gibt es, wenn man nur das 8. Bit kippen will:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in      r16, PORTB&lt;br /&gt;
 subi    r16, 0x80&lt;br /&gt;
 out     PORTB, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 PORTB ^= (1&amp;lt;&amp;lt;PB0);    /* XOR, Kurzschreibweise, PORTB = PORTB ^ (1&amp;lt;&amp;lt;PB0) */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neuere ATmegas ===&lt;br /&gt;
&lt;br /&gt;
Bei den neueren ATmegas (z.&amp;amp;nbsp;B. ATmega48) kann man IO-Pins direkt ohne den Umweg über Register togglen, indem man das entsprechende Bit im PINx-Register &#039;&#039;&#039;setzt&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbi PIND, 2       ; Bit 2 von Port D togglen&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8051er ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cpl bitadresse&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bits prüfen ==&lt;br /&gt;
&lt;br /&gt;
Will man prüfen ob ein oder mehrere Bits in einer Variable gesetzt oder gelöscht sind, muss man sie mit einer Bitmaske UND verknüpfen. Die Bitmaske muss an den Stellen der zu prüfenden Bits eine &#039;1&#039; haben, an allen anderen eine &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
* Ist das Ergebnis gleich Null, sind alle geprüften Bits gelöscht.&lt;br /&gt;
* Ist das Ergebnis ungleich Null, ist mindestens ein geprüftes Bit gesetzt.&lt;br /&gt;
* Ist das Ergebnis gleich der Bitmaske, sind alle geprüften Bits gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Der AVR hat spezielle Befehle um direkt einzelne Bits in den CPU-Registern r0..r31 sowie den IO-Registern 0..0x1F zu prüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
; Befehle zur Prüfung von einzelnen Bits&lt;br /&gt;
&lt;br /&gt;
    sbrs    r16,3       ; überspringe den nächsten Befehl, wenn in r16 Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbrc    r16,5       ; überspringe den nächsten Befehl, wenn in r16 Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
    sbis    timsk,3     ; überspringe den nächsten Befehl, wenn in timsk Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbic    timsk,5     ; überspringe den nächsten Befehl, wenn in timsk Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
; Befehle zur Prüfung von mehreren Bits&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    breq    alle_bits_sind_geloescht&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    brne    mind_ein_bit_ist_gesetzt&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    cpi     r16,0b1010&lt;br /&gt;
    breq    alle_bits_sind_gesetzt&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gelöscht ist&lt;br /&gt;
    // die Klammer ist wichtig &lt;br /&gt;
    if (!(tmp &amp;amp; 0x10)) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gelöscht sind&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gesetzt ist&lt;br /&gt;
    if (tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    if (~tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gesetzt ist &lt;br /&gt;
    if (tmp &amp;amp; 0x10) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gesetzt sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gesetzt sind&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfsfunktionen zur Bitmanipulation in C/C++ ==&lt;br /&gt;
Um &amp;quot;einfacher&amp;quot; elementare Bitmanipulationen durchzuführen bietet es sich an einige Hilfsfunktionen zu definieren. Dabei gibt es zwei verschiedene Möglichkeiten diese zu realiseren:&lt;br /&gt;
* Als C-Makro [[C_Makros]]&lt;br /&gt;
* Als Inline-Funktion&lt;br /&gt;
In beiden Fällen wird bei eingeschalteter Optimierung letztendlich vom Compiler ein sehr kompakter (und identischer!) Code erzeugt, jedoch ist dringend von der Verwendung von Makros abzuraten (siehe [[Makro]] )!&lt;br /&gt;
Im Fehlerfall zeigt der Compiler bei der Verwendung vom Makros keine eindeutigen Fehlermeldungen an, da es sich um simple Ersetzungen handelt - bei der Verwendung von Inline-Funktionen hingegen gibt es eien &amp;quot;brauchbare&amp;quot; Fehlermeldung!&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - Inline Variante ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen über Pointer&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(&amp;amp;PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR($PORTC, PB0);&lt;br /&gt;
&lt;br /&gt;
// PORTA, PB2 direkt setzen&lt;br /&gt;
// HIGH&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 1);&lt;br /&gt;
&lt;br /&gt;
// LOW&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - MakroVariante ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen direkt über die Variablen/Portnamen&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR(PORTC, PB0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Hilfsfunktionen verwenden zu können einfach folgenden Code in eine neue Header-Datei (z.B. BitIO.h) kopieren:&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als Inline-Methoden ===&lt;br /&gt;
Achtung: Wenn nur ein C Compiler verwendet wird, kennt dieser den Typ &amp;quot;bool&amp;quot; nicht, dieser muss dann vorher definiert werden!&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 *  BitIO.h&lt;br /&gt;
 *	@author 	Andi Dittrich &amp;lt;http://andidittrich.de&amp;gt;&lt;br /&gt;
 *	@version	1.0&lt;br /&gt;
 *	@license	MIT Style X11 License&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef BITIO_H_&lt;br /&gt;
#define BITIO_H_&lt;br /&gt;
&lt;br /&gt;
// set bit&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target |= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set clear&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target &amp;amp;= ~(1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// bit toogle&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target ^= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set bit by boolean&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable){&lt;br /&gt;
	if (enable){&lt;br /&gt;
		BIT_SET(target, bit);&lt;br /&gt;
	}else{&lt;br /&gt;
		BIT_CLEAR(target, bit);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif /* BITIO_H_ */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als C-Makro (nicht empfohlen) ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* Bit setzen */&lt;br /&gt;
#define set_bit(var, bit) ((var) |= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit löschen */&lt;br /&gt;
#define clear_bit(var, bit) ((var) &amp;amp;= (unsigned)~(1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit togglen */&lt;br /&gt;
#define toggle_bit(var,bit) ((var) ^= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmanipulation beim MSP430 ==&lt;br /&gt;
&lt;br /&gt;
Beim MSP430 und dessen Compilern sind die Bitnamen meist anders definiert. Und zwar nicht als Bitnummer, sondern als Bitmuster. Darum schreibt man dort die Bitzugriffe in C anders. Das kann auch bei anderen Mikrocontrollern bzw. C-Compilern so sein. Wichtig ist, dass man seine eignen Definitionen in der gleichen Weise wie der Compiler anlegt, um Verwirrung zu vermeiden, siehe [[Strukturierte Programmierung auf Mikrocontrollern]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Definition von Bitnamen in den Headerfiles des Compilers&lt;br /&gt;
&lt;br /&gt;
#define PD4 4               // Definition im AVR GCC als Bitnummer&lt;br /&gt;
#define PD5 5&lt;br /&gt;
&lt;br /&gt;
#define P14 (1&amp;lt;&amp;lt;4)          // Definition im MSP430 GCC als Bitmuster&lt;br /&gt;
#define P15 (1&amp;lt;&amp;lt;5)&lt;br /&gt;
&lt;br /&gt;
// Bitmanipulation im Programm&lt;br /&gt;
 &lt;br /&gt;
   DDRD = (1&amp;lt;&amp;lt;PD5) | (1&amp;lt;&amp;lt;PD4);   // AVR GCC&lt;br /&gt;
   P1DIR = P15 | P14;            // MSP430 GCC&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/179566#1729219 Forumsbeitrag: Bits aus einem Array extrahieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/169509#1631439 Forumsbeitrag: Bits für ein Schieberegister zusammenstellen, TLC5941]&lt;br /&gt;
&lt;br /&gt;
[[Category:8051]]&lt;br /&gt;
[[Category:AVR-Arithmetik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67786</id>
		<title>Bitmanipulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67786"/>
		<updated>2012-08-04T19:06:03Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Hilfsfunktionen zur Bitmanipulation in C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitoperatoren ==&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren stammen ursprünglich aus einer Hochsprache wie C.&lt;br /&gt;
&lt;br /&gt;
* &amp;gt;&amp;gt; = Rechts schieben&lt;br /&gt;
* &amp;lt;&amp;lt; = Links schieben (Bsp: &#039;&#039;a&amp;lt;&amp;lt;b&#039;&#039; ist das gleiche wie &#039;&#039;a * 2^b&#039;&#039;; bzw. bei 1&amp;lt;&amp;lt;3 wird die 1 um drei Stellen nach links geschoben)&lt;br /&gt;
* |  = binäres ODER&lt;br /&gt;
* &amp;amp;  = binäres UND&lt;br /&gt;
* usw.&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren in dieser Schreibweise können in Assemblercode für&lt;br /&gt;
konstante Ausdrücke benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, (1&amp;lt;&amp;lt;3) | (1&amp;lt;&amp;lt;1) | (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0)&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 8 | 2 | 4 | 1&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 15&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmaske ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ist häufiger von dem Begriff &#039;&#039;Bitmaske&#039;&#039; die Rede. Damit wird eine Folge von einzelnen Bit bezeichnet, die den Zustand Null (&#039;0&#039;) oder Eins (&#039;1&#039;) darstellen können.&lt;br /&gt;
&lt;br /&gt;
Bitmasken werden im allgemeinen dazu verwendet, um unter Anwendung eines Operators (z.&amp;amp;nbsp;B. UND, ODER, XOR), eine Eingabe zu manipulieren. Das Ergebnis ist dann die Anwendung des Operators auf die Eingabe und der Bitmaske.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Operator eine Funktion mit zwei Argumenten ist, dann lässt sich dessen Anwendung wie folgt schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Ergebnis = Operator( Eingabe, Bitmaske )&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bitmaske ist häufig eine Konstante, da diese z.&amp;amp;nbsp;B. die Information über die Position einer Information in einem Register darstellt. Das kann z.&amp;amp;nbsp;B. ein Überlaufflag in einem Timer Statusregister sein.&lt;br /&gt;
&lt;br /&gt;
== Bits setzen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Eins gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#ODER | ODER]]-Verknüpfung erreicht.  Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden auf &#039;1&#039; gesetzt. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbr r16, 0b11110000     ; setzt Bits 4-7 in r16, ist ein Pseudobefehl&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
ori r16, 0b11110000     ; setzt Bits 4-7 in r16, ori ist identisch mit sbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
sbi PORTB, 5            ; setzt Bit 5 in PortB&lt;br /&gt;
sbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..0x1F&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden&lt;br /&gt;
in  r16, TIMSK          ; setzt Bit TOIE1 in TIMSK&lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;TOIE1)    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; setzt Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;RXCIE0)    &lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von sbr als &amp;quot;setze Bit 2 und 0&amp;quot; gedeutet (=0b00000101), während sbi sie als &amp;quot;setze Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;sbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine ODER-Verknüpfung, während der Befehlt &#039;&#039;&#039;sbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] (C) ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= 0xF0;   // Kurzschreibweise, entspricht PORTB = PORTB | 0xF0; bitweises ODER&lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */&lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1&lt;br /&gt;
#define MEINBIT2 2&lt;br /&gt;
&lt;br /&gt;
PORTB |= ((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // setzt Bit 0 und 2 in PORTB auf &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile &amp;quot;entschlüsselt&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben.  Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft, also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;|=&#039;&#039;&#039; : Diese Maske wird mit dem aktuellen Inhalt von PORTB bitweise ODER-verknüpft und das Ergebnis PORTB wieder zugewiesen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= variable;         // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB | variable; // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111010, dann ist der Inhalt nach der Operation 0b01111010 &#039;&#039;or&#039;&#039; 0b00000101 = 0b01111111, die gewünschten Bits sind somit gesetzt!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man das gezeigte Beispiel der Bitmanipulation auf größere Datentypen anwenden, ist zu beachten, dass der Compiler in der Operation (1 &amp;lt;&amp;lt; MEINBIT1) stillschweigend gemäss, den C-Regeln, die 1 als Integer Typ ansieht. Beim AVR-GCC bedeutet das 16-Bit/signed und die folgende Operation bringt ggf. nicht das gewünschte Ergebnis. (Stichwort: &amp;quot;Integer Promotion&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Angenommen Bit 15 soll in einer 32-Bit weiten Variable gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define MEINBIT15 15&lt;br /&gt;
#define MEINBIT42 42&lt;br /&gt;
&lt;br /&gt;
uint32_t reg_32; /* uint32_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
uint64_t reg_64; /* uint64_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= (1 &amp;lt;&amp;lt; MEINBIT15);              /* FEHLER: Setzt die Bits 31 - 15, da ((int)1 &amp;lt;&amp;lt; 15) == 0xFFFF8000 */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= ((uint32_t)1 &amp;lt;&amp;lt; MEINBIT15);    /* Hier wird nur Bit 15 gesetzt. */&lt;br /&gt;
reg_32 |= (1U &amp;lt;&amp;lt; MEINBIT15);             /* */&lt;br /&gt;
reg_32 |= (1L &amp;lt;&amp;lt; MEINBIT15);             /* andere Schreibweise. */&lt;br /&gt;
reg_64 |= (1LL &amp;lt;&amp;lt; MEINBIT42);            /* Hier wird nur Bit 42 gesetzt,&lt;br /&gt;
                                            andere Schreibweise für 64 Bit (long long). */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Compilern für 32bit Controller (z.&amp;amp;nbsp;B. ARM7TDMI) sind Integers per default 32-bit und Konstanten sind somit implizit ebenfalls 32-bit. Man sollte aber dennoch die oben gezeigte Vorgehenweise verwenden, um Probleme zu vermeiden die entstehen könnten, wenn Code unter verschiedenen Plattformen/Compilern verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Bits löschen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Null gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#UND | UND]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;0&#039; sind, werden auf &#039;0&#039; gesetzt. Alle Bits, die in der Maske auf &#039;1&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cbr r16, 0b00001111     ; löscht Bits 0-3 in r16, ist ein Pseudobefehl &lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, 0b11110000    ; löscht Bits 0-3 in r16, andi ist identisch mit cbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, ~0b00001111   ; andere Schreibweise, hier wird die Bitmaske durch ~ invertiert&lt;br /&gt;
                        ; dadurch kann man einfach alle zu löschenden Bit als &#039;1&#039; angeben&lt;br /&gt;
                        ; so wie bei den Bitmasken für das setzen von Bits (positive Logik)&lt;br /&gt;
&lt;br /&gt;
cbi PORTB, 5            ; löscht Bit 5 in PortB&lt;br /&gt;
cbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..31&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden weil dieser Bereich nicht&lt;br /&gt;
                        ; bitadressierbar ist&lt;br /&gt;
in  r16, TIMSK          ; löscht Bit TOIE1 in TIMSK&lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;TOIE1    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; löscht Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;RXCIE0&lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier gilt: Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von cbr als &amp;quot;lösche Bit 2 und 0&amp;quot; gedeutet, während cbi sie als &amp;quot;lösche Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;cbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine UND-NOT-Verknüpfung (nicht zu verwechseln mit NAND), während der Befehl &#039;&#039;&#039;cbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation &amp;lt;&amp;lt; erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= 0xF0;   // entspricht PORTB = PORTB &amp;amp; 0xF0; bitweises UND&lt;br /&gt;
                 // Bits 0-3 (das &amp;quot;niederwertige&amp;quot; Nibble) werden geloescht &lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */ &lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1  &lt;br /&gt;
#define MEINBIT2 2  &lt;br /&gt;
&lt;br /&gt;
PORTB &amp;amp;= ~((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // löscht Bit 0 und 2 in PORTB&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile entschlüsselt:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;~&#039;&#039;&#039; : Der Wert in der Klammer wird bitweise invertiert, aus 0b00000101 wird 0b11111010.&lt;br /&gt;
# &#039;&#039;&#039;&amp;amp;=&#039;&#039;&#039; : PORTB wird mit der berechneten Maske UND-verknüpft und das Ergebnis wieder PORTB zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= variable;          // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB &amp;amp; variable;  // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111111, dann ist der Inhalt nach der Operation 0b011111111 &#039;&#039;and&#039;&#039; 0b11111010 = 0b01111010, die gewünschten Bits 0 und 2 sind somit gelöscht.&lt;br /&gt;
&lt;br /&gt;
Die C-Ausdrücke mittels Definitionen von Bitnummern und Schieboperator (&amp;lt;&amp;lt;) sehen auf den ersten Blick etwas &amp;quot;erschreckend&amp;quot; aus und sind mehr &amp;quot;Tipparbeit&amp;quot;, funktionieren aber universell und sind deutlicher und nachvollziehbarer als &amp;quot;handoptimierte&amp;quot; Konstanten. Bei eingeschalteter Optimierung löst der Compiler die Ausdücke mit konstanten Werten bereits zur Compilierungszeit auf und es entsteht kein zusätzlicher Maschinencode. Bei AVR sind die Definitionen meist Teil der Entwicklungsumgebungen (bei avr-libc z.&amp;amp;nbsp;B. implizit durch #include &amp;lt;avr/io.h&amp;gt;). Sie entsprechen den Angaben und Beispielen in den Datenblättern und sind damit de-facto ein Standard beim Zugriff auf Bits in Hardware-Registern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtiger Hinweis&#039;&#039;&#039;: Die ODER-Verknüpfung und die anschliessende Invertierung kann man nicht vertauschen! (Theorem von DeMorgan) Folgendes Beispiel soll die Richtigkeit der Aussage zeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 ~(0b0001 | 0b0010) == 0b1100&lt;br /&gt;
  ~0b0001 | ~0b0010 == 0b1111&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Niederwertigstes gesetztes Bit löschen (Standard C) ===&lt;br /&gt;
&lt;br /&gt;
Folgender Code löscht von allen 1-Bits in einer Integer-Variable das niederwertigste, unabhängig von der Position desselben.&lt;br /&gt;
&lt;br /&gt;
Beispiel: 01101000 -&amp;gt; 01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t byte;&lt;br /&gt;
&lt;br /&gt;
byte = irgendwas();&lt;br /&gt;
&lt;br /&gt;
byte = byte &amp;amp; (byte - 1); /* Diese seltsame Operation löscht das&lt;br /&gt;
                             niederwertigste 1-Bit */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Byte  :  01101000 &lt;br /&gt;
Byte-1:  01100111&lt;br /&gt;
Ergebnis:01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Das funktioniert also mit jeder beliebigen Zahl.&lt;br /&gt;
&lt;br /&gt;
Dies kann bspw. zur schnellen Paritätsgenerierung eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t pareven(uint8_t byte) {&lt;br /&gt;
  uint8_t par = 0;&lt;br /&gt;
&lt;br /&gt;
  while(byte) {&lt;br /&gt;
    byte = byte &amp;amp; (byte - 1);&lt;br /&gt;
    par = ~par;&lt;br /&gt;
  }&lt;br /&gt;
  return par;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das genannte gilt natürlich nicht nur für 8-Bit-Integers, sondern für beliebige, vom Compiler unterstützte Wortlängen.&lt;br /&gt;
&lt;br /&gt;
== Bits invertieren ==&lt;br /&gt;
&lt;br /&gt;
Im allgemeinen Sprachgebrauch oft Toggeln genannt (aus dem Englischen). Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] invertiert (getoggelt) werden sollen, wird die durch eine [[AVR-Tutorial:_Logik#XOR_.28Exlusives_Oder.29 | XOR]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden invertiert. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Bei [[AVR]]s erlaubt dies folgender Assemblercode. Hier wird ein Ausgangspin invertiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
  sbic  PortB, 0    ; Überspringe den nächsten Befehl, wenn das Bit 0 im Port gelöscht ist&lt;br /&gt;
  rjmp  ClrBitNow   ; Springe zu ClrBitNow   &lt;br /&gt;
  sbi   PortB, 0    ; Setze Bit 0 in PortB&lt;br /&gt;
  rjmp  BitReady    ; Springe BitReady&lt;br /&gt;
ClrBitNow:&lt;br /&gt;
   cbi  PortB, 0    ; Lösche Bit 0 in PortB&lt;br /&gt;
BitReady:&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Noch kürzer gehts so:&amp;lt;br&amp;gt;&lt;br /&gt;
Die zweite Zeile mit dem Befehl &#039;&#039;&#039;ldi&#039;&#039;&#039; lädt die Bitmaske, in welcher die zu toggelnden Bits auf &#039;1&#039; gesetzt sind. In diesem Beispiel wird das dritte Bit invertiert. Der Vorteil dieser Methode ist neben der Kürze und Übersichtlichkeit auch die Möglichkeit, bis zu 8 Bit gleichzeitig zu toggeln. Diese Methode ist natürlich auch auf normale Daten anwendbar, nicht nur auf IO-Ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in     R24, PORTE   ; Daten lesen&lt;br /&gt;
 ldi    R25, 0x04    ; Bitmaske laden, hier Bit #2&lt;br /&gt;
 eor    R24, R25     ; Exklusiv ODER&lt;br /&gt;
 out    PORTE, R24   ; Daten zurückschreiben&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit gibt es, wenn man nur das 8. Bit kippen will:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in      r16, PORTB&lt;br /&gt;
 subi    r16, 0x80&lt;br /&gt;
 out     PORTB, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 PORTB ^= (1&amp;lt;&amp;lt;PB0);    /* XOR, Kurzschreibweise, PORTB = PORTB ^ (1&amp;lt;&amp;lt;PB0) */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neuere ATmegas ===&lt;br /&gt;
&lt;br /&gt;
Bei den neueren ATmegas (z.&amp;amp;nbsp;B. ATmega48) kann man IO-Pins direkt ohne den Umweg über Register togglen, indem man das entsprechende Bit im PINx-Register &#039;&#039;&#039;setzt&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbi PIND, 2       ; Bit 2 von Port D togglen&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8051er ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cpl bitadresse&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bits prüfen ==&lt;br /&gt;
&lt;br /&gt;
Will man prüfen ob ein oder mehrere Bits in einer Variable gesetzt oder gelöscht sind, muss man sie mit einer Bitmaske UND verknüpfen. Die Bitmaske muss an den Stellen der zu prüfenden Bits eine &#039;1&#039; haben, an allen anderen eine &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
* Ist das Ergebnis gleich Null, sind alle geprüften Bits gelöscht.&lt;br /&gt;
* Ist das Ergebnis ungleich Null, ist mindestens ein geprüftes Bit gesetzt.&lt;br /&gt;
* Ist das Ergebnis gleich der Bitmaske, sind alle geprüften Bits gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Der AVR hat spezielle Befehle um direkt einzelne Bits in den CPU-Registern r0..r31 sowie den IO-Registern 0..0x1F zu prüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
; Befehle zur Prüfung von einzelnen Bits&lt;br /&gt;
&lt;br /&gt;
    sbrs    r16,3       ; überspringe den nächsten Befehl, wenn in r16 Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbrc    r16,5       ; überspringe den nächsten Befehl, wenn in r16 Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
    sbis    timsk,3     ; überspringe den nächsten Befehl, wenn in timsk Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbic    timsk,5     ; überspringe den nächsten Befehl, wenn in timsk Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
; Befehle zur Prüfung von mehreren Bits&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    breq    alle_bits_sind_geloescht&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    brne    mind_ein_bit_ist_gesetzt&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    cpi     r16,0b1010&lt;br /&gt;
    breq    alle_bits_sind_gesetzt&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gelöscht ist&lt;br /&gt;
    // die Klammer ist wichtig &lt;br /&gt;
    if (!(tmp &amp;amp; 0x10)) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gelöscht sind&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gesetzt ist&lt;br /&gt;
    if (tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    if (~tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gesetzt ist &lt;br /&gt;
    if (tmp &amp;amp; 0x10) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gesetzt sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gesetzt sind&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfsfunktionen zur Bitmanipulation in C/C++ ==&lt;br /&gt;
Um &amp;quot;einfacher&amp;quot; elementare Bitmanipulationen durchzuführen bietet es sich an einige Hilfsfunktionen zu definieren. Dabei gibt es zwei verschiedene Möglichkeiten diese zu realiseren:&lt;br /&gt;
* Als C-Makro [[C_Makros]]&lt;br /&gt;
* Als Inline-Funktion&lt;br /&gt;
In beiden Fällen wird bei eingeschalteter Optimierung letztendlich vom Compiler ein sehr kompakter (und identischer!) Code erzeugt, jedoch ist dringend von der Verwendung von Makros abzuraten (siehe [[Makro]] )!&lt;br /&gt;
Im Fehlerfall zeigt der Compiler bei der Verwendung vom Makros keine eindeutigen Fehlermeldungen an, da es sich um simple Ersetzungen handelt - bei der Verwendung von Inline-Funktionen hingegen gibt es eien &amp;quot;brauchbare&amp;quot; Fehlermeldung!&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - Inline Variante ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen über Pointer&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(&amp;amp;PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR($PORTC, PB0);&lt;br /&gt;
&lt;br /&gt;
// PORTA, PB2 direkt setzen&lt;br /&gt;
// HIGH&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 1);&lt;br /&gt;
&lt;br /&gt;
// LOW&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - MakroVariante ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen direkt über die Variablen/Portnamen&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR(PORTC, PB0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Hilfsfunktionen verwenden zu können einfach folgenden Code in eine neue Header-Datei (z.B. BitIO.h) kopieren:&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als Inline-Methoden ===&lt;br /&gt;
Achtung: Wenn nur ein C Compiler verwendet wird, kennt dieser den Typ &amp;quot;bool&amp;quot; nicht, dieser muss dann vorher definiert werden!&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 *  BitIO.h&lt;br /&gt;
 *	@author 	Andi Dittrich &amp;lt;andi.dittrich@a3non.org&amp;gt;&lt;br /&gt;
 *	@version	1.0&lt;br /&gt;
 *	@license	MIT Style X11 License&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef BITIO_H_&lt;br /&gt;
#define BITIO_H_&lt;br /&gt;
&lt;br /&gt;
// set bit&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target |= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set clear&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target &amp;amp;= ~(1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// bit toogle&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target ^= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set bit by boolean&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable){&lt;br /&gt;
	if (enable){&lt;br /&gt;
		BIT_SET(target, bit);&lt;br /&gt;
	}else{&lt;br /&gt;
		BIT_CLEAR(target, bit);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif /* BITIO_H_ */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als C-Makro (nicht empfohlen) ===&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* Bit setzen */&lt;br /&gt;
#define set_bit(var, bit) ((var) |= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit löschen */&lt;br /&gt;
#define clear_bit(var, bit) ((var) &amp;amp;= (unsigned)~(1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit togglen */&lt;br /&gt;
#define toggle_bit(var,bit) ((var) ^= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmanipulation beim MSP430 ==&lt;br /&gt;
&lt;br /&gt;
Beim MSP430 und dessen Compilern sind die Bitnamen meist anders definiert. Und zwar nicht als Bitnummer, sondern als Bitmuster. Darum schreibt man dort die Bitzugriffe in C anders. Das kann auch bei anderen Mikrocontrollern bzw. C-Compilern so sein. Wichtig ist, dass man seine eignen Definitionen in der gleichen Weise wie der Compiler anlegt, um Verwirrung zu vermeiden, siehe [[Strukturierte Programmierung auf Mikrocontrollern]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Definition von Bitnamen in den Headerfiles des Compilers&lt;br /&gt;
&lt;br /&gt;
#define PD4 4               // Definition im AVR GCC als Bitnummer&lt;br /&gt;
#define PD5 5&lt;br /&gt;
&lt;br /&gt;
#define P14 (1&amp;lt;&amp;lt;4)          // Definition im MSP430 GCC als Bitmuster&lt;br /&gt;
#define P15 (1&amp;lt;&amp;lt;5)&lt;br /&gt;
&lt;br /&gt;
// Bitmanipulation im Programm&lt;br /&gt;
 &lt;br /&gt;
   DDRD = (1&amp;lt;&amp;lt;PD5) | (1&amp;lt;&amp;lt;PD4);   // AVR GCC&lt;br /&gt;
   P1DIR = P15 | P14;            // MSP430 GCC&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/179566#1729219 Forumsbeitrag: Bits aus einem Array extrahieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/169509#1631439 Forumsbeitrag: Bits für ein Schieberegister zusammenstellen, TLC5941]&lt;br /&gt;
&lt;br /&gt;
[[Category:8051]]&lt;br /&gt;
[[Category:AVR-Arithmetik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67785</id>
		<title>Bitmanipulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=67785"/>
		<updated>2012-08-04T18:43:44Z</updated>

		<summary type="html">&lt;p&gt;Xaos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitoperatoren ==&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren stammen ursprünglich aus einer Hochsprache wie C.&lt;br /&gt;
&lt;br /&gt;
* &amp;gt;&amp;gt; = Rechts schieben&lt;br /&gt;
* &amp;lt;&amp;lt; = Links schieben (Bsp: &#039;&#039;a&amp;lt;&amp;lt;b&#039;&#039; ist das gleiche wie &#039;&#039;a * 2^b&#039;&#039;; bzw. bei 1&amp;lt;&amp;lt;3 wird die 1 um drei Stellen nach links geschoben)&lt;br /&gt;
* |  = binäres ODER&lt;br /&gt;
* &amp;amp;  = binäres UND&lt;br /&gt;
* usw.&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren in dieser Schreibweise können in Assemblercode für&lt;br /&gt;
konstante Ausdrücke benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, (1&amp;lt;&amp;lt;3) | (1&amp;lt;&amp;lt;1) | (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0)&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 8 | 2 | 4 | 1&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
ldi temp, 15&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmaske ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ist häufiger von dem Begriff &#039;&#039;Bitmaske&#039;&#039; die Rede. Damit wird eine Folge von einzelnen Bit bezeichnet, die den Zustand Null (&#039;0&#039;) oder Eins (&#039;1&#039;) darstellen können.&lt;br /&gt;
&lt;br /&gt;
Bitmasken werden im allgemeinen dazu verwendet, um unter Anwendung eines Operators (z.&amp;amp;nbsp;B. UND, ODER, XOR), eine Eingabe zu manipulieren. Das Ergebnis ist dann die Anwendung des Operators auf die Eingabe und der Bitmaske.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Operator eine Funktion mit zwei Argumenten ist, dann lässt sich dessen Anwendung wie folgt schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Ergebnis = Operator( Eingabe, Bitmaske )&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bitmaske ist häufig eine Konstante, da diese z.&amp;amp;nbsp;B. die Information über die Position einer Information in einem Register darstellt. Das kann z.&amp;amp;nbsp;B. ein Überlaufflag in einem Timer Statusregister sein.&lt;br /&gt;
&lt;br /&gt;
== Bits setzen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Eins gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#ODER | ODER]]-Verknüpfung erreicht.  Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden auf &#039;1&#039; gesetzt. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbr r16, 0b11110000     ; setzt Bits 4-7 in r16, ist ein Pseudobefehl&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
ori r16, 0b11110000     ; setzt Bits 4-7 in r16, ori ist identisch mit sbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
sbi PORTB, 5            ; setzt Bit 5 in PortB&lt;br /&gt;
sbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..0x1F&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden&lt;br /&gt;
in  r16, TIMSK          ; setzt Bit TOIE1 in TIMSK&lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;TOIE1)    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; setzt Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;RXCIE0)    &lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von sbr als &amp;quot;setze Bit 2 und 0&amp;quot; gedeutet (=0b00000101), während sbi sie als &amp;quot;setze Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;sbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine ODER-Verknüpfung, während der Befehlt &#039;&#039;&#039;sbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] (C) ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= 0xF0;   // Kurzschreibweise, entspricht PORTB = PORTB | 0xF0; bitweises ODER&lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */&lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1&lt;br /&gt;
#define MEINBIT2 2&lt;br /&gt;
&lt;br /&gt;
PORTB |= ((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // setzt Bit 0 und 2 in PORTB auf &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile &amp;quot;entschlüsselt&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben.  Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft, also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;|=&#039;&#039;&#039; : Diese Maske wird mit dem aktuellen Inhalt von PORTB bitweise ODER-verknüpft und das Ergebnis PORTB wieder zugewiesen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB |= variable;         // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB | variable; // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111010, dann ist der Inhalt nach der Operation 0b01111010 &#039;&#039;or&#039;&#039; 0b00000101 = 0b01111111, die gewünschten Bits sind somit gesetzt!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man das gezeigte Beispiel der Bitmanipulation auf größere Datentypen anwenden, ist zu beachten, dass der Compiler in der Operation (1 &amp;lt;&amp;lt; MEINBIT1) stillschweigend gemäss, den C-Regeln, die 1 als Integer Typ ansieht. Beim AVR-GCC bedeutet das 16-Bit/signed und die folgende Operation bringt ggf. nicht das gewünschte Ergebnis. (Stichwort: &amp;quot;Integer Promotion&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Angenommen Bit 15 soll in einer 32-Bit weiten Variable gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define MEINBIT15 15&lt;br /&gt;
#define MEINBIT42 42&lt;br /&gt;
&lt;br /&gt;
uint32_t reg_32; /* uint32_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
uint64_t reg_64; /* uint64_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= (1 &amp;lt;&amp;lt; MEINBIT15);              /* FEHLER: Setzt die Bits 31 - 15, da ((int)1 &amp;lt;&amp;lt; 15) == 0xFFFF8000 */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= ((uint32_t)1 &amp;lt;&amp;lt; MEINBIT15);    /* Hier wird nur Bit 15 gesetzt. */&lt;br /&gt;
reg_32 |= (1U &amp;lt;&amp;lt; MEINBIT15);             /* */&lt;br /&gt;
reg_32 |= (1L &amp;lt;&amp;lt; MEINBIT15);             /* andere Schreibweise. */&lt;br /&gt;
reg_64 |= (1LL &amp;lt;&amp;lt; MEINBIT42);            /* Hier wird nur Bit 42 gesetzt,&lt;br /&gt;
                                            andere Schreibweise für 64 Bit (long long). */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Compilern für 32bit Controller (z.&amp;amp;nbsp;B. ARM7TDMI) sind Integers per default 32-bit und Konstanten sind somit implizit ebenfalls 32-bit. Man sollte aber dennoch die oben gezeigte Vorgehenweise verwenden, um Probleme zu vermeiden die entstehen könnten, wenn Code unter verschiedenen Plattformen/Compilern verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Bits löschen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf Null gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#UND | UND]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;0&#039; sind, werden auf &#039;0&#039; gesetzt. Alle Bits, die in der Maske auf &#039;1&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cbr r16, 0b00001111     ; löscht Bits 0-3 in r16, ist ein Pseudobefehl &lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, 0b11110000    ; löscht Bits 0-3 in r16, andi ist identisch mit cbr&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16-r31&lt;br /&gt;
&lt;br /&gt;
andi r16, ~0b00001111   ; andere Schreibweise, hier wird die Bitmaske durch ~ invertiert&lt;br /&gt;
                        ; dadurch kann man einfach alle zu löschenden Bit als &#039;1&#039; angeben&lt;br /&gt;
                        ; so wie bei den Bitmasken für das setzen von Bits (positive Logik)&lt;br /&gt;
&lt;br /&gt;
cbi PORTB, 5            ; löscht Bit 5 in PortB&lt;br /&gt;
cbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..31&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register mit I/O Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden weil dieser Bereich nicht&lt;br /&gt;
                        ; bitadressierbar ist&lt;br /&gt;
in  r16, TIMSK          ; löscht Bit TOIE1 in TIMSK&lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;TOIE1    &lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; für I/O Register oberhalb der I/O Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwednet werden&lt;br /&gt;
                        ; löscht Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;RXCIE0&lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier gilt: Man beachte den Unterschied! Eine &amp;quot;5&amp;quot; würde von cbr als &amp;quot;lösche Bit 2 und 0&amp;quot; gedeutet, während cbi sie als &amp;quot;lösche Bit 5&amp;quot; versteht. Der Befehl &#039;&#039;&#039;cbr&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine UND-NOT-Verknüpfung (nicht zu verwechseln mit NAND), während der Befehl &#039;&#039;&#039;cbi&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von grossen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation &amp;lt;&amp;lt; erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= 0xF0;   // entspricht PORTB = PORTB &amp;amp; 0xF0; bitweises UND&lt;br /&gt;
                 // Bits 0-3 (das &amp;quot;niederwertige&amp;quot; Nibble) werden geloescht &lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */ &lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1  &lt;br /&gt;
#define MEINBIT2 2  &lt;br /&gt;
&lt;br /&gt;
PORTB &amp;amp;= ~((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // löscht Bit 0 und 2 in PORTB&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile entschlüsselt:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;(1 &amp;lt;&amp;lt; n)&#039;&#039;&#039; : Zuerst wird durch die &#039;&amp;lt;&amp;lt;&#039;-Ausdrücke eine &amp;quot;1&amp;quot; n-mal nach links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für (1 &amp;lt;&amp;lt; MEINBIT0) und 0b00000100 für (1 &amp;lt;&amp;lt; MEINBIT2).&lt;br /&gt;
# &#039;&#039;&#039;|&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft also 0b00000001 &#039;&#039;or&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;~&#039;&#039;&#039; : Der Wert in der Klammer wird bitweise invertiert, aus 0b00000101 wird 0b11111010.&lt;br /&gt;
# &#039;&#039;&#039;&amp;amp;=&#039;&#039;&#039; : PORTB wird mit der berechneten Maske UND-verknüpft und das Ergebnis wieder PORTB zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= variable;          // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB &amp;amp; variable;  // lange Schreibweise&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111111, dann ist der Inhalt nach der Operation 0b011111111 &#039;&#039;and&#039;&#039; 0b11111010 = 0b01111010, die gewünschten Bits 0 und 2 sind somit gelöscht.&lt;br /&gt;
&lt;br /&gt;
Die C-Ausdrücke mittels Definitionen von Bitnummern und Schieboperator (&amp;lt;&amp;lt;) sehen auf den ersten Blick etwas &amp;quot;erschreckend&amp;quot; aus und sind mehr &amp;quot;Tipparbeit&amp;quot;, funktionieren aber universell und sind deutlicher und nachvollziehbarer als &amp;quot;handoptimierte&amp;quot; Konstanten. Bei eingeschalteter Optimierung löst der Compiler die Ausdücke mit konstanten Werten bereits zur Compilierungszeit auf und es entsteht kein zusätzlicher Maschinencode. Bei AVR sind die Definitionen meist Teil der Entwicklungsumgebungen (bei avr-libc z.&amp;amp;nbsp;B. implizit durch #include &amp;lt;avr/io.h&amp;gt;). Sie entsprechen den Angaben und Beispielen in den Datenblättern und sind damit de-facto ein Standard beim Zugriff auf Bits in Hardware-Registern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtiger Hinweis&#039;&#039;&#039;: Die ODER-Verknüpfung und die anschliessende Invertierung kann man nicht vertauschen! (Theorem von DeMorgan) Folgendes Beispiel soll die Richtigkeit der Aussage zeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 ~(0b0001 | 0b0010) == 0b1100&lt;br /&gt;
  ~0b0001 | ~0b0010 == 0b1111&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Niederwertigstes gesetztes Bit löschen (Standard C) ===&lt;br /&gt;
&lt;br /&gt;
Folgender Code löscht von allen 1-Bits in einer Integer-Variable das niederwertigste, unabhängig von der Position desselben.&lt;br /&gt;
&lt;br /&gt;
Beispiel: 01101000 -&amp;gt; 01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t byte;&lt;br /&gt;
&lt;br /&gt;
byte = irgendwas();&lt;br /&gt;
&lt;br /&gt;
byte = byte &amp;amp; (byte - 1); /* Diese seltsame Operation löscht das&lt;br /&gt;
                             niederwertigste 1-Bit */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
Byte  :  01101000 &lt;br /&gt;
Byte-1:  01100111&lt;br /&gt;
Ergebnis:01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Das funktioniert also mit jeder beliebigen Zahl.&lt;br /&gt;
&lt;br /&gt;
Dies kann bspw. zur schnellen Paritätsgenerierung eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t pareven(uint8_t byte) {&lt;br /&gt;
  uint8_t par = 0;&lt;br /&gt;
&lt;br /&gt;
  while(byte) {&lt;br /&gt;
    byte = byte &amp;amp; (byte - 1);&lt;br /&gt;
    par = ~par;&lt;br /&gt;
  }&lt;br /&gt;
  return par;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das genannte gilt natürlich nicht nur für 8-Bit-Integers, sondern für beliebige, vom Compiler unterstützte Wortlängen.&lt;br /&gt;
&lt;br /&gt;
== Bits invertieren ==&lt;br /&gt;
&lt;br /&gt;
Im allgemeinen Sprachgebrauch oft Toggeln genannt (aus dem Englischen). Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] invertiert (getoggelt) werden sollen, wird die durch eine [[AVR-Tutorial:_Logik#XOR_.28Exlusives_Oder.29 | XOR]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske &#039;1&#039; sind, werden invertiert. Alle Bits, die in der Maske auf &#039;0&#039; gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Bei [[AVR]]s erlaubt dies folgender Assemblercode. Hier wird ein Ausgangspin invertiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
  sbic  PortB, 0    ; Überspringe den nächsten Befehl, wenn das Bit 0 im Port gelöscht ist&lt;br /&gt;
  rjmp  ClrBitNow   ; Springe zu ClrBitNow   &lt;br /&gt;
  sbi   PortB, 0    ; Setze Bit 0 in PortB&lt;br /&gt;
  rjmp  BitReady    ; Springe BitReady&lt;br /&gt;
ClrBitNow:&lt;br /&gt;
   cbi  PortB, 0    ; Lösche Bit 0 in PortB&lt;br /&gt;
BitReady:&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Noch kürzer gehts so:&amp;lt;br&amp;gt;&lt;br /&gt;
Die zweite Zeile mit dem Befehl &#039;&#039;&#039;ldi&#039;&#039;&#039; lädt die Bitmaske, in welcher die zu toggelnden Bits auf &#039;1&#039; gesetzt sind. In diesem Beispiel wird das dritte Bit invertiert. Der Vorteil dieser Methode ist neben der Kürze und Übersichtlichkeit auch die Möglichkeit, bis zu 8 Bit gleichzeitig zu toggeln. Diese Methode ist natürlich auch auf normale Daten anwendbar, nicht nur auf IO-Ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in     R24, PORTE   ; Daten lesen&lt;br /&gt;
 ldi    R25, 0x04    ; Bitmaske laden, hier Bit #2&lt;br /&gt;
 eor    R24, R25     ; Exklusiv ODER&lt;br /&gt;
 out    PORTE, R24   ; Daten zurückschreiben&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit gibt es, wenn man nur das 8. Bit kippen will:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
 in      r16, PORTB&lt;br /&gt;
 subi    r16, 0x80&lt;br /&gt;
 out     PORTB, r16&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 PORTB ^= (1&amp;lt;&amp;lt;PB0);    /* XOR, Kurzschreibweise, PORTB = PORTB ^ (1&amp;lt;&amp;lt;PB0) */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neuere ATmegas ===&lt;br /&gt;
&lt;br /&gt;
Bei den neueren ATmegas (z.&amp;amp;nbsp;B. ATmega48) kann man IO-Pins direkt ohne den Umweg über Register togglen, indem man das entsprechende Bit im PINx-Register &#039;&#039;&#039;setzt&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
sbi PIND, 2       ; Bit 2 von Port D togglen&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8051er ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
cpl bitadresse&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bits prüfen ==&lt;br /&gt;
&lt;br /&gt;
Will man prüfen ob ein oder mehrere Bits in einer Variable gesetzt oder gelöscht sind, muss man sie mit einer Bitmaske UND verknüpfen. Die Bitmaske muss an den Stellen der zu prüfenden Bits eine &#039;1&#039; haben, an allen anderen eine &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
* Ist das Ergebnis gleich Null, sind alle geprüften Bits gelöscht.&lt;br /&gt;
* Ist das Ergebnis ungleich Null, ist mindestens ein geprüftes Bit gesetzt.&lt;br /&gt;
* Ist das Ergebnis gleich der Bitmaske, sind alle geprüften Bits gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== AVR Assembler ===&lt;br /&gt;
&lt;br /&gt;
Der AVR hat spezielle Befehle um direkt einzelne Bits in den CPU-Registern r0..r31 sowie den IO-Registern 0..0x1F zu prüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
; Befehle zur Prüfung von einzelnen Bits&lt;br /&gt;
&lt;br /&gt;
    sbrs    r16,3       ; überspringe den nächsten Befehl, wenn in r16 Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbrc    r16,5       ; überspringe den nächsten Befehl, wenn in r16 Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
    sbis    timsk,3     ; überspringe den nächsten Befehl, wenn in timsk Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbic    timsk,5     ; überspringe den nächsten Befehl, wenn in timsk Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
; Befehle zur Prüfung von mehreren Bits&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    breq    alle_bits_sind_geloescht&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    brne    mind_ein_bit_ist_gesetzt&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    cpi     r16,0b1010&lt;br /&gt;
    breq    alle_bits_sind_gesetzt&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gelöscht ist&lt;br /&gt;
    // die Klammer ist wichtig &lt;br /&gt;
    if (!(tmp &amp;amp; 0x10)) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gelöscht sind&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gesetzt ist&lt;br /&gt;
    if (tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 oder Bit 4 in der Variable tmp gelöscht sind&lt;br /&gt;
    if (~tmp &amp;amp; 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 4 in der Variable tmp gesetzt ist &lt;br /&gt;
    if (tmp &amp;amp; 0x10) {        &lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe ob Bit 0 und Bit 4 in der Variable tmp gesetzt sind&lt;br /&gt;
    // die Klammer ist wichtig! &lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0x11) {        &lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gesetzt sind&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfsfunktionen zur Bitmanipulation in C ==&lt;br /&gt;
&lt;br /&gt;
== Bitmanipulation beim MSP430 ==&lt;br /&gt;
&lt;br /&gt;
Beim MSP430 und dessen Compilern sind die Bitnamen meist anders definiert. Und zwar nicht als Bitnummer, sondern als Bitmuster. Darum schreibt man dort die Bitzugriffe in C anders. Das kann auch bei anderen Mikrocontrollern bzw. C-Compilern so sein. Wichtig ist, dass man seine eignen Definitionen in der gleichen Weise wie der Compiler anlegt, um Verwirrung zu vermeiden, siehe [[Strukturierte Programmierung auf Mikrocontrollern]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Definition von Bitnamen in den Headerfiles des Compilers&lt;br /&gt;
&lt;br /&gt;
#define PD4 4               // Definition im AVR GCC als Bitnummer&lt;br /&gt;
#define PD5 5&lt;br /&gt;
&lt;br /&gt;
#define P14 (1&amp;lt;&amp;lt;4)          // Definition im MSP430 GCC als Bitmuster&lt;br /&gt;
#define P15 (1&amp;lt;&amp;lt;5)&lt;br /&gt;
&lt;br /&gt;
// Bitmanipulation im Programm&lt;br /&gt;
 &lt;br /&gt;
   DDRD = (1&amp;lt;&amp;lt;PD5) | (1&amp;lt;&amp;lt;PD4);   // AVR GCC&lt;br /&gt;
   P1DIR = P15 | P14;            // MSP430 GCC&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/179566#1729219 Forumsbeitrag: Bits aus einem Array extrahieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/169509#1631439 Forumsbeitrag: Bits für ein Schieberegister zusammenstellen, TLC5941]&lt;br /&gt;
&lt;br /&gt;
[[Category:8051]]&lt;br /&gt;
[[Category:AVR-Arithmetik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=66129</id>
		<title>Miniwebserver</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Miniwebserver&amp;diff=66129"/>
		<updated>2012-05-06T16:26:01Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* XPort (ab 65 Euro) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Winzig kleine Webserver =&lt;br /&gt;
In diesem Artikel möchte ich Informationen über alle Geräte sammeln, die folgende Eigenschaften besitzen:&lt;br /&gt;
*Ethernetanschluss (Buchse oder Anschlusspins für eine Buchse)&lt;br /&gt;
*Webseiten ausliefern&lt;br /&gt;
*Sehr kleine Abmessungen&lt;br /&gt;
&lt;br /&gt;
Keine Voraussetzung ist:&lt;br /&gt;
*Programme ausführen&lt;br /&gt;
*Weitere Anschlussmöglichkeiten&lt;br /&gt;
*Mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kandidaten ==&lt;br /&gt;
&lt;br /&gt;
===VIPAR (ab 12 Euro)===&lt;br /&gt;
&lt;br /&gt;
Produkt noch nicht am Markt, erst angekündigt&lt;br /&gt;
Samples und EVAL ab August 2011&lt;br /&gt;
&lt;br /&gt;
* Internet Chip based on Cortex-M3 core and Sevenstax TCP/IP technology&lt;br /&gt;
* Integrated Ethernet MAC/PHY&lt;br /&gt;
* License: Commercial (royalties included in chip cost)&lt;br /&gt;
* Runs custom Web Application from SPI Flash or microSD-Card&lt;br /&gt;
* Configuration using a single XML file&lt;br /&gt;
* Web Server, ZeroConf, Auto-IP, Messenger, IPv4/IPv6, …&lt;br /&gt;
&lt;br /&gt;
Questions: http://www.vipar.eu&lt;br /&gt;
&lt;br /&gt;
===XPort (ab 45 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Herstellerspezifisches SDK oder Linux&lt;br /&gt;
*GPIOs&lt;br /&gt;
*1-3 UARTS&lt;br /&gt;
&lt;br /&gt;
===Picotux (ab 100 Euro)===&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
&lt;br /&gt;
===Etherrape (Bausatz 59 Euro)===&lt;br /&gt;
&lt;br /&gt;
* Kleinster Miniwebserver ohne SMD Teile, leider nicht ganz so winzig (100x80mm)&lt;br /&gt;
&lt;br /&gt;
*[http://www.lochraster.org/etherrape Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Bausatz mit Platine&lt;br /&gt;
* Gehäuse als Zubehör erhältlich&lt;br /&gt;
* Atmega 644, ENC28J60, 2MByte DataFlash&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Weitere Anwendungen auf der Platine&lt;br /&gt;
** RS232&lt;br /&gt;
** RS485&lt;br /&gt;
** Dallas OneWire(TM) Bus&lt;br /&gt;
** Webcam Anschluss&lt;br /&gt;
** Senden und empfangen von IR Fenbedienungssignalen&lt;br /&gt;
** Integration des ELV FS20 Systems in der Firmware vorbereitet&lt;br /&gt;
** Alle Signale des Atmel auf Wannenstecker herausgeführt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===AVR-Board mit Ethernet (ca. 30 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet Link zur Projektseite]&lt;br /&gt;
&lt;br /&gt;
* Miniwebserver ohne SMD Teile&lt;br /&gt;
* ENC28J60 als Ethernet Controller&lt;br /&gt;
* Atmega 32, ENC28J60&lt;br /&gt;
* RS232&lt;br /&gt;
* Alle freien Ports sind nach außen gelegt&lt;br /&gt;
* Firmware ist komplett OpenSource GPL Lizenz&lt;br /&gt;
&lt;br /&gt;
===FOX Board (139 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://elmicro.com/de/foxboard.html Elektronikladen.de]&lt;br /&gt;
*[http://www.acmesystems.it Hersteller]&lt;br /&gt;
&lt;br /&gt;
*Ethernetbuchse eingebaut&lt;br /&gt;
*Axis ETRAX LX100 Multi Chip Module&lt;br /&gt;
*32 Bit RISC CPU, 100MHz Takt, MMU, 8KB Cache&lt;br /&gt;
*4 MB Flash, 16 MB SDRAM&lt;br /&gt;
*10/100 Mbps Ethernet Port (RJ45-Buchse)&lt;br /&gt;
*2x USB-Port (Full-Speed Host)&lt;br /&gt;
*RS232-Port (TTL-Pegel) und I2C&lt;br /&gt;
*IDE, SCSI oder Wide-SCSI&lt;br /&gt;
*zwei Stiftleisten mit je 2x20 Pins&lt;br /&gt;
*3,3V-IOs, 5V-tolerant&lt;br /&gt;
*Versorgung: 5V=, ca. 280mA&lt;br /&gt;
*Abmessungen: 66mm x 72mm&lt;br /&gt;
*Ready-to-run Embedded Linux System (Kernel 2.6)&lt;br /&gt;
*Standardanwendungen: HTTP (Web-Server), FTP, Telnet, DHCP, SSH, PPP...&lt;br /&gt;
*Firmwareupdates jederzeit einfach via LAN-SDK, FTP-Client oder Web-Browser!&lt;br /&gt;
&lt;br /&gt;
=== ADDS-BF533-STAMP Blackfin Eval-Board (136.50 Euro excl. z.b bei Farnell) ===&lt;br /&gt;
&lt;br /&gt;
*ADSP-BF533 500 MHz Blackfin®-Prozessor&lt;br /&gt;
*128 MB SDRAM (64M x 16)&lt;br /&gt;
*4 MB FLASH-Speicher&lt;br /&gt;
*Ethernet-Controller SMSC 91C111&lt;br /&gt;
*serielle RS232-Schnittstelle&lt;br /&gt;
*E/A-Erweiterungsanschlüsse für Blackfin-Peripherie&lt;br /&gt;
**PPI&lt;br /&gt;
**SPORT0 &amp;amp; SPORT1&lt;br /&gt;
**SPI&lt;br /&gt;
**Timer&lt;br /&gt;
**IrDA&lt;br /&gt;
**2-Leiter-Schnittstelle&lt;br /&gt;
*JTAG-Schnittstelle für Fehlersuche und FLASH-Programmierung&lt;br /&gt;
*LEDs (3) und Taster (3)&lt;br /&gt;
*Netzteil&lt;br /&gt;
*fertiger ucLinux-Port :)&lt;br /&gt;
&lt;br /&gt;
=== ezTCP-Module (ab ca. 40 Euro)===&lt;br /&gt;
&lt;br /&gt;
*[http://www.eztcp.com/en/index_en.html Hersteller-Seite]&lt;br /&gt;
*[http://elmicro.com/de/eztcp.html Elektronikladen.de]&lt;br /&gt;
&lt;br /&gt;
*kleine Platine&lt;br /&gt;
*AVR ATmega* ist drauf&lt;br /&gt;
*RTL Netzwerkchip is drauf&lt;br /&gt;
*verschiedene Ausführungen: ezl-50 ist die kleinste / billigste&lt;br /&gt;
&lt;br /&gt;
=== AVR Net-IO Bausatz von Pollin (19,95 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [[AVR Net-IO Bausatz von Pollin]]&lt;br /&gt;
* Mitgelieferte Software muss durch eine andere Software ersetzt werden (diverse freie Software funktioniert)&lt;br /&gt;
&lt;br /&gt;
[http://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html Shop bei pollin.de]&lt;br /&gt;
&lt;br /&gt;
=== myAVR / myEthernet Embedded Webserver (ca. 60 Euro) ===&lt;br /&gt;
&lt;br /&gt;
*[http://shop.myavr.de/index.php?sp=article.sp.php&amp;amp;artID=100065 Shop des Herstellers]&lt;br /&gt;
&lt;br /&gt;
*sehr kleine Platine&lt;br /&gt;
*ATmega644P fest auf der Platine&lt;br /&gt;
*MicroSD-Slot gleich auf der Platine&lt;br /&gt;
&lt;br /&gt;
=== CrumbX1-NET (ca 50 Euro) ===&lt;br /&gt;
&lt;br /&gt;
* [http://shop.chip45.com Shop des Herstellers]&lt;br /&gt;
&lt;br /&gt;
* Xmega 128 (8bit, 128kB Programmspeicher, 8kB Ram)&lt;br /&gt;
* Mini USB&lt;br /&gt;
* Micro SD/MMC Slot&lt;br /&gt;
* kann optional mit Bootloader bestellt werden&lt;br /&gt;
* Nur minimal größer als eine Streichholz-Schachtel&lt;br /&gt;
&lt;br /&gt;
=== Weitere Webserver ===&lt;br /&gt;
&lt;br /&gt;
* [[Avr Webserver mit Wiznet WIZ810MJ]]&lt;br /&gt;
* [[Einfacher und billiger Webserver mit AtMega32]]&lt;br /&gt;
* Arduino Uno (ca. 24 EUR) mit Ethernet Shield (ca. 35 EUR) oder Arduino Ethernet (ca. 48 EUR)&lt;br /&gt;
* Raspberry PI (ca. 25 EUR)&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
===avrETH1===&lt;br /&gt;
*winzige Maße: 32mm x 47.8mm x ~20mm (BxLxH)&lt;br /&gt;
*Microchip ENC28J60 Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 uC&lt;br /&gt;
*4MBit Atmel SPI Flash&lt;br /&gt;
*Webcam Support&lt;br /&gt;
*Temperaturlogger mit Ausgabe als Graph&lt;br /&gt;
*Stromversorgung über die freien Leitungen im Ethernet Kabel oder extern&lt;br /&gt;
&lt;br /&gt;
http://avr.auctionant.de/avrETH1/&lt;br /&gt;
&lt;br /&gt;
===ENC28J60 IO-Webserver===&lt;br /&gt;
*Platine: 74.9mm x 74.9mm&lt;br /&gt;
*Microchip [[ENC28J60]] Ethernetcontroller&lt;br /&gt;
*Atmel Atmega32 oder Atmega644 uC&lt;br /&gt;
*Software kompatibel zum AVR Net-IO von Pollin&lt;br /&gt;
*Div. Erweiterungsboards&lt;br /&gt;
&lt;br /&gt;
http://mikrocontroller.heldt.eu/index.php?page=enc28j60-io-webserver&lt;br /&gt;
&lt;br /&gt;
===mega-eth===&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28J60&lt;br /&gt;
*SD/MMC-Slot&lt;br /&gt;
*FTDI USB/RS232-Wandler&lt;br /&gt;
*ATmega128 mit 64kBytes SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*eigener TCP/IP und TCP/UDP Stack&lt;br /&gt;
*eigener HTTP-Server&lt;br /&gt;
*eigener DHCP-Client&lt;br /&gt;
*Uhr-Synchronisation mit Zeit-Server&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/100177&lt;br /&gt;
&lt;br /&gt;
===MicroWebServer===&lt;br /&gt;
Kleinst-Webserver mit ENC28J60, Mega168 und Pfostenleiste für GPIOs auf 38x31mm².&lt;br /&gt;
&lt;br /&gt;
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer&lt;br /&gt;
&lt;br /&gt;
===I/O===&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-402627.html&lt;br /&gt;
&lt;br /&gt;
===OpenMCP===&lt;br /&gt;
&lt;br /&gt;
*Platine 100mm x 80mm&lt;br /&gt;
*Microchip ENC28j60&lt;br /&gt;
*ATmega2561 mit 128kByte SRAM&lt;br /&gt;
*Pfostenstecker für eigene Erweiterungen&lt;br /&gt;
*Eigener TCP/IP-Stack mit TCP,UDP,ARP,ICMP. Socketbasiert, mehrere Verbindungen gleichzeitig möglich&lt;br /&gt;
*HTTP-Server mit CGI-Support&lt;br /&gt;
*SNTP, DHCP, DNS, Telnet, Twitter, DynDNS&lt;br /&gt;
*MP3-Streamingclient (VS10xx) (nur auf dem OpenMCP-Board)&lt;br /&gt;
*Einfache Programmierung, halbwegs gute Dokumentation, komplett GPL, Weiterentwicklung des [https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet CCCB-Boards]&lt;br /&gt;
*Läuft auch auf dem AVR-NETIO, myEthernet, ATXM2 und dem Xplain mit Erweiterung&lt;br /&gt;
&lt;br /&gt;
http://wiki.neo-guerillaz.de&lt;br /&gt;
&lt;br /&gt;
===Ethersex===&lt;br /&gt;
&lt;br /&gt;
*reines Firmware-Projekt&lt;br /&gt;
*läuft auf vielen verschiedenen AVR-Boards (u.a. Etherrape, AVR Net-IO,...)&lt;br /&gt;
*über Konfigurationsdateien leicht an eigene AVR-Boards anzupassen&lt;br /&gt;
*Anbindung über Ethernet (ENC28j60), Funk (RFM12), USB (Soft-Stack), USART&lt;br /&gt;
*TCP/IP, IPv4, IPv6, ZBUS (TCP/IP über RS232 oder RS485)&lt;br /&gt;
*IP-Routing zwischen den verschiedenen Schnittstellen&lt;br /&gt;
*OpenVPN&lt;br /&gt;
*Steuerung &amp;amp; Skripting über Ethersex Command (ECMD)&lt;br /&gt;
*Fertige Ansteuerung vieler gängiger Hardware (I2C, Onewire, LCDs, ADC, FS20,MMC/SD-Karten,...)&lt;br /&gt;
*ICMP,BOOTP,SMTP,NTP,DNS,IRC,Jabber/XMPP,HTTP,...&lt;br /&gt;
*GPLv3, Aktive Entwicklergemeinde&lt;br /&gt;
&lt;br /&gt;
http://ethersex.de/&lt;br /&gt;
&lt;br /&gt;
=== AVR Webserver I/O Modul ===&lt;br /&gt;
&lt;br /&gt;
*Zum Fernsteuern und Abfragen von Sensoren und anderen selbstgebauten Geräten&lt;br /&gt;
*reines Firmware Projekt&lt;br /&gt;
*läuft auf vielen AVR-Board mit ATmega und Xmega ab 64kB + CP2201 Ethernet Controller&lt;br /&gt;
*über Konfigurationsdateien an unterschiedliche AVR-Boards (auch Eigenbauten) anpassbar&lt;br /&gt;
*Basiert auf uIP von Adam Dunkels&lt;br /&gt;
*TCP/IP v4, UDP, ARP, ICMP, DHCP CLient, HTTP Server, SMTP client, Socket Server (Telnet)&lt;br /&gt;
*Webserver mit dynamischen und statischen Seiten im Programmspeicher und SD/MMC Karte&lt;br /&gt;
*Standardmäßig 4 Verbindungen gleichzeitig (konfigurierbar, je nach RAM Größe)&lt;br /&gt;
*Optionale Komponenten:&lt;br /&gt;
**Versand von Emails getriggert durch 8 Eingänge&lt;br /&gt;
**Fernsteuerung per USB (als Alternative zu HTTP und IP Socket)&lt;br /&gt;
**SD/SDHC/MMC Karten mit FAT12/16/32 Filesystem&lt;br /&gt;
**serielle 12bit A/D Wandler vom Typ MCP3204 / MCP3208&lt;br /&gt;
**I/O Erweiterung durch Schieberegister&lt;br /&gt;
&lt;br /&gt;
*kompatible Hardware z.B. verfügbar bei http://chip45.com (Kommerziell)&lt;br /&gt;
*Anwendungsbeispiel: Alarmanlage http://stefanfrings.de/bfAlarm/index.html&lt;br /&gt;
&lt;br /&gt;
http://stefanfrings.de/avr_io&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Ethernet]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=I2C_als_Hausbus&amp;diff=64683</id>
		<title>I2C als Hausbus</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=I2C_als_Hausbus&amp;diff=64683"/>
		<updated>2012-03-02T23:06:42Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Differentielle Übertragung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Infos =&lt;br /&gt;
&lt;br /&gt;
Infos allgemein zu [[Hausbus]], [[I²C]].&lt;br /&gt;
&lt;br /&gt;
Es wird oft behauptet das I²C nur für Verbindungen innerhalb einer Leiterplatte gedacht ist. Das ist sicherlich die Hauptanwendung, aber es gibt auch allseits bekannte Einsatzgebiete wo etliche Meter überbrückt werden. Bei VGA (DDC) und HDMI wird z.B. eine I²C-Bus Verbindung zur Kommunikation zwischen den Endgeräten benutzt. VGA und HDMI Kabel können (offiziell) rund 15m lang sein.&lt;br /&gt;
 &lt;br /&gt;
Allerdings werden für diesen Einsatz oftmals auch spezielle Treiber Bausteine eingesetzt, die  eine höhere Buskapazität vertragen, verbesserten ESD Schutz haben, die Pegel übersetzen (z.B. 3,3 auf 5V), Hot-Plug-fähig sind, etc. Als Beispiel sei hier der PCA9507 (NXP) aufgeführt, der einige dieser Eigenschaften besitzt.&lt;br /&gt;
&lt;br /&gt;
= Vorteile =&lt;br /&gt;
&lt;br /&gt;
Man kann Slave Bausteine &amp;quot;von der Stange&amp;quot; kaufen, ohne sich Gedanken über Protokoll und Adressierung zu machen. Denn das ist bereits schon implementiert. &lt;br /&gt;
Alternativ kann man aber auch eigene Slaves bauen und an den Bus hängen. Dafür haben viele µC schon eine Hardware I²C Schnittstelle integriert. Wobei man aber auch recht einfach eine I²C Schnittstelle in Software nachbilden kann.&lt;br /&gt;
&lt;br /&gt;
I²C Bausteine sind reine State-Machines. Somit sind viele von Hause aus recht Stromsparend. Der PCA9554 benötigt z.B. nur 250nA im &amp;quot;Standby-Mode&amp;quot; (keine Kommunikation).&lt;br /&gt;
&lt;br /&gt;
Bei I²C gibt der Master den Takt (SCL) für die Datenübertragung vor. Die Slaves benötigen im Gegensatz zu UART also keinen genauen Taktgeber (Quarz). Will man den Takt auf dem Bus verringern, so muss man das nur am Master einstellen. Die Slaves benötigen keine Änderung. So ist es auch möglich den Takt dynamisch zu variieren und z.B. wichtige Nachrichten mit geringem Takt (Störunempfindlicher) zu übertragen und andere Nachrichten mit höherem Takt.&lt;br /&gt;
&lt;br /&gt;
= Verkabelung =&lt;br /&gt;
&lt;br /&gt;
== Kabellänge ==&lt;br /&gt;
&lt;br /&gt;
I²C ist nicht als &amp;quot;long range&amp;quot; Bus entwickelt worden. Daher ist eines der Hauptprobleme bei I²C als Hausbus, das man ohne weiteres nicht weiter als ein paar Meter kommt. &lt;br /&gt;
Das liegt daran das die I²C Leitungen eine maximale Kapazität von 400pF nicht übersteigen dürfen, da der high-Zustand auf dem Bus nur passiv über Pull-Ups erreicht wird. Je mehr Kapazität an einer I²C-Bus Leitung hängt, desto länger braucht der Bus also um den high-Zustand zu erreichen. Das kann zu timing Problemen führen.&lt;br /&gt;
&lt;br /&gt;
Es gibt zur Reichweitenerhöhung verschiedene Ansätze: &lt;br /&gt;
# Kleinerer Pull-Up&lt;br /&gt;
# Geschwindigkeitsreduktion&lt;br /&gt;
# Bustreiber&lt;br /&gt;
# Differentielle Übertragung&lt;br /&gt;
# Aktiver Pull-Up&lt;br /&gt;
&lt;br /&gt;
=== Kleinerer Pull-Up ===&lt;br /&gt;
&lt;br /&gt;
Da das Kernproblem darin liegt, dass der high-Zustand nur passiv erreicht wird, bietet es sich an den Pull-Up Widerstand zu verkleinern um dadurch die Zeit zu verkürzen die der Bus benötigt den high-Zustand zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Begrenzt wird dieses Vorhaben dadurch das I²C Geräte nur 3mA sinken können (Die weiter unten besprochenen Bustreiber umgehen genau dieses Problem). Bei der Berechnung der Pull-Ups muss also darauf geachtet werden das nicht mehr als 3mA durch einen Widerstand fließen. Eine Ausnahme stellen I²C Geräte dar die der &#039;&#039;Fm+&#039;&#039; (oder höher) Spezifikation entsprechen. Diese sind in der Lage 30mA zu sinken.&lt;br /&gt;
&lt;br /&gt;
=== Geschwindigkeitsreduktion ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Busgeschwindigkeit angepasst wird, sind große Strecken und umfangreiche Verzweigungen möglich. Ein 30-Meter-Bus funktioniert zum Beispiel noch mit rund 20kHz fast ohne Probleme. &lt;br /&gt;
Bei Geschwindigkeiten um 1kHz, wurde im Forum schon von Buslängen von etlichen hundert Metern berichtet. &lt;br /&gt;
&lt;br /&gt;
=== Bustreiber ===&lt;br /&gt;
&lt;br /&gt;
Bustreiber haben die Aufgabe die maximale Buskapazität von 400pF zu erhöhen. Dies erreichen die Bausteine i.d.R. durch eine Steigerung des Stroms auf dem Bus. &lt;br /&gt;
Die drei bekanntesten Bustreiber für diesen Zweck sind folgende:&lt;br /&gt;
&lt;br /&gt;
* P82B715 (3000pF, max. 100kHz)&lt;br /&gt;
* P82B96 (4000pF, max. 400kHz)&lt;br /&gt;
* PCA9600 (4000pF, max. 1MHz)&lt;br /&gt;
&lt;br /&gt;
Alle drei Typen habe ihre Vor- und Nachteile. Wobei der PCA9600 als Nachfolger vom P82B96 angesehen werden kann und im Prinzip nur Vorteile gegenüber dem P82B96 hat (Abgesehen vom Preis und der Beschaffbarkeit ;) )&lt;br /&gt;
&lt;br /&gt;
Der Hauptunterschied zwischen P82B96 und PCA9600 sind die Spannungspegel an der Sx/Sy Seite des ICs. Der P82B96 kann diese Pins bei einem low-Signal nicht weiter als 0,88V nach unten ziehen (I²C kompatibel, nicht TTL kompatibel). Der verbesserte PCA9600 kann bis auf 0,74V herunter ziehen (I²C und TTL kompatibel). Des weiteren hat der PCA weniger Laufzeitverzögerung und ist bis zu 1MHz Bustakt spezifiziert. &lt;br /&gt;
&lt;br /&gt;
Der P82B96 (und PCA9600) verhindert eine Rückkopplung indem er an seinen Sx/Sy Eingängen ein low bei 0,65V erkennt, ein low selber aber nur mit 0,88V ausgeben kann. Informationen die über die T/R Seite kommen, werden also von einem zweiten, parallelgeschalteten, Bustreiber des gleichen Typs nicht weitergeleitet. Im Gegensatz zum P82B715 können die ICs verschiedene Busspannungen &amp;quot;übersetzen&amp;quot;. Die gepufferte Seite kann also mit einer anderen Busspannung betrieben werden als die Sx/Sy Seite.&lt;br /&gt;
&lt;br /&gt;
P82B96 und PCA9600 können statisch 30mA treiben. In der Application Note AN10216 (Seite 46) wird von NXP geschrieben das mittels externer Transistoren der Strom noch weiter erhöht werden kann. Bei 30kHz wird eine mögliche Gesamtlänge von 1km angegeben. &lt;br /&gt;
&lt;br /&gt;
Recht einfach aufgebaut ist der P82B715. Intern arbeitet nur ein Stromsensor, der auf der gepufferten Seite mittels Transistors den Strom bei low Pegel erhöht. Er hat somit nicht die Probleme mit bestimmten Spannungspegeln wie die P82B96 und PCA9600 ICs. Dafür muss beim P82B715 auch die ungepufferte Seite zur Gesamtbuslast mit einbezogen werden. Auch ist es nicht möglich die gepufferte Seite mit anderer Spannung zu bertreiben. &lt;br /&gt;
Auf der gepufferten Seite (LDA/LCL) besitzt der P82B715 nur jeweils einen Pin für jede Busleitung. Applikationen die getrennte TX und RX Pins benötigen, sind mit dem P82B715 also nicht möglich.&lt;br /&gt;
&lt;br /&gt;
=== Differentielle Übertragung ===&lt;br /&gt;
&lt;br /&gt;
In Kombintation mit einem Bustreiber wie dem P82B96, ist es möglich die I²C Bus Signale über RS-485 oder CAN physikalisch zu &amp;quot;tunneln&amp;quot; (PHY Layer).&lt;br /&gt;
&lt;br /&gt;
Dabei werden die TX und RX Leitungen des I²C Bustreibers mit den TX und RX Leitungen des RS-485 oder CAN Treibers verbunden. Für SDA und SCL werden hierfür auf dem Übertragungskabel also insgesamt vier Leitungen benötigt.&lt;br /&gt;
&lt;br /&gt;
NXP bietet mit den P82B485/P82B486 auch Treiber an, die den I²C-Bus direkt auf RS485 übersetzen.&lt;br /&gt;
&lt;br /&gt;
=== Aktiver Pull-Up ===&lt;br /&gt;
&lt;br /&gt;
Linear Technology bietet einige ICs wie den LTC1694 an, der den passiven low-high Wechsel des I²C-Bus durch eine Stromquelle beschleunigt.&lt;br /&gt;
&lt;br /&gt;
== Topologie ==&lt;br /&gt;
&lt;br /&gt;
Über die günstigste Topologie (Stern, Bus,..) ist bisher nichts bekannt.&lt;br /&gt;
&lt;br /&gt;
= Datensicherheit =&lt;br /&gt;
&lt;br /&gt;
Von Hause aus ist bei I²C keine Checksumme o.ä. vorgesehen. Einzelne Bytes werden nur mit einem ACK bestätigt.&lt;br /&gt;
&lt;br /&gt;
Man muss also eigene Konzepte entwickeln um sicherzugehen das Daten korrekt gesendet und empfangen wurden. &lt;br /&gt;
&lt;br /&gt;
Einige Möglichkeiten wären:&lt;br /&gt;
* Geschriebene Daten zurücklesen&lt;br /&gt;
* Daten immer mehrmals schreiben/lesen&lt;br /&gt;
* Wenn man µC als Slave programmiert, kann man eine Checksumme als zusätzliches Byte mitübertragen&lt;br /&gt;
&lt;br /&gt;
= Adressierung =&lt;br /&gt;
&lt;br /&gt;
Wie viele Adressen einzelne I²C Bausteine haben, ist unterschiedlich. In der Regel sind 1-8 Adressen möglich. Es gibt aber auch (neuere) Bausteine die bis zu 64 mögliche Adressen haben. Somit kann es also sein, das man evt. Probleme bekommt wenn man mehrere Bausteine des selben Typs einsetzen will.&lt;br /&gt;
&lt;br /&gt;
In dieser Hinsicht ist der PCA9501 I/O Expander Baustein recht interessant. Er bietet als einer der wenigen älteren Bausteine bis zu 64 mögliche Adressen. Zudem hat er ein integriertes EEPROM (256 Byte) und ist somit für Hausbus Anwendungen gut geeignet. &lt;br /&gt;
&lt;br /&gt;
Eine andere Lösung dieses Problems ist die Verwendung von I²C Multiplexern- bzw. Switches. Wie z.B. den PCA9544. Dieser Baustein kann einzelne Busabschnitte bei bedarf abtrennen, so das man in den einzelnen Abschnitten identische Adressen verwenden kann.&lt;br /&gt;
&lt;br /&gt;
= Eigene Erfahrungen =&lt;br /&gt;
&lt;br /&gt;
Vor einigen Jahren war ich als Servicetechniker bei einer Geräteinstallation im Einsatz, bei der die laut Datenblatt möglichen Längen bei weitem überschritten wurden. Ab 12m ging nix mehr. Der Grund war aber nicht der I²C-Bus, sondern die Spannungsversorgung der entfernten Geräte. Die Masseleitung war auch 12m lang, und der Stromverbrauch der Geräte hat den Massepegel soweit angehoben, dass der I²C-Bus nicht mehr funktioniert hat. Mit einer dickeren Masseleitung hat&#039;s sofort wieder funktioniert. &lt;br /&gt;
&lt;br /&gt;
Die Kabel sind (bezüglich der gemeinsamen Masse) eine Kette über differentiell kleiner Widerstände parallel geschaltener differentiell kleiner Kondensatoren. Durch einen Pegel-Wechsel müssen all diese kleinen Kondensatoren über die Widerstände umgeladen werden. Folge ist eine deutlich kleinere Ausbreitungs-Geschwindigkeit des Signals und ein geringerer Spannungs-Anstieg an den Anschlüssen der Geräte. Zu der Kapazität der Kabel kommt vor allem noch die Kapazität der Geräte. Im I²C-Standard von Philips ist diese Kapazität auf 400pF limitiert. Im access.bus-Standard (welcher für Computer-Komponenten und Peripherie entwickelt wurde) ist diese Kapazität auf 1000pF beschränkt. Vgl. Ausbreitungsgeschwindigkeiten, Kapazitäten bei anderen Bus-Systemen wie USB, SATA, RS485 &lt;br /&gt;
&lt;br /&gt;
= Passende Sensoren / Module =&lt;br /&gt;
* Temperatursensor mit dem [[Temperatursensor#DS1621|DS1621]]&lt;br /&gt;
* [[I2C-Schaltmodul]] mit dem [[Port-Expander_PCF8574|PCF8574]]&lt;br /&gt;
* [http://cctools.hs-control.de/ext_index.php?artikel=1824 I²C-CAN Modul]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
* [http://www.i2c-bus.org/ I²C-Bus Infoseite]&lt;br /&gt;
* [http://ics.nxp.com/interface/ Übersicht I²C Bausteine von NXP]&lt;br /&gt;
* [http://www.hendonsemiconductors.com/bus-buffer.asp Hendon Semiconductors (Viele Application Notes)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;br /&gt;
[[Kategorie:I2C]]&lt;br /&gt;
[[Kategorie:Hausbus]]&lt;br /&gt;
&lt;br /&gt;
== Foren Beiträge ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/71426#582586 I2C über 1,2km Kabel mit CAN-Transceiver]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/40880 I2C über 200m Kabel mit P82B96]&lt;br /&gt;
&lt;br /&gt;
== Application Notes == &lt;br /&gt;
&lt;br /&gt;
* [http://www.nxp.com/documents/application_note/AN10658.pdf AN10658 (Sending I2C-bus signals via long communications)]&lt;br /&gt;
* [http://www.nxp.com/documents/application_note/AN460.pdf AN460 (Using the P82B96 for bus interface)]&lt;br /&gt;
* [http://www.nxp.com/documents/application_note/AN255.pdf AN255 (I²C / SMBus Repeaters, Hubs and Expanders)]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Temperatursensor&amp;diff=61371</id>
		<title>Temperatursensor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Temperatursensor&amp;diff=61371"/>
		<updated>2011-10-31T16:51:48Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* SHT21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Will man mit einem [[Mikrocontroller]] Temperaturen messen, dann braucht man&lt;br /&gt;
* einen [[Sensor]], der die Temperatur z.&amp;amp;nbsp;B. in eine Spannung oder einen Strom umsetzt&lt;br /&gt;
* einen [[ADC | AD-Wandler]], der das Signal digitalisiert. Der kann auf dem Sensor oder dem Mikrocontroller integriert sein.&lt;br /&gt;
&lt;br /&gt;
Temperatursensoren gibt es nun in allen möglichen Varianten. Vom temperaturabhängigen [[Widerstand]] bis zum fertig abgeglichenen All-in-one-Bauteil mit digitalem Ausgang. Wie bei allen Sensoren sollte man auch hier genau hinschauen und [[Auflösung und Genauigkeit]] unterscheiden.&lt;br /&gt;
&lt;br /&gt;
== Analoge Temperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
=== PT100 ===&lt;br /&gt;
&lt;br /&gt;
Unter einem PT100 versteht man einen Platinwiderstand, der bei 0°C einen Widerstand von 100 Ohm hat.&lt;br /&gt;
Platinwiderstände sind temperaturabhängige Widerstände mit hoher Wiederholgenauigkeit und Konstanz[http://de.wikipedia.org/wiki/Konstante].  Wegen der relativ geringen Widerstandsänderung von nur ca. 0,4 Ohm pro Grad ist etwas mehr Schaltungsaufwand erforderlich als bei anderen Sensoren. Genauere Formeln zur Temperaturbestimmung gibt es u.a. bei der [http://de.wikipedia.org/wiki/Pt100 Wikipedia]. Ein Schaltplan findet sich bei der [http://www.heise.de/ct/artikel/Sensibelchen-289608.html c&#039;t].&lt;br /&gt;
&lt;br /&gt;
Die Sensoren gibt es auch mit anderen Widerstandswerten, z.&amp;amp;nbsp;B. mit 1000&amp;amp;Omega; und heißen dann entsprechend PT1000.&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* genormt&lt;br /&gt;
* großer Meßbereich&lt;br /&gt;
* hohe Linearität&lt;br /&gt;
* hohe Wiederholgenauigkeit&lt;br /&gt;
* einfach austauschbar&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* relativ teuer (bei segor.de ab 3,80&amp;amp;euro;)&lt;br /&gt;
* brauchen aufwendigere Auswerteschaltung&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.heise.de/ct/04/22/236/ c&#039;t-Artikel: Mikrocontroller-Programmierung: Timer, Sensoren und Drehgeber (mit PT100 Schaltung)]&lt;br /&gt;
* [http://pdfserv.maxim-ic.com/en/an/AN3450.pdf Maxim AN3450 Positive Analog Feedback Compensates PT100 Transducer]&lt;br /&gt;
&lt;br /&gt;
=== NTC/PTC ===&lt;br /&gt;
&lt;br /&gt;
NTC und PTC sind temperaturabhängige Widerstände.&lt;br /&gt;
&lt;br /&gt;
* NTC (engl. &#039;&#039;&#039;N&#039;&#039;&#039;egative &#039;&#039;&#039;T&#039;&#039;&#039;emperature &#039;&#039;&#039;C&#039;&#039;&#039;oefficient, Heißleiter), hat bei hohen Temperaturen seinen niedrigsten Widerstand, z.&amp;amp;nbsp;B. Silizium&lt;br /&gt;
* PTC (engl. &#039;&#039;&#039;P&#039;&#039;&#039;ositive &#039;&#039;&#039;T&#039;&#039;&#039;emperature &#039;&#039;&#039;C&#039;&#039;&#039;oefficient, Kaltleiter), hat bei niedrigen Temperaturen seinen geringsten Widerstand, z.&amp;amp;nbsp;B. Glühlampe&lt;br /&gt;
&lt;br /&gt;
Um den Widerstandswert zu messen schaltet man sie mit einem normalen Widerstand oder einer [[Konstantstromquelle]] in Reihe zu einem [[Spannungsteiler]] und misst den Spannungsabfall. Eine Beispielschaltung findet sich [http://www.mathar.com/msp_thermo1.html hier].&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* billig (z.B. [http://www.reichelt.de/?ARTICLE=9594 KTY81-110] bei Reichelt  ~0,60&amp;amp;euro;)&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* müssen für höhere Genauigkeiten abgeglichen werden&lt;br /&gt;
* brauchen A/D-Wandler&lt;br /&gt;
* sind nichtlinear&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* KTY10-5&lt;br /&gt;
* KTY13-6&lt;br /&gt;
* KTY81-121&lt;br /&gt;
* KTY81-122&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.sprut.de/electronic/temeratur/temp.htm Temperaturabhängige Stromquelle und NTC/PTC inclusive Linearisierung]&lt;br /&gt;
*[http://www.umnicom.de/Elektronik/Mikrokontroller/Atmel/AtFan/AtFan.html#2.2.2 Berechnung des Linearisierungswiderstandes für gewünschten Temperaturbereich] der fällt sonst immer vom Himmel&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/208587#2065880 KTY 10-5 Formelprobleme]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/225563 Codesammlung: Beispiel mit 0,5°C Auflösung]&lt;br /&gt;
&lt;br /&gt;
=== LMx35 ===&lt;br /&gt;
&lt;br /&gt;
Eine IC-Familie, die pro Kelvin Temperaturänderung ihre Ausgangsspannung um 10&amp;amp;nbsp;mV ändert. Die ICs gibt es in verschiedenen Genauigkeiten und Temperaturbereichen mit den Bezeichnungen LM135(A), LM235(A) und LM335(A). Der günstigste ist der LM335 mit einem Temperaturbereich von −40 … +100°C.&lt;br /&gt;
In verschiedenen Bauformen erhältlich. Beispielschaltungen finden sich im [http://www.national.com/ds.cgi/LM/LM135.pdf Datenblatt] und [http://www.suessbrich.info/elek/elektherm1.html hier]&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* hat auch ohne Kalibrierung eine Genauigkeit von einem Grad (bei 25°C)&lt;br /&gt;
* relativ billig (LM335 bei Reichelt ab 0,50&amp;amp;nbsp;€)&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* benötigt A/D-Wandler&lt;br /&gt;
* bei längerer Anschlussleitung störanfällig&lt;br /&gt;
&lt;br /&gt;
=== LM334 ===&lt;br /&gt;
&lt;br /&gt;
Ein IC ähnlich dem LM335 mit dem Unterschied, dass der durch das IC fließende Strom proportional von der Temperatur abhängt. Mit einer einfachen Schaltung aus nur zwei Widerständen kann man dann den Strom in einer Weise wandeln, dass pro Kelvin eine Spannungsänderung von 10mV ausgegeben wird. Da die Strom-Spannungswandlung auf der Platine (und damit nahe am AD-Wandler) stattfindet und die Übertragung des Messwerts durch einen Strom stattfindet, sind Störungen durch Netzbrumm etc. viel geringer als beim LM335&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&amp;lt;!-- * hat auch ohne Kalibrierung eine Genauigkeit von einem Grad (bei 25°C) &lt;br /&gt;
Laut Datenblatt +-3°C&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* relativ billig ([http://www.reichelt.de/?ARTICLE=10468 Reichelt 0,54 &amp;amp;euro;])&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* benötigt A/D-Wandler&lt;br /&gt;
* Bereich 0°C-70°C&lt;br /&gt;
&lt;br /&gt;
Ähnliche ICs:&lt;br /&gt;
* AD592 (Ausgangsstrom 1µA pro Kelvin, absolute Temperatur) [http://www.reichelt.de/?ARTICLE=3825 Reichelt: 3,75 €], Conrad 174912 8,50 &amp;amp;euro;&lt;br /&gt;
&lt;br /&gt;
=== SMT160-30 ===&lt;br /&gt;
&lt;br /&gt;
Ist ein Zwischending zwischen Digital und Analog. Sein Ausgangssignal ist ein digitales PWM-Signal, zu dessen Messung man am besten den Input-Capture-Eingang eines Mikrocontrollers verwendet. Man kann ihn also wie einen analogen Sensor nur indirekt auslesen, anstatt über einen AD-Wandler hier über einen Timer.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Digitales PWM-Signal ist unempfindlich gegen Störeinflüsse&lt;br /&gt;
* gibt es in SO8, TO18, TO92 und &amp;lt;b&amp;gt;TO220&amp;lt;/b&amp;gt;, gut befestigbar, z.B am Kühlkörper&lt;br /&gt;
* linear&lt;br /&gt;
* kein Abgleich nötig&lt;br /&gt;
&lt;br /&gt;
Nachteile (viele):&lt;br /&gt;
* benötigt Timer&lt;br /&gt;
* jittert extrem, genaue Messungen nur über Mittelung / Filterung möglich&lt;br /&gt;
* nicht nur das PWM-Verhältnis, sondern auf die Frequenz ist temp-abhängig (1-4kHz)&lt;br /&gt;
* teuer (Farnell 10,90&amp;amp;euro; +16%, Conrad 9,xx&amp;amp;euro; , www.hy-line.de ??).&lt;br /&gt;
* TO92 Gehäuse ist günstiger, dafür weniger genau&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* http://www.hy-line.de/co/sensor-tec/hersteller/smartec/smt-160-30/index.html&lt;br /&gt;
&lt;br /&gt;
=== Thermoelement ===&lt;br /&gt;
&lt;br /&gt;
Ein Thermoelement besteht im einfachsten Fall aus zwei ungleichen Metallendrähten, die an einem Punkt miteinander verbunden sind und bei dem die Verbindungsstelle einer anderen Temperatur ausgesetzt ist als die offenen Enden der Drähte. An den offenen Enden der Drähten entsteht eine Spannung (Thermospannung). Dieser Effekt wurde 1821 von Thomas Seebeck entdeckt ([http://de.wikipedia.org/wiki/Seebeck-Effekt Seebeck-Effekt] bei Wikipedia). Eine weitere Anwendung ist der thermoelektrische Generator (&amp;quot;Thermogenerator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* über einen sehr weiten Temperaturbereich einsetzbar&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* die sehr geringen Temperaturspannungen im Mikrovoltbereich benötigen eine sehr gute Auswertelektronik (guter Analogteil + AD-Wandler).&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://digital.ni.com/worldwide/germany.nsf/web/all/7A4F02BAEFEC22AC802567F6003E0D6E  Temperaturmessung mit Thermoelementen] - Eine Einführung von David Potter (deutsche Überarbeitung: G.Sinkovic) (inkl. Erläuterung der Kaltstellenkompensation)&lt;br /&gt;
* [http://www.ipetronik.com/pdf/Newsletter/Ipetronik_NL2_2004_d.pdf Warum Thermoelemente Relativtemperaturen messen! oder Was ist eine Kaltstelle?] - Technische Information von www.ipetronik.com (PDF, 272 KB)&lt;br /&gt;
&lt;br /&gt;
== Digitale Temperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
=== DS1621 ===&lt;br /&gt;
&lt;br /&gt;
Der DS1621 ist Temperatursensor und A/D-Wandler in einem. Er gibt seine Daten per [[I²C]]-[[Bus]] aus. Ein Schaltplan für einen elektronischen Thermometer mit diesem IC findet sich [http://www.myplace.nu/avr/thermo/ hier].&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* kein A/D-Wandler nötig&lt;br /&gt;
* da I²C ein Bus ist, kann man mehrere DS1621 und andere I²C-Bausteine zusammen anschließen und braucht dafür trotzdem nur zwei I/O-Ports.&lt;br /&gt;
* Messbereich -55°C to +125°C &lt;br /&gt;
* Genauigkeit +-0,5°C&lt;br /&gt;
* Auflösung besser 0,01°C, wenn man die beiden Zählerregister (Count-Remain und Count-per-C) auswertet&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* teuer (Segor 5,80&amp;amp;euro;; RS 3,95&amp;amp;euro;; Conrad 5,22&amp;amp;euro;)&lt;br /&gt;
* obwohl die meisten Register [[Speicher#NVRAM | nichtflüchtig]] sind, kann man ihn nicht als Stand-Alone-Thermostat einsetzen, da er erst nach einem Start-Conversion-Befehl zu messen beginnt.&lt;br /&gt;
&lt;br /&gt;
Nachfolger:&lt;br /&gt;
* DS1631, DS1631A (Auto-Start-&amp;gt; Stand-Alone-Thermostat), DS1731&lt;br /&gt;
* weitere Stand-Alone-Thermostaten: DS1821, DS1629&lt;br /&gt;
&lt;br /&gt;
=== LM75 ===&lt;br /&gt;
&lt;br /&gt;
Der LM75 ist so ähnlich wie der DS1621, allerdings nur in SMD erhältlich und nicht so genau. Er ist aber öfters mal auf PC-Mainboards zu finden, so dass man beim Schlachten eines solchen günstig an einen Temperatursensor kommen kann. Eine Beispiel Schaltplan mit einem ATmega8 findet man [http://www.ucblog.de/2010/09/mikrocontroller-thermometer-schaltplan/ hier]&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* kein A/D-Wandler nötig&lt;br /&gt;
* I²C-Bus Ausgang&lt;br /&gt;
* billiger als DS1621 (Reichelt 1,45 &amp;amp;euro;; RS 3V: 3,75&amp;amp;euro;; 5V: 2,72&amp;amp;euro;)&lt;br /&gt;
* Auflösung +-0,5°C&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* nur im SMD-Gehäuse erhältlich&lt;br /&gt;
* relativ ungenau (+-2°C), kann man jedoch kalibrieren / kompensieren&lt;br /&gt;
&lt;br /&gt;
Kompatible Typen:&lt;br /&gt;
* AD7415ART&lt;br /&gt;
* DS7505S+&lt;br /&gt;
&lt;br /&gt;
=== LM76 ===&lt;br /&gt;
&lt;br /&gt;
Der LM76 ähnlich dem LM75, bietet aber eine 8-fach höhere Auflösung und eine Genauigkeit von 0.5 bzw. 1°C.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* höhere Auflösung&lt;br /&gt;
* höhere Genauigkeit&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* schwerer zu beschaffen&lt;br /&gt;
&lt;br /&gt;
=== TMP175 / TMP75 ===&lt;br /&gt;
&lt;br /&gt;
Ähnelt dem LM75 stark! Temperatursensor von Texas Instruments.&lt;br /&gt;
&lt;br /&gt;
=== DS18S20 / DS18B20 ===&lt;br /&gt;
&lt;br /&gt;
Der DS18S20 (Nachfolger des DS1820) und DS18B20 sind scheinbar Temperatursensoren und A/D-Wandler in einem. Wenn man genauer hinschaut, stellt man fest, dass es sich um direktwandelnde Sensoren handelt. Die Temperatur wird ohne Umweg über eine analoge Zwischengröße (Spannung oder Strom) in ein digitales Signal überführt. Die Datenkommunikation erfolgt über ein 1-Wire-Interface, wodurch man am [[Mikrocontroller]] mit nur einen einzigen I/O-Pin auskommen kann. Außerdem beherrschen sie die parasitäre Stromversorgung, d.h. man braucht für Daten und Stromversorgung zusammen nur zwei Leitungen.  Der DS18B20 hat 12 Bit Auflösung gegenüber 9 Bit Auflösung beim DS18S20.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* bereits kalibriert&lt;br /&gt;
* Genauigkeit +-0,5°C&lt;br /&gt;
* 1-Wire-Ausgang&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* relativ teuer: Reichelt: 2,50&amp;amp;euro; / CSD: 1,85&amp;amp;euro; / Conrad 5,08&amp;amp;euro;&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://chaokhun.kmitl.ac.th/~kswichit/avrthermo/avrthermo.html Ein Schaltplan]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/6505 Code zur Ansteuerung ASM ATTiny12]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/14792 Code zur Ansteuerung AVR-GCC]&lt;br /&gt;
* [http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf Datenblatt DS18S20] &lt;br /&gt;
* [http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf Datenblatt DS18B20]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-248219.html Webserver zur Ansteuerung von bis zu 63 Bausteinen]&lt;br /&gt;
* [http://www.teslabs.com/openplayer/docs/docs/other/ds18b20_pre1.pdf PDF Anleitung zur Beschaltung und Programmierung (C)]&lt;br /&gt;
*[http://www.digitemp.com/building.shtml Anleitung Sensorfühleraufbau (DigiTemp)]&lt;br /&gt;
* http://www.mikrocontroller.net/topic/14792 &lt;br /&gt;
* http://www.mikrocontroller.net/topic/232156 (Timing der parasitären Versorgung)&lt;br /&gt;
&lt;br /&gt;
=== DS1822 ===&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie DS18S20, aber weniger genau (+-2°) und in großen Stückzahlen billiger. Wegen der geringeren Verbreitung kommt der Preisvorteil aber bei Einzelstücken nicht beim Kunden an. So kostet er bei Reichelt mit 3,50&amp;amp;euro; mehr als der DS18S20.&lt;br /&gt;
&lt;br /&gt;
=== DS1921 / DS1922 ===&lt;br /&gt;
&lt;br /&gt;
Sind wie die DS1821 1-wire-Sensoren mit zusätzlicher Logging-Funktion.&lt;br /&gt;
Im iButton-Gehäuse befindet sich eine Lithium-Zelle, eine RTC, CMOS-RAM und der Temp-Sensor. Nach umfangreicher Progammierung startet der Button seine Mission (Aufzeichnung des Temperaturverlaufs).&lt;br /&gt;
Gibt es auch mit zusätzlicher Feuchtemessung (DS1923).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TSic ===&lt;br /&gt;
&lt;br /&gt;
Die TSic Sensoren werden baugleich von 3 Herstellern angeboten:&lt;br /&gt;
* ZMD ([http://www.zmd.biz/temp.php?group=temp&amp;amp;content=products Homepage]) ([http://tarr.uspto.gov/servlet/tarr?regser=serial&amp;amp;entry=78673282 Trademark])&lt;br /&gt;
* IST AG ([http://www.ist-ag.com/eh/ist-ag/de/home.nsf/contentview/8F5D32432CAC53C2C1257405003C2433 Homepage])&lt;br /&gt;
* Hygrosens ([http://www.hygrosens.de/english/shop/list.html?tx_ttproducts_pi1%5Bcat%5D=11&amp;amp;cHash=dcd89b823b Homepage])&lt;br /&gt;
&lt;br /&gt;
Die TSic Sensoren ([http://www.zmd.biz/pdf/ZMD%20TSic%20Data%20Sheet%20V3%207.pdf Datenblatt]) geben ihre Temperaturmessdaten automatisch in einem festen Intervall aus. Daher muss der Host nur warten bis die nächsten Messdaten rausgeschickt werden. Die TSic Sensoren die es im freien Handel gibt, geben ihre Messdaten alle 100ms (10Hz) aus. &lt;br /&gt;
Zur Übertragung wird das [http://www.zmd.biz/pdf/IST_TSic_ZACwire_V2.3%20Digital%20Output_17-Oct-06.pdf ZACwire] Protokoll benutzt. Es handelt sich um eine einfach zwei Byte Übertragung per Manchester-Code. Diese zwei Byte repräsentieren den digital gewandelten Temperaturwert. Im Gegensatz zu Sensoren wie den DS18xxx von Dallas muss dieser Wert aber erst auf einen dezimalen Wert umgerechnet werden. &lt;br /&gt;
Die Sensoren kommen mit 3 Pins aus (VCC, GND, Dout).&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Bereits kalibriert&lt;br /&gt;
* Verschiedene Genauigkeiten lieferbar&lt;br /&gt;
* Sehr einfaches Kommunikationsprotokoll&lt;br /&gt;
* Geringer Stromverbrauch&lt;br /&gt;
* Hochgenau: bis zu +/- 0.1°C (TSic 50x)&lt;br /&gt;
&lt;br /&gt;
Nachteil:&lt;br /&gt;
* Recht teuer (Reichelt: 4,70&amp;amp;euro; für den TSic206)&lt;br /&gt;
* Nur ein Sensor an einem I/O nutzbar (Kein Bussystem)&lt;br /&gt;
&lt;br /&gt;
Achtung! &lt;br /&gt;
Die TSic Sensoren gibt es auch als Version mit analog Ausgang. Bei der Typenbezeichnung gibt die 3. Stelle an ob es sich um die analog- oder Digitalversion handelt (1 = analog, 6 = digital). &lt;br /&gt;
Der TSic201 ist also analog, wärend der TSic206 ein digitaler ist.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/45573#347765 Ansatz zum Empfang der Daten]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/225554# Beispiel mit Strobe ohne Interrupt]&lt;br /&gt;
* [http://ethersex.de/index.php/Zacwire Fertige Ansteuerung durch AVR in Ethersex]&lt;br /&gt;
* [http://www.zmd.biz/temp.php?group=temp&amp;amp;content=products Herstellerseite mit Datenblättern und FAQ]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/82087 Diskussion mit Beispielcode (MSP430, AVR, PIC) blockierend]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/144424#1367539 C++ Interrupt]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/88847 noch mehr C, problematisch Interrupt]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/151791#1426974 C für ATmega8]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/159149#1510455 auch problematisch]&lt;br /&gt;
* [http://www.sinc.sunysb.edu/Stu/maman/ESE_381.htm Projekt mit tsic sensor, evtl. code]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/188462#1837622 fertiger Code zum Einlesen des Zacwire-Protokolls für PIC in ASM]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=55103 RN: Bascom]&lt;br /&gt;
* [http://www.mikrocontroller.net/search?query=tsic* Suche in den Foren]&lt;br /&gt;
* [http://www.avr-projekte.de/tinyclock.htm TSIC206 Thermometer mit Uhr und Kalender. Komplette Bauanleitung mit ASM Quellcode für AT-Tiny2313]&lt;br /&gt;
&lt;br /&gt;
=== SHT1x/SHT7x ===&lt;br /&gt;
&lt;br /&gt;
Der SHT1x/SHT7x (SHT10, SHT11, SHT15, STH71, SHT75) sind kombinierte Temperatur- und Feuchtesensoren von [http://www.sensirion.com Sensirion]. Sie unterscheiden sich in Bauform und Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* digitale Schnittstelle mit einfacher [[I²C]]-&#039;&#039;ähnlicher&#039;&#039; Ansteuerung&lt;br /&gt;
* keine Kalibrierung notwendig&lt;br /&gt;
* Beispielcode (C, MC51) auf der Sensirion-Seite verfügbar (relativ leicht portierbar)&lt;br /&gt;
* interne Heizelemente (Funktionsprüfung, &amp;quot;rauhe&amp;quot; Umgebung)&lt;br /&gt;
* Spannungsmonitor (&amp;quot;Battery fail&amp;quot;)&lt;br /&gt;
* sehr hohe Genauigkeit&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* kann nicht am [[I²C]] Bus betrieben werden, theoretisch gleiche Clockleitung möglich, fixe Adresse&lt;br /&gt;
* relativ teuer (Farnell 18,60&amp;amp;euro;)(SHT11 bei CSD 14€)&lt;br /&gt;
&lt;br /&gt;
[http://www.sensirion.com/en/01_humidity_sensors/00_humidity_sensors.htm Übersicht] der Temperatur- /Feutchtigkeitssensoren von Sensirion.&lt;br /&gt;
&lt;br /&gt;
=== SHT21 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.sensirion.com Sensirion] bietet auch den SHT21 Feuchtigkeits- und Temperatursensor an, welcher wesentlich genauer ist.&lt;br /&gt;
    &lt;br /&gt;
Vorteile:&lt;br /&gt;
* I2C digital, PWM and SDM/analog Volt Ausgabe&lt;br /&gt;
* Maximal 5 Messungen/s @ 14bit&lt;br /&gt;
* Temperaturbereich von -40 – +125°C&lt;br /&gt;
* Feuchtigkeit mit einer Genauigkeit von +-3%RH&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
*  teuer (Farnell 23 €, Segor 29 €)&lt;br /&gt;
* nur als SMD-Package&lt;br /&gt;
&lt;br /&gt;
Application Notes und Datenblätter findet man [http://www.sensirion.com/en/01_humidity_sensors/10_Overview.htm hier].&lt;br /&gt;
&lt;br /&gt;
=== ADT7310 ===&lt;br /&gt;
&lt;br /&gt;
Der ADT7310 von [http://www.analog.com/en/sensors/digital-temperature-sensors/adt7310/products/product.html Analog Devices] besitzt eine Auflösung von 16 Bit und eine Genauigkeit von ±0.5°C im Bereich von −40°C bis +105°C.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Ansteuerung per [[SPI]] (für [[I2C]] siehe [http://www.analog.com/en/sensors/digital-temperature-sensors/adt7410/products/product.html ADT7410])&lt;br /&gt;
* keine Kalibrierung notwendig&lt;br /&gt;
* hohe [[Auflösung und Genauigkeit]]&lt;br /&gt;
* programmierbarer [[Interrupt]]ausgang für Unter- und Übertemperatur&lt;br /&gt;
&lt;br /&gt;
Nachteile:&lt;br /&gt;
* zur Zeit noch schlecht erhältlich (z.B. bei Digikey für 3,15$)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Sensorik]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=CAN&amp;diff=61300</id>
		<title>CAN</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=CAN&amp;diff=61300"/>
		<updated>2011-10-25T10:29:47Z</updated>

		<summary type="html">&lt;p&gt;Xaos: Einleitung geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;C&#039;&#039;&#039;ontroller &#039;&#039;&#039;A&#039;&#039;&#039;rea &#039;&#039;&#039;N&#039;&#039;&#039;etwork - Ein von Bosch entwickeltes, echtzeitfähiges Bussystem für den Automobilbereich, welches u.a. auch Anwendung in der Automatisierungstechnik findet.&lt;br /&gt;
&lt;br /&gt;
==Mikrocontroller mit CAN==&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT90CAN128===&lt;br /&gt;
* Atmel AVR Controller mit CAN-Schnittstelle (ein Kanal) &lt;br /&gt;
* 15 CAN &amp;quot;Message Objects&amp;quot;, jedes individuell konfigurierbar.&lt;br /&gt;
* 128kByte Flash, 4kByte RAM&lt;br /&gt;
* Bis auf die CAN-Funktionen weitestgehend identisch mit dem ATmega128 (vgl. Migration-Guide ATmega128-&amp;gt;AT90CAN128 bei atmel.com)&lt;br /&gt;
* Beispielcode inkl. CAN für den IAR-C-Compiler findet sich bei atmel.com. Autobaud-Routinen in Assembler (etwas Aufwand bei der Portierung nach avr-gcc/avr-as).&lt;br /&gt;
* Für die ISP-Programmierung schliesst man Ihn wie den ATmega128 an. MOSI-2 ; MISO-3 ; SCK-11 ; /Reset-20 ;  GND-22,53,63 ; Vcc-21,52,(62),(64). Auf die übliche &amp;quot;ATmega64/128-Problematik&amp;quot; achten: MISO/MOSI der Programmierschnittstelle sind nicht identisch mit der SPI-Schnittstelle.&lt;br /&gt;
* Im Auslieferungszustand ist nur der interne RC-Oszillator aktiv (wie üblich bei allen modernen AVRs mit internem R/C-Oszillator vgl. [[AVR Checkliste]]). Umschalten auf externe Taktquelle über die AVR-Fusebits.&lt;br /&gt;
* Dieser MC ist für nicht-gewerbliche Endanwender einzeln z.&amp;amp;nbsp;B. bei Reichelt, CSD und Segor erhältlich (ca. 9EUR). Beim Bestellen des MC sollte man einen CAN-BUS-Treiber gleich mitbestellen: z.&amp;amp;nbsp;B. Philips PCA82C250. Jedoch auf vorhandene Versorgungsspannungen achten (AT90CAN128 &amp;quot;kann mit&amp;quot; VCC=2,7...5,5V, PCA82C250 lt. Datenblatt für VCC=4,5...5V).&lt;br /&gt;
* die aktuelle Hardware-Version (Stand 4/2005) hat einen &amp;quot;silicon bug&amp;quot; (Hardwarefehler, vgl. avrfreaks-Forum): Liegt der Stack im &#039;&#039;externen&#039;&#039; RAM, führt dies zu Fehlern in der Stackverwaltung (push/pop/rcall etc.). Details in aktuellen Fassungen des Datenblatts. Abhilfe/Workaround: Stack im internen RAM (&amp;lt;0x1001) verwalten. Dies ist ohnehin sinnvoll, da der Stackzugriff dann schneller ist. &lt;br /&gt;
* CANopen software protocol stacks at http://www.port.de/Atmel.html&lt;br /&gt;
* Freier CANopen stack: http://www.canfestival.org/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- *Als Programmieradapter braucht man einen, der eine gewisse Intelligenz beinhaltet. Vergebens waren auch bei mir die Versuche,   mit dem &#039;Kanda&#039;-Dongle vom STK200-Board und ähnliche Nachbauten.  -&amp;gt; www.mikrocontroller-projekte.de [- Einzeltest mit Stickprobenumfang 1 - sollte schon funktionieren, auskommentiert bis nochmals belegt - mt] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7X, AT91SAM7A ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
&lt;br /&gt;
=== Luminary Micro Stellaris LM3S8xxx ===&lt;br /&gt;
* ARM Cortex-M3&lt;br /&gt;
* bis 64kByte RAM und 256kByte Flash&lt;br /&gt;
* CAN und Ethernet&lt;br /&gt;
&lt;br /&gt;
=== Microchip PIC18Fxx8 PIC18Fxx8x ===&lt;br /&gt;
* Mikrocontroller mit CAN Schnittstelle&lt;br /&gt;
* [http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=50&amp;amp;mid=10&amp;amp;lang=en&amp;amp;pageId=74 Herstellerseite]&lt;br /&gt;
&lt;br /&gt;
=== Mitsubishi / Renesas R8C / M16C / M32C ===&lt;br /&gt;
&lt;br /&gt;
R8C/23, M16C/6Nx&lt;br /&gt;
&lt;br /&gt;
=== Motorola / Freescale DSP56F8xx ===&lt;br /&gt;
* Clock des CAN-Moduls von PLL speisen, nicht von XTAL, sonst gibt es sporadische Aussetzer&lt;br /&gt;
* Bei hohen Datenraten ist es notwendig die CAN-TX-Leitung vom Controller mit einem PullUp-Widerstand zu beschalten. Sonst stimmt das Bit-Timing nicht, weil die Anstiegszeit des TX-Signals zu schlecht ist.&lt;br /&gt;
&lt;br /&gt;
=== Freescale MC9S08 ===&lt;br /&gt;
* D Serie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Freescale MC9S12 ===&lt;br /&gt;
* B, C, D und H Serie&lt;br /&gt;
&lt;br /&gt;
=== NPX LPC175X LPC176X ===&lt;br /&gt;
* Mikrocontroller mit Cortex-M3 Kern.&lt;br /&gt;
* 1 - 2 CAN Schnittstellen&lt;br /&gt;
* Herstellerseite: [http://ics.nxp.com/products/lpc1000/lpc17xx/ Philips Semiconductors]&lt;br /&gt;
&lt;br /&gt;
=== NXP (ex. Philips) LPC2129 LPC2194 LPC2290 LPC2292 LPC2294 ===&lt;br /&gt;
* Mikrocontroller mit ARM7TDMI-S-Kern (vgl. [[LPC2000 Philips ARM7TDMI-Familie]])&lt;br /&gt;
* 2 - 4 CAN Schnittstellen&lt;br /&gt;
* CAN-Modul angelehnt an Philips SJA1000 (aber mit recht langer und deftig gewürzter Bug-Liste)&lt;br /&gt;
* Herstellerseite: [http://www.nxp.com Philips Semiconductors]&lt;br /&gt;
* LPC2194 erhältlich bei http://www.microcontroller-starterkits.de und http://de.digikey.com/&lt;br /&gt;
* CANopen software protocol stacks at [http://www.port.de/Philips.html]&lt;br /&gt;
&lt;br /&gt;
=== NXP LPC23xx ===&lt;br /&gt;
* Mikrocontroller mit ARM7TDMI-S-Kern (vgl. [[LPC2000 Philips ARM7TDMI-Familie]])&lt;br /&gt;
* 2 CAN Schnittstellen&lt;br /&gt;
&lt;br /&gt;
=== NXP P80C591 P80C592 P80C598 ===&lt;br /&gt;
* 8-Bit Mikrocontroller mit 8051-Kern&lt;br /&gt;
* P80C591 ist neuer und beherrscht CAN2.0B&lt;br /&gt;
* P80C592: CAN2.0A, P80C598 ist die Automotive-Version vom &#039;592&lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STM8S20  ===&lt;br /&gt;
* STM8 Kern [http://www.st.com/stonline/products/literature/ds/14733/stm8s208c6.pdf] DIV/MUL -Befehle &lt;br /&gt;
* SPI mit automatischer CRC Berechnung&lt;br /&gt;
* 1 beCAN Schnittstelle CAN2.0B &lt;br /&gt;
* sehr preiswert (128 kFlash/6K RAM ) 3,30 bis 4,80 &amp;amp;#8364; ([http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&amp;amp;keywords=CAN+STM8]  aber SMD LQFP &lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STR730 STR750 ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
* 1-3 CAN Schnittstellen&lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STR910FM32, STR910FW32, STR911FM42, STR911FM44, STR912FW42, STR912FW44 ===&lt;br /&gt;
* 96MHz ARM966E-S CPU Kern&lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STM32F103, STM32F105, STM32F107 ===&lt;br /&gt;
* Cortex M3 Core&lt;br /&gt;
* STM32F103   : 1 CAN Schnittstelle&lt;br /&gt;
* STM32F105   : 2 CAN Schnittstellen&lt;br /&gt;
* STM32F107   : 2 CAN Schnittstellen&lt;br /&gt;
&lt;br /&gt;
=== TI TMS470 ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
&lt;br /&gt;
=== Toshiba TLCS-870/C ===&lt;br /&gt;
&lt;br /&gt;
==CAN Controller==&lt;br /&gt;
&lt;br /&gt;
===MCP2515 ===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Microchip. &lt;br /&gt;
* SPI Schnittstelle&lt;br /&gt;
* 2 Empfangs- und 3 Sendepuffer jeweils individuell konfigurierbar (ID, Masken/Filter etc.)&lt;br /&gt;
* ein gemeinsamer Interruptpin (RX)&lt;br /&gt;
* ein Interruptpin pro Empfangspuffer, umkonfigurierbar als GPO&lt;br /&gt;
* ein Triggerpin pro Sendepuffer, umkonfigurierbar als GPI&lt;br /&gt;
* Stromsparmodus&lt;br /&gt;
* auch für 3,3V-Betrieb geeignet.&lt;br /&gt;
* Diverse C- und Assembler Beispielcodes verfügbar (z.&amp;amp;nbsp;B. bei microchip.com und kvaser, Assembler meist für PICs). Auch Software für Direktanschluss an die parallele Schnittstelle eines PC verfügbar (&amp;quot;bit-bang Interface&amp;quot;).&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 2&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====Links====&lt;br /&gt;
*[http://www.kreatives-chaos.com/index.php?seite=mcp2515 Ansteuerung eines MCP2515] gcc&lt;br /&gt;
*[http://mcp2510btc.berlios.de/ Bit Timing Calculator für Linux]&lt;br /&gt;
&lt;br /&gt;
===SJA1000===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Philips&lt;br /&gt;
* Parallele Schnittstelle ca. 12 Leitungen&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 4 Euro)&lt;br /&gt;
&lt;br /&gt;
===AN82526===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Intel (entwickelt von Bosch)&lt;br /&gt;
* Vorgänger des AN82527&lt;br /&gt;
&lt;br /&gt;
===AN82527===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Intel (entwickelt von Bosch)&lt;br /&gt;
* Nachfolger des AN82526&lt;br /&gt;
* parallele  UND  SPI-Schnittstelle&lt;br /&gt;
* 8- oder 16-Bit Multiplex Bus, oder 8-Bit Non-Multiplexed Bus&lt;br /&gt;
* 14 Tx/Rx Puffer&lt;br /&gt;
* bis zu 16 IO-Pins (je nach Controlleranbindung)&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 5&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
===Bosch CC170 / CC750 / CC770===&lt;br /&gt;
* kompatibel zum AN82527&lt;br /&gt;
* mehr Debug-Register&lt;br /&gt;
* CC750 im SOIC16-W Gehäuse ohne Parallel-Interface, nur SPI&lt;br /&gt;
* erhältlich bei Rutronik (ca. 8 Euro)&lt;br /&gt;
&lt;br /&gt;
===SAE81C9x===&lt;br /&gt;
* SPI und Busanschluss möglich.&lt;br /&gt;
* PLCC44 und PLCC28, letzteres allerdings in ungebräuchlicher Bauform&lt;br /&gt;
* Nur CAN 2.0A, beherrscht also keine Extended IDs.&lt;br /&gt;
&lt;br /&gt;
==Bustreiber (CAN-Transceiver)==&lt;br /&gt;
&lt;br /&gt;
=== High-Speed ===&lt;br /&gt;
&lt;br /&gt;
====MCP2551====&lt;br /&gt;
* von Microchip&lt;br /&gt;
* PDIP8 und SOIC&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* kostet rund 1&amp;amp;#8364;&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/DeviceDoc/21667f.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
====PCA 82C250====&lt;br /&gt;
* ABGEKÜNDIGT!&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* PDIP8 und SO8&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* V-CAN: -8V..+18V   -&amp;gt; &amp;quot;TTL-kompatible&amp;quot; Bus-Spannung&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 1,00&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====PCA 82C251====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* PDIP8 und SO8&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* V-CAN: -40V..+40V   -&amp;gt; +24V Bus-Spannung&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 1,50&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====TJA 1050====&lt;br /&gt;
* ABGEKÜNDIGT!&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* SO8, pinkompatibel&lt;br /&gt;
* VCC = 4,75...5,25V&lt;br /&gt;
* 3. Generation, Nachfolger der PCA82C25x&lt;br /&gt;
* http://www.semiconductors.philips.com/pip/TJA1050&lt;br /&gt;
&lt;br /&gt;
====ATA6660====&lt;br /&gt;
* von Atmel&lt;br /&gt;
* SO8&lt;br /&gt;
* VCC = 4,75...5,25V&lt;br /&gt;
&lt;br /&gt;
====SN65HVD23x====&lt;br /&gt;
* von Texas Instruments (auch als Sample erhaeltlich)&lt;br /&gt;
* SO8&lt;br /&gt;
* VCC = 3,0V...3,6V&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt: SN65HVD230, SN65HVD231 (ca. 3,00 €)&lt;br /&gt;
Datenblatt:&lt;br /&gt;
*[http://www.ti.com/lit/gpn/sn65hvd230 SN65HVD230] &lt;br /&gt;
*[http://www.ti.com/lit/gpn/sn65hvd231 SN65HVD231]&lt;br /&gt;
&lt;br /&gt;
=== Fault-Tolerant / Low-Speed ===&lt;br /&gt;
&lt;br /&gt;
==== TJA1054 ====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* bis 125 &amp;quot;kBaud&amp;quot;&lt;br /&gt;
* SO14&lt;br /&gt;
* ähnliche Funktionen, gleicher Hersteller: TJA1053, TJA1055&lt;br /&gt;
&lt;br /&gt;
== CAN Repeater ==&lt;br /&gt;
&lt;br /&gt;
==== AMIS-42700 ====&lt;br /&gt;
* Dual High-Speed CAN Transceiver&lt;br /&gt;
* High speed (up to 1Mbit/s)&lt;br /&gt;
* SOIC-20&lt;br /&gt;
* vgl. http://www.mikrocontroller.net/topic/53799&lt;br /&gt;
&lt;br /&gt;
==== Alternative ====&lt;br /&gt;
* zwei Transceiver&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/9353/CANREPEATER.JPG Schaltung]&lt;br /&gt;
* Anmerkung: Diese Schaltung ist Quatsch und funktioniert nicht.&lt;br /&gt;
* -Zum Senden eines Zeichen, muss beim CAN paralell auf dem Bus gelesen werden.&lt;br /&gt;
  -Die TRansceiver tun dies nicht, mach nur der Controller.&lt;br /&gt;
  -Die gelesene Nachricht muss also durch einen Controller erneut gesendet werden, wenn der Bus frei ist...&lt;br /&gt;
&lt;br /&gt;
==== CAN Hub ====&lt;br /&gt;
CAN Hub mit standard Knoten&lt;br /&gt;
* http://www.oschmid.ch/mt/can-hub/can-hub.php&lt;br /&gt;
CAN Hub mit getrennten Rx und Tx Leitungen&lt;br /&gt;
* http://www.oschmid.ch/mt/can-hub4/can-hub4.php&lt;br /&gt;
&lt;br /&gt;
==SLIO-CAN==&lt;br /&gt;
&lt;br /&gt;
Preisgünstigste Bausteine sind die Serial Linked I/O Bausteine (SLIO). Diese Bausteine ermöglichen den Aufbau von Ein- und Ausgabeknoten ohne lokalen Prozessor. Auf der Basis dieser Bausteine lässt sich eine dezentrale Signal-Ein-Ausgabe mit minimalem Kostenaufwand realisieren.&lt;br /&gt;
&lt;br /&gt;
=== Philips P82C150===&lt;br /&gt;
* Single-Chip-I/O-Einheit mit integriertem CAN-Controller&lt;br /&gt;
* mögliche Busdatenrate 20kBd bis 125kBd&lt;br /&gt;
* interner RC-Oszillator wird durch den Bitstrom auf den Bus synchronisiert&lt;br /&gt;
* Kalibrierungsnachricht alle 8000 Bitzeiten erforderlich&lt;br /&gt;
** 4-Bit des Identifiers über Port-Pins einstellbar &lt;br /&gt;
* maximal 16 P82C150 in einem CAN-Segment&lt;br /&gt;
** 16 Port-Pins mit unterschiedlichen Konfigurationsmöglichkeiten&lt;br /&gt;
*** 16 mal als digitale Eingänge&lt;br /&gt;
*** 16 mal als digitale Ausgänge&lt;br /&gt;
*** 2 mal als analoger Ausgang ( 10-Bit, DPM )&lt;br /&gt;
*** 6 mal als analoger Eingang ( 10-Bit, multiplex )&lt;br /&gt;
*** 2 mal als Komparator &lt;br /&gt;
&lt;br /&gt;
* [http://www.htw-dresden.de/fe/labor/mikror/projects/slio_can/ slio-CAN]&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Philips stellt die SLIO nicht mehr her! Es ist auch &amp;quot;nichts&amp;quot; mehr am Markt beschaffbar, wenn, dann zu horrenden Preisen (um die 60,-EUR/Stück zur Zeit). --[[Benutzer:OldBug|Patrick]] 09:08, 25. Jan 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obsolete&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===DS 36001M===&lt;br /&gt;
&#039;&#039;&#039;Obsolete&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===MCP2502X/5X===&lt;br /&gt;
&lt;br /&gt;
CAN-IO Erweiterung. Braucht praktisch nur noch Quarz und Transciever. Preise ab 3€&lt;br /&gt;
* bis zu 8 digitale IOs &lt;br /&gt;
* bis zu 2 PWM, 10 Bit&lt;br /&gt;
* bis zu 4 ADC, 10 Bit, externe Ref.&lt;br /&gt;
* SLEEP-Mode etc.&lt;br /&gt;
&lt;br /&gt;
[http://ww1.microchip.com/downloads/en/devicedoc/21664c.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== Verkabelung ==&lt;br /&gt;
* auf beidseitige Busterminierung achten (typisch 2x 120 Ohm bei &amp;quot;high-speed&amp;quot;)&lt;br /&gt;
* Standardbelegung für diverse Steckverbindungen vgl. CANOpen-Dokumentation http://www.can-cia.de/index.php?id=440 (CiA 303-1);  erfordert Anmeldung&lt;br /&gt;
* Schaltplan für galvanische Trennung z.&amp;amp;nbsp;B. nach Datenblatt des PCA82C250&lt;br /&gt;
* für einfache Testaufbauten über sehr kurze Strecken oder &amp;quot;on-board-CAN&amp;quot; kann auf die Bustreiber verzichtet werden (vgl. Siemens Application-Note [http://www.mikrocontroller.net/attachment/28831/siemens_AP2921.pdf AP2921])&lt;br /&gt;
&lt;br /&gt;
Es gibt auch CAN mit &lt;br /&gt;
* einpoliger unsymmetrischer Verbindung (SAE J2411 single wire)&lt;br /&gt;
* optischer Verbindung (Faser, Glasfaser)&lt;br /&gt;
&lt;br /&gt;
Für einfache Tests genügt auch eine direkte wired-and-Verbindung ohne Treiber:&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-325202.html?reload=yes#325962&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
Hersteller von Debug-Geräten&lt;br /&gt;
* Vector-Informatik CANscope (Pegeltester) http://www.vector-informatik.de/deutsch/  - ca. 3300EUR&lt;br /&gt;
* Gemac CBT (CanBusTester) testet auch Pegel, Reflexionen ... (Treiber etc. etwas ältlich, von 2002, was ist mit Weiterentwicklung?), auch leihweise http://www.gemac-chemnitz.de/pages/d_html/produkte/bus-tester/new-de-can-bust.html http://www.brandt-data.de/canbus/can_intro.html  - ca. 2400EUR&lt;br /&gt;
* ixxat bietet ebenfalls den Gemac-cbt an, auch leihweise&lt;br /&gt;
&lt;br /&gt;
Oszilloskope mit CAN-Analyse (manche auch SPI, LIN, RS232, SATA ...):&lt;br /&gt;
* LeCroy WaveRunner 6040 wird mit Vector-CANcaseXL (externer CAN-Trigger) geliefert (sehr gut, ab ca.9000 EUR)&lt;br /&gt;
* LeCroy WaveSurfer 424 wird mit Vector-CANcaseXL (externer CAN-Trigger) geliefert (sehr gut, ab ca.8000 EUR)&lt;br /&gt;
* Yokogawa DL1640 und DL9040 (CAN-Trigger ist intern)  ähnliche Preise wie LeCroy, Bedienung gewöhnungsbedürftig, geht mit etwas Übung besser&lt;br /&gt;
* Tektronix&lt;br /&gt;
* HP / Agilent&lt;br /&gt;
* LogicPort http://www.pctestinstruments.com/&lt;br /&gt;
&lt;br /&gt;
Triggermöglichkeiten: SOF, CAN-ID, CAN-Data, ErrorFrame, RTR, Ack, NoAck  - alle verknüpfbar (gleich ungleich kleiner größer inRange outofRange)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
==Intern==&lt;br /&gt;
[[CAN als Hausbus]]&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
* [http://can-wiki.info CAN-WIKI] - spezielle Wiki Site für CAN bus (Englisch)&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Controller_Area_Network Wikipedia - CAN]&lt;br /&gt;
* [http://www.thomas-wedemeyer.de/elektronik/CAN-Bus/can-bus.html Grundlagen zum CAN-Bus] - Kurze Zusammenfassung der Funktionsweise und Einsatzmöglichkeiten vom CAN-Bus&lt;br /&gt;
* [http://www.canbus.cz CAN] - Controller_Area_Network (Czech)&lt;br /&gt;
* [http://www.embedded.com/design/networking/220900314 CAN in 30 minutes or less] - A quick-and-dirty guide to tuning your CAN interface and simplifying your design by Hassane El-Khoury at www.embedded.com&lt;br /&gt;
* [https://www.vector.com/vl_einfuehrungcan_portal_de.html Einführung in CAN] - kostenloses E-Learning Angebot&lt;br /&gt;
&lt;br /&gt;
===Testboards===&lt;br /&gt;
&lt;br /&gt;
*[http://www.jtronics.de/elektronik-boards/experimentierboard.html  AT90CAN Testboard by www.jtronics.de (aktualisiert 2010)]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/176804  universal Testboard - CAN RS232 SPI I2C ]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/177420  AT90CAN128 Board by www.jtronics.de]&lt;br /&gt;
*[http://www.kreatives-chaos.com/artikel/can-testboard  ATmega8 CAN Testboard und  MCP2515 Tutorial]&lt;br /&gt;
&lt;br /&gt;
===Dongles===&lt;br /&gt;
&lt;br /&gt;
*[http://cryptomys.de/horo/CAN200/ Can200 Linux Project von Martin Homuth-Rosemann (CAN Businterface am Parallelport)]&lt;br /&gt;
*[http://www.mhs-elektronik.de/tiny_can.html MHS-Elektronik Low-Cost USB-CAN-Adapter (60,- EUR) + Open Source CAN-Monitor für Windows und Linux]&lt;br /&gt;
*[http://www.cantronik.com/ cantronik]&lt;br /&gt;
*[http://www.kopfweb.de/automotive_3.htm usb-can]&lt;br /&gt;
*[http://www.mictronics.de Open Source USB&amp;lt;&amp;gt;CAN Bus Interface mit AVR ATmega162]&lt;br /&gt;
*[http://www.ixxat.de IXXAT u.a. USB&amp;lt;&amp;gt;CAN Bus Interface ca. 200 Eur]&lt;br /&gt;
*[http://www.peak-system.com Peak-System u.a. USB&amp;lt;&amp;gt;CAN Bus Interface ca. 200 EUR]&lt;br /&gt;
*[http://www.ems-wuensche.com EMS Dr. Thomas Wünsche u.a.] [http://www.ems-wuensche.com/product/datasheet/html/can-usb-adapter-converter-interface-cpcusb.html USB to CAN Bus Interface ca. 180 EUR]&lt;br /&gt;
*[http://www.systec-electronic.com/html/index.pl/en_product_can_interfaces SYS TEC electronic - USB-CANmodul Serie mit Unterstützung von 1, 2, 8, oder 16 CAN Kanälen (ab 129,- Eur)]&lt;br /&gt;
*[http://www.edevices.lt USB2CAN USB to CAN bus galvanic isolated converter from 65 EUR ].Open source interface DLL and software.&lt;br /&gt;
*[http://www.lawicel.com Lawicel RS232/V24&amp;lt;&amp;gt;CAN Bus Interface]&lt;br /&gt;
*[http://www.canusb.com/ canusb USB&amp;lt;&amp;gt;CAN über V24-Treiber von Lawicel]&lt;br /&gt;
*[http://www.canusb.com/projects.htm freie Software für canusb]&lt;br /&gt;
*[http://www.canviausb.com Weitere CAN BUS Monitor Software für canusb]&lt;br /&gt;
*[http://www.port.de/pages/products/can/canopen/hardware/ethercan.php?lang=en PORT CAN-LAN-Bridge mit ARM und Linux]&lt;br /&gt;
*[http://www.anagate.de/products/can-ethernet-gateways.htm AnaGate CAN-USB Gateway und CAN-Ethernet Gateways (LowCost Lösung und Professionelle Varianten mit Linux System für eigene Anwendungen mit 1,2 und 4 CAN-Ports) (Shop)]&lt;br /&gt;
*[http://www.pp2can.wz.cz PP2CAN:LPT-CAN bus interface]&lt;br /&gt;
*[http://www.pp2can.wz.cz/CAN2MMC.htm CAN2MMC: datalogger(CAN,RS232-GPS)]&lt;br /&gt;
*[http://www.usb2can.wz.cz USB2CAN: USB-CAN bus interface (80 Eur)]&lt;br /&gt;
*[http://www.canhack.de/viewtopic.php?t=137 CANHACK CANUSB Interface, High Speed CAN + OBD2 (79,- Euro; inkl. CAN Monitor)]&lt;br /&gt;
*[http://www.pp2can.wz.cz PP2CAN:LPT-CAN bus interface]&lt;br /&gt;
*[http://oschmid.home.solnet.ch/mt/can-hub/can-hub.php CAN Bus HUB]&lt;br /&gt;
*[http://martinsuniverse.de/projekte/caninterceptor/caninterceptor.html CAN-Interceptor]&lt;br /&gt;
*[http://www.microcontroller-starterkits.de USB-zu-CAN-Interface mit verschiedenen Transceivern (LOW-Speed / HIGH-Speed) Beschreibung/Schaltplan im Online-Magazin. Leerplatinen dazu preiswert im Online-Shop erhältlich]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
*[http://www.canviausb.com CAN Monitor für Lawicel CANUSB, Zanthic CAN-4-USB-FX/MCP2515 und MHS-Elektronik Tiny-CAN] &lt;br /&gt;
*[http://canhack.de/viewtopic.php?f=25&amp;amp;t=135 CAN Monitor und Tracer für Peak USB, Lawicel CANUSB+CAN232 und kompatible]&lt;br /&gt;
*[http://www.mhs-elektronik.de/tiny_can.html GNU – Open Source CAN Monitor, Makro und Filter Funktion, Plugin fähig, unter GTK+ entwickelt]&lt;br /&gt;
&lt;br /&gt;
===Protokolle===&lt;br /&gt;
====CANopen====&lt;br /&gt;
&lt;br /&gt;
*[http://canopen.sourceforge.net/index.html CANopen free software resource center]&lt;br /&gt;
*[http://www.canopen-solutions.com/canopen_caneds_de.html Kostenloser Editor für CANopen EDS-Dateien von Vector]&lt;br /&gt;
&lt;br /&gt;
[[Category:CAN]]&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61114</id>
		<title>Projekt Universeller Analogeingang für FPGA-basiertes Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt_Universeller_Analogeingang_f%C3%BCr_FPGA-basiertes_Oszilloskop&amp;diff=61114"/>
		<updated>2011-10-17T14:03:11Z</updated>

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

		<summary type="html">&lt;p&gt;Xaos: /* Galvanisch getrenntes Abfragen von 230V Wechselspannung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Portpin an 230V AC ==&lt;br /&gt;
&lt;br /&gt;
Hier ist eine kurze Beschreibung, wie man einen 230V-Pegel direkt an einen Portpin eines Mikrocontrollers anschließen kann.&lt;br /&gt;
Dass diese Schaltung keine galvanische Trennung besitzt, sieht man, glaube ich. Das übliche  BLA BLA bezüglich Sicherheit, Lebensgefahr spare ich mir an dieser Stelle. Diese Beschaltung soll nicht den Nulldurchgang detektieren, könnte es aber&lt;br /&gt;
&lt;br /&gt;
[[Bild:Eingangsbeschaltung.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die beiden Dioden, hier BAT45 sind normalerweise in einem Controller als Schutzdiode schon enthalten. Beim Verwenden des MCLR-Eingangs speziell von MICROCHIP Mikroprozessoren können diese Dioden fehlen und müssen in der Schaltung ergänzt werden. Aber Achtung: die externen Dioden (als Schottky!) sind immer zu empfehlen, da ein Strom über die Bodydioden chipinterne Referenzspannungen &amp;quot;verziehen&amp;quot; kann&lt;br /&gt;
Der 39K-Widerstand hat zwei Funktionen: erstes als Spannungsteiler mit R1 und R2 um die Spannung auf einen Vernünftigen Wert zu begrenzen und zweitens als Pulldown-Widerstand für den Portpin.&lt;br /&gt;
&lt;br /&gt;
Die Widerstände R1 und R2 sollen NICHT durch einen Widerstand mit 2MOHm ersetzt werden, weil auch bei bedrahteten Widerständen die Spannungsfestigkeit meistens nicht ausreichend ist und aus Sicherheitsgründen davon ausgegangen werden muss, dass ein Widerstand ausfällt, nicht aber beide auf einmal.&lt;br /&gt;
Wird SMD verwendet sind DREI Stück 0204 mit ca. 5mm Abstand zu empfehlen. Gegen Spikes zusätzlich ein 500pF Kerko direkt am Portpin gegen GND.&lt;br /&gt;
&lt;br /&gt;
Die Firma Microchip hat hier auch eine gute Applikation Note hierzu.&lt;br /&gt;
Für die allgegenwärtigen Sicherheitsfanatiker: &lt;br /&gt;
Bei einer FMEA wird ein Widerstand als ein sehr sicheres Bauteil angesehen, der nicht so mir-nichts-dir-nichts kaputt geht. (Ganz anders schaut es da schon mit den Dioden aus)&lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei dieser Schaltung noch, das ich einen vernünftigen High-Pegel nur jede positive Halbwelle und auch nur in der Nähe des Spannungsmaximum erhalte. Ich muß also durch meine restliche Schaltung sicherstellen, dass ich den Nulldurchgang des Wechselstromes richtig mitbekomme und dann ( Bei Netzspannung 230V / 50Hz ) mindestens 20ms warten, bis ich den Portpin richtig einlesen kann.&lt;br /&gt;
&lt;br /&gt;
Der Elko mit 470µF und die Spannungsquelle werden natürlich nicht explizit benötigt und stellen nur die vorhanden Stromversorgung des Microcontrollers dar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Galvanisch getrenntes Abfragen von 230V Wechselspannung ==&lt;br /&gt;
&lt;br /&gt;
Bevor sich mit der obigen Schaltung jemand ins Jenseits befördert, hier eine sichere Schaltung, mit der man galvanisch vom Netz getrennt eine Information für den Mikrocontroller-Eingang erzeugen kann:&lt;br /&gt;
&lt;br /&gt;
[[Bild:230V_am_uC_Port-Pin.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Die Bauteile links vom Optokoppler müssen alle eine Spannungsfestigkeit von 320V ac aufweisen. Deshalb sind jeweils zwei Widerstände in Reihe geschaltet. Selbst Widerstände vom Typ 2512 weisen nur eine Spannungsfestigkeit von 200V auf!&lt;br /&gt;
R1 und R2 begrenzen den Einschaltstrom durch C1. R3 und R4 entladen C1 nach dem Ausschalten. C2 und R5 sorgen für einen dauerhaften Low-Pegel am Controller-Eingang. Wer den Puls braucht, möge R5 weglassen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* Simulation: http://www.mikrocontroller.net/articles/Datei:Eingangsbeschaltung.asc&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00521c.pdf Microchip AN521: Interfacing to AC Power Lines]&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc2508.pdf Atmel AVR182: Zero Cross Detector]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=CAN&amp;diff=47435</id>
		<title>CAN</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=CAN&amp;diff=47435"/>
		<updated>2010-05-12T22:30:13Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Verkabelung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine ausführliche Liste: http://www.mjschofield.com/devices.htm [dead]&lt;br /&gt;
&lt;br /&gt;
==Mikrocontroller mit CAN==&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT90CAN128===&lt;br /&gt;
* Atmel AVR Controller mit CAN-Schnittstelle (ein Kanal) &lt;br /&gt;
* 15 CAN &amp;quot;Message Objects&amp;quot;, jedes individuell konfigurierbar.&lt;br /&gt;
* 128kByte Flash, 4kByte RAM&lt;br /&gt;
* Bis auf die CAN-Funktionen weitestgehend identisch mit dem ATmega128 (vgl. Migration-Guide ATmega128-&amp;gt;AT90CAN128 bei atmel.com)&lt;br /&gt;
* Beispielcode inkl. CAN für den IAR-C-Compiler findet sich bei atmel.com. Autobaud-Routinen in Assembler (etwas Aufwand bei der Portierung nach avr-gcc/avr-as).&lt;br /&gt;
* Für die ISP-Programmierung schliesst man Ihn wie den ATmega128 an. MOSI-2 ; MISO-3 ; SCK-11 ; /Reset-20 ;  GND-22,53,63 ; Vcc-21,52,(62),(64). Auf die übliche &amp;quot;ATmega64/128-Problematik&amp;quot; achten: MISO/MOSI der Programmierschnittstelle sind nicht identisch mit der SPI-Schnittstelle.&lt;br /&gt;
* Im Auslieferungszustand ist nur der interne RC-Oszillator aktiv (wie üblich bei allen modernen AVRs mit internem R/C-Oszillator vgl. [[AVR Checkliste]]). Umschalten auf externe Taktquelle über die AVR-Fusebits.&lt;br /&gt;
* Dieser MC ist für nicht-gewerbliche Endanwender einzeln z.&amp;amp;nbsp;B. bei Reichelt, CSD und Segor erhältlich (ca. 9EUR). Beim Bestellen des MC sollte man einen CAN-BUS-Treiber gleich mitbestellen: z.&amp;amp;nbsp;B. Philips PCA82C250. Jedoch auf vorhandene Versorgungsspannungen achten (AT90CAN128 &amp;quot;kann mit&amp;quot; VCC=2,7...5,5V, PCA82C250 lt. Datenblatt für VCC=4,5...5V).&lt;br /&gt;
* die aktuelle Hardware-Version (Stand 4/2005) hat einen &amp;quot;silicon bug&amp;quot; (Hardwarefehler, vgl. avrfreaks-Forum): Liegt der Stack im &#039;&#039;externen&#039;&#039; RAM, führt dies zu Fehlern in der Stackverwaltung (push/pop/rcall etc.). Details in aktuellen Fassungen des Datenblatts. Abhilfe/Workaround: Stack im internen RAM (&amp;lt;0x1001) verwalten. Dies ist ohnehin sinnvoll, da der Stackzugriff dann schneller ist. &lt;br /&gt;
* CANopen software protocol stacks at http://www.port.de/Atmel.html&lt;br /&gt;
* Freier CANopen stack: http://www.canfestival.org/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- *Als Programmieradapter braucht man einen, der eine gewisse Intelligenz beinhaltet. Vergebens waren auch bei mir die Versuche,   mit dem &#039;Kanda&#039;-Dongle vom STK200-Board und ähnliche Nachbauten.  -&amp;gt; www.mikrocontroller-projekte.de [- Einzeltest mit Stickprobenumfang 1 - sollte schon funktionieren, auskommentiert bis nochmals belegt - mt] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7X, AT91SAM7A ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
&lt;br /&gt;
=== Luminary Micro Stellaris LM3S8xxx ===&lt;br /&gt;
* ARM Cortex-M3&lt;br /&gt;
* bis 64kByte RAM und 256kByte Flash&lt;br /&gt;
* CAN und Ethernet&lt;br /&gt;
&lt;br /&gt;
=== Microchip PIC18Fxx8 PIC18Fxx8x ===&lt;br /&gt;
* Mikrocontroller mit CAN Schnittstelle&lt;br /&gt;
* [http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=50&amp;amp;mid=10&amp;amp;lang=en&amp;amp;pageId=74 Herstellerseite]&lt;br /&gt;
&lt;br /&gt;
=== Mitsubishi / Renesas R8C / M16C / M32C ===&lt;br /&gt;
&lt;br /&gt;
R8C/23, M16C/6Nx&lt;br /&gt;
&lt;br /&gt;
=== Motorola / Freescale DSP56F8xx ===&lt;br /&gt;
* Clock des CAN-Moduls von PLL speisen, nicht von XTAL, sonst gibt es sporadische Aussetzer&lt;br /&gt;
* Bei hohen Datenraten ist es notwendig die CAN-TX-Leitung vom Controller mit einem PullUp-Widerstand zu beschalten. Sonst stimmt das Bit-Timing nicht, weil die Anstiegszeit des TX-Signals zu schlecht ist.&lt;br /&gt;
&lt;br /&gt;
=== Freescale MC9S08 ===&lt;br /&gt;
* D Serie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Freescale MC9S12 ===&lt;br /&gt;
* B, C, D und H Serie&lt;br /&gt;
&lt;br /&gt;
=== NXP (ex. Philips) LPC2129 LPC2194 LPC2290 LPC2292 LPC2294 ===&lt;br /&gt;
* Mikrocontroller mit ARM7TDMI-S-Kern (vgl. [[LPC2000 Philips ARM7TDMI-Familie]])&lt;br /&gt;
* 2 - 4 CAN Schnittstellen&lt;br /&gt;
* CAN-Modul angelehnt an Philips SJA1000 (aber mit recht langer und deftig gewürzter Bug-Liste)&lt;br /&gt;
* Herstellerseite: [http://www.nxp.com Philips Semiconductors]&lt;br /&gt;
* LPC2194 erhältlich bei http://www.microcontroller-starterkits.de und http://de.digikey.com/&lt;br /&gt;
* CANopen software protocol stacks at [http://www.port.de/Philips.html]&lt;br /&gt;
&lt;br /&gt;
=== NXP LPC23xx ===&lt;br /&gt;
* Mikrocontroller mit ARM7TDMI-S-Kern (vgl. [[LPC2000 Philips ARM7TDMI-Familie]])&lt;br /&gt;
* 2 CAN Schnittstellen&lt;br /&gt;
&lt;br /&gt;
=== NXP P80C591 P80C592 P80C598 ===&lt;br /&gt;
* 8-Bit Mikrocontroller mit 8051-Kern&lt;br /&gt;
* P80C591 ist neuer und beherrscht CAN2.0B&lt;br /&gt;
* P80C592: CAN2.0A, P80C598 ist die Automotive-Version vom &#039;592&lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STM8S20  ===&lt;br /&gt;
* STM8 Kern [http://www.st.com/stonline/products/literature/ds/14733/stm8s208c6.pdf] DIV/MUL -Befehle &lt;br /&gt;
* SPI mit automatischer CRC Berechnung&lt;br /&gt;
* 1 beCAN Schnittstelle CAN2.0B &lt;br /&gt;
* sehr preiswert (128 kFlash/6K RAM ) 3,30 bis 4,80 &amp;amp;#8364; ([http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&amp;amp;keywords=CAN+STM8]  aber SMD LQFP &lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STR730 STR750 ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
* 1-3 CAN Schnittstellen&lt;br /&gt;
&lt;br /&gt;
=== STMicroelectronics STR910FM32, STR910FW32, STR911FM42, STR911FM44, STR912FW42, STR912FW44 ===&lt;br /&gt;
* 96MHz ARM966E-S CPU Kern&lt;br /&gt;
&lt;br /&gt;
=== TI TMS470 ===&lt;br /&gt;
* ARM7TDMI-Kern&lt;br /&gt;
&lt;br /&gt;
=== Toshiba TLCS-870/C ===&lt;br /&gt;
&lt;br /&gt;
==CAN Controller==&lt;br /&gt;
&lt;br /&gt;
===MCP2515 ===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Microchip. &lt;br /&gt;
* SPI Schnittstelle&lt;br /&gt;
* 2 Empfangs- und 3 Sendepuffer jeweils individuell konfigurierbar (ID, Masken/Filter etc.)&lt;br /&gt;
* ein gemeinsamer Interruptpin (RX)&lt;br /&gt;
* ein Interruptpin pro Empfangspuffer, umkonfigurierbar als GPO&lt;br /&gt;
* ein Triggerpin pro Sendepuffer, umkonfigurierbar als GPI&lt;br /&gt;
* Stromsparmodus&lt;br /&gt;
* auch für 3,3V-Betrieb geeignet.&lt;br /&gt;
* Diverse C- und Assembler Beispielcodes verfügbar (z.&amp;amp;nbsp;B. bei microchip.com und kvaser, Assembler meist für PICs). Auch Software für Direktanschluss an die parallele Schnittstelle eines PC verfügbar (&amp;quot;bit-bang Interface&amp;quot;).&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 2&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====Links====&lt;br /&gt;
*[http://www.kreatives-chaos.com/index.php?seite=mcp2515 Ansteuerung eines MCP2515] gcc&lt;br /&gt;
*[http://www.intrepidcs.com/BitCindex.htm Bit Timing Calculator]&lt;br /&gt;
*[http://mcp2510btc.berlios.de/ Bit Timing Calculator für Linux]&lt;br /&gt;
&lt;br /&gt;
===SJA1000===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Philips&lt;br /&gt;
* Parallele Schnittstelle ca. 12 Leitungen&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 4 Euro)&lt;br /&gt;
&lt;br /&gt;
===AN82526===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Intel (entwickelt von Bosch)&lt;br /&gt;
* Vorgänger des AN82527&lt;br /&gt;
&lt;br /&gt;
===AN82527===&lt;br /&gt;
&amp;quot;Stand-alone&amp;quot; CAN-Controller von Intel (entwickelt von Bosch)&lt;br /&gt;
* Nachfolger des AN82526&lt;br /&gt;
* parallele  UND  SPI-Schnittstelle&lt;br /&gt;
* 8- oder 16-Bit Multiplex Bus, oder 8-Bit Non-Multiplexed Bus&lt;br /&gt;
* 14 Tx/Rx Puffer&lt;br /&gt;
* bis zu 16 IO-Pins (je nach Controlleranbindung)&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 5&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
===Bosch CC170 / CC750 / CC770===&lt;br /&gt;
* kompatibel zum AN82527&lt;br /&gt;
* mehr Debug-Register&lt;br /&gt;
* CC750 im SOIC16-W Gehäuse ohne Parallel-Interface, nur SPI&lt;br /&gt;
* erhältlich bei Rutronik (ca. 8 Euro)&lt;br /&gt;
&lt;br /&gt;
===SAE81C9x===&lt;br /&gt;
* SPI und Busanschluss möglich.&lt;br /&gt;
* PLCC44 und PLCC28, letzteres allerdings in ungebräuchlicher Bauform&lt;br /&gt;
* Nur CAN 2.0A, beherrscht also keine Extended IDs.&lt;br /&gt;
&lt;br /&gt;
==Bustreiber (CAN-Transceiver)==&lt;br /&gt;
&lt;br /&gt;
=== High-Speed ===&lt;br /&gt;
&lt;br /&gt;
====MCP2551====&lt;br /&gt;
* von Microchip&lt;br /&gt;
* PDIP8 und SOIC&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* kostet rund 1&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
====PCA 82C250====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* PDIP8 und SO8&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* V-CAN: -8V..+18V   -&amp;gt; &amp;quot;TTL-kompatible&amp;quot; Bus-Spannung&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 1,00&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====PCA 82C251====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* PDIP8 und SO8&lt;br /&gt;
* VCC = 4,5...5,5V&lt;br /&gt;
* V-CAN: -40V..+40V   -&amp;gt; +24V Bus-Spannung&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (ca. 1,50&amp;amp;#8364;)&lt;br /&gt;
&lt;br /&gt;
====TJA 1050====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* SO8, pinkompatibel&lt;br /&gt;
* VCC = 4,75...5,25V&lt;br /&gt;
* 3. Generation, Nachfolger der PCA82C25x&lt;br /&gt;
* http://www.semiconductors.philips.com/pip/TJA1050&lt;br /&gt;
&lt;br /&gt;
====ATA6660====&lt;br /&gt;
* von Atmel&lt;br /&gt;
* SO8&lt;br /&gt;
* VCC = 4,75...5,25V&lt;br /&gt;
&lt;br /&gt;
====SN65HVD23x====&lt;br /&gt;
* von Texas Instruments&lt;br /&gt;
* SO8&lt;br /&gt;
* VCC = 3,0V...3,6V&lt;br /&gt;
* erhältlich z.&amp;amp;nbsp;B. bei Reichelt (SN65HVD230, SN65HVD231)&lt;br /&gt;
&lt;br /&gt;
=== Fault-Tolerant / Low-Speed ===&lt;br /&gt;
&lt;br /&gt;
==== TJA1054 ====&lt;br /&gt;
* von NXP (ex. Philips)&lt;br /&gt;
* bis 125 &amp;quot;kBaud&amp;quot;&lt;br /&gt;
* SO14&lt;br /&gt;
* ähnliche Funktionen, gleicher Hersteller: TJA1053, TJA1055&lt;br /&gt;
&lt;br /&gt;
== CAN Repeater ==&lt;br /&gt;
&lt;br /&gt;
==== AMIS-42700 ====&lt;br /&gt;
* Dual High-Speed CAN Transceiver&lt;br /&gt;
* High speed (up to 1Mbit/s)&lt;br /&gt;
* SOIC-20&lt;br /&gt;
* vgl. http://www.mikrocontroller.net/topic/53799&lt;br /&gt;
&lt;br /&gt;
==== Alternative ====&lt;br /&gt;
* zwei Transceiver&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/9353/CANREPEATER.JPG Schaltung]&lt;br /&gt;
* Anmerkung: Diese Schaltung ist Quatsch und funktioniert nicht.&lt;br /&gt;
* -Zum Senden eines Zeichen, muss beim CAN paralell auf dem Bus gelesen werden.&lt;br /&gt;
  -Die TRansceiver tun dies nicht, mach nur der Controller.&lt;br /&gt;
  -Die gelesene Nachricht muss also durch einen Controller erneut gesendet werden, wenn der Bus frei ist...&lt;br /&gt;
&lt;br /&gt;
==== CAN Hub ====&lt;br /&gt;
CAN Hub mit standard Knoten&lt;br /&gt;
* http://www.oschmid.ch/mt/can-hub/can-hub.php&lt;br /&gt;
CAN Hub mit getrennten Rx und Tx Leitungen&lt;br /&gt;
* http://www.oschmid.ch/mt/can-hub4/can-hub4.php&lt;br /&gt;
&lt;br /&gt;
==SLIO-CAN==&lt;br /&gt;
&lt;br /&gt;
Preisgünstigste Bausteine sind die Serial Linked I/O Bausteine (SLIO). Diese Bausteine ermöglichen den Aufbau von Ein- und Ausgabeknoten ohne lokalen Prozessor. Auf der Basis dieser Bausteine lässt sich eine dezentrale Signal-Ein-Ausgabe mit minimalem Kostenaufwand realisieren.&lt;br /&gt;
&lt;br /&gt;
=== Philips P82C150===&lt;br /&gt;
* Single-Chip-I/O-Einheit mit integriertem CAN-Controller&lt;br /&gt;
* mögliche Busdatenrate 20kBd bis 125kBd&lt;br /&gt;
* interner RC-Oszillator wird durch den Bitstrom auf den Bus synchronisiert&lt;br /&gt;
* Kalibrierungsnachricht alle 8000 Bitzeiten erforderlich&lt;br /&gt;
** 4-Bit des Identifiers über Port-Pins einstellbar &lt;br /&gt;
* maximal 16 P82C150 in einem CAN-Segment&lt;br /&gt;
** 16 Port-Pins mit unterschiedlichen Konfigurationsmöglichkeiten&lt;br /&gt;
*** 16 mal als digitale Eingänge&lt;br /&gt;
*** 16 mal als digitale Ausgänge&lt;br /&gt;
*** 2 mal als analoger Ausgang ( 10-Bit, DPM )&lt;br /&gt;
*** 6 mal als analoger Eingang ( 10-Bit, multiplex )&lt;br /&gt;
*** 2 mal als Komparator &lt;br /&gt;
&lt;br /&gt;
* [http://www.htw-dresden.de/fe/labor/mikror/projects/slio_can/ slio-CAN]&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Philips stellt die SLIO nicht mehr her! Es ist auch &amp;quot;nichts&amp;quot; mehr am Markt beschaffbar, wenn, dann zu horrenden Preisen (um die 60,-EUR/Stück zur Zeit). --[[Benutzer:OldBug|Patrick]] 09:08, 25. Jan 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obsolete&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===DS 36001M===&lt;br /&gt;
&#039;&#039;&#039;Obsolete&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===MCP2502X/5X===&lt;br /&gt;
&lt;br /&gt;
CAN-IO Erweiterung. Braucht praktisch nur noch Quarz und Transciever. Preise ab 3€&lt;br /&gt;
* bis zu 8 digitale IOs &lt;br /&gt;
* bis zu 2 PWM, 10 Bit&lt;br /&gt;
* bis zu 4 ADC, 10 Bit, externe Ref.&lt;br /&gt;
* SLEEP-Mode etc.&lt;br /&gt;
&lt;br /&gt;
[http://ww1.microchip.com/downloads/en/devicedoc/21664c.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== Verkabelung ==&lt;br /&gt;
* auf beidseitige Busterminierung achten (typisch 2x 120 Ohm bei &amp;quot;high-speed&amp;quot;)&lt;br /&gt;
* Standardbelegung für diverse Steckverbindungen vgl. CANOpen-Dokumentation http://www.can-cia.de/index.php?id=440 (CiA 303-1);  erfordert Anmeldung&lt;br /&gt;
* Schaltplan für galvanische Trennung z.&amp;amp;nbsp;B. nach Datenblatt des PCA82C250&lt;br /&gt;
* für einfache Testaufbauten über sehr kurze Strecken oder &amp;quot;on-board-CAN&amp;quot; kann auf die Bustreiber verzichtet werden (vgl. Siemens Application-Note [http://www.mikrocontroller.net/attachment/28831/siemens_AP2921.pdf AP2921])&lt;br /&gt;
&lt;br /&gt;
Es gibt auch CAN mit &lt;br /&gt;
* einpoliger unsymmetrischer Verbindung (SAE J2411 single wire)&lt;br /&gt;
* optischer Verbindung (Faser, Glasfaser)&lt;br /&gt;
&lt;br /&gt;
Für einfache Tests genügt auch eine direkte wired-and-Verbindung ohne Treiber:&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-325202.html?reload=yes#325962&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
Hersteller von Debug-Geräten&lt;br /&gt;
* Vector-Informatik CANscope (Pegeltester) http://www.vector-informatik.de/deutsch/  - ca. 3300EUR&lt;br /&gt;
* Gemac CBT (CanBusTester) testet auch Pegel, Reflexionen ... (Treiber etc. etwas ältlich, von 2002, was ist mit Weiterentwicklung?), auch leihweise http://www.gemac-chemnitz.de/pages/d_html/produkte/bus-tester/new-de-can-bust.html http://www.brandt-data.de/canbus/can_intro.html  - ca. 2400EUR&lt;br /&gt;
* ixxat bietet ebenfalls den Gemac-cbt an, auch leihweise&lt;br /&gt;
&lt;br /&gt;
Oszilloskope mit CAN-Analyse (manche auch SPI, LIN, RS232, SATA ...):&lt;br /&gt;
* LeCroy WaveRunner 6040 wird mit Vector-CANcaseXL (externer CAN-Trigger) geliefert (sehr gut, ab ca.9000 EUR)&lt;br /&gt;
* LeCroy WaveSurfer 424 wird mit Vector-CANcaseXL (externer CAN-Trigger) geliefert (sehr gut, ab ca.8000 EUR)&lt;br /&gt;
* Yokogawa DL1640 und DL9040 (CAN-Trigger ist intern)  ähnliche Preise wie LeCroy, Bedienung gewöhnungsbedürftig, geht mit etwas Übung besser&lt;br /&gt;
* Tektronix&lt;br /&gt;
* HP / Agilent&lt;br /&gt;
* LogicPort http://www.pctestinstruments.com/&lt;br /&gt;
&lt;br /&gt;
Triggermöglichkeiten: SOF, CAN-ID, CAN-Data, ErrorFrame, RTR, Ack, NoAck  - alle verknüpfbar (gleich ungleich kleiner größer inRange outofRange)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
==Intern==&lt;br /&gt;
[[CAN als Hausbus]]&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
* [http://can-wiki.info CAN-WIKI] - spezielle Wiki Site für CAN bus (Englisch)&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Controller_Area_Network Wikipedia - CAN]&lt;br /&gt;
* [http://www.thomas-wedemeyer.de/elektronik/CAN-Bus/can-bus.html Grundlagen zum CAN-Bus] - Kurze Zusammenfassung der Funktionsweise und Einsatzmöglichkeiten vom CAN-Bus&lt;br /&gt;
* [http://www.canbus.cz CAN] - Controller_Area_Network (Czech)&lt;br /&gt;
* [http://www.embedded.com/design/networking/220900314 CAN in 30 minutes or less] - A quick-and-dirty guide to tuning your CAN interface and simplifying your design by Hassane El-Khoury at www.embedded.com&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
*[http://www.mjschofield.com/devices.htm ausführliche Liste mit CAN-Chips und -Controllern]&lt;br /&gt;
&lt;br /&gt;
===Testboards===&lt;br /&gt;
*[http://www.jtronics.de/elektronik-boards/experimentierboard.html  AT90CAN Testboard by www.jtronics.de (aktualisiert 2010)]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/176804  universal Testboard - CAN RS232 SPI I2C by www.jtronics.de(aktualisiert 2010)]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/177420  AT90CAN128 Board by www.jtronics.de (aktualisiert 2010)]&lt;br /&gt;
*[http://www.kreatives-chaos.com/artikel/can-testboard  ATmega8 CAN Testboard und  MCP2515 Tutorial]&lt;br /&gt;
&lt;br /&gt;
===Dongles===&lt;br /&gt;
*[http://private.addcom.de/horo/can200/ Can200 Selbstbauprojekt]&lt;br /&gt;
*[http://www.mhs-elektronik.de/tiny_can.html MHS-Elektronik Low-Cost USB-CAN-Adapter (60,- EUR) + Open Source CAN-Monitor für Windows und Linux]&lt;br /&gt;
*[http://www.cantronik.com/ cantronik]&lt;br /&gt;
*[http://www.kopfweb.de/automotive_3.htm usb-can]&lt;br /&gt;
*[http://www.mictronics.de Open Source USB&amp;lt;&amp;gt;CAN Bus Interface mit AVR ATmega162]&lt;br /&gt;
*[http://www.ixxat.de IXXAT u.a. USB&amp;lt;&amp;gt;CAN Bus Interface ca. 200 Eur]&lt;br /&gt;
*[http://www.peak-system.com Peak-System u.a. USB&amp;lt;&amp;gt;CAN Bus Interface ca. 200 EUR]&lt;br /&gt;
*[http://www.ems-wuensche.com EMS Dr. Thomas Wünsche u.a.] [http://www.ems-wuensche.com/product/datasheet/html/can-usb-adapter-converter-interface-cpcusb.html USB to CAN Bus Interface ca. 180 EUR]&lt;br /&gt;
*[http://www.systec-electronic.com/html/index.pl/en_product_can_interfaces SYS TEC electronic - USB-CANmodul Serie mit Unterstützung von 1, 2, 8, oder 16 CAN Kanälen (ab 129,- Eur)]&lt;br /&gt;
&lt;br /&gt;
*[http://www.edevices.lt USB2CAN USB to CAN bus galvanic isolated converter from 35 EUR ].Open source interface DLL and software.&lt;br /&gt;
&lt;br /&gt;
*[http://www.lawicel.com Lawicel RS232/V24&amp;lt;&amp;gt;CAN Bus Interface]&lt;br /&gt;
*[http://www.canusb.com/ canusb USB&amp;lt;&amp;gt;CAN über V24-Treiber von Lawicel]&lt;br /&gt;
*[http://www.canusb.com/projects.htm freie Software für canusb]&lt;br /&gt;
&lt;br /&gt;
*[http://www.port.de/pages/products/can/canopen/hardware/ethercan.php?lang=en PORT CAN-LAN-Bridge mit ARM und Linux]&lt;br /&gt;
&lt;br /&gt;
*[http://www.anagate.de/products/can-ethernet-gateways.htm AnaGate CAN-Ethernet Gateways (LowCost Lösung und Professionelle Varianten mit Linux System für eigene Anwendungen mit 1,2 und 4 CAN-Ports) (Shop)]&lt;br /&gt;
&lt;br /&gt;
*[http://www.pp2can.wz.cz PP2CAN:LPT-CAN bus interface]&lt;br /&gt;
*[http://www.pp2can.wz.cz/CAN2MMC.htm CAN2MMC: datalogger(CAN,RS232-GPS)]&lt;br /&gt;
*[http://www.usb2can.wz.cz USB2CAN: USB-CAN bus interface (80 Eur)]&lt;br /&gt;
&lt;br /&gt;
*[http://www.canhack.de/viewtopic.php?t=137 CANHACK CANUSB Interface, High Speed CAN + OBD2 (79,- Euro; inkl. CAN Monitor)]&lt;br /&gt;
&lt;br /&gt;
*[http://www.pp2can.wz.cz PP2CAN:LPT-CAN bus interface]&lt;br /&gt;
&lt;br /&gt;
*[http://oschmid.home.solnet.ch/mt/can-hub/can-hub.php CAN Bus HUB]&lt;br /&gt;
&lt;br /&gt;
*[http://martinsuniverse.de/projekte/caninterceptor/caninterceptor.html CAN-Interceptor]&lt;br /&gt;
&lt;br /&gt;
*[http://www.microcontroller-starterkits.de USB-zu-CAN-Interface mit verschiedenen Transceivern (LOW-Speed / HIGH-Speed) Beschreibung/Schaltplan im Online-Magazin. Leerplatinen dazu preiswert im Online-Shop erhältlich]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
*[http://canhack.de/viewtopic.php?f=25&amp;amp;t=135 CAN Monitor und Tracer für Peak USB, Lawicel CANUSB+CAN232 und kompatible]&lt;br /&gt;
*[http://www.mhs-elektronik.de/tiny_can.html GNU – Open Source CAN Monitor, Makro und Filter Funktion, Plugin fähig, unter GTK+ entwickelt]&lt;br /&gt;
&lt;br /&gt;
===Protokolle===&lt;br /&gt;
====CANOpen====&lt;br /&gt;
&lt;br /&gt;
*[http://canopen.sourceforge.net/index.html CANopen free software resource center]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CAN]]&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-Belichter&amp;diff=39444</id>
		<title>LED-Belichter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-Belichter&amp;diff=39444"/>
		<updated>2009-09-27T11:27:39Z</updated>

		<summary type="html">&lt;p&gt;Xaos: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Alexander Sewergin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Ein Belichtungsgerät auf Basis von UV-Leuchtdioden war vor einigen Jahren noch viel zu teuer gewesen und man hat sich mit UV-Röhren aus Bräunungsgeräten abgefunden. &lt;br /&gt;
Heute sind UV-LEDs sehr günstig (16€ für 200 Stück) und sie bieten Vorteile gegenüber UV-Röhren:&lt;br /&gt;
&lt;br /&gt;
===Vorteile===&lt;br /&gt;
* punktförmige Lichtquelle&lt;br /&gt;
* man muss nicht unbedingt mit 230V Wechselspannung rumfrickeln&lt;br /&gt;
* sehr hohe Lebensdauer (minimaler Verschleiß)&lt;br /&gt;
&lt;br /&gt;
===Nachteile===&lt;br /&gt;
* viel mehr Aufwand beim Erstellen eines Belichtungsgerätes mit LEDs als mit UV-Röhren&lt;br /&gt;
* große Mengen an LEDs werden benötigt (viel Freude beim Einlöten :)&lt;br /&gt;
* meist längere Belichtungszeiten (abhängig vom Layoutfilm)&lt;br /&gt;
&lt;br /&gt;
== Beweggründe zum Bau eines LED-Belichters ==&lt;br /&gt;
Ich hatte mir schon vor einpaar Jahren einen Belichter auf UV-Röhren Basis gebaut (Scannergehäuse + Gesichtsbräuner), jedoch konnte ich damit keine feinen Leiterbahnen (0.7mm und schmaler) erstellen, da stehts Probleme mit der Unterbelichtung von Leiterbahnen auftraten.&lt;br /&gt;
(Anmerkung von &amp;quot;außen&amp;quot;: Feinere Strukturen sind mit Röhrenbelichtern durchaus möglich. 0,18mm Leiterbahn zwischen zwei SO-Pins ist machbar).&lt;br /&gt;
&lt;br /&gt;
Obwohl ich den Abstand der Röhren voneinander verkleinert und den Abstand zum Scannerglas vergrößert hatte, wurde das Ergebniss nicht spürbar besser.&lt;br /&gt;
&lt;br /&gt;
Die Lösung kam mit dem Fund von billigen UV-LEDs in einem Internetshop. Der Abstrahlwinkel von herkömmlichen 5mm LEDs beträgt ca 20-30°, weshalb sie sich wunderbar zum Belichten eignen.&lt;br /&gt;
&lt;br /&gt;
Die UV-Strahlen treffen fast senkrecht auf den Layoutfilm und verursachen keine Unterstrahlung.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Zum Bau wurde alles benutzt, was gerade in Griffweite lag. Mit etwas Improvisation geht alles :D&lt;br /&gt;
&lt;br /&gt;
Als erstes wurden 200 LEDs (25 Stränge à 8 LEDs) in eine 20 &amp;amp;times; 10 cm Lochrasterplatte eingelötet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Image002.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Danach wurde der benötigte Abstand der LEDs zum Auflageglas berechnet. &lt;br /&gt;
Bei LEDs mit 15° Abstrahlwinkel empfehle ich einen Abstand von ca 14 cm, wodurch man einen Kompromiss zwischen Überschneidung der Leuchtkegel und der Unterstrahlung von Leiterbahnen durch schräg einfallenedes UV-Licht erhält.&lt;br /&gt;
&lt;br /&gt;
Ausgehend vom notwendigen Abstand entstand eine Holzkiste mit folgenden Maßen :&lt;br /&gt;
18 &amp;amp;times; 30 &amp;amp;times; 20 (H/T/B).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Image007.jpg|500px]] [[Bild:Image008.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Ein altes Schaltnetzteil aus einem HP-Drucker liefert die notwendigen Spannungen (5V und 40V).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Image006.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Da die 8 in Reihe geschalteten LEDs eine Flussspannung von ca. 27.2V benötigen, die Spannungsquelle aber 40V liefert und ich die Spannungsdifferenz nicht in den kleinen 1/4Watt Widerständen verbraten wollte, kam eine einfache  Spannungsstabilisierung zum Einsatz. Die Widerstände sollte man aber dennoch NIE weglassen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Schaltplan.png]]&lt;br /&gt;
[[Bild:Image003.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
(PS: Bei R5 handelt es sich um einen Jumper der durch eine Diode ersetzt werden könnte, falls die Z-Diode einen zu kleine Durchbruchsspannung besitzt.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als Auflageglas benutzt ich normales 4mm Fensterglas. Leider hatt der Glaser in der Umgebung kein UV-durchlässiges Glas, weshalb meins ca 90% der UV-Strahlung schluckt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auf der Suche nach UV-durchlässigem Glas oder Acryglas/Plexiglas&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die 200 LEDs wurden bei längerem Betrieb sehr warm, weshalb ich einen 80mm Lüfter ink. 2 Lufteinsauglöcher (1 beim Netzteil, 1 unter den LEDs) verbaut habe.&lt;br /&gt;
&lt;br /&gt;
Falls ihr euer Belichtungsgerät nicht für UV-Experimente benutzten wollt, wo das Gerät über 30 min eingeschaltet bleibt, dann könnt ihr euch den Lüfter sparen.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Bei der Steuereinheit habe ich mich auf [http://www.avr-projekte.de/ Jürgen Woetzels Belichtungstimer] verlassen, weil ich das gleiche Gerät auch in meinem UV-Röhren Belichter benutzt hatte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
Der LED-Belichter leistet mir bei SMD-Platinen gute Dienste. Leiterbahnen von 0.3mm Breite sind möglich. Derzeit stößt eher mein Laserdrucker (Laserjet 5m) an seine Grenzen des Auflösungsvermögens, als dass der LED-Belichter schlapp macht.&lt;br /&gt;
&lt;br /&gt;
Ich drucke meine Layouts auf Pergamentpapier und brauche für&#039;s Belichten von Bungard Platten 2:50 min.  Mit Klarsichtfolien brauche ich zum Belichten knappe 1:30 min.&lt;br /&gt;
&lt;br /&gt;
Würde man das normale Auflageglas durch ein UV-durchlässiges ersetzten, dann würde die Belichtungszeit &#039;&#039;&#039;erheblich&#039;&#039;&#039; sinken.&lt;br /&gt;
&lt;br /&gt;
==Videos==&lt;br /&gt;
[http://video.google.de/videoplay?docid=1510743296774878413 Video1]&lt;br /&gt;
&lt;br /&gt;
[http://video.google.de/videoplay?docid=2811227564584227168 Video2]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
[[Category:Projekte]]&lt;br /&gt;
[[Category:Platinen]]&lt;br /&gt;
[[Category:1. Wettbewerb]]&lt;/div&gt;</summary>
		<author><name>Xaos</name></author>
	</entry>
</feed>