<?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=89.204.153.244</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=89.204.153.244"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/89.204.153.244"/>
	<updated>2026-04-11T03:16:50Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=60018</id>
		<title>SMD Löten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=60018"/>
		<updated>2011-08-30T23:09:44Z</updated>

		<summary type="html">&lt;p&gt;89.204.153.244: /* Elektro-Pfanne */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Löten]]&lt;br /&gt;
== Einlöten von SMD-Bauteilen ==&lt;br /&gt;
&lt;br /&gt;
Irgendwann ist man an dem Punkt angelangt, an dem man ein Bauteil braucht, das nur in [[SMD]] verfügbar ist. [[TI]] zum Beispiel bietet seine [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Das ist dann der Zeitpunkt an dem man sich fragt: &amp;quot;Wie lötet man sowas?&amp;quot; Nun, eigentlich ist es gar nicht so schwer, sobald man den richtigen Trick dabei mal raus hat. &lt;br /&gt;
&lt;br /&gt;
=== Handlöten ===&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen ====&lt;br /&gt;
&lt;br /&gt;
* Grundvoraussetzung ist ein Lötkolben mit entsprechender Lötspitze.&lt;br /&gt;
**Der Lötkolben sollte am besten der einer geregelten Lötstation sein. Die Einstellung der Lötstation sollte man halbwegs beherrschen. (Lötversuche an einer alten Platine sind in diesem Fall sehr hilfreich).&lt;br /&gt;
**Der Lötkolben sollte möglichst leicht und der vordere (heiße) Teil möglichst kurz sein. Je länger, desto mehr wird ein eventuelles Zittern der Hand verstärkt.&lt;br /&gt;
** Die Lötspitze sollte so dick sein, wie es noch gerade für die Aufgabe vertretbar ist. Nicht etwa die dünnste aufzutreibende Lötspitze. Was auf den ersten Blick widersprüchlich klingt (so dick wie es gerade noch geht), hat einen einfachen Grund: Die an der Spitze ankommende Wärme, die Wärmekapazität der Spitze und die Wärmeübertragung sind bei größeren Spitzen entsprechend besser. Daher geht das Löten mit einer größeren Spitze besser. Natürlich sollte man es nicht übertreiben, aber die 0,8-mm-Spitze ist häufig die falsche Wahl.&lt;br /&gt;
** Die Lötspitze sollte in einem guten bis erstklassigen Zustand sein.&lt;br /&gt;
&lt;br /&gt;
* Außerdem braucht man noch Entlötlitze. Hier sollte man die dünnste nehmen, die man bekommen kann. Breiter als 1,5 mm sollte sie nicht sein, eher dünner. Hat man keine passende zur Hand oder herrscht Geldmangel, so lassen sich auch die feinen Litzen eines abisolierten, flexiblen Silikonkabels für diesen Zweck missbrauchen.&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges Flussmittel in Stiftform mit eingebautem Pinsel oder Flussmittelgel aus der Spritze tun gute Dienste.&lt;br /&gt;
&lt;br /&gt;
* Schließlich ist auch noch eine Leiterplatte (PCB) vonnöten. Hier hat man entweder die Möglichkeit, sich eine bei den verschiedenen PCB-Herstellern fertigen zu lassen oder sie selber zu belichten und zu ätzen. Besonders bei Chips mit kleinem Pin-Abstand hilft eine Lötstoppmaske und die Vorverzinnung der Pads; die kleine Menge Zinn, die bei industriell gefertigten Platinen auf den Pads ist, reicht völlig aus, man braucht dann kein oder nicht viel extra Lötzinn.&lt;br /&gt;
&lt;br /&gt;
* Feine Pinzette. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine Lupe. Diese dient in erster Linie zur Kontrolle. Löten ist unter einer einfachen Lupe eher unangenehm und ein Notbehelf, da die Perspektive verloren geht. Eine Lupenbrille (gute können recht teuer sein) oder ein Stereomikroskop (teuer bis sehr teuer) wäre zum Löten die bessere Wahl.&lt;br /&gt;
&lt;br /&gt;
==== Löten von Widerständen, Kondensatoren und anderen 2-Pinnern ====&lt;br /&gt;
&lt;br /&gt;
Es gibt diese Bauteile hauptsächlich in diesen Bauformen:&lt;br /&gt;
* 1206:  Länge: 3,20 mm  Breite: 1,60 mm (laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell)&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (Handy)&lt;br /&gt;
&lt;br /&gt;
Das Einlöten von 2-Pinnern ist sehr einfach. Es gibt eigentlich bloß einen kleinen Trick:&lt;br /&gt;
&lt;br /&gt;
# Ein Pad auf der Leiterplatte verzinnen.&lt;br /&gt;
# Das Bauteil mit einer Pinzette in Endposition halten und leicht an beide Pads andrücken.&lt;br /&gt;
# Dabei das verzinnte Pad mit dem Lötkolben erwärmen. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
# Anschließend evtl. das erste Pad nochmal kurz erhitzen.&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als Pinzette empfiehlt sich eine mit ca. 1 mm breiter Spitze, die als SMD-Pinzette (meist schwarz brüniert) ab ca. 10.- angeboten werden. Hier zu sparen lohnt nicht.&lt;br /&gt;
&lt;br /&gt;
==== Lötpaste ====&lt;br /&gt;
ist eine Mischung aus Mg(OH)2 und Al2(Cl)3.&lt;br /&gt;
&lt;br /&gt;
==== Löten von Bauteilen im SO-Package ====&lt;br /&gt;
&lt;br /&gt;
Das Löten von Bauteilen im SO Package gestaltet sich fast genauso einfach wie das Löten von Widerständen:&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC nach unten drücken.&lt;br /&gt;
# Das Pad erwärmen. Es ist möglich, dass der IC jetzt nicht richtig sitzt. Wenn das passiert ist, einfach nochmal das Zinn erwärmen und den IC verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen.&lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten.&lt;br /&gt;
# Alle anderen Pads verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen.&lt;br /&gt;
# Die Zinnbrücken mit Hilfe von Entlötlitze entfernen. Dazu hält man die Entlötlitze an die betroffenen Pads und erwärmt sie. Das Zinn geht dann automatisch auf die Entlötlitze und es gibt keine Brücken mehr.&lt;br /&gt;
&lt;br /&gt;
==== Löten von (T)SSOPs und QFPs ====&lt;br /&gt;
&lt;br /&gt;
War es bei Bauteilen im SO-Package mit einer ruhigen Hand noch möglich die Pins ohne Zinnbrücken zu verlöten, ist das bei TSSOPs nun praktisch nicht mehr möglich, da der Abstand der Pins einfach zu klein ist.&lt;br /&gt;
&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (Pinzette oder vorsichtig mit dem Zeigefinger etc.) Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Mit dem Lötkolben einen Tropfen Zinn aufnehmen (entfällt bei verzinnten Pads).&lt;br /&gt;
# Das Bauteil an zwei diagonal gegenüberliegenden Pins festlöten.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt, jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Wenn man einen Stift mit flüssigem Flussmittel hat, auf der zu lötenden Seite damit einfach über alle Pins pinseln.&lt;br /&gt;
# Mit dem Lötkolben über die erste Seite des TSSOP fahren. Dabei spielt es keine Rolle, ob Brücken entstehen. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine Brücken, da die Oberflächenspannung die geringe Menge Zinn an Pad und Pin sammelt, so dass es zu wenig Zinn für eine Brücke ist.  Den Lötkolben mit einer Geschwindigkeit von ca. 1 - 2 Pins pro Sekunde vorwärts bewegen.&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist.&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Mit Entlötlitze überflüssiges Zinn entfernen.&lt;br /&gt;
# Zum Abschluss kann man mit einer Lupe die Lötstellen überprüfen.&lt;br /&gt;
&lt;br /&gt;
Bei QFPs ist das Verfahren gleich, außer dass man 4 Seiten bearbeiten muss.&lt;br /&gt;
&lt;br /&gt;
Alternativ zur Entlötlitzentechnik gibt es auch Lötspitzen mit Hohlkehle.&lt;br /&gt;
&lt;br /&gt;
# Zuerst das Bauteil an zwei diagonalen Pins mit Lötzinn fixieren und die Ausrichtung prüfen. Ob Lötbrücken entstehen, ist zu diesem Zeitpunkt nicht wichtig.&lt;br /&gt;
# Dann genügend Flussmittel über die zu lötenden Pins streichen.&lt;br /&gt;
# Die Hohlkehle mit wenig Lötzinn füllen und über eine Seite des ICs führen.&lt;br /&gt;
# Jetzt hat man an einigen Stellen (meist am Ende der Seite, die man gelötet hat) einige Lötbrücken.&lt;br /&gt;
# Die Hohlkehle von Lötzinn reinigen und mit leerer Hohlkehle über die Lötbrücken fahren. Vorher nochmal genug Flussmittel draufgeben.&lt;br /&gt;
# Meist sind schon nach dem ersten mal keine Brücken mehr vorhanden. Falls doch, nochmals mit Flussmittel benetzen und an den entsprechenden Stellen mit der Hohlkehlspitze Lötzinn entfernen.&lt;br /&gt;
&lt;br /&gt;
Vorsicht! Flussmittel sind ätzend. Also nur bei eingeschalteter Lötdampfabsaugung arbeiten!&lt;br /&gt;
&lt;br /&gt;
==== Der Trick mit der Entlötlitze ====&lt;br /&gt;
&lt;br /&gt;
Bei kleinen SMD-Bauteilen kann es passieren, dass man beim Löten Zinnbrücken verursacht. Diese lassen sich recht einfach mittels Entlötlitze entfernen. Dabei sollte man direkt mit dem Ende der Litze entlöten und nicht der Mitte. Hilfreich kann bei wenig Platz auch ein schräges Anschneiden der Litze sein. Scharfe Schneidwerkzeuge, die ein Ausfransen der Litze verhindern, sind unverzichtbar (Tipp: SMD-Werkzeuge markieren, damit sie nicht versehentlich für grobe Arbeiten verwendet werden).&lt;br /&gt;
&lt;br /&gt;
Es empfiehlt sich die Entlötlitze vorher leicht mit Flussmittel zu tränken, damit das Zinn besser aufgenommen werden kann.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich sollte man beim Arbeiten mit Entlötlitze, ob an SMD- oder anderen Bauteilen, etwas Vorsicht walten lassen. Entlötlitze ist ein sehr guter Wärmeleiter. Daher kann man sich beim Entlöten, wenn man die Litze direkt mit den Fingern hält, böse verbrennen. Über 300° vom Lötkolben über die Litze zu den Fingern übertragen sind kein Pappenstiel. Leider kann das Führen der Litze mit einer Pinzette oder kleinen Flachzange gerade bei SMD-Bauteilen zu ungenau sein, so dass man verleitet wird, die Finger zu nehmen.&lt;br /&gt;
&lt;br /&gt;
Trotzdem sollte man eher nicht zur Lötzinn-Absaug-Pumpe greifen. Das mag zwar einfacher und bei anderen Lötvorgängen durchaus praktisch sein, die kleinen SMD-Bauteile werden jedoch leicht mit abgesaugt und kommen dann nur als Brösel oder gar nicht mehr raus. Manche Hersteller bieten SMD-Überwurfspitzen für ihre Entlötpumpen an, die diese Gefahr verringern. Das vereinfacht die Sache ein wenig, man muss aber genau zielen und den Lötkolben kurz wegnehmen. Hier sollte man also eher zur Entlötlitze greifen.&lt;br /&gt;
&lt;br /&gt;
==== Trick 17 mit der Entlötlitze ====&lt;br /&gt;
&lt;br /&gt;
Mit der &amp;quot;Invertierte-Entlötlitzen-Methode&amp;quot; kann man auch mechanisch empfindliche Pins auf sehr kleinem Raster &#039;&#039;&#039;verlöten&#039;&#039;&#039;, indem man mit der Entlötlitze Lötzinn an das Pin/Pad-Paar zuführt. ([http://www.mikrocontroller.net/topic/94451#833286 Forumsbeitrag von Ulrich]).&lt;br /&gt;
&lt;br /&gt;
=== Reflow-Techniken ===&lt;br /&gt;
&lt;br /&gt;
Bei Reflow-Lötverfahren wird vor der Bestückung auf die Lötpunkte der Platine eine Lötpaste aufgetragen. Die Anschlüsse der zu lötenden Bauteile werden dann in diese Paste positioniert. Nach dieser Bestückung wird die Platine mit den Bauteilen erhitzt. Die Lötpaste schmilzt auf. Sind alle Lötpunkte aufgeschmolzen wird die Platine abgekühlt, das Lot erstarrt und die Bauteile sind verlötet.&lt;br /&gt;
&lt;br /&gt;
Reflow-Techniken galten lange Zeit als zu aufwendig für Amateure. Dies änderte sich, nachdem sich gezeigt hat, dass auch etwas hemdsärmelige Methoden zum Ziel führen. Auch diese setzen etwas Aufwand voraus, daher sind sie im folgenden nur kurz beschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Lötpaste auftragen ====&lt;br /&gt;
&lt;br /&gt;
In der industriellen Fertigung wird die Lötpaste zum Beispiel mittels einer Schablone aufgetragen. (Eine solche kann man beispielsweise bei PCB-Pool kostenlos zur Platine hinzubestellen.) Oft bleibt aber nur, die Lötpaste von Hand aufzutragen. Für diese Zwecke ist Lötpaste in Spritzen erhältlich. Die Preise für Lötpaste sind horrend. Mit ein bis zwei Euro pro Gramm(!) muss man rechnen. Allerdings benötigt man nur sehr geringe Mengen pro Platine und Lötpaste ist nicht unbegrenzt lagerbar. Es sollte eine &amp;quot;no clean&amp;quot;-Paste verwendet werden. &amp;quot;No clean&amp;quot; bedeutet, dass die Platine nicht von Flussmittelresten gereinigt werden muss.&lt;br /&gt;
&lt;br /&gt;
Vor dem Auftragen der Paste ist die Platine zu säubern, und nochmal zu säubern, und nochmal ... Dann wird eine sehr kleine Menge der Paste auf jeden Lötpunkt aufgetragen.&lt;br /&gt;
&lt;br /&gt;
Ein häufiges Problem ist, dass sich die Paste ungern auf dem Pad niederlässt; also beim Entfernen der Spritze lieber an selbiger haften bleibt. Hier hilft ein leichtes Erwärmen der Platine auf ca. 40°C. Die Paste wird sich dadurch gerne auf dem Pad niederlassen und auch einen ordentlich rundlichen Klecks bilden, statt einer Zipfelmütze. Zu beachten ist hierbei, dass die Kleckse bei zu langer Wartezeit etwas schneller austrocknen als bei niedrigeren Temperaturen. Also besser gleich nach dem Einbringen der Paste die Temperaturzufuhr unterbrechen und die SMD Bauteile bestücken.&lt;br /&gt;
&lt;br /&gt;
==== Bauteile bestücken ====&lt;br /&gt;
&lt;br /&gt;
Die Anschlüsse der Bauteile werden in die Lötpaste gesetzt. Bei bleihaltiger Lötpaste muss die Ausrichtung nicht 100% genau sein, da die Bauteile beim Schmelzen der Paste durch die Oberflächenspannung in Position gezogen werden. Bei bleifreier Lötpaste ist dieser Effekt kaum vorhanden. Daher müssen die Bauteile in diesem Fall genau ausgerichtet sein.&lt;br /&gt;
&lt;br /&gt;
==== Umgebauter Pizzaofen ====&lt;br /&gt;
&lt;br /&gt;
Als Standardmethode für Amateure scheint sich die Verwendung eines umgebauten Pizzaofens durchzusetzen. Ein Elektro-Pizzaofen/Miniofen für den Hausgebrauch für vielleicht 20€ bis 50€ wird mit einer Mikrocontroller-Temperatursteuerung versehen. Mit dieser Steuerung werden die gewünschten Heiz- und Abkühl-Temperaturkurven gesteuert. Beim Umbau ist Vorsicht walten zu lassen, da die Heizung und Temperaturregelung solcher Öfen mit Netzspannung erfolgt.&lt;br /&gt;
&lt;br /&gt;
Aus Gesundheitsgründen sollte ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Elektro-Pfanne ====&lt;br /&gt;
&lt;br /&gt;
Statt eines mit einer Temperatursteuerung nachgerüsteten Pizzaofens wird gelegentlich einfach eine teflonbeschichtete Elektro-Pfanne verwendet. Elektro-Pfannen, manchmal auch Party-Pfannen genannt, sind in Deutschland eher selten in Haushalten zu finden. Es handelt sich dabei im Prinzip um eine Elektro-Heizplatte, die jedoch nicht flach, sondern deren Oberseite als Pfanne ausgeformt ist.&lt;br /&gt;
&lt;br /&gt;
Zum Reflowlöten wird eine bestückte Platine in die kalte Pfanne gelegt, mit der Lötseite, also den Bauelementen nach oben. Die Pfanne wird aufgeheizt und dabei die Platine beobachtet, bis die Lötpaste an allen Lötpunkten aufgeschmolzen ist. Da eine Elektro-Pfanne nicht überall gleichmäßig heizt, wird gelegentlich vorsichtiges Schwenken der Platine in der Pfanne vorgeschlagen, um die Platine gleichmäßig zu erwärmen. Ist die Lötpaste überall aufgeschmolzen wird die Elektro-Pfanne abgestellt. Die Platine bleibt in der Pfanne und kühlt dort langsam mit der Pfanne aus.&lt;br /&gt;
&lt;br /&gt;
Bei dieser Methode hat man keine Kontrolle über die Temperaturkurve. Selbige hängt nicht nur von der Bauart der Pfanne, sondern auch von der Umgebungstemperatur und der eigenen Reaktionszeit ab.&lt;br /&gt;
&lt;br /&gt;
Aus Gesundheitsgründen sollte eine zum Reflow-Löten verwendete Elektro-Pfanne nicht mehr für Nahrungsmittel verwendet werden, da Rückstände an der Pfanne haften bleiben können und zudem übermäßig erwärmte Teflonpfannen ausgasen und fortan Stoffe an das Kochgut abgegeben, insbesondere, wenn die Oberfläche durch KRatzer beschädigt wurde.&lt;br /&gt;
&lt;br /&gt;
==== Heißluft ====&lt;br /&gt;
&lt;br /&gt;
Die Geister scheiden sich daran, ob man mit Heißluft wirklich gut löten kann (beim Entlöten ist das anders). Viele bevorzugen noch den Lötkolben vor dem Heißluftgerät, andere haben mit Heißluftlöten keine Probleme.&lt;br /&gt;
&lt;br /&gt;
Mit Heißluft lötet man eine Platine bereichsweise. Auf die Lötpads in einem Bereich werden kleine Mengen Lötpaste aufgetragen und die Bauteile aufgesetzt. Die Lötpaste wird dann mittels Heißluft erwärmt und geschmolzen. Dabei muss man sowohl aufpassen, dass Bauteile und Platine nicht überhitzt werden und dass man die in der Lötpaste sitzenden Bauteile nicht verschiebt oder sogar von der Platine bläst. Nebenbei muss man natürlich aufpassen, dass man sich nicht an der Heißluft verbrennt.&lt;br /&gt;
&lt;br /&gt;
Entsprechende Heißluftgeräte (Hot-Air Stations, häufig auch Rework-Stations genannt), waren relativ teuer. Einige Marken sind mittlerweile jedoch für den Hobbyisten erschwinglich. Mit Übung lässt sich auch eine einfache Heißluft-Pistole verwenden. Allerdings ermöglichen deren Düsen kein sonderlich genaues Arbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Herdplatte ====&lt;br /&gt;
&lt;br /&gt;
Mit etwas Erfahrung kann man auch sehr gut auf der Herdplatte löten. Die Herdplatte wird dabei rund eine halbe Stunde vorgeheizt, damit die Temperatur einigermaßen konstant bleibt. Mit etwas Lötzinn kann getestet werden, ob die Löttemperatur erreicht wurde. Die Herdplatte sollte nicht zu heiß eingestellt werden, damit der Lötstopplack sowie das Epoxyd nicht verheizt wird. &lt;br /&gt;
Die bestückte Platine wird mit einer Pinzette auf die Herdplatte gelegt. Schon nach kurzer Zeit sollte das Lötzinn anfangen zu schmelzen. Wenn alle Lötstellen verlötet sind, kann die Platine wieder heruntergenommen werden und abkühlen.&lt;br /&gt;
&lt;br /&gt;
==== Kochtopf mit mehrschichtigem Boden ====&lt;br /&gt;
&lt;br /&gt;
In vielen Küchen sind heute keine Gusseisenkochplatten mehr verbaut, sonder Glasskeramikkochfelder. Bei diesen darf die Platine nicht direkt beheizt werden, da diese schnell eine enorme Hitze erzeugen. Damit eine konstante Temperatur erhalten wird, kann ein Kochtopf mit einem mehrschichtigen Boden verwendet werden. Dazu wird die Platine in den Kochtopf gelegt und auf dem Glasskeramikkochfeld aufgeheizt. Ist die Lötpaste geschmolzen und alle Lötstellen verlötet, kann die Platte abgestellt und der Kochtopf zum Abkühlen zur Seite geschoben werden.&lt;br /&gt;
&lt;br /&gt;
== Entlöten von SMD-Bauteilen ==&lt;br /&gt;
&lt;br /&gt;
Leider halten ICs etc. nicht ewig und irgendwann muss jeder einmal SMD Bauteile wieder auslöten. Das Entlöten gestaltet sich im Grunde genauso einfach wie das Einlöten.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei einfache Fälle: Entweder soll der Chip überleben oder die Platine. Der dritte Fall ist die erstrebenswerteste Methode: Chip und Platine überleben.&lt;br /&gt;
&lt;br /&gt;
=== Die einfachste Methode ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode ist den Lötkolben auf maximale Temperatur zu stellen und dann, mit etwas Lötzinn für besseren Wärmekontakt, auf die Mitte des auszulötenden ICs zu legen (mit der Spitze und dem Lötzinn darunter).&lt;br /&gt;
&lt;br /&gt;
Der IC stirbt dabei durch die rund 400 Grad des Lötkolbens sicherlich den Hitzetod, aber durch die Wärmeleitung schmilzt an den Beinchen des ICs das Lötzinn nach rund einer Minute und man kann den IC mit einer Pinzette dann abheben. Hierzu sollte man alle paar Sekunden testweise anheben und den Lötkolben nur leicht aufdrücken, um so ganz sicher alle anderen Bauteile heil zu lassen.&lt;br /&gt;
&lt;br /&gt;
Das auf der Platine verlaufene Lötzinn entfernt man, indem man mit der gereinigten Lötspitze (bei 200 Grad) über die nun geleerten Pads geht; Zubehör wie Entlötlitze ist überflüssig.&lt;br /&gt;
&lt;br /&gt;
So kann man beispielsweise einen USB-RS232-Adapter in einen USB-UART-Adapter umwandeln ;-)&lt;br /&gt;
&lt;br /&gt;
Getestet habe ich es bisher mit einem SD213 (28 Pins) und einem FT232 (32 Pins), aber etwas größere ICs, bis zum MSP430 mit 100 Pins, müssten auch möglich sein.&lt;br /&gt;
Durch Umdrehen der Platine sollten auch noch größere ICs so auslötbar sein (wobei man wegen der Schwerkraft dann die Pinzette einsparen kann), weil dann durch die Konvektion noch mehr Wärme übertragen wird.&lt;br /&gt;
&lt;br /&gt;
=== Chip Quik-Methode ===&lt;br /&gt;
[http://www.chipquik.com/ Chip Quik] bietet ein Set an mit dem sich SMD-Bauteile sehr einfach und zerstoerungsfrei entloeten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Dann eine große Menge speziellem Loetzinn aufgetragen, das eine sehr geringe Schmelztemperatur hat. Das verbindet sich mit dem Loetzinn und bleibt lange fluessig. Die Temperatur ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Loetzinn-Blob stehen, faellt das Bauteil fast von alleine ab.&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird in dem Make-Magazine Video gezeigt, das unten verlinkt ist.&lt;br /&gt;
&lt;br /&gt;
Ich vermute, dass es sich bei der Chip Quik-Legierung um Wood&#039;sches Metall (enthält Cadmium) oder wahrscheinlicher um die Rose-Legierung (Cadmiumfrei) handelt. Bei tmp-loettechnik.de bekommt man letzteres, allerdings nur als Barren. Mit dieser Legierung (Schmelzpunkt 98 °C) kann man auch Teile zur mechanischen Bearbeitung eingießen und im kochenden Wasser wieder befreien. &amp;quot;Flüssiger Schraubstock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Anmerkung (von Markus F.):&lt;br /&gt;
Laut [http://www.chipquikinc.com/newsletters/cq_new_june_2004.htm Hersteller] hat die Chip Quik-Legierung einen Schmelzpunkt von 58°C.&lt;br /&gt;
Daher wäre es wahrscheinlich, dass in der Legierung eine größere Menge Gallium (Schmelzpunkt 30°C) enthalten ist. Bei dem Preis (190$ für 170g Chip Quik-Lot) wäre das durchaus möglich; Gallium kostet derzeit (Stand Juli 2010) ca. 1€ pro Gramm.&lt;br /&gt;
&lt;br /&gt;
=== Die Zahnarztmethode ===&lt;br /&gt;
&lt;br /&gt;
==== Benötigtes Werkzeug ====&lt;br /&gt;
&lt;br /&gt;
* Lötkolben&lt;br /&gt;
* Lötzinn &lt;br /&gt;
* Ablöthebel &lt;br /&gt;
* Entlötlitze&lt;br /&gt;
&lt;br /&gt;
==== Ablöthebel u.ä ====&lt;br /&gt;
&lt;br /&gt;
Ein Ablöthebel oder verwandte Werkzeuge sehen so aus, als ob sie aus der Praxis eines Zahnarztes (Zahnsonde) oder der Werkstatt eines Zahntechnikers stammen. Dabei handelt es sich um Metallhaken, eventuell (in der einfachen, nicht medizinischen Ausführung) mit Plastikgriff. Es gibt sie in verschiedenen Formen und Größen. &lt;br /&gt;
&lt;br /&gt;
Als Werkzeug zum Entlöten findet sich eine Form unter der bereits erwähnten Bezeichnung &#039;&#039;Ablöthebel&#039;&#039;, ebenso findet man ähnliche Werkzeuge als Teil von sogenannten &#039;&#039;Platinen-Reinigungsbestecken&#039;&#039; (Beispiel Conrad Bestellnummer 588239). Im Englischen heißen entsprechende Werkzeuge &#039;&#039;soldering aid hook&#039;&#039; (Haken), &#039;&#039;soldering aid fork&#039;&#039; (Haken/Hebel mit gespaltener Klinge. Wenn als Hebel ausgeführt ein &#039;&#039;Ablöthebel&#039;&#039;), oder &#039;&#039;soldering aid spike&#039;&#039;, &#039;&#039;reamer&#039;&#039; oder &#039;&#039;probe&#039;&#039; (gebogene oder ungebogene Tastspitze).&lt;br /&gt;
&lt;br /&gt;
Ein solcher Hebel oder Haken ist ein nützliches Werkzeug beim Auslöten von SMD Bauteilen. Vorsichtig eingesetzt kann er durchaus beim zerstörungsfreien Entlöten verwendet werden, zum Beispiel bei der Verwendung von [[#Heißluft|Heißluft]]. Im Folgenden wird allerdings eine zerstörende Methode beschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Der Entlötvorgang ====&lt;br /&gt;
&lt;br /&gt;
Das Entlöten ist bei fast allen SMD-Bauteilen gleich, egal welcher Pinabstand und wie viele Pins. &#039;&#039;&#039;Achtung&#039;&#039;&#039;, der IC geht dabei kaputt.&lt;br /&gt;
&lt;br /&gt;
# Man bringt eine dicke Zinnwurst auf alle Pins auf.&lt;br /&gt;
# Erwärmen des Zinns mit dem Lötkolben.&lt;br /&gt;
# Ausheben der Pins mithilfe des Hebels oder Hakens. Hier kann man bei den Bauteilen mit kleinem Pinabstand gleichzeitig mehrere hochheben.&lt;br /&gt;
# Solange wiederholen, bis alles raus ist.&lt;br /&gt;
# Entfernen der Zinnreste mit Entlötlitze.&lt;br /&gt;
&lt;br /&gt;
=== Die 2-Lötkolben-Methode ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode eignet sich für alle SMD-Bauteile mit 2 gelöteten Seiten: Widerstände, Kondensatoren, kurze ICs (z.&amp;amp;nbsp;B. 2x8 Pins). Bei den Widerständen und Kondensatoren ist alles klar. Von jeder Seite einen Lötkolben anhalten, das Bauteil löst sich ab und bleibt meist an einem der Kolben kleben, wo man es abschütteln kann. Bei ICs verzinnt man zunächst beide Pin-Reihen ordentlich, danach versucht man mit den Kolben das Zinn auf beiden Reihen und der gesamten Länge flüssig zu bekommen, evtl. muss man die Lötkolben dabei etwas bewegen. Ist das Zinn komplett flüssig, kann man das IC beiseite schieben. Das geht besonders gut bei Platinen mit Lötstopplack. Bei dieser Methode kann man die Bauteile in der Regel anschließend weiter verwenden, überflüssiges Zinn an den Pins mit Lötsauglitze entfernen.&lt;br /&gt;
&lt;br /&gt;
=== Die Rohrstückmethode ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode eignet sich für ICs mit Pins an zwei Seiten (SO-Gehäuse). Chip und Platine haben Chancen zu überleben. Man nehme ein Stück Kupferrohr der passenden Länge und sägt es der Länge nach durch, so dass man zwei Halbschalen hat. Eine der Halbschalen befestigt man an einer alten Lötspitze, z.&amp;amp;nbsp;B. indem man ein Gewinde schneidet oder hartlötet.  Nun kann man alle Pins gleichzeitig erwärmen und das IC abnehmen.&lt;br /&gt;
&lt;br /&gt;
=== Die Kupferdraht-Haken-Methode ===&lt;br /&gt;
&lt;br /&gt;
Die Methode funktioniert ähnlich wie die zuvor beschriebenen &#039;&#039;Rohrstückmethode&#039;&#039;. Das Erstellen des Hilfsmittels ist wesentlich einfacher, allerdings ist es keine Dauerlösung. Die Methode eignet sich für kleine Bauteile (Widerstände, etc.) mit Pins an zwei Seiten.&lt;br /&gt;
&lt;br /&gt;
Das Ende eines Stück blanken Kupferdrahts wird mittels einer kleinen Flachzange zu einem U-förmigen Haken abgebogen. Dabei wählt man die Lichte Weite des Hakens so, dass man mit zwei Seiten des Hakens die Pins des zu entlötenden Bauteils gleichzeitig erreichen kann. Das andere Ende des Kupferdrahts wickelt man mehrfach um die Spitze eines kalten(!) Lötkolbens. Das Ende mit dem Haken sollte dabei nicht mehr als vielleicht 2 cm über die Lötkolbenspitze hinausreichen und der Draht wird so gebogen (gekröpft), dass man den Lötkolben bequem führen kann um den Haken flach am Bauteil anzulegen. Um Missverständnisse zu vermeiden, der Haken soll am Bauteil angelegt und nicht etwa in irgendeiner Weise unter das Bauteil geschoben werden.&lt;br /&gt;
&lt;br /&gt;
Nun wird der Lötkolben und damit der Haken erhitzt. Ist die Hakenspitze heiß genug, legt man den Haken am Bauteil an. Sobald das Lötzinn an den Pins geschmolzen ist zieht man das Bauteil von den Pads. Bauteile haben dabei die Angewohnheit für immer auf dem Fußboden verloren zu gehen. Benötigt man das Teil noch, so sollte man etwas Vorsicht walten lassen.&lt;br /&gt;
&lt;br /&gt;
=== Die dicke Kupferdrahtmethode ===&lt;br /&gt;
&lt;br /&gt;
1,5 - 2,5 mm² Massivdraht so zurechtbiegen, dass er exakt und plan auf die Pins passt. Dann mit viel Zinn schnell verlöten. Das geht am besten mit zwei oder drei stärkeren Lötkolben und einer zweiten Person. Ich habe aber auch schon alleine mit 2 Kolben 160-Poler ausgelötet, ohne IC oder Platine zu beschädigen.&lt;br /&gt;
&lt;br /&gt;
IC am besten mit einer Pinzette oder einem Vakuumsauger (z.&amp;amp;nbsp;B. Kontaklinsensauger für harte KL aus Silikon) abheben und noch im heißen Zustand den dicken Draht samt Zinn abklopfen. Danach das IC möglichst schonend (gleichmäßig und schnell) abkühlen, evtl. schon vor dem Löten einen kleinen Kühlkörper auf das IC legen / kleben.&lt;br /&gt;
&lt;br /&gt;
Die Methode kombiniert sich gut mit der Bügeleisen- oder Ceranfeld-Vorwärm-Methode.&lt;br /&gt;
&lt;br /&gt;
=== Der Trick mit dem Platinensicherungshalter ===&lt;br /&gt;
&lt;br /&gt;
Speziell zum Auslöten von SO-ICs mit 2x4 Beinchen kann man den einzelnen Clip eines Platinensicherungshalters (Durchstecktechnik, für 5 x 20 mm Sicherungen) benutzen. Mit einer feinen Zange biegt man zunächst die sich nach außen öffnenden Enden des Clips etwas nach innen. Auf diese Weise entsteht eine Mini-Zange, die genauso breit ist wie die Beinreihe des IC und sich aufgrund ihrer Vorspannung am IC festhalten kann. Den modifizierten Clip klemmt man von oben über den IC und erhitzt seine Bodenplatte mit dem Lötkolben (16W). (Anstelle der oben beschrieben Zinn-Wurst-Methode bildet nun der Clip die Wärmebrücke, ähnlich der oben beschriebenen Rohrstückmethode) Der Clip wird mit einer Pinzette abgehoben und nimmt den IC mit.&lt;br /&gt;
&lt;br /&gt;
Die Platine und der IC bleiben ganz.&lt;br /&gt;
&lt;br /&gt;
=== Lötkolbeneinsätze ===&lt;br /&gt;
&lt;br /&gt;
Für einige SMD-Bauformen gibt es Lötkolbeneinsätze, mit denen man alle Anschlüsse eines Bauteils gleichzeitig erhitzen kann. Allerdings sind diese relativ teuer, man braucht für jede Bauform einen eigenen Einsatz und es gibt IC-Bauformen, bei denen die Anschlüsse so angeordnet sind, dass man dafür keinen Einsatz bauen kann.&lt;br /&gt;
&lt;br /&gt;
=== Zangenlötkolben ===&lt;br /&gt;
&lt;br /&gt;
Ein Zangenlötkolben (auch engl. &#039;&#039;Tweezer&#039;&#039;) genannt, ist ein Lötkolben, der zwei beheizte Spitzen besitzt, die ähnlich wie bei einer Pinzette verbunden sind, und der wie eine Pinzette bedient wird. Die Spitzen sind als flache, Einsätze gestaltet, die ggf. je nach Breite des auszulötenden Bauteils ausgetauscht werden können. Mit dem Zangenlötkolben kann man sehr einfach Anschlüsse von Bauteilen mit zwei gegenüberliegenden Anschlüssen (Widerstände, etc.) oder Anschlussreihen erhitzen und das Bauteil dann direkt mit dem Zangenlötkolben von der Platine nehmen. Es empfiehlt sich dabei, eine zusätzliche Pinzette zur Hand zu nehmen, um das Bauteil von der Platine zu heben, da teilweise maschinell bestückte SMD mit einem Klebepunkt auf der Platine fixiert werden.&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil beim Entlöten mit dem Zangenlötkolben ist, dass das entlötete Bauteil relativ lange erwärmt wird, da es mit der Zange abgehoben und dann weiter erwärmt wird, bis man es aus der Zange entfernt. Ein weiterer Nachteil ist, dass sich der Zangenlötkolben nur für zweireihige Bauteile eignet.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des Zangenlötkolbens ist die schnelle und einfache Funktion. Muss man mehrere Widerstände gleicher Bauform von einer Platine entfernen, kann dieses sogar ohne Absetzen in einem Durchgang geschehen. Die bereits entlöteten Widerstände behält man dabei einfach zwischen den Zangenbacken und schiebt sie mit dem nächsten Widerstand etwas nach hinten.&lt;br /&gt;
&lt;br /&gt;
=== Mit Draht ===&lt;br /&gt;
==== Kupferlackdraht ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere sehr elegante Möglichkeit um auch größere SMD-ICs zerstörungsfrei von einer Platine zu bekommen, ist die &amp;quot;Kupferlackdraht-Methode&amp;quot;. Man benötigt lediglich etwas Kupferlackdraht (0,2 - 0,3 mm) und natürlich einen Lötkolben. Die einzige Bedingung ist, dass man den Kupferlackdraht auch unter den Pins bzw. dem Bauteilgehäuse durchfädeln kann.&lt;br /&gt;
&lt;br /&gt;
===== Vorgehensweise =====&lt;br /&gt;
&lt;br /&gt;
# Kupferlackdraht unter den Pins durchfädeln&lt;br /&gt;
# Jeden einzelnen Pin kurz mit dem Lötkolben leicht berühren und gleichzeitig den Kupferlackdraht zwischen Platine und Pin durchziehen&lt;br /&gt;
# Eventuell den Kupferlackdraht erneut unter den Pins durchfädeln und die Pins, bei denen der Kupferlackdraht beim Durchziehen &amp;quot;hängen bleibt&amp;quot;, nochmals mit dem Lötkolben antippen&lt;br /&gt;
&lt;br /&gt;
Es gibt aber auch dünnen Stahldraht (D=0,2 mm) für diesen Zweck zu kaufen.&lt;br /&gt;
Das Optimum ist dünnes Bandblech aus Edelstahl, ca 4 - 5 mm breit, ebenfalls etwa 0,2mm dick. Die in akustomagnetischen Warensicherungsetiketten enthaltenen Blechstreifen eignen sich gut. Auch einen Skalpellhalter mit Einmalklingen kann man hierfür verwenden. Die Spitze des Skalpells wird hinter dem Pin angesetzt (in der Lücke zwischen Pin und Gehäuse), nach unten und vorn gedrückt und der Pin mit dem Lötkolben erwärmt. Sobald das Lötzinn geschmolzen ist, rutscht das Skalpell zum nächsten Pin weiter. Hinterher müssen lediglich die Pins wieder geradegebogen werden.&lt;br /&gt;
&lt;br /&gt;
==== Schaltdraht ====&lt;br /&gt;
&lt;br /&gt;
Eine interessante Methode zeigt Silicon Labs in ihrer Application Note AN114 [http://www.silabs.com/Support%20Documents/TechnicalDocs/an114.pdf Hand Soldering Tutorial for Fine Pitch QFP Devices]. Dabei wird, ähnlich wie bei der Kupferlackdrahtmethode, ein Schaltdraht unter den Pins durchgezogen, an einem benachbarten Bauteil &amp;quot;verankert&amp;quot; und dann ziemlich kräftig geheizt und gezogen. Je nach Vorgehensweise kann man damit sowohl Bauteil als auch Leiterplatte retten, das braucht aber entsprechend viel Gefühl und vermutlich Übung.&lt;br /&gt;
In der Appnote hat das nicht ganz geklappt, die Fotodokumentation zeigt einen zerstörten Chip und ein abgelöstes Pad.&lt;br /&gt;
&lt;br /&gt;
=== Mechanisch abtrennen ===&lt;br /&gt;
&lt;br /&gt;
==== Die Cuttermethode ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit, ein SMD IC von einer Platine zu entfernen, ist es die Beinchen vor dem Entlöten zu durchtrennen. Dazu nimmt man ein Cuttermesser mit Abbrechklingen oder ein Bastelmesser mit auswechselbarer Skalpellklinge (z.&amp;amp;nbsp;B. X-Acto Klinge #16, #17 oder #19), setzt es so nah wie möglich am Gehäuse auf ein paar der IC-Beinchen auf und drückt gerade &#039;&#039;&#039;ohne Seitwärtsbewegung&#039;&#039;&#039; nach unten. Dies durchtrennt die Beine ohne darunterliegende Leiterbahnen zu verletzen. Ein wenig Gefühl ist dabei natürlich nötig. Üben auf einem alten PC Mainboard lohnt sich. Nachdem auf diese Weise alle Beine vom IC abgetrennt sind, kann man die auf der Platine verbliebenen Reste der Beinchen einfach mit dem Lötkolben &amp;quot;abwischen&amp;quot; und die Lötzinreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer, allerdings besteht die latente Möglichkeit Leiterbahnen zu durchtrennen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Es hat sich dabei bewährt, vorher alle Pins mit einer relativ dicken Schicht Lötzinn zu verbinden. So werden abgerissene Leiterbahnen durch versehentliche Seitwärtsbewegungen verhindert. Es muss allerdings darauf geachtet werden, dass das Lötzinn nicht ganz bis ans Gehäuse reicht, da sonst das Schneiden nahezu unmöglich ist.&lt;br /&gt;
&lt;br /&gt;
==== Die Mini-Trennscheiben-Methode ====&lt;br /&gt;
&lt;br /&gt;
Man nehme eine sehr schnelle, kleine Handbohrmaschine (Proxxon, Dremel oder dergleichen), setze eine kleine Trennscheibe auf und flexe unter der Lupenbrille vorsichtig die Beinchen nahe dem Gehäuse ab. Das Gehäuse fällt irgendwann ab, die Beinchen werden mit einem Lötkolben weggewischt.&lt;br /&gt;
&lt;br /&gt;
==== Die Abschlagmethode ====&lt;br /&gt;
&lt;br /&gt;
Wenn man SMD ICs von einer Platine retten möchte, die Platine aber später in den Müll wandert, kann man das IC mit seinem Körper auch auf eine harte Kante legen (die Platine ist dabei mehr oder weniger senkrecht).  Dann ein beherzter Schlag mit dem Handballen auf die Platinenkante und der Chip wird von der Platine abgerissen.  Die Beinchen muss man nachher etwas richten, aber normalerweise funktioniert diese Methode sehr zuverlässig, besonders bei maschinell gelöteten Platinen.  Diese Methode funktioniert sowohl mit SO-Gehäusen als auch mit radiergummigroßen DC/DC Wandlern.&lt;br /&gt;
&lt;br /&gt;
==== Alternative: Die Stechbeitelmethode ====&lt;br /&gt;
&lt;br /&gt;
Hier gilt das gleiche Prinzip wie bei der Abschlagmethode: Zuerst knicken die Beinchen ein und reißen dann von den Leiterbahnen ab. Sie lassen sich aber leicht zurückbiegen und das IC wird garantiert nicht überhitzt. Der Beitel sollte ca. 8 - 15 mm breit sein, ein alter, angeschliffener Schraubendreher mit großem Griff tut&#039;s auch. Dann die Platine flach vor sich auf den Tisch legen, das IC liegt senkrecht zur Tischkante. Den Beitel senkrecht zur Platine mit der flachen Seite an das IC anlegen, die linke Ecke der Schneide liegt dabei auf der Stirnseite in Höhe der Mittellinie, die rechte Ecke der Schneide wird als Widerlager in die Platine gepresst. Den Beitel dafür etwas nach rechts kippen, mit Gewicht fest in die Platine drücken und mit Gefühl im Uhrzeigersinn drehen. So wird das IC in Längsrichtung und parallel zur Platine weggehebelt. Die benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 - 2 Sekunden pro IC.&lt;br /&gt;
&lt;br /&gt;
=== Heißluft ===&lt;br /&gt;
&lt;br /&gt;
Heißluft ist eigentlich das Mittel der Wahl für SMD-Entlöten. Heißluft erfordert etwas Übung, egal welche Methode man im Einzelfall anwendet. Das Arbeiten mit einer Speziell für die Elektronik gemachten Heißluftstation ist dabei am bequemsten, daher wird es zuerst genannt.&lt;br /&gt;
&lt;br /&gt;
==== Heißluftstation / Hot-Air Station / Rework-Station ====&lt;br /&gt;
&lt;br /&gt;
Heißluftgeräte waren früher relativ teuer. Einige Marken, meist chinesische Produkte, sind mittlerweile jedoch für den Hobbyisten erschwinglich (ab ca. 60 bis 70 Euro aufwärts, Stand 2009) und brauchbar, auch wenn es einen deutlichen Unterschied zwischen diesen Produkten und High-End-Geräten gibt. So sind die Handgriffe wesentlich unhandlicher und die Regelung ist ungenauer. Trotzdem kann man mit den einfachen Geräten vernünftig arbeiten. &lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte man zum Entlöten jeweils einen genau auf die Bauform des Bauteils passenden Heißluft-Einsatz verwenden. Nun gibt es allerdings sehr viele unterschiedliche Bauformen und je nach Station sind die Einsätze relativ teuer (ausgenommen vielleicht die für chinesische Produkte, die meist alle vergleichbare und bezahlbare 22 mm Einsätze haben). Daher ist es nicht unüblich, für viele Anwendungen einfach eine runde 5 mm Düse zu verwenden, wie sie normalerweise schon in der Grundausstattung einer Heißluftstation enthalten ist. &lt;br /&gt;
Die Pins eines Bauteils erhitzt man dann mit einer kreisförmige Bewegung aus ca. 2 cm Abstand. Dabei prüft man immer mal wieder mit einer Pinzette oder ähnlichem Werkzeug ob sich das Bauteil schon abheben lässt. Dabei sollte man das Werkzeug nicht ständig in den Luftstrom halten, da es dabei eventuell zu heiß werden kann.&lt;br /&gt;
&lt;br /&gt;
An einer Heißluftstation gibt es zwei wichtige Einstellungen:&lt;br /&gt;
* Temperatur&lt;br /&gt;
* Luftstrom&lt;br /&gt;
&lt;br /&gt;
Mit beiden Einstellungen muss man etwas üben. Zum Start kann man es mit ca. 400 Grad und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen bis was geht), gibt es relativ aufwendige Verfahren beim Arbeiten mit Heißluft, zum Beispiel muss bei bestimmten Trägermaterialien die Platine vorgeheizt werden. Ohne entsprechende Schulung ist es schwer sich solche Methoden selber anzueignen.&lt;br /&gt;
&lt;br /&gt;
==== Gaslötkolben mit Heißluftdüse ====&lt;br /&gt;
&lt;br /&gt;
Man kaufe für ca €60 einen Gaslötkolben mit Heißluftdüse. Wenn man den Gaslötkolben mit Heißluftdüse auf volle Leistung stellt, soll dieser angeblich bis 600 Grad Warmluft abgeben, was mehr als genug zum Entlöten ist. Damit SMD Bauteil durch kreisförmige Bewegung rundherum an den Pins mit 2 cm Abstand gezielt erhitzen. Das dauert ca. 2 Minuten. Das Bauteil lässt sich dann abnehmen, wegschieben oder abschlagen. Teilweise werden wenige eng am Bauteil bestückte Blockkondensatoren ebenfalls ausgelötet.&lt;br /&gt;
&lt;br /&gt;
Es lassen sich SMD&#039;s jeder Größe und Pinabstand ohne Beschädigung auslöten. Die ausgelöteten Bauteile lassen sich problemlos wieder verwenden. Die Platine mit Lötsauglitze und Aceton säubern und neues Bauteil drauf. Habe so während der Entwicklung FPGAS und Treiber IC&#039;s auf einer Platine schon bis zu fünf mal getauscht.&lt;br /&gt;
&lt;br /&gt;
==== Heißluftpistole ====&lt;br /&gt;
&lt;br /&gt;
Eine Heißluftpistole, wie man sie im Baumarkt zum Abbrennen alter Farbe u.ä. kaufen kann, kann gute Dienste beim SMD-Löten leisten. Empfehlenswert sind solche mit Temperaturregler, aber selbst die einfachsten Varianten (die in der Regel nur zwei Stufen haben, mit denen man sowohl die Gebläsegeschwindigkeit als auch die Heizleistung umschaltet) sind für viele Zwecke brauchbarer, als man auf den ersten Blick annehmen würde.&lt;br /&gt;
&lt;br /&gt;
Einfach Platine einspannen und mit der Heißluftpistole langsam und gleichmäßig erwärmen. Dabei nicht zu heiß arbeiten, etwas mehr Zeit für die Arbeit schadet Platine und Bauteilen weniger, als mit zu großer Temperatur alles zu verbrennen.  Wenn man vorsichtig arbeitet und den Punkt gut herausfindet, an dem sich das fragliche Bauteil ablösen lässt, taugt die Methode sogar für Reparaturlötungen, d.h. sowohl Platine als auch Bauteil bleiben dabei ganz.  Damit ist die Methode auch durchaus geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversen SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos) sowie teilweise auch Standard-ICs (74xxx, LM358 u.ä.) zu gelangen.&lt;br /&gt;
&lt;br /&gt;
Vermutlich lassen sich Pertinax-Platinen danach nicht mehr verwenden, aber diese haben bei den schmalen Leiterzugbreiten von SMD ohnehin kaum eine Überlebenschance.  Besser gleich trotz des höheren Preises alles auf Epoxyd anfertigen -- gerade bei den hobbytypischen Einzelstücken ist andernfalls die verschwendete Arbeitszeit sehr viel ärgerlicher als der höhere Preis der Epoxyd-Platine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Die Platine mit einem Stück Alufolie so abdecken, dass nur das auszulötende Bauteil im Luftstrom ist (an der Stelle ein Loch in die Folie machen). &#039;&#039;Ehrlich gesagt, der Tipp hat noch nie richtig funktioniert. Entweder bläst man die Folie weg, oder die heiße Luft wird unter die Folie geblasen, wo sie sich dank der Folie besonders gut hält und die Bauteile drunter ausgelötet werden. Ein Stück Alufolie schützt die umliegenden Bauteile überhaupt nicht.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Falls das Überleben der Platine wirklich völlig egal ist, kann man auch die Rückseite der Platine mit der Heißluftpistole erhitzen, bis die Vorderseite so heiß ist, dass die SMD-Chips einfach abfallen. Zwei Vorteile ergeben sich aus diesem Verfahren für die Überlebenswahrscheinlichkeit der Bauteile:&lt;br /&gt;
&lt;br /&gt;
* Der Temperaturgradient ist so gerichtet, dass die Beine des Chips die höchste Temperatur haben und nicht der Chip selbst, wenn man von oben auf das Gehäuse bläst&lt;br /&gt;
* Die, wenn auch geringe, Wärmeleitung der Platine sorgt für eine gleichmäßigere Temperaturverteilung auf der Vorderseite.&lt;br /&gt;
&lt;br /&gt;
Von Nachteil allerdings ist, dass die Platine evtl. auf der Rückseite so heiß wird, dass sie anfängt, sich zu zersetzen. Das ist sicherlich nicht gesund und daher sollte man hier vorsichtig sein (langsam erhitzen, frische Luft).&lt;br /&gt;
&lt;br /&gt;
Alternativ geht es auch mit der Heißluftdüse eines Gaslötkolbens (z.&amp;amp;nbsp;B. von Ersa). Dabei geht man zügig mit dem heißen Luftstrom über die Pins des ICs und erwärmt sie, bis sich das IC gewaltfrei abheben lässt. Richtig gemacht überleben IC und Platine.&lt;br /&gt;
&lt;br /&gt;
=== Komplette Platine erhitzen ===&lt;br /&gt;
&lt;br /&gt;
Wenn man alle Bauteile von einer Platine auf einmal ablösen möchet bietet es sich an, die gesamte Platine mit den Bauteile so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einen Schlag von der Platine abgeschlagen werden.&lt;br /&gt;
&lt;br /&gt;
==== Reflow-Ofen ====&lt;br /&gt;
&lt;br /&gt;
Was zum Löten taugt, taugt auch zum Entlöten. Die Platine mit den Bauteilen wird im Reflow-Ofen erhitzt.&lt;br /&gt;
&lt;br /&gt;
==== Backofen ====&lt;br /&gt;
&lt;br /&gt;
Wie in Reflow-Ofen. Man sollte sich allerdings gut überlegen, ob man das in einem Ofen macht, der noch für Nahrungsmittel verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==== Gasherdmethode ====&lt;br /&gt;
&lt;br /&gt;
Auf einer einseitig bestückten SMD-Platine kann man Bauteil und Platine  zerstörungsfrei wie folgt trennen: Von der großen Gasflamme die Abdeckung herunternehmen, diese Abdeckung z.&amp;amp;nbsp;B. mit Hilfe des Halters für kleine Töpfe über die kleine Gasflamme legen (natürlich geht das auch mit einem anderem Stück Metall, Hauptsache gerade) und dann mit der kleinen Gasflamme die Metallplatte/Abdeckung darüber erwärmen. Mit einem Stück Lötzinn probieren, ob es schon heiß genug ist (Lötzinn muss schmelzen, perlen und abtropfen).&lt;br /&gt;
&lt;br /&gt;
Wenn ja: Flamme ausmachen, Platine mit der nicht bestückten Seite auf das heiße Metall drücken, ein paar Sekunden warten, bis die Wärme von unten durch die Platine gewandert ist, und das Bauteil mit einer Pinzette abnehmen. Getestet mit Epoxyd-Platine. Sie hat überlebt, nur etwas dunkel verfärbt. Es empfiehlt sich, mit einer unkritischen Platine etwas zu üben.&lt;br /&gt;
&lt;br /&gt;
==== Bügeleisenmethode ====&lt;br /&gt;
&lt;br /&gt;
Ein Bügeleisen umgekehrt in einen Schraubstock spannen, eventuell mit einem&lt;br /&gt;
Tuch am Griff vor Kratzern schützen und die Gleitfläche mit Alufolie abdecken - um Ärger mit der besseren Hälfte zu vermeiden ;-) Auf maximale Temperatur stellen (Leinen), Platine mit der nicht bestückten Seite auflegen und warten, bis das Lot flüssig wird. Bauteile mit einer Pinzette abheben. Platine nach und nach verschieben um alle Stellen zu erhitzen.&lt;br /&gt;
&lt;br /&gt;
==== Benzinfeuerzeugmethode ====&lt;br /&gt;
&lt;br /&gt;
Benzinfeuerzeuge wie das &amp;quot;Zippo&amp;quot; eignen sich auch sehr gut um IC&#039;s von Platinen zu entfernen, im Normalfall bleiben Bauteile sowie Platine ganz. Das Feuerzeug wird angemacht und die Platine wird darüber gehalten (Vorsicht: heiß, am besten zum halten eine Zange verwenden) nun löst sich nach ein paar Sekunden das Lötzinn an den Pins und der IC kann mit einem Zahnstocher oder ähnlichem von der Platine geschoben werden, mal sollte mit der Flamme nicht an den Rand der Platine kommen, sonst fängt sie an anzuschmoren, die Platine wird in vielen Fällen unten schwarz, dies kommt vom Kohlenstoff welcher durch die Verbrennung des Benzines sich am PCB absetzt, es lässt sich mit vielen Lösungsmitteln entfernen. Die Methode ist aber nur für einseitige Platinen zu gebrauchen, da die Flamme Bauteile auf der unten liegenden Seite zerstören kann.&lt;br /&gt;
&lt;br /&gt;
==== Ceran-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen!&lt;br /&gt;
&lt;br /&gt;
Ähnelt der Bügeleisen-Methode, ist wegen der IR-Strahlung besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Ceranfeld legen. Dann das Feld ca. alle 1 - 2 Sekunden ein- und ausschalten. Dabei das An-Intervall langsam erhöhen. Dies so lange durchführen, bis das Zinn geschmolzen ist. Nun die gewünschten Bauelemente verschieben oder abheben. Darauf achten, dass das Glas frei von Zinn und anderen Stoffen bleibt.&lt;br /&gt;
&lt;br /&gt;
Achtung: Das Glas wird ungleichmäßig heiß, da die Heizwendeln lokal angeordnet sind.&lt;br /&gt;
&lt;br /&gt;
Wichtig: die Platine ist über ihrer Glastemperatur, also biegsam. Die Platine einfach auf dem Ceran Herd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 - 150°C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft).&lt;br /&gt;
&lt;br /&gt;
Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
=== Recycelte Chips wiederaufbereiten ===&lt;br /&gt;
&lt;br /&gt;
* Zuerst müssen die Lötzinnreste entfernt werden. &lt;br /&gt;
In Alkohol gelöstes Kolophonium wirkt da Wunder. Einfach den Chip in dieses Flussmittel tauchen, welches man vorher z.&amp;amp;nbsp;B. auf einen kleinen Unterteller oder -tasse in kleinen Mengen vergossen hat. &lt;br /&gt;
* Dann mit sauberer Lötspitze an den Pins entlangziehen und das überflüssige Lötzinn an einem Schwamm oder Zellstoff (-Taschentuch) abstreifen. &lt;br /&gt;
* Verklebte Pins mittels dünner Lötspitze auseinanderbringen, auch ein Zahnstocher aus Holz leistet wertvolle Dienste.&lt;br /&gt;
* Bei Pins, die enger als 0,6 mm sind, hilft zusätzlich Entlötsauglitze. Anstelle von Entlötsauglitze kann auch ein dünnes, abisoliertes Litzenkabel (möglichst feindrahtig) dienen.&lt;br /&gt;
:Man sollte aber immer daran denken, dass die Gefahr des Ausfalls durch Überhitzung besteht. &lt;br /&gt;
&lt;br /&gt;
Eine zweite Möglichkeit besteht darin das Lötzin &amp;quot;abzudremeln&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Dazu eine kleine rotierende Messingbürste in den Dremel (Multifunktions-Schleifer) und an den Pins von innen nach außen entlangziehen.&lt;br /&gt;
&lt;br /&gt;
* Stahlbürsten sind mit Vorsicht zu genießen, weil sie einfach zu hart sind. &lt;br /&gt;
* Kunststoffbürsten hingegen können sich elektrostatisch aufladen!&lt;br /&gt;
* Eine &amp;quot;dritte Hand&amp;quot; oder Einspannvorrichtung erleichtert das Recyceln erheblich.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Dritte ist Graphit: Lötzinn und Bleistift sind von Natur aus Feinde. Warmmachen, und Zinn mit Bleistift &amp;quot;wegdrängeln&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Das Ausrichten und Geradebiegen der Pins überlasse ich den eigenen Fähigkeiten.&lt;br /&gt;
&lt;br /&gt;
== Schlusswort ==&lt;br /&gt;
&lt;br /&gt;
Man sollte nicht glauben, dass man jetzt sofort jegliches SMD einlöten kann, mal abgesehen von Widerständen. Alles benötigt eine gewisse Übung und es empfiehlt sich, erst mit den einfacheren SO-Packages anzufangen und einige TSSOPS einzulöten bevor man sich an TQFP oder ähnliches heranwagt. Außerdem sollte man sich für die ersten Versuche nicht unbedingt einen 10 Euro teuren Chip hernehmen. Wenn man aber nicht 2 linke Hände hat, sollten alle Packages beim zweiten oder dritten Lötversuch einigermaßen sauber eingelötet sein. Und besonders bei den TSSOPs und TQFPs sieht es dann fast wie Industriefertigung aus.&lt;br /&gt;
&lt;br /&gt;
==== Kontrollieren von Lötstellen ====&lt;br /&gt;
&lt;br /&gt;
Zur Kontrolle der gelöteten Bauteile sollte man, wie schon erwähnt, eine gute Lupe - besser noch Lupenleuchte - benutzen oder auch schon preiswert über diverse Internetauktionen zu ersteigernde &amp;quot;USB Mikroskope&amp;quot;, die an einen PC oder Laptop angeschlossen werden können.&lt;br /&gt;
&lt;br /&gt;
Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden.&lt;br /&gt;
&lt;br /&gt;
Unabdingbar ist immer eine gute Ausleuchtung des Arbeitsplatzes.&lt;br /&gt;
&lt;br /&gt;
Auslöten kann man gut an defekten Platinen, z.&amp;amp;nbsp;B. aus Computern, üben.&lt;br /&gt;
&lt;br /&gt;
Und ja keine Lötpaste essen!!!!&lt;br /&gt;
Dann wird alles gut :D&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[SMD]]&lt;br /&gt;
* [[IC-Gehäuseformen#Adapterplatinen für SMD-ICs|Adapterplatinen für SMD-ICs]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* How-to Videos &lt;br /&gt;
** [http://www.youtube.com/watch?v=wQXhny3R7lk Professionelles SMD Löten leicht gemacht, engl. Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=3NN7UGWYmBY SMD Soldering without expensive tools, engl. Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=8whMwCBf8wA SMD Löten 0805+0603, deutsches Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=eApVG5GjLbU&amp;amp;NR=1 SMD Löten von SOIC, Pin für Pin, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=NALwJ6OnwNw SMD Löten von QFP, Pin Für Pin, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=YzI31gfCjJE SMD Löten von TSOP mit der Ziehmethode, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=YSdihwWegIg Löten von SOIC mit Lötpaste und Heißluft, YouTube-Video]&lt;br /&gt;
** [http://www.makezine.com/blog/archive/2007/01/soldering_tutor_1.html MAKE-Magazine Podcast Löt- und Entlöttips]&lt;br /&gt;
&lt;br /&gt;
* Anleitungen&lt;br /&gt;
** [http://www.seattlerobotics.org/encoder/200006/oven_art.htm SMD-Löten im Toastofen (englisch)] &lt;br /&gt;
** [http://www.elv-downloads.de/downloads/journal/SMD-Anleitung.pdf SMD-Anleitung von ELV praktische Tips] &lt;br /&gt;
** [http://www.bimbel.de/artikel/artikel-17.html Bilder und kleine Anleitung]&lt;br /&gt;
** [http://www.ulrichradig.de/ SMD-ICs ein-/auslöten (unter Tipps&amp;amp;Tricks)]&lt;br /&gt;
** [http://www.gadgetpool.de/nuke/modules.php?name=News&amp;amp;file=article&amp;amp;sid=23 SMD-Löten für jedermann]&lt;br /&gt;
** [http://www.circuitrework.com/guides/guides.shtml Circuit Technology Center - Surgeon grade rework and repair, by the book and guaranteed.]&lt;br /&gt;
** [http://iwenzo.de/wiki/SMD_Bauteile_l%C3%B6ten SMD Bauteile löten]&lt;br /&gt;
** [http://frickelpower.bplaced.net/index.php?page=smdesolder SMD entlöten mit selbstgebastelter Heißluftpistole]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://www.qrpbuilder.com/downloads/smd%20device%20041510.pdf Homemade SMD Component Placement Device] (PDF)&lt;br /&gt;
** [http://thomaspfeifer.net/ SMD löten/entlöten und Reflow Ofen Selbstbau (unter Trickkiste und AVR Projekte)]&lt;br /&gt;
**[http://www.sef.de Reflowlötanlagen]&lt;br /&gt;
**[http://www.martin-smt.de SMD Bearbeitungsgeräte - Reworksysteme]&lt;br /&gt;
**[http://www.fritsch-smt.de Bestückungsautomaten / Siebdruckgeräte]&lt;/div&gt;</summary>
		<author><name>89.204.153.244</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_ADC&amp;diff=60017</id>
		<title>AVR-Tutorial: ADC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_ADC&amp;diff=60017"/>
		<updated>2011-08-30T23:04:28Z</updated>

		<summary type="html">&lt;p&gt;89.204.153.244: /* Umrechnung des ADC Wertes in eine Spannung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was macht der ADC? ==&lt;br /&gt;
&lt;br /&gt;
Wenn es darum geht Spannungen zu messen, wird der Analog-/Digital-Wandler (kurz: A/D-Wandler) oder englisch [[ADC | &#039;&#039;&#039;A&#039;&#039;&#039;nalog &#039;&#039;&#039;D&#039;&#039;&#039;igital &#039;&#039;&#039;C&#039;&#039;&#039;onverter]] (ADC) benutzt. Er konvertiert eine elektrische Spannung in eine Digitalzahl. Prinzipiell wird dabei die Messspannung mit einer Referenzspannung verglichen. Die Zahl drückt dann einfach nur das Verhältnis der Messspannung zu dieser Referenzspannung aus.  Diese kann dann in gewohnter Weise von einem [[Mikrocontroller]] weiterverarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Elektronische Grundlagen ==&lt;br /&gt;
&lt;br /&gt;
Die ADC-Versorgungsspannung (AVCC) darf maximal um +/-0,3V von der Versorgung des Digitalteils (VCC) abweichen, jedoch nicht 5,5V überschreiten. Die externe Referenzspannung VREF darf nicht kleiner als die im Datenblatt unter ADC Characteristics als VREFmin angegebene Spannung (z.&amp;amp;nbsp;B. ATmega8: 2V, ATmega644P: 1V) und nicht größer als AVCC sein. Die Spannungen an den Wandlereingängen müssen im Intervall GND &amp;amp;le; VIN &amp;amp;le; VREF liegen.&lt;br /&gt;
&lt;br /&gt;
Im Extremfall bedeutet dies: Sei VCC = 5,5V, folgt AVCC_max = VREF_max = VIN_max = 5,5V.&lt;br /&gt;
&lt;br /&gt;
Der Eingangswiderstand des ADC liegt in der Größenordnung von einigen Megaohm, so dass der ADC die Signalquelle praktisch nicht belastet. Desweiteren enthält der Mikrocontroller eine sog. &#039;&#039;&#039;Sample&amp;amp;Hold&#039;&#039;&#039; Schaltung. Dies ist wichtig, wenn sich während des Wandlungsvorgangs die Eingangsspannung verändert, da die AD-Wandlung eine bestimmte Zeit dauert. Die Sample&amp;amp;Hold-Stufe speichert zum Beginn der Wandlung die anliegende Spannung und hält sie während des Wandlungsvorgangs konstant.&lt;br /&gt;
&lt;br /&gt;
=== Beschaltung des ADC-Eingangs ===&lt;br /&gt;
&lt;br /&gt;
Um den ADC im Folgenden zu testen wird eine einfache Schaltung an den PC0-Pin des ATmega8 angeschlossen. Dies ist der ADC-Kanal 0. Bei anderen AVR-Typen liegt der entsprechende Eingang auf einem andern Pin, hier ist ein Blick ins Datenblatt angesagt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Tut_ADC_01.gif|framed|center|Testschaltung]]&lt;br /&gt;
&lt;br /&gt;
Der Wert des [[Potentiometer]]s ist Dank des hohen Eingangswiderstandes des ADC ziemlich unkritisch. Es kann jedes Potentiometer von 1k&amp;amp;Omega; bis 1M&amp;amp;Omega; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn andere Messgrößen gemessen werden sollen, so bedient man sich oft und gern des Prinzips des [[Spannungsteiler]]s. Der [http://www.mikrocontroller.net/articles/Kategorie:Sensorik Sensor] ist ein veränderlicher Widerstand. Zusammen mit einem zweiten, konstanten Widerstand bekannter Größe wird ein Spannungsteiler aufgebaut. Aus der Variation der durch den variablen Spannungsteiler entstehenden Spannung kann auf den Messwert zurückgerechnet werden.&lt;br /&gt;
&lt;br /&gt;
      Vcc ----------+                Vcc ---------+&lt;br /&gt;
                    |                             |&lt;br /&gt;
                   ---                         Sensor,&lt;br /&gt;
                   | |                     der seinen Widerstand&lt;br /&gt;
                   | |                     in Abhängigkeit der&lt;br /&gt;
                   ---                     Messgröße ändert&lt;br /&gt;
                    |                             |&lt;br /&gt;
                    +------- PC0                  +-------- PC0&lt;br /&gt;
                    |                             |&lt;br /&gt;
                Sensor,                          ---&lt;br /&gt;
           der seinen Widerstand                 | |&lt;br /&gt;
           in Abhängigkeit der                   | |&lt;br /&gt;
           Messgröße ändert                      ---&lt;br /&gt;
                    |                             |&lt;br /&gt;
       GND ---------+                 GND --------+&lt;br /&gt;
&lt;br /&gt;
Die Größe des zweiten Widerstandes im Spannungsteiler richtet sich nach dem Wertebereich, in welchem der Sensor seinen Wert ändert. Als Daumenregel kann man sagen, dass der Widerstand so gross sein sollte wie der Widerstand des Sensors in der Mitte des Messbereichs.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Wenn ein [[Temperatursensor]] seinen Widerstand von 0..100 Grad von 2k&amp;amp;Omega; auf 5k&amp;amp;Omega; ändert, sollte der zweite Widerstand eine Grösse von etwa (2+5)/2 = 3,5k&amp;amp;Omega; haben.&lt;br /&gt;
&lt;br /&gt;
===Referenzspannung AREF===&lt;br /&gt;
[[bild:adc_connection.png|thumb|right|300px|Beschaltung von A&amp;lt;sub&amp;gt;REF&amp;lt;/sub&amp;gt;]]&lt;br /&gt;
Der ADC benötigt für seine Arbeit eine Referenzspannung. Dabei gibt es 2 Möglichkeiten:&lt;br /&gt;
* interne Referenzspannung&lt;br /&gt;
* externe Referenzspannung&lt;br /&gt;
&lt;br /&gt;
Bei der Umstellung der Referenzspannung sind Wartezeiten zu beachten, bis die ADC-Hardware einsatzfähig ist (Datenblatt und  [http://www.mikrocontroller.net/topic/165513]).&lt;br /&gt;
&lt;br /&gt;
==== Interne Referenzspannung ====&lt;br /&gt;
&lt;br /&gt;
Mittels Konfigurationsregister können beim ATmega8 verschiedene Referenzspannungen eingestellt werden. Dies umfasst die Versorgungsspannung AVcc sowie eine vom AVR bereitgestellte Spannung von 2,56V (bzw. bei den neueren AVRs 1,1V, wie z.&amp;amp;nbsp;B. beim ATtiny13, ATmega48, 88, 168, ...). In beiden Fällen wird an den AREF-Pin des Prozessors ein Kondensator von 100nF als Minimalbeschaltung nach Masse angeschlossen, um die Spannung zu puffern/glätten. Es ist jedoch zu beachten, dass die interne Referenzspannung ca. +/-10% vom Nominalwert abweichen kann, vgl. dazu das Datenblatt Abschnitt ADC Characteristics VINT (z.&amp;amp;nbsp;B. ATmega8: 2,3-2,9V, ATmega324P: 2,33-2,79V bzw. 1,0-1,2V &amp;quot;Values are guidelines only.&amp;quot;) Die 10uH Spule L1 kann man meist auch durch einen 47 Ohm Widerstand ersetzen.&lt;br /&gt;
&lt;br /&gt;
==== Externe Referenzspannung ====&lt;br /&gt;
&lt;br /&gt;
Wird eine externe Referenz verwendet, so wird diese an AREF angeschlossen. Aber aufgepasst! Wenn eine Referenz in Höhe der Versorgungsspannung benutzt werden soll, so ist es besser dies über die interne Referenz zu tun. Ausser bei anderen Spannungen als 5V bzw. 2,56V gibt es eigentlich keinen Grund an AREF eine Spannungsquelle anzuschliessen. In Standardanwendungen fährt man immer besser wenn die interne Referenzspannung mit einem Kondensator an AREF benutzt wird.&lt;br /&gt;
&lt;br /&gt;
== Ein paar ADC-Grundlagen ==&lt;br /&gt;
&lt;br /&gt;
Der ADC ist ein 10-Bit ADC, d.h. er liefert Messwerte im Bereich 0 bis 1023. Liegt am Eingangskanal 0V an, so liefert der ADC einen Wert von 0. Hat die Spannung am Eingangskanal die Referenzspannung erreicht (stimmt nicht ganz), so liefert der ADC einen Wert von 1023. Unterschreitet oder überschreitet die zu messende Spannung diese Grenzen, so liefert der ADC 0 bzw. 1023. Wird die Auflösung von 10 Bit nicht benötigt, so ist es möglich die Ausgabe durch ein Konfigurationsregister so einzuschränken, dass ein leichter Zugriff auf die 8 höchstwertigen Bits möglich ist.&lt;br /&gt;
&lt;br /&gt;
Wie bei vielen analogen Schaltungen, unterliegt auch der ADC einem Rauschen. Das bedeutet, dass man nicht davon ausgehen sollte, dass der ADC bei konstanter Eingangsspannung auch immer denselben konstanten Wert ausgibt. Ein &amp;quot;Zittern&amp;quot; der niederwertigsten 2 Bits ist durchaus nicht ungewöhnlich. Besonders hervorgehoben werden soll an dieser Stelle nochmals die Qualität der Referenzspannung. Diese Qualität geht in erheblichem Maße in die Qualität der Wandelergebnisse ein. Die Beschaltung von AREF mit einem Kondensator ist die absolut notwendige Mindestbeschaltung, um eine einigermaßen akzeptable Referenzspannung zu erhalten. Reicht dies nicht aus, so kann die Qualität einer Messung durch &amp;lt;i&amp;gt;Oversampling&amp;lt;/i&amp;gt; erhöht werden. Dazu werden mehrere Messungen gemacht und deren Mittelwert gebildet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Tut_ADC_03.gif|right|framed]]&lt;br /&gt;
Oft interessiert auch der absolute Spannungspegel nicht. Im Beschaltungsbeispiel oben ist man normalerweise nicht direkt an der am Poti entstehenden Spannung interessiert. Viel mehr ist diese Spannung nur ein notwendiges Übel, um die Stellung des Potis zu bestimmen. In solchen Fällen kann die Poti-Beschaltung wie folgt abgewandelt werden:&lt;br /&gt;
&lt;br /&gt;
Hier wird AREF (bei interner Referenz) als vom µC gelieferte Spannung benutzt und vom Spannungsteiler bearbeitet wieder an den µC zur Messung zurückgegeben. Dies hat den Vorteil, dass der Spannungsteiler automatisch Spannungen bis zur Höhe der Referenzspannung ausgibt, ohne dass eine externe Spannung mit AREF abgeglichen werden müsste. Selbst Schwankungen in AREF wirken sich hier nicht mehr aus, da ja das Verhältnis der Spannungsteilerspannung zu AREF immer konstant bleibt (ratiometrische Messung). Und im Grunde bestimmt der ADC ja nur dieses Verhältnis. Wird diese Variante gewählt, so muss berücksichtigt werden, dass die Ausgangsspannung an AREF nicht allzusehr belastet wird. Der Spannungsteiler muss einen Gesamtwiderstand von deutlich über 10k&amp;amp;Omega; besitzen. Werte von 100k&amp;amp;Omega; oder höher sind anzustreben. Verwendet man anstatt AREF AVCC und schaltet auch die Referenzspannung auf AVCC um, ist die Belastung durch den Poti unkritisch, weil hier die Stromversorgung direkt zur Speisung verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist hingegen die absolute Spannung von Interesse, so muss man darauf achten, dass ein ADC in [[Digital | digitalen]] Bereichen arbeitet ([[Quantisierung]]). An einem einfacheren Beispiel soll demonstriert werden was damit gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Angenommen der ADC würde nur 5 Stufen auflösen können und AREF sei 5V:&lt;br /&gt;
&lt;br /&gt;
      Volt    Wert vom ADC&lt;br /&gt;
&lt;br /&gt;
       0 -+&lt;br /&gt;
          |         0&lt;br /&gt;
       1 -+&lt;br /&gt;
          |         1&lt;br /&gt;
       2 -+&lt;br /&gt;
          |         2&lt;br /&gt;
       3 -+&lt;br /&gt;
          |         3&lt;br /&gt;
       4 -+&lt;br /&gt;
          |         4&lt;br /&gt;
       5 -+&lt;br /&gt;
&lt;br /&gt;
Ein ADC Wert von 0 bedeutet also keineswegs, dass die zu messende Spannung exakt den Wert 0 hat. Es bedeutet lediglich, dass die Messspannung irgendwo im Bereich von 0V bis 1V liegt. Sinngemäß bedeutet daher auch das Auftreten des Maximalwertes nicht, dass die Spannung exakt AREF beträgt, sondern lediglich, dass die Messspannung sich irgendwo im Bereich der letzten Stufe (also von 4V bis 5V) bewegt.&lt;br /&gt;
&lt;br /&gt;
== Umrechnung des ADC Wertes in eine Spannung ==&lt;br /&gt;
&lt;br /&gt;
Die Größe eines &amp;quot;Bereiches&amp;quot; bestimmt sich also zu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Bereichsbreite = \frac {Referenzspannung}{Maximalwert}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Messwert vom ADC rechnet sich dann wie folgt in eine Spannung um:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  Spannung = ADCwert \cdot \frac {Referenzspannung} {Maximalwert}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird der ADC also mit 10 Bit an 5 V betrieben, so lauten die Umrechnungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Bereichsbreite = \frac{5~\text{V}}{1023} = 0,004883~\text{V} = 4,883~\text{mV}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Spannung = ADCwert \cdot 4,883~\text{mV}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man genau hinsieht stellt man fest, dass sowohl die Referenzspannung als auch der Maximalwert Konstanten sind. D.h. der Quotient aus Referenzspannung und Maximalwert ist konstant. Somit muss nicht immer eine Addition und Division ausgeführt werden, sondern nur eine Multiplikation! Das spart viel Aufwand und Rechenzeit! Dabei kann sinnvollerweise [[Festkommaarithmetik]] zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
== Kalibrierung ==&lt;br /&gt;
Hat man eine externe, genaue Referenzspannung zu Hand, dann kann ein Korrekturfaktor berechnet werden, mit dem die Werte des ADCs im Nachinein korrigiert werden können. Dies geschieht normalerweise über eine sogenannte gain offset Korrektur an einer Geraden oder einer Parabel. In erster Näherung kann man auch die interne Referenzspannung um das Inverse des ermittelten Korrekturwerts verstellen, um eine bereits genauere digitalisierte Werte zu bekommen.&lt;br /&gt;
&lt;br /&gt;
== Die Steuerregister des ADC ==&lt;br /&gt;
&lt;br /&gt;
=== ADMUX ===&lt;br /&gt;
&lt;br /&gt;
{{Byte|ADMUX| REFS1 | REFS0 | ADLAR |       |  MUX3 |  MUX2 |  MUX1 |  MUX0}}&lt;br /&gt;
&lt;br /&gt;
* Referenzspannung &amp;lt;i&amp;gt;REFS1, REFS0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!REFS1||REFS0||Referenz&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||externe Referenz&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|interne Referenz: Avcc&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||wird beim Mega8 nicht benutzt&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||interne Referenz: 2.56 Volt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Ausrichtung &amp;lt;i&amp;gt;ADLAR&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;left&amp;quot;&amp;gt;ADLAR&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Das Ergebnis wird in den Registern ADCH/ADCL rechtsbündig ausgerichtet. Die 8 niederwertigsten Bits des Ergebnisses werden in ADCL abgelegt. Die verbleibenden 2 Bits des Ergebnisses werden im Register ADCH in den Bits 0 und 1 abgelegt.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Das Ergebnis wird in den Registern ADCH/ADCL linksbündig ausgerichtet. Die 8 höchstwertigen Bits des Ergebnisses werden in ADCH abgelegt. Die verbleibenden 2 niederwertigen Bits werden im Register ADCL in den Bits 6 und 7 abgelegt.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Kanalwahl &amp;lt;i&amp;gt;MUX3, MUX2, MUX1, MUX0&amp;lt;/i&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!MUX3||MUX2||MUX1||MUX0||Kanal&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Kanal 0, Pin PC0&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Kanal 1, Pin PC1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Kanal 2, Pin PC2&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Kanal 3, Pin PC3&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Kanal 4, Pin PC4&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Kanal 5, Pin PC5&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Kanal 6 (*)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Kanal 7 (*)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||1.23V, Vbg&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||0V, GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(*) Bei Atmega8 nur in der Gehäusebauform TQFP und MLF verfügbar, nicht in PDIP&lt;br /&gt;
&lt;br /&gt;
===ADCSRA===&lt;br /&gt;
{{Byte|ADCSRA|  ADEN |  ADSC |  ADFR |  ADIF |  ADIE | ADPS2 | ADPS1 | ADPS0}}&lt;br /&gt;
&lt;br /&gt;
;ADEN: &amp;quot;ADC Enable&amp;quot;: Mittels ADEN wird der ADC ein und ausgeschaltet. Eine 1 an dieser Bitposition schaltet den ADC ein.&lt;br /&gt;
; ADSC: &amp;quot;ADC Start Conversion&amp;quot;: Wird eine 1 an diese Bitposition geschrieben, so beginnt der ADC mit der Wandlung. Das Bit bleibt auf 1, solange die Wandlung im Gange ist. Wenn die Wandlung beendet ist, wird dieses Bit von der ADC Hardware wieder auf 0 gesetzt.&lt;br /&gt;
; ADFR: &amp;quot;ADC Free Running&amp;quot;: Wird eine 1 an ADFR geschrieben, so wird der ADC im Free Running Modus betrieben. Dabei startet der ADC nach dem Abschluss einer Messung automatisch die nächste Messung. Die erste Messung wird ganz normal über das Setzen des ADSC-Bits gestartet.&lt;br /&gt;
; ADIF: &amp;quot;ADC Interrupt Flag&amp;quot;: Wenn eine Messung abgeschlossen ist, wird das ADIF Bit gesetzt. Ist zusätzlich noch das &amp;lt;i&amp;gt;ADIE&amp;lt;/i&amp;gt; Bit gesetzt, so wird ein Interrupt ausgelöst und der entsprechende Interrupt Handler angesprungen.&lt;br /&gt;
; ADIE: &amp;quot;ADC Interrupt Enable&amp;quot;: Wird eine 1 an ADIE geschrieben, so löst der ADC nach Beendigung einer Messung einen Interrupt aus.&lt;br /&gt;
; ADPS2, ADPS1, ADPS0: &amp;quot;ADC Prescaler&amp;quot;: Mit dem Prescaler kann die ADC-Frequenz gewählt werden. Laut Datenblatt sollte diese für die optimale Auflösung zwischen 50kHz und 200kHz liegen. Ist die Wandlerfrequenz langsamer eingestellt, kann es passieren dass die eingebaute Sample &amp;amp; Hold Schaltung die Eingangsspannung nicht lange genug konstant halten kann. Ist die Frequenz aber zu schnell eingestellt, dann kann es passieren dass sich die Sample &amp;amp; Hold Schaltung nicht schnell genug an die Eingangsspannung anpassen kann.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!ADPS2||ADPS1||ADPS0||Vorteiler&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|32&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|128&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Die Ergebnisregister ADCL und ADCH ==&lt;br /&gt;
&lt;br /&gt;
Da das Ergebnis des ADC ein 10 Bit Wert ist, passt dieser Wert naturgemäß nicht in ein einzelnes Register, das ja bekanntlich nur 8 Bit breit ist. Daher wird das Ergebnis in 2 Register &#039;&#039;&#039;ADCL&#039;&#039;&#039; und &#039;&#039;&#039;ADCH&#039;&#039;&#039; abgelegt. Von den 10 Ergebnisbits sind die niederwertigsten 8 im Register &#039;&#039;&#039;ADCL&#039;&#039;&#039; abgelegt und die noch fehlenden 2 Bits werden im Register &#039;&#039;&#039;ADCH&#039;&#039;&#039; an den niederwertigsten Bitpositionen gespeichert.&lt;br /&gt;
&lt;br /&gt;
              ADCH                                   ADCL&lt;br /&gt;
   +---+---+---+---+---+---+---+---+   +---+---+---+---+---+---+---+---+&lt;br /&gt;
   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
   +---+---+---+---+---+---+---+---+   +---+---+---+---+---+---+---+---+&lt;br /&gt;
                             9   8       7   6   5   4   3   2   1   0&lt;br /&gt;
&lt;br /&gt;
Diese Zuordnung kann aber auch geändert werden: Durch setzen des &#039;&#039;&#039;ADLAR&#039;&#039;&#039; Bits im &#039;&#039;&#039;ADMUX&#039;&#039;&#039; Register wird die Ausgabe geändert zu:&lt;br /&gt;
&lt;br /&gt;
              ADCH                                   ADCL&lt;br /&gt;
   +---+---+---+---+---+---+---+---+   +---+---+---+---+---+---+---+---+&lt;br /&gt;
   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
   +---+---+---+---+---+---+---+---+   +---+---+---+---+---+---+---+---+&lt;br /&gt;
     9   8   7   6   5   4   3   2       1   0&lt;br /&gt;
&lt;br /&gt;
Dies ist besonders dann interessant, wenn das ADC Ergebnis als 8 Bit Zahl weiterverarbeitet werden soll. In diesem Fall stehen die 8 höchstwertigen Bits bereits verarbeitungsfertig im Register &#039;&#039;&#039;ADCH&#039;&#039;&#039; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beim Auslesen der ADC-Register ist zu beachten:&lt;br /&gt;
Immer zuerst &#039;&#039;&#039;ADCL&#039;&#039;&#039; und erst dann &#039;&#039;&#039;ADCH&#039;&#039;&#039; auslesen. Beim Zugriff auf &#039;&#039;&#039;ADCL&#039;&#039;&#039; wird das &#039;&#039;&#039;ADCH&#039;&#039;&#039; Register gegenüber Veränderungen vom &#039;&#039;&#039;ADC&#039;&#039;&#039; gesperrt. Erst beim nächsten Auslesen des &#039;&#039;&#039;ADCH&#039;&#039;&#039;-Registers wird diese Sperre wieder aufgehoben. Dadurch ist sichergestellt, daß die Inhalte von &#039;&#039;&#039;ADCL&#039;&#039;&#039; und &#039;&#039;&#039;ADCH&#039;&#039;&#039; immer aus demselben Wandlungsergebnis stammen, selbst wenn der &#039;&#039;&#039;ADC&#039;&#039;&#039; im Hintergrund selbsttätig weiterwandelt. Das &#039;&#039;&#039;ADCH&#039;&#039;&#039; Register &#039;&#039;&#039;muss&#039;&#039;&#039; ausgelesen werden!&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Ausgabe als ADC-Wert ===&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm liest in einer Schleife ständig den ADC aus und verschickt das Ergebnis im Klartext (ASCII) über die [[AVR-Tutorial: UART|UART]]. Zur Verringerung des unvermeidlichen Rauschens werden 256 Messwerte herangezogen und deren Mittelwert als endgültiges Messergebnis gewertet. Dazu werden die einzelnen Messungen in den Registern temp2, temp3, temp4 als 24 Bit Zahl aufaddiert. Die Division durch 256 erfolgt dann ganz einfach dadurch, dass das Register temp2 verworfen wird und die Register temp3 und temp4 als 16 Bit Zahl aufgefasst werden. Eine Besonderheit ist noch, dass je nach dem Wert in temp2 die 16 Bit Zahl in temp3 und temp4 noch aufgerundet wird: Enthält temp2 einen Wert größer als 128, dann wird zur 16 Bit Zahl in temp3/temp4 noch 1 dazu addiert.&lt;br /&gt;
&lt;br /&gt;
In diesem Programm findet man oft die Konstruktion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
    subi    temp3, low(-1)      ; addieren von 1&lt;br /&gt;
    sbci    temp4, high(-1)     ; addieren des Carry&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um einen kleinen Trick. Um eine Konstante zu einem Register direkt addieren zu können bräuchte man einen Befehl ala addi (Add Immediate, Addiere Konstante), den der AVR aber nicht hat. Ebenso gibt es kein adci (Add with carry Immediate, Addiere Konstante mit Carry Flag). Man müsste also erst eine Konstante in ein Register laden und addieren. Das kostet aber Programmspeicher, Rechenzeit und man muss ein Register zusätzlich frei haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
; 16 Bit Addition mit Konstante, ohne Cleverness&lt;br /&gt;
    ldi     temp5, low(1)&lt;br /&gt;
    add     temp3, temp5        ; addieren von 1&lt;br /&gt;
    ldi     temp5, high(1)&lt;br /&gt;
    adc     temp3, temp5        ; addieren des Carry&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier greift man einfach zu dem Trick, dass eine Addition gleich der Subtraktion der negativen Werts ist. Also &amp;quot;addiere +1&amp;quot; ist gleich &amp;quot;subtrahiere -1&amp;quot;. Dafür hat der AVR zwei Befehle, subi (Substract Immediate, Subtrahiere Konstante) und sbci (Substract Immediate with carry, Subtrahiere Konstante mit Carry Flag).&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm ist für den &#039;&#039;&#039;ATmega8&#039;&#039;&#039; geschrieben. Für moderne Nachfolgetypen wie den ATmega88 muss der Code angepasst werden ([http://www.mikrocontroller.net/topic/204069#2011175], [http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf AVR094: Replacing ATmega8 by ATmega88 (PDF)]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.def temp1     = r16         ; allgemeines temp Register, zur kurzfristigen Verwendung&lt;br /&gt;
.def temp2     = r17         ; Register für 24 Bit Addition, Lowest Byte&lt;br /&gt;
.def temp3     = r18         ; Register für 24 Bit Addition, Middle Byte&lt;br /&gt;
.def temp4     = r19         ; Register für 24 Bit Addition, Highest Byte&lt;br /&gt;
.def adlow     = r20         ; Ergebnis vom ADC / Mittelwert der 256 Messungen&lt;br /&gt;
.def adhigh    = r21         ; Ergebnis vom ADC / Mittelwert der 256 Messungen&lt;br /&gt;
.def messungen = r22         ; Schleifenzähler für die Messungen&lt;br /&gt;
.def ztausend  = r23         ; Zehntausenderstelle des ADC Wertes&lt;br /&gt;
.def tausend   = r24         ; Tausenderstelle des ADC Wertes&lt;br /&gt;
.def hundert   = r25         ; Hunderterstelle des ADC Wertes&lt;br /&gt;
.def zehner    = r26         ; Zehnerstelle des ADC Wertes&lt;br /&gt;
.def zeichen   = r27         ; Zeichen zur Ausgabe auf den UART&lt;br /&gt;
&lt;br /&gt;
.equ F_CPU = 4000000                            ; Systemtakt in Hz&lt;br /&gt;
.equ BAUD  = 9600                               ; Baudrate&lt;br /&gt;
&lt;br /&gt;
; Berechnungen&lt;br /&gt;
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden&lt;br /&gt;
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate&lt;br /&gt;
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille&lt;br /&gt;
&lt;br /&gt;
.if ((BAUD_ERROR&amp;gt;10) || (BAUD_ERROR&amp;lt;-10))       ; max. +/-10 Promille Fehler&lt;br /&gt;
  .error &amp;quot;Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!&amp;quot;&lt;br /&gt;
.endif&lt;br /&gt;
 &lt;br /&gt;
; hier geht das Programm los&lt;br /&gt;
 &lt;br /&gt;
    ldi     temp1, LOW(RAMEND)                  ; Stackpointer initialisieren&lt;br /&gt;
    out     SPL, temp1&lt;br /&gt;
    ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
    out     SPH, temp1&lt;br /&gt;
 &lt;br /&gt;
;UART Initalisierung&lt;br /&gt;
 &lt;br /&gt;
    ldi     temp1, LOW(UBRR_VAL)                    ; Baudrate einstellen&lt;br /&gt;
    out     UBRRL, temp1&lt;br /&gt;
    ldi     temp1, HIGH(UBRR_VAL)&lt;br /&gt;
    out     UBRRH, temp1&lt;br /&gt;
&lt;br /&gt;
    sbi     UCSRB, TXEN                         ; TX einschalten&lt;br /&gt;
 &lt;br /&gt;
; ADC initialisieren: ADC0, Vcc als Referenz, Single Conversion, Vorteiler 128&lt;br /&gt;
&lt;br /&gt;
    ldi     temp1, (1&amp;lt;&amp;lt;REFS0)                   ; Kanal 0, interne Referenzspannung 5V&lt;br /&gt;
    out     ADMUX, temp1&lt;br /&gt;
    ldi     temp1, (1&amp;lt;&amp;lt;ADEN) | (1&amp;lt;&amp;lt;ADPS2) | (1&amp;lt;&amp;lt;ADPS1) | (1&amp;lt;&amp;lt;ADPS0)&lt;br /&gt;
    out     ADCSRA, temp1&lt;br /&gt;
 &lt;br /&gt;
Main:&lt;br /&gt;
    clr     temp1&lt;br /&gt;
    clr     temp2&lt;br /&gt;
    clr     temp3&lt;br /&gt;
    clr     temp4&lt;br /&gt;
&lt;br /&gt;
    ldi     messungen, 0        ; 256 Schleifendurchläufe&lt;br /&gt;
 &lt;br /&gt;
; neuen ADC-Wert lesen  (Schleife - 256 mal)&lt;br /&gt;
&lt;br /&gt;
sample_adc:&lt;br /&gt;
    sbi     ADCSRA, ADSC        ; den ADC starten&lt;br /&gt;
 &lt;br /&gt;
wait_adc:&lt;br /&gt;
    sbic    ADCSRA, ADSC        ; wenn der ADC fertig ist, wird dieses Bit gelöscht&lt;br /&gt;
    rjmp    wait_adc&lt;br /&gt;
 &lt;br /&gt;
; ADC einlesen:&lt;br /&gt;
&lt;br /&gt;
    in      adlow, ADCL         ; immer zuerst LOW Byte lesen&lt;br /&gt;
    in      adhigh, ADCH        ; danach das mittlerweile gesperrte High Byte&lt;br /&gt;
 &lt;br /&gt;
; alle 256 ADC-Werte addieren&lt;br /&gt;
; dazu wird mit den Registern temp4, temp3 und temp2 ein&lt;br /&gt;
; 24-Bit breites Akkumulationsregister gebildet, in dem&lt;br /&gt;
; die 10 Bit Werte aus adhigh, adlow aufsummiert werden&lt;br /&gt;
&lt;br /&gt;
    add     temp2, adlow        ; addieren&lt;br /&gt;
    adc     temp3, adhigh       ; addieren über Carry&lt;br /&gt;
    adc     temp4, temp1        ; addieren über Carry, temp1 enthält 0&lt;br /&gt;
    dec     messungen           ; Schleifenzähler MINUS 1&lt;br /&gt;
    brne    sample_adc          ; wenn noch keine 256 ADC Werte -&amp;gt; nächsten Wert einlesen&lt;br /&gt;
 &lt;br /&gt;
; Aus den 256 Werten den Mittelwert berechnen&lt;br /&gt;
; Mathematisch eine Division durch 256&lt;br /&gt;
; Da aber 2^8 = 256 ist ist da einfach durch das weglassen des niederwertigsten Bytes&lt;br /&gt;
; erreicht werden&lt;br /&gt;
;&lt;br /&gt;
; allerdings wird der Wert noch gerundet&lt;br /&gt;
&lt;br /&gt;
    cpi     temp2,128           ; &amp;quot;Kommastelle&amp;quot; kleiner als 128 ?&lt;br /&gt;
    brlo    no_round            ; ist kleiner ==&amp;gt; Sprung&lt;br /&gt;
 &lt;br /&gt;
; Aufrunden&lt;br /&gt;
    subi    temp3, low(-1)      ; addieren von 1&lt;br /&gt;
    sbci    temp4, high(-1)     ; addieren des Carry&lt;br /&gt;
 &lt;br /&gt;
no_round:&lt;br /&gt;
&lt;br /&gt;
;   Ergebnis nach adlow und adhigh kopieren&lt;br /&gt;
;   damit die temp Register frei werden&lt;br /&gt;
&lt;br /&gt;
    mov     adlow, temp3&lt;br /&gt;
    mov     adhigh, temp4&lt;br /&gt;
 &lt;br /&gt;
;in ASCII umwandeln&lt;br /&gt;
; Division durch mehrfache Subtraktion&lt;br /&gt;
&lt;br /&gt;
    ldi     ztausend, &#039;0&#039;-1     ; Ziffernzähler direkt als ASCII Code&lt;br /&gt;
    ; bzgl. &#039;0&#039;-1 siehe http://www.mikrocontroller.net/topic/198681&lt;br /&gt;
Z_ztausend:&lt;br /&gt;
    inc     ztausend&lt;br /&gt;
    subi    adlow, low(10000)   ; -10,000&lt;br /&gt;
    sbci    adhigh, high(10000) ; 16 Bit&lt;br /&gt;
    brcc    Z_ztausend&lt;br /&gt;
                                    &lt;br /&gt;
    subi    adlow, low(-10000)  ; nach Unterlauf wieder einmal addieren&lt;br /&gt;
    sbci    adhigh, high(-10000); +10,000&lt;br /&gt;
 &lt;br /&gt;
    ldi     tausend, &#039;0&#039;-1      ; Ziffernzähler direkt als ASCII Code&lt;br /&gt;
Z_tausend:&lt;br /&gt;
    inc     tausend&lt;br /&gt;
    subi    adlow, low(1000)    ; -1,000&lt;br /&gt;
    sbci    adhigh, high(1000)  ; 16 Bit&lt;br /&gt;
    brcc    Z_tausend&lt;br /&gt;
                                    &lt;br /&gt;
    subi    adlow, low(-1000)   ; nach Unterlauf wieder einmal addieren&lt;br /&gt;
    sbci    adhigh, high(-1000) ; +1,000&lt;br /&gt;
 &lt;br /&gt;
    ldi     hundert, &#039;0&#039;-1      ; Ziffernzähler direkt als ASCII Code&lt;br /&gt;
Z_hundert:&lt;br /&gt;
    inc     hundert&lt;br /&gt;
    subi    adlow, low(100)     ; -100&lt;br /&gt;
    sbci    adhigh, high(100)   ; 16 Bit&lt;br /&gt;
    brcc    Z_hundert&lt;br /&gt;
                                    &lt;br /&gt;
    subi    adlow, low(-100)    ; nach Unterlauf wieder einmal addieren&lt;br /&gt;
    sbci    adhigh, high(-100)  ; +100&lt;br /&gt;
 &lt;br /&gt;
    ldi     zehner, &#039;0&#039;-1       ; Ziffernzähler direkt als ASCII Code&lt;br /&gt;
Z_zehner:&lt;br /&gt;
    inc     zehner&lt;br /&gt;
    subi    adlow, low(10)      ; -10&lt;br /&gt;
    sbci    adhigh, high(10)    ; 16 Bit&lt;br /&gt;
    brcc    Z_zehner&lt;br /&gt;
                                    &lt;br /&gt;
    subi    adlow, low(-10)     ; nach Unterlauf wieder einmal addieren&lt;br /&gt;
    sbci    adhigh, high(-10)   ; +10&lt;br /&gt;
&lt;br /&gt;
    subi    adlow, -&#039;0&#039;         ; adlow enthält die Einer, Umwandlung in ASCII&lt;br /&gt;
 &lt;br /&gt;
;an UART Senden&lt;br /&gt;
&lt;br /&gt;
    mov     zeichen, ztausend   ; Zehntausender Stelle&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
    mov     zeichen, tausend    ; Tausender Stelle ausgeben&lt;br /&gt;
    rcall   transmit    &lt;br /&gt;
    mov     zeichen, hundert    ; Hunderter Stelle ausgeben&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
    mov     zeichen, zehner     ; Zehner Stelle ausgeben&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
    mov     zeichen, adlow      ; Einer Stelle ausgeben&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
    ldi     zeichen, 13         ; CR, Carrige Return (Wagenrücklauf)&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
    ldi     zeichen, 10         ; LF, Line Feed (Neue Zeile)&lt;br /&gt;
    rcall   transmit&lt;br /&gt;
 &lt;br /&gt;
    rjmp    Main&lt;br /&gt;
 &lt;br /&gt;
transmit:&lt;br /&gt;
    sbis    UCSRA,UDRE          ; Warten, bis UDR bereit ist ...&lt;br /&gt;
    rjmp    transmit&lt;br /&gt;
    out     UDR, zeichen        ; und Zeichen ausgeben&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ausgabe als Spannungswert ===&lt;br /&gt;
&lt;br /&gt;
Das zweite Beispiel ist schon um einiges größer. Hier wird der gemittelte ADC-Wert in eine Spannung umgerechnet. Dazu wird [[Festkommaarithmetik]] verwendet. Die Daten sind in diesem Fall&lt;br /&gt;
&lt;br /&gt;
* Referenzspannung : 5V&lt;br /&gt;
* alte Auflösung   : 5V / 1024 = 4,8828125mV&lt;br /&gt;
* neue Auflösung   : 1mV&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Faktor = 4,8828125mV / 1mV = 4,8828125&lt;br /&gt;
&lt;br /&gt;
Der Faktor wird dreimal mit 10 multipliziert und das Ergebnis auf 4883 gerundet. Die neue Auflösung wird dreimal durch 10 dividiert und beträgt 1&amp;amp;mu;V. Der relative Fehler beträgt&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; F_r = \frac {4883}{4882,8125}-1 = 0,00384% = \frac {1}{26042}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Fehler ist absolut vernachlässigbar. Nach der Multiplikation des ADC-Wertes mit 4883 liegt die gemessene Spannung in der Einheit &amp;amp;mu;V vor. Vorsicht! Das ist &#039;&#039;&#039;nicht&#039;&#039;&#039; die reale [[Auflösung und Genauigkeit]], nur rein mathematisch bedingt. Für maximale Genauigkeit sollte man die Versorgungsspannung AVCC, welche hier gleichzeitig als Referenzspannung dient, exakt messen, die Rechnung nachvollziehen und den Wert im Quelltext eintragen. Damit führt man eine einfach Einpunktkalibrierung durch.&lt;br /&gt;
&lt;br /&gt;
Da das Programm schon um einiges größer und komplexer ist, wurde es im Vergleich zur Vorgängerversion geändert. Die Multiplikation sowie die Umwandung der Zahl in einen ASCII-String sind als Unterprogramme geschrieben, dadurch erhält man wesentlich mehr Überblick im Hauptprogramm und die Wiederverwendung in anderen Programmen vereinfacht sich. Ausserdem wird der String im RAM gespeichert und nicht mehr in CPU-Registern. Die Berechung der einzelnen Ziffern erfolgt über ein Schleife, das ist kompakter und übersichtlicher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.def z0        = r1          ; Zahl für Integer -&amp;gt; ASCII Umwandlung&lt;br /&gt;
.def z1        = r2&lt;br /&gt;
.def z2        = r3&lt;br /&gt;
.def z3        = r4&lt;br /&gt;
.def temp1     = r16         ; allgemeines Register, zur kurzfristigen Verwendung&lt;br /&gt;
.def temp2     = r17         ; Register für 24 Bit Addition, niederwertigstes Byte (LSB)&lt;br /&gt;
.def temp3     = r18         ; Register für 24 Bit Addition, mittlerers Byte&lt;br /&gt;
.def temp4     = r19         ; Register für 24 Bit Addition, höchstwertigstes Byte (MSB)&lt;br /&gt;
.def adlow     = r20         ; Ergebnis vom ADC-Mittelwert der 256 Messungen&lt;br /&gt;
.def adhigh    = r21         ; Ergebnis vom ADC-Mittelwert der 256 Messungen&lt;br /&gt;
.def messungen = r22         ; Schleifenzähler für die Messungen&lt;br /&gt;
.def zeichen   = r23         ; Zeichen zur Ausgabe auf den UART&lt;br /&gt;
.def temp5     = r24&lt;br /&gt;
.def temp6     = r25&lt;br /&gt;
&lt;br /&gt;
; Faktor für Umrechung des ADC-Wertes in Spannung&lt;br /&gt;
; = (Referenzspannung / 1024 ) * 100000&lt;br /&gt;
; = 5V / 1024 * 1.000.000&lt;br /&gt;
.equ Faktor = 4883&lt;br /&gt;
&lt;br /&gt;
.equ F_CPU = 4000000                            ; Systemtakt in Hz&lt;br /&gt;
.equ BAUD  = 9600                               ; Baudrate&lt;br /&gt;
&lt;br /&gt;
; Berechnungen&lt;br /&gt;
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden&lt;br /&gt;
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate&lt;br /&gt;
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille&lt;br /&gt;
&lt;br /&gt;
.if ((BAUD_ERROR&amp;gt;10) || (BAUD_ERROR&amp;lt;-10))       ; max. +/-10 Promille Fehler&lt;br /&gt;
  .error &amp;quot;Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!&amp;quot;&lt;br /&gt;
.endif&lt;br /&gt;
&lt;br /&gt;
; RAM&lt;br /&gt;
.dseg&lt;br /&gt;
.org 0x60&lt;br /&gt;
Puffer: .byte 10&lt;br /&gt;
&lt;br /&gt;
; hier geht das Programm los&lt;br /&gt;
.cseg&lt;br /&gt;
.org 0&lt;br /&gt;
 &lt;br /&gt;
    ldi     temp1, LOW(RAMEND)                  ; Stackpointer initialisieren&lt;br /&gt;
    out     SPL, temp1&lt;br /&gt;
    ldi     temp1, HIGH(RAMEND)&lt;br /&gt;
    out     SPH, temp1&lt;br /&gt;
 &lt;br /&gt;
;UART Initalisierung&lt;br /&gt;
 &lt;br /&gt;
    ldi     temp1, LOW(UBRR_VAL)                ; Baudrate einstellen&lt;br /&gt;
    out     UBRRL, temp1&lt;br /&gt;
    ldi     temp1, HIGH(UBRR_VAL)&lt;br /&gt;
    out     UBRRH, temp1&lt;br /&gt;
&lt;br /&gt;
    sbi     UCSRB, TXEN                         ; TX einschalten&lt;br /&gt;
 &lt;br /&gt;
; ADC initialisieren: Single Conversion, Vorteiler 128&lt;br /&gt;
; Kanal 0, interne Referenzspannung AVCC&lt;br /&gt;
&lt;br /&gt;
    ldi     temp1, (1&amp;lt;&amp;lt;REFS0)                   &lt;br /&gt;
    out     ADMUX, temp1&lt;br /&gt;
    ldi     temp1, (1&amp;lt;&amp;lt;ADEN) | (1&amp;lt;&amp;lt;ADPS2) | (1&amp;lt;&amp;lt;ADPS1) | (1&amp;lt;&amp;lt;ADPS0)&lt;br /&gt;
    out     ADCSRA, temp1&lt;br /&gt;
 &lt;br /&gt;
Hauptschleife:&lt;br /&gt;
    clr     temp1&lt;br /&gt;
    clr     temp2&lt;br /&gt;
    clr     temp3&lt;br /&gt;
    clr     temp4&lt;br /&gt;
&lt;br /&gt;
    ldi     messungen, 0        ; 256 Schleifendurchläufe&lt;br /&gt;
 &lt;br /&gt;
; neuen ADC-Wert lesen  (Schleife - 256 mal)&lt;br /&gt;
&lt;br /&gt;
adc_messung:&lt;br /&gt;
    sbi     ADCSRA, ADSC        ; den ADC starten&lt;br /&gt;
 &lt;br /&gt;
adc_warten:&lt;br /&gt;
    sbic    ADCSRA, ADSC        ; wenn der ADC fertig ist, wird dieses Bit gelöscht&lt;br /&gt;
    rjmp    adc_warten&lt;br /&gt;
 &lt;br /&gt;
; ADC einlesen:&lt;br /&gt;
&lt;br /&gt;
    in      adlow, ADCL         ; immer zuerst LOW Byte lesen&lt;br /&gt;
    in      adhigh, ADCH        ; danach das mittlerweile gesperrte High Byte&lt;br /&gt;
 &lt;br /&gt;
; alle 256 ADC-Werte addieren&lt;br /&gt;
; dazu wird mit den Registern temp4, temp3 und temp2 ein&lt;br /&gt;
; 24-Bit breites Akkumulationsregister gebildet, in dem&lt;br /&gt;
; die 10 Bit Werte aus adhigh, adlow aufsummiert werden&lt;br /&gt;
&lt;br /&gt;
    add     temp2, adlow        ; addieren&lt;br /&gt;
    adc     temp3, adhigh       ; addieren über Carry&lt;br /&gt;
    adc     temp4, temp1        ; addieren über Carry, temp1 enthält 0&lt;br /&gt;
    dec     messungen           ; Schleifenzähler MINUS 1&lt;br /&gt;
    brne    adc_messung         ; wenn noch keine 256 ADC Werte -&amp;gt; nächsten Wert einlesen&lt;br /&gt;
 &lt;br /&gt;
; Aus den 256 Werten den Mittelwert berechnen&lt;br /&gt;
; Bei 256 Werten ist das ganz einfach: Das niederwertigste Byte&lt;br /&gt;
; (im Register temp2) fällt einfach weg&lt;br /&gt;
;&lt;br /&gt;
; allerdings wird der Wert noch gerundet&lt;br /&gt;
&lt;br /&gt;
    cpi     temp2,128           ; &amp;quot;Kommastelle&amp;quot; kleiner als 128 ?&lt;br /&gt;
    brlo    nicht_runden        ; ist kleiner ==&amp;gt; Sprung&lt;br /&gt;
 &lt;br /&gt;
; Aufrunden&lt;br /&gt;
    subi    temp3, low(-1)      ; addieren von 1&lt;br /&gt;
    sbci    temp4, high(-1)     ; addieren des Carry&lt;br /&gt;
 &lt;br /&gt;
nicht_runden:&lt;br /&gt;
&lt;br /&gt;
;   Ergebnis nach adlow und adhigh kopieren&lt;br /&gt;
;   damit die temp Register frei werden&lt;br /&gt;
&lt;br /&gt;
    mov     adlow, temp3&lt;br /&gt;
    mov     adhigh, temp4&lt;br /&gt;
&lt;br /&gt;
; in Spannung umrechnen&lt;br /&gt;
&lt;br /&gt;
    ldi     temp5,low(Faktor)&lt;br /&gt;
    ldi     temp6,high(Faktor)&lt;br /&gt;
    rcall   mul_16x16&lt;br /&gt;
&lt;br /&gt;
; in ASCII umwandeln&lt;br /&gt;
&lt;br /&gt;
    ldi     XL, low(Puffer)&lt;br /&gt;
    ldi     XH, high(Puffer)&lt;br /&gt;
    rcall   Int_to_ASCII&lt;br /&gt;
 &lt;br /&gt;
;an UART Senden&lt;br /&gt;
&lt;br /&gt;
    ldi     ZL, low(Puffer+3)&lt;br /&gt;
    ldi     ZH, high(Puffer+3)&lt;br /&gt;
    ldi     temp1, 1&lt;br /&gt;
    rcall   sende_zeichen       ; eine Vorkommastelle ausgeben&lt;br /&gt;
&lt;br /&gt;
    ldi     zeichen, &#039;,&#039;        ; Komma ausgeben&lt;br /&gt;
    rcall   sende_einzelzeichen&lt;br /&gt;
&lt;br /&gt;
    ldi     temp1, 3            ; Drei Nachkommastellen ausgeben&lt;br /&gt;
    rcall   sende_zeichen&lt;br /&gt;
&lt;br /&gt;
    ldi     zeichen, &#039;V&#039;        ; Volt Zeichen ausgeben&lt;br /&gt;
    rcall   sende_einzelzeichen&lt;br /&gt;
&lt;br /&gt;
    ldi     zeichen, 10         ; New Line Steuerzeichen&lt;br /&gt;
    rcall   sende_einzelzeichen&lt;br /&gt;
&lt;br /&gt;
    ldi     zeichen, 13         ; Carrige Return Steuerzeichen&lt;br /&gt;
    rcall   sende_einzelzeichen&lt;br /&gt;
&lt;br /&gt;
    rjmp    Hauptschleife&lt;br /&gt;
&lt;br /&gt;
; Ende des Hauptprogramms&lt;br /&gt;
&lt;br /&gt;
; Unterprogramme&lt;br /&gt;
 &lt;br /&gt;
 ; ein Zeichen per UART senden&lt;br /&gt;
&lt;br /&gt;
sende_einzelzeichen:&lt;br /&gt;
    sbis    UCSRA,UDRE          ; Warten, bis UDR bereit ist ...&lt;br /&gt;
    rjmp    sende_einzelzeichen&lt;br /&gt;
    out     UDR, zeichen        ; und Zeichen ausgeben&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
; mehrere Zeichen ausgeben, welche durch Z adressiert werden&lt;br /&gt;
; Anzahl in temp1&lt;br /&gt;
&lt;br /&gt;
sende_zeichen:&lt;br /&gt;
    sbis    UCSRA,UDRE          ; Warten, bis UDR bereit ist ...&lt;br /&gt;
    rjmp    sende_zeichen&lt;br /&gt;
    ld      zeichen, Z+         ; Zeichen laden&lt;br /&gt;
    out     UDR, zeichen        ; und Zeichen ausgeben&lt;br /&gt;
    dec     temp1&lt;br /&gt;
    brne    sende_zeichen&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
; 32 Bit Zahl in ASCII umwandeln&lt;br /&gt;
; Zahl liegt in temp1..4&lt;br /&gt;
; Ergebnis ist ein 10stelliger ASCII String, welcher im SRAM abgelegt wird&lt;br /&gt;
; Adressierung über X Pointer&lt;br /&gt;
; mehrfache Subtraktion wird als Ersatz für eine Division durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Int_to_ASCII:&lt;br /&gt;
    &lt;br /&gt;
    push    ZL                      ; Register sichern&lt;br /&gt;
    push    ZH&lt;br /&gt;
    push    temp5&lt;br /&gt;
    push    temp6&lt;br /&gt;
&lt;br /&gt;
    ldi     ZL,low(Tabelle*2)       ; Zeiger auf Tabelle&lt;br /&gt;
    ldi     ZH,high(Tabelle*2)&lt;br /&gt;
    ldi     temp5, 10               ; Schleifenzähler&lt;br /&gt;
&lt;br /&gt;
Int_to_ASCII_schleife:&lt;br /&gt;
    ldi     temp6, -1+&#039;0&#039;           ; Ziffernzähler zählt direkt im ASCII Code &lt;br /&gt;
    lpm     z0,Z+                   ; Nächste Zahl laden&lt;br /&gt;
    lpm     z1,Z+&lt;br /&gt;
    lpm     z2,Z+&lt;br /&gt;
    lpm     z3,Z+&lt;br /&gt;
&lt;br /&gt;
Int_to_ASCII_ziffer:&lt;br /&gt;
    inc     temp6                   ; Ziffer erhöhen&lt;br /&gt;
    sub     temp1, z0               ; Zahl subrahieren&lt;br /&gt;
    sbc     temp2, z1               ; 32 Bit&lt;br /&gt;
    sbc     temp3, z2&lt;br /&gt;
    sbc     temp4, z3&lt;br /&gt;
    brge    Int_to_ASCII_ziffer     ; noch kein Unterlauf, nochmal&lt;br /&gt;
&lt;br /&gt;
    add     temp1, z0               ; Unterlauf, eimal wieder addieren&lt;br /&gt;
    adc     temp2, z1               ; 32 Bit&lt;br /&gt;
    adc     temp3, z2&lt;br /&gt;
    adc     temp4, z3                                            &lt;br /&gt;
    st      X+,temp6                ; Ziffer speichern&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    brne    Int_to_ASCII_schleife   ; noch eine Ziffer?&lt;br /&gt;
&lt;br /&gt;
    pop     temp6&lt;br /&gt;
    pop     temp5&lt;br /&gt;
    pop     ZH&lt;br /&gt;
    pop     ZL                      ; Register wieder herstellen&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
; Tabelle mit Zahlen für die Berechung der Ziffern&lt;br /&gt;
; 1 Milliarde bis 1&lt;br /&gt;
Tabelle:&lt;br /&gt;
.dd 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1&lt;br /&gt;
&lt;br /&gt;
; 16 Bit Wert in Spannung umrechnen&lt;br /&gt;
;&lt;br /&gt;
; = 16Bitx16Bit=32 Bit Multiplikation&lt;br /&gt;
; = vier 8x8 Bit Multiplikationen&lt;br /&gt;
;&lt;br /&gt;
; adlow/adhigh * temp5/temp6&lt;br /&gt;
&lt;br /&gt;
mul_16x16:&lt;br /&gt;
    push    zeichen&lt;br /&gt;
    clr     temp1                   ; 32 Bit Akku löschen&lt;br /&gt;
    clr     temp2&lt;br /&gt;
    clr     temp3&lt;br /&gt;
    clr     temp4&lt;br /&gt;
    clr     zeichen                 ; Null, für Carry-Addition&lt;br /&gt;
&lt;br /&gt;
    mul     adlow, temp5            ; erste Multiplikation&lt;br /&gt;
    add     temp1, r0               ; und akkumulieren&lt;br /&gt;
    adc     temp2, r1&lt;br /&gt;
&lt;br /&gt;
    mul     adhigh, temp5           ; zweite Multiplikation&lt;br /&gt;
    add     temp2, r0               ; und gewichtet akkumlieren&lt;br /&gt;
    adc     temp3, r1&lt;br /&gt;
&lt;br /&gt;
    mul     adlow, temp6            ; dritte Multiplikation&lt;br /&gt;
    add     temp2, r0               ; und gewichtet akkumlieren&lt;br /&gt;
    adc     temp3, r1&lt;br /&gt;
    adc     temp4, zeichen          ; carry addieren&lt;br /&gt;
&lt;br /&gt;
    mul     adhigh, temp6           ; vierte Multiplikation&lt;br /&gt;
    add     temp3, r0               ; und gewichtet akkumlieren&lt;br /&gt;
    adc     temp4, r1&lt;br /&gt;
&lt;br /&gt;
    pop     zeichen&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für alle, die es besonders eilig haben gibt es hier eine geschwindigkeitsoptimierte Version der Integer in ASCII Umwandlung. Zunächst wird keine Schleife verwendet sondern alle Stufen der Schleife direkt hingeschrieben. Das braucht zwar mehr Programmspeicher, ist aber schneller. Ausserdem wird abwechselnd subtrahiert und addiert, dadurch entfällt das immer wieder notwendige addieren nach dem Unterlauf. Zu guter Letzt werden die Berechnungen nur mit der minimal notwenigen Wortbreite durchgeführt. Am Anfang mit 32 Bit, dann nur noch mit 16 bzw. 8 Bit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;avrasm&amp;gt;&lt;br /&gt;
; 32 Bit Zahl in ASCII umwandeln&lt;br /&gt;
; geschwindigkeitsoptimierte Version&lt;br /&gt;
; Zahl liegt in temp1..4&lt;br /&gt;
; Ergebnis ist ein 10stelliger ASCII String, welcher im SRAM abgelegt wird&lt;br /&gt;
; Adressierung über X Pointer&lt;br /&gt;
&lt;br /&gt;
Int_to_ASCII:&lt;br /&gt;
    ldi     temp5, -1 + &#039;0&#039;&lt;br /&gt;
_a1ser:&lt;br /&gt;
    inc     temp5&lt;br /&gt;
    subi    temp1,BYTE1(1000000000) ; - 1.000.000.000&lt;br /&gt;
    sbci    temp2,BYTE2(1000000000)&lt;br /&gt;
    sbci    temp3,BYTE3(1000000000)&lt;br /&gt;
    sbci    temp4,BYTE4(1000000000)&lt;br /&gt;
    brcc    _a1ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, 10 + &#039;0&#039;&lt;br /&gt;
_a2ser:&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    subi    temp1,BYTE1(-100000000) ; + 100.000.000&lt;br /&gt;
    sbci    temp2,BYTE2(-100000000)&lt;br /&gt;
    sbci    temp3,BYTE3(-100000000)&lt;br /&gt;
    sbci    temp4,BYTE4(-100000000)&lt;br /&gt;
    brcs    _a2ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, -1 + &#039;0&#039;&lt;br /&gt;
_a3ser:&lt;br /&gt;
    inc     temp5&lt;br /&gt;
    subi    temp1,low(10000000)     ; - 10.000.000&lt;br /&gt;
    sbci    temp2,high(10000000)&lt;br /&gt;
    sbci    temp3,BYTE3(10000000)&lt;br /&gt;
    sbci    temp4,BYTE4(10000000)&lt;br /&gt;
    brcc    _a3ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, 10 + &#039;0&#039;&lt;br /&gt;
_a4ser:&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    subi    temp1,low(-1000000)     ; + 1.000.000&lt;br /&gt;
    sbci    temp2,high(-1000000)&lt;br /&gt;
    sbci    temp3,BYTE3(-1000000)&lt;br /&gt;
    sbci    temp4,BYTE4(-1000000)&lt;br /&gt;
    brcs    _a4ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, -1 + &#039;0&#039;&lt;br /&gt;
_a5ser:&lt;br /&gt;
    inc     temp5&lt;br /&gt;
    subi    temp1,low(100000)       ; -100.000&lt;br /&gt;
    sbci    temp2,high(100000)&lt;br /&gt;
    sbci    temp3,BYTE3(100000)&lt;br /&gt;
    brcc    _a5ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, 10 + &#039;0&#039;&lt;br /&gt;
_a6ser:&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    subi    temp1,low(-10000)       ; +10,000&lt;br /&gt;
    sbci    temp2,high(-10000)&lt;br /&gt;
    sbci    temp3,BYTE3(-10000)&lt;br /&gt;
    brcs    _a6ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern &lt;br /&gt;
    ldi     temp5, -1 + &#039;0&#039;&lt;br /&gt;
_a7ser:&lt;br /&gt;
    inc     temp5&lt;br /&gt;
    subi    temp1,low(1000)         ; -1000&lt;br /&gt;
    sbci    temp2,high(1000)&lt;br /&gt;
    brcc    _a7ser&lt;br /&gt;
 &lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, 10 + &#039;0&#039;&lt;br /&gt;
_a8ser:&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    subi    temp1,low(-100)         ; +100&lt;br /&gt;
    sbci    temp2,high(-100)&lt;br /&gt;
    brcs    _a8ser&lt;br /&gt;
 &lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, -1 + &#039;0&#039;&lt;br /&gt;
_a9ser:&lt;br /&gt;
    inc     temp5&lt;br /&gt;
    subi    temp1, 10               ; -10&lt;br /&gt;
    brcc    _a9ser&lt;br /&gt;
    &lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ldi     temp5, 10 + &#039;0&#039;&lt;br /&gt;
_a10ser:&lt;br /&gt;
    dec     temp5&lt;br /&gt;
    subi    temp1, -1               ; +1&lt;br /&gt;
    brcs    _a10ser&lt;br /&gt;
&lt;br /&gt;
    st      X+,temp5                ; im Puffer speichern&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/avrasm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Uhr|&lt;br /&gt;
zurücklink=AVR-Tutorial: Uhr|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Tasten|&lt;br /&gt;
vorlink=AVR-Tutorial: Tasten}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial]]&lt;/div&gt;</summary>
		<author><name>89.204.153.244</name></author>
	</entry>
</feed>