<?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=Mrhat2010</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=Mrhat2010"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Mrhat2010"/>
	<updated>2026-04-09T23:05:04Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FreeCAD&amp;diff=100715</id>
		<title>FreeCAD</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FreeCAD&amp;diff=100715"/>
		<updated>2019-07-07T19:00:49Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACHTUNG: Diese Seite wird gerade erst erstellt und ist noch lange nicht fertig!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FreeCAD ist ein parametrisches, quelloffenes 3D-CAD-System. Es ist plattformunabhängig, kann also auf Windows, Linux und Mac OSX laufen. Damit können bspw. 3D-Druck-Modelle erstellt werden.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
FreeCAD ist eine parametrisches 3D-Modellierungssoftware. FreeCAD ist ist unter einer Open-Source-Lizenz unter Github veröffentlicht: https://github.com/FreeCAD/FreeCAD. Die erste Version erschien 2002.&lt;br /&gt;
Die Software verfügt über eine große Community und wird aktiv weiterentwickelt. Zur Modellierung gibt es verschiedene Workbenches, also Arbeitsbereiche. Jede von ihnen dient einem anderen Zweck und Modellierungsansatz. Vorinstalliert sind folgende Arbeitsbereiche, es können aber noch viele weitere installiert werden:&lt;br /&gt;
&lt;br /&gt;
* Arch&lt;br /&gt;
* Draft&lt;br /&gt;
* Drawing&lt;br /&gt;
* FEM&lt;br /&gt;
* Image&lt;br /&gt;
* Inspection&lt;br /&gt;
* Mesh&lt;br /&gt;
* OpenSCAD&lt;br /&gt;
* Part&lt;br /&gt;
* Part Design&lt;br /&gt;
* Path&lt;br /&gt;
* Plot&lt;br /&gt;
* Points&lt;br /&gt;
* Raytracing&lt;br /&gt;
* Reverse Engineering&lt;br /&gt;
* Robot&lt;br /&gt;
* Ship&lt;br /&gt;
* Sketcher&lt;br /&gt;
* Spreadsheet&lt;br /&gt;
* Start Center&lt;br /&gt;
* Surface&lt;br /&gt;
* TechDraw&lt;br /&gt;
* Test Framework&lt;br /&gt;
* Web&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
* Installation über die Distributions-Repositorys&lt;br /&gt;
** Oft sind diese Quellen veraltet, die aktuelle Version ist 0.18&lt;br /&gt;
* Installation über ein PPA (Ubuntu)&lt;br /&gt;
## &amp;lt;pre&amp;gt;sudo add-apt-repository ppa:freecad-maintainers/freecad-stable&amp;lt;/pre&amp;gt;&lt;br /&gt;
## &amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
## &amp;lt;pre&amp;gt;sudo apt-get install freecad freecad-doc &amp;amp;&amp;amp; sudo apt-get upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Installation über ein AppImage&lt;br /&gt;
** Das kann hier heruntergeladen werden: https://freecadweb.org/downloads.php&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
=== Mac OSX ===&lt;br /&gt;
&lt;br /&gt;
== Kurztutorial ==&lt;br /&gt;
So kannst du dein erstes Objekt erstellen&lt;br /&gt;
&lt;br /&gt;
== Galerie ==&lt;br /&gt;
Ein paar schöne Bildchen …&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* https://freecadweb.org/downloads.php&lt;br /&gt;
* Diskussion zu diesem Projekt: https://www.mikrocontroller.net/topic/476882&lt;br /&gt;
* https://www.freecadweb.org/wiki/Workbenches&lt;br /&gt;
* https://de.wikipedia.org/wiki/FreeCAD&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Entwicklungstools]]&lt;br /&gt;
[[Kategorie:CAD]]&lt;br /&gt;
[[Kategorie:3D-Modelling]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=98626</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=98626"/>
		<updated>2018-03-22T00:22:31Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: Scheint Werbung zu sein, passt noch nicht mal direkt zum Artikel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Hardwarebeschreibungssprachen&amp;diff=97493</id>
		<title>Hardwarebeschreibungssprachen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Hardwarebeschreibungssprachen&amp;diff=97493"/>
		<updated>2017-10-08T20:09:50Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: Rechtschreibfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
Mit einer Hardwarebeschreibungssprache lässt sich das Verhalten von digitalen Schaltkreisen in Textform beschreiben. Aus diesem Quelltext können dann z.&amp;amp;nbsp;B. Informationen für die Programmierung von Logikbausteinen ([[FPGA]], [[CPLD]], [[GAL]]) gewonnen werden (Synthese), oder es lassen sich Simulationen damit durchführen. Dabei muss man beachten, dass Hardwarebeschreibungssprachen zwar auf den ersten Blick wie &amp;quot;typische&amp;quot; Programmiersprachen aussehen, es aber bei genauerer Betrachtung nicht wirklich sind!&lt;br /&gt;
&lt;br /&gt;
Sie beschreiben zwar vordergründig einen Handlungsablauf, der aber nur im Fall der reinen Simulation auch wie ein funktionelles Programm abgearbeitet wird und indirekt das Verhalten des Schaltkreises darstellen kann. Die dazu benötigte &amp;quot;Hardware&amp;quot; wird vom Simulator passend antizipiert, d.h virtuell bereitgestellt, d.h., es wird das Verhalten emuliert. So lassen sich hardwarenahe Objekte wie RAMs, IO-Zellen oder Multiplizierer durch passende Ersatzmodelle genau so einfach berechnen, wie &amp;quot;rechnende Funktionen&amp;quot;, die der Mathematik entliehen sind, womit das Verhalten der komplexesten Hardware perfekt voraussagbar wird. Dies gilt allerdings nur, soweit sich für die theoretisch unendliche Vielfalt der möglichen Programmierkonstrukte auch ein Schaltkreis erzeugen lässt. Dies ist naturgemäß bei Weitem nicht automatisch gegeben und hängt von den Resourcen, der Hardware, den Tools und dem geforderten funktionellen Verhalten ab.&lt;br /&gt;
&lt;br /&gt;
Im realen Betriebsfall existiert nämlich im Gegensätz zu den Prozessoren keine Architektur, die, wie der Simulator es getan hat, Befehle ausführen könnte. Die Programmierkonstrukte steuern hier viel mehr den Syntheseprozess, der nicht das komplette zeitliche Verhalten der Schaltung berücksichtigt, sondern lediglich die implizit vorgegebenen Strukturvorgaben verwendet und umzusetzen versucht. Die in den klassischen Programmiersprachen typischer Weise verwendeten Konstrukte führen daher nicht zu einer Handlung zum Zeitpunkt des Ablaufs, sondern zu einer Anweisung zum Zeitpunkt der Konfigurationserstellung. Schleifen z.B. werden also nicht zur Ausführungszeit berücksichtigt, sondern im Zuge des Syntheseprozesses mehrfach durchlaufen, was dazu genutzt werden kann, ähnliche Hardware (z.B. viele Bits in einem Vektor oder gruppierte Operationen und Verschaltungen) durch Iterationen zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Damit ist, ähnlich wie beim objektorientierten Programmieren in C++, die Position eines Befehls im Code nicht direkt für die spätere zeitliche Ausführung relevant. Im Wesentlichen führen alle Beschreibungen letztlich zu einer parallel arbeitenden Hardwarestruktur, d.h. alle Anweisungen, die zu einer Hardware führen, sind immer und zu jedem Zeitpunkt existent und sie arbeiten auch immer.&lt;br /&gt;
&lt;br /&gt;
Wird für bestimmte Zwecke ein typischer, sequenzieller Ablauf, wie in einer Programmiersprache benötigt, so muss eine Hardware, die dies leisten kann, ausdrücklich aufgebaut werden. Um diese sequentiellen Abläufe in einer Hardwarebeschreibungssprache auszudrücken, verwendet man die bekannten &amp;quot;endlichen Zustandsautomaten&amp;quot; (engl. Finite State Machines). Diese definieren eine Schaltung, die auf die Zustände von Eingangssignalen reagieren und sich variant verhalten kann.&lt;br /&gt;
&lt;br /&gt;
= Bekannte Hardwarebeschreibungssprachen =&lt;br /&gt;
&lt;br /&gt;
== ABEL ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039;dvanced &#039;&#039;&#039;B&#039;&#039;&#039;oolean &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;L&#039;&#039;&#039;anguage&lt;br /&gt;
&lt;br /&gt;
ABEL wird hauptsächlich für kleinere Aufgaben wie die Programmierung von [[GAL]]s und [[ISP]]s verwendet. Xilinx unterstützt ABEL als Beschreibungssprache für CPLDs (CoolRunner-Familie, XC95xxx-Familie). Auch frühe Chips der Firma Lattice waren mit ABEL programmierbar.&lt;br /&gt;
&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese201/abel/abel_primer.html ABEL-HDL Primer] - englischsprachige ABEL-Einführung von der University of Pennsylvania&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Advanced_Boolean_Equation_Language Eintrag deutsche Wikipedia] - Geschichte und Beispiel&lt;br /&gt;
&lt;br /&gt;
== AHDL == &lt;br /&gt;
Die &#039;&#039;&#039;A&#039;&#039;&#039;ltera &#039;&#039;&#039;H&#039;&#039;&#039;ardware &#039;&#039;&#039;D&#039;&#039;&#039;escription &#039;&#039;&#039;L&#039;&#039;&#039;anguage AHDL ist eine Weiterentwicklung von ABEL. Sie wird heute noch zur direkten Instanziierung von Altera Primitiven verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GHDL == &lt;br /&gt;
Die &#039;&#039;&#039;G&#039;&#039;&#039;enrad &#039;&#039;&#039;H&#039;&#039;&#039;ardware &#039;&#039;&#039;D&#039;&#039;&#039;escription &#039;&#039;&#039;L&#039;&#039;&#039;anguage ist eine frühe Beschreibungssprache für GALs, PALs und PLDs von der Firma Genrad. Sie wird heute praktisch nicht mehr verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Begriff sollte nicht mit dem freien GNU HDL-Simulator verwechselt werden.&lt;br /&gt;
&lt;br /&gt;
== Verilog ==&lt;br /&gt;
[[Verilog]] wurde 1983 von der Firma Gateway Design Automation entwickelt. Zu diesem Zeitpunkt diente sie der Simulation/Verifikation, aber nicht der Synthese digitaler Schaltungen. Das gab dieser Sprache auch den Namen: &#039;&#039;Verifying Logic - Veri Log&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Verilog]] ist vornehmlich auf dem amerikanischen Kontinent verbreitet.&lt;br /&gt;
&lt;br /&gt;
=== Links zu Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.eg.bucknell.edu/~cs320/1995-fall/verilog-manual.html Verilog Handbook] nicht mehr online, als HTML und PDF noch hier zu finden:&lt;br /&gt;
http://web.archive.org/web/20060805053107/http://www.eg.bucknell.edu/~cs320/1995-fall/verilog-manual.html&lt;br /&gt;
http://web.archive.org/web/20060805053107/http://www.eg.bucknell.edu/~cs320/1995-fall/manual.pdf&lt;br /&gt;
* [http://www.stanford.edu/class/ee183/handouts_win2003/VerilogQuickRef.pdf Verilog Quick Reference]&lt;br /&gt;
* [http://www.fpga4fun.com/VerilogTips.html Verilog Tips and Tricks]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-398050.html Websites für Lernende]&lt;br /&gt;
* [http://www.pyroelectro.com/tutorials/verilog_intro/index.html An Introduction To Verilog] bei www.pyroelectro.com&lt;br /&gt;
&lt;br /&gt;
== VHDL ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;V&#039;&#039;&#039;ery High Speed Integrated Circuit &#039;&#039;&#039;H&#039;&#039;&#039;ardware &#039;&#039;&#039;D&#039;&#039;&#039;escription &#039;&#039;&#039;L&#039;&#039;&#039;anguage&lt;br /&gt;
&lt;br /&gt;
[[VHDL]] ist die in Europa vorwiegend verwendete Beschreibungssprache für digitale Schaltungen.&lt;br /&gt;
&lt;br /&gt;
* [[VHDL|FAQ, Kurzreferenzen, weitere Links]]&lt;br /&gt;
* [[VHDL_Schnipsel|kurze Beispiele]]&lt;br /&gt;
* [[Rechnen in VHDL]]&lt;br /&gt;
&lt;br /&gt;
= Verwandte Hardwarebeschreibungssprachen =&lt;br /&gt;
&lt;br /&gt;
== SystemC ==&lt;br /&gt;
[[SystemC]] ist im Gegensatz zu VHDL oder Verilog keine eigene Hardware-Beschreibungssprache sondern eine Klassenbibliothek für C++.&lt;br /&gt;
Mit SystemC ist es möglich, Hardware abstrakt und auf der Register-Transfer-Ebene (RTL) zu beschreiben. Für eine Beschreibung auf RTL wurde ein VHDL ähnlicher Dialekt gebildet. Für SystemC gibt es zahlreiche Erweiterung wie z.B. das Transaction-Level Modeling ([[TLM]]) mit dem es möglich ist, komplette Protokolle nachzubilden, ohne sich Gedanken über die unteren Abstraktionsebenen zu machen. Bisher ist es jedoch so, dass SystemC nicht ohne weiteres synthesefähig ist, dieses wird sich jedoch mittelfristig ändern. Schon jetzt ist es mit Highlevel-Synthesen möglich, C- oder auch C++-Programme zu synthetisieren und diese in einen FPGA einzubeschreiben.&lt;br /&gt;
&lt;br /&gt;
Ein Grundproblem bei SystemC ist die mangelnde Möglichkeit, systembestimmende Randbedingungen, die auf dieser Abstraktionsebene der Schaltungsbeschreibung eigentlich einfliessen müssten, geeignet zu formulieren, damit die Synthese in bestimmte Nischen gelenkt werden kann, was in einer niedigeren Abstraktionsebene durch die Wahl eines Lösungsansatzes implizit geschieht. Dies muss bei der Verwendung von SystemC obwohl eine datenorientierte Beschreibungsebene gewählt wurde, dennoch auf Strukturebene geschehen. Damit umspannt SystemC einen sehr grossen Bereich an Formulierungsebenen, die miteinander konkurrieren.&lt;br /&gt;
&lt;br /&gt;
== VHDL-AMS ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VHDL&#039;&#039;&#039; mit Erweiterungen für die &#039;&#039;&#039;A&#039;&#039;&#039;nalog/&#039;&#039;&#039;M&#039;&#039;&#039;ixed &#039;&#039;&#039;S&#039;&#039;&#039;ignal - Simulation. Diese Beschreibungssprache wird z.&amp;amp;nbsp;B. benutzt, um elektrodynamische und mechanische Modelle wie Bremsen, Motoren und Ähnliches in elektrische Schaltungssimulationen zu integrieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links zu AMS ===&lt;br /&gt;
* Hiesiger thread: http://www.mikrocontroller.net/forum/read-9-358956.html&lt;br /&gt;
* http://www.syssim.ecs.soton.ac.uk/&lt;br /&gt;
* http://www.vhdl-ams.org/Tools/tools.html&lt;br /&gt;
* VHDL-AMS simulator (SEAMS), Version 1.1c (23 March 99): http://www.ececs.uc.edu/~dpl/distribution/packages/packages.html&lt;br /&gt;
* SMASH: http://www.dolphin.fr/index.php/eda_solutions/products/smash/overview&lt;br /&gt;
* Simplorer oder hAMSter: http://www.ansoft.com/about/academics/simplorer_sv/index.cfm&lt;br /&gt;
* Linkliste: http://www.vlsi.informatik.tu-darmstadt.de/staff/klupsch/steffen-vhdlams_links.html&lt;br /&gt;
&lt;br /&gt;
=== Bücher ===&lt;br /&gt;
* VHDL-AMS. Mit CD. Anwendungen und industrieller Einsatz (Broschiert) von Yannick Herve, ISBN: 3486577875, 34,80 EUR, März 2006&lt;br /&gt;
&lt;br /&gt;
= Sonstige Links =&lt;br /&gt;
* CUPL: Zu ABEL verwandte Sprache, wird von Atmel noch als WinCUPL für Atmel-CPLDs kostenlos bereitgestellt, aber nicht mehr gepflegt. (Der Texteditor stürzt beim Speichern ab und beendet das Programm - Abhilfe: Wordpad o.ä. benutzen)&lt;br /&gt;
* GHDL: Genrad&#039;s hardware description langugage, eine boolsche Sprache zur Beschreibung von [[GAL]]s und [[PAL]]s.&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co| ]]&lt;br /&gt;
[[Kategorie:Programmiersprachen]]&lt;br /&gt;
[[Kategorie:VHDL]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Wanderkiste_(Widlar)&amp;diff=97376</id>
		<title>Wanderkiste (Widlar)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Wanderkiste_(Widlar)&amp;diff=97376"/>
		<updated>2017-09-14T09:41:07Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Idee=&lt;br /&gt;
Die Idee, die hinter einer Wanderkiste steckt ist, das die Teilnehmer elektronische Bauteile und Module tauschen und&lt;br /&gt;
sich ein Netzwerk von gleichgesinnten bildet.&lt;br /&gt;
&lt;br /&gt;
=Name=&lt;br /&gt;
Der Name geht auf den Elektronikpionier [https://en.wikipedia.org/wiki/Bob_Widlar Bob Widlar] zurück.&lt;br /&gt;
&lt;br /&gt;
=Regeln:=&lt;br /&gt;
&lt;br /&gt;
;Inhalt&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;u&amp;gt;Neu&amp;lt;/u&amp;gt; Ware THT, SMD + &amp;lt;u&amp;gt;Neue/Funktionierende&amp;lt;/u&amp;gt; Gebrauchte PCBs sowie Arduino Zubehör und Co&lt;br /&gt;
* &amp;lt;u&amp;gt;Kein&amp;lt;/u&amp;gt; Elektroschrott, keine Schlachtplatinen, kein vergammelter Müll der Jahre lang im Keller lag. ,keine Batterien / Akkus, keine Transformatoren &amp;amp; schwere Spulen, kein Gefahrengut&lt;br /&gt;
* In/Out-Liste in Form eines aus sagekräftigen Fotos im Thread (je ein Bild)&lt;br /&gt;
* Wer die Regln nicht akzeptieren kann oder will macht nicht mit!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Versand&lt;br /&gt;
&lt;br /&gt;
* nur &amp;lt;u&amp;gt;DHL Paket (versichert!)&amp;lt;/u&amp;gt;&lt;br /&gt;
* &amp;lt;u&amp;gt;Sendungs Nummer&amp;lt;/u&amp;gt; sowie Sendungs Eingang/Ausgang (Datum) trägt jeder in die Liste unten ein&lt;br /&gt;
* &amp;lt;u&amp;gt;Kein&amp;lt;/u&amp;gt; Ausland, &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; Inseln und &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; Packstation und &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; Postämter&lt;br /&gt;
=Teilnehmer=&lt;br /&gt;
&lt;br /&gt;
Die Teilnehmer tragen sich selbst ein, der Weg der Kiste ergibt sich automatisch.&lt;br /&gt;
&lt;br /&gt;
Wer einen anderen Teilnehmer austrägt oder sich vor jemanden setzt (also eine Zeile einfügt), an eine Stelle die vergeben ist, der fliegt raus.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Teilnehmer&lt;br /&gt;
|- &lt;br /&gt;
! Nr. !! Name !! IN !! OUT !! DHL Code&lt;br /&gt;
|-&lt;br /&gt;
| 1 || sven_rvbg || - || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  dl3yc || - || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || bastler-david ||folgt noch|| ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  NormalZeit || - || ||  &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  chfreund  || || ||      &lt;br /&gt;
|-&lt;br /&gt;
| 7 || JoergL || || ||    &lt;br /&gt;
|-&lt;br /&gt;
| 8 || || || ||    &lt;br /&gt;
|-&lt;br /&gt;
| 9 || || || ||    &lt;br /&gt;
|-&lt;br /&gt;
| 10 || || || ||      &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97358</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97358"/>
		<updated>2017-09-12T06:09:24Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97357</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=97357"/>
		<updated>2017-09-12T06:08:50Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97355</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97355"/>
		<updated>2017-09-12T06:08:22Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97352</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97352"/>
		<updated>2017-09-12T06:07:20Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97350</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=97350"/>
		<updated>2017-09-12T06:00:05Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97349</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97349"/>
		<updated>2017-09-12T06:00:00Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97347</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97347"/>
		<updated>2017-09-12T05:58:54Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97346</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97346"/>
		<updated>2017-09-12T05:58:47Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97342</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97342"/>
		<updated>2017-09-12T05:38:07Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97340</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97340"/>
		<updated>2017-09-12T05:37:06Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97339</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=97339"/>
		<updated>2017-09-12T05:35:28Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97337</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97337"/>
		<updated>2017-09-12T05:34:49Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97335</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97335"/>
		<updated>2017-09-12T05:34:15Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97332</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97332"/>
		<updated>2017-09-12T05:29:04Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97330</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=97330"/>
		<updated>2017-09-12T05:27:19Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97329</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97329"/>
		<updated>2017-09-12T05:26:31Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97327</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97327"/>
		<updated>2017-09-12T05:25:50Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97324</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97324"/>
		<updated>2017-09-12T05:23:15Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97323</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=97323"/>
		<updated>2017-09-12T05:20:08Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97322</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97322"/>
		<updated>2017-09-12T05:19:21Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97320</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97320"/>
		<updated>2017-09-12T05:18:25Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97318</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97318"/>
		<updated>2017-09-12T05:17:47Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97315</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97315"/>
		<updated>2017-09-12T05:15:16Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97314</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97314"/>
		<updated>2017-09-12T05:14:55Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97313</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97313"/>
		<updated>2017-09-12T05:14:08Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97311</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=97311"/>
		<updated>2017-09-12T05:11:53Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97310</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97310"/>
		<updated>2017-09-12T05:09:51Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97305</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=97305"/>
		<updated>2017-09-12T05:03:21Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97304</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97304"/>
		<updated>2017-09-12T05:03:03Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97303</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97303"/>
		<updated>2017-09-12T05:02:46Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97302</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97302"/>
		<updated>2017-09-12T05:02:26Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97301</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=97301"/>
		<updated>2017-09-12T05:01:47Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 eine Schusswaffe braucht, um die Bundeskanzlerin zu ermorden. [[TI]] zum Beispiel bietet einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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;
=== Handtöten ===&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen ====&lt;br /&gt;
&lt;br /&gt;
* Grundvoraussetzung ist ein Totschlaeger mit entsprechend langer Kette.&lt;br /&gt;
**Der Sauentoeter sollte am besten mit Hakenkreuz 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97298</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=97298"/>
		<updated>2017-09-12T04:58:13Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 eine Schusswaffe braucht, um die Bundeskanzlerin zu ermorden. [[TI]] zum Beispiel bietet einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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;
=== Handtöten ===&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen ====&lt;br /&gt;
&lt;br /&gt;
* Grundvoraussetzung ist ein Totschlaeger mit entsprechend langer Kette.&lt;br /&gt;
**Der Sauentoeter sollte am besten mit Hakenkreuz 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97297</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97297"/>
		<updated>2017-09-12T04:57:47Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97292</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97292"/>
		<updated>2017-09-12T04:53:36Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.alternativefuer.de/ Olimex]&lt;br /&gt;
* [http://www.alternativefuer.de/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst einen Neger toeten möchte kann man auch eine gebrauchte Schusswaffe vom Russen hinerm Bahnhof dafuer nehmen.&lt;br /&gt;
&lt;br /&gt;
Angela Merkel ist eine bolschewistische Sau und gehoert auf die Schlachtbank. Erdolchen oder Erschiessen, egal. Was grad zur Hand ist. &lt;br /&gt;
Merkel muss weg! Toetet die Sau!&lt;br /&gt;
&lt;br /&gt;
Verantwortlich fuer den Inhalt gemäß § 5 Abs. 1 TMG:&lt;br /&gt;
&lt;br /&gt;
Florian Knodt, Im Teich 11, Saffig&lt;br /&gt;
&lt;br /&gt;
Die fuer diesen Hass-Beitrag verwendete Hardware traegt ein CE Kennzeichen und wurde von einem staatlich geprueften Elektriker den Vorschriften entsprechend installiert.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97290</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=97290"/>
		<updated>2017-09-12T04:52:47Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 eine Schusswaffe braucht, um die Bundeskanzlerin zu ermorden. [[TI]] zum Beispiel bietet einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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;
=== Handtöten ===&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen ====&lt;br /&gt;
&lt;br /&gt;
* Grundvoraussetzung ist ein Totschlaeger mit entsprechend langer Kette.&lt;br /&gt;
**Der Sauentoeter sollte am besten mit Hakenkreuz 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97289</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97289"/>
		<updated>2017-09-12T04:52:16Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97286</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97286"/>
		<updated>2017-09-12T04:51:36Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97284</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97284"/>
		<updated>2017-09-12T04:41:15Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97283</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=97283"/>
		<updated>2017-09-12T04:40:59Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97282</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97282"/>
		<updated>2017-09-12T04:40:33Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97279</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97279"/>
		<updated>2017-09-12T04:39:28Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97276</id>
		<title>Loxone Link</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Loxone_Link&amp;diff=97276"/>
		<updated>2017-09-12T04:22:01Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Loxone Link==&lt;br /&gt;
&lt;br /&gt;
===Einführung===&lt;br /&gt;
&lt;br /&gt;
Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers [https://www.loxone.com Loxone]. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.&lt;br /&gt;
&lt;br /&gt;
Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.&lt;br /&gt;
&lt;br /&gt;
===Idee===&lt;br /&gt;
Die Idee des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.&lt;br /&gt;
&lt;br /&gt;
Natürlich könnte man fertige Extentions verwenden, allerdings ergeben sich da ein paar Nachteile, weswegen die Idee für dieses Projekt geboren wurde.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der Relayextention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Man muss immer einen Relaisausgang verwenden, obwohl ein Transistorausgang (24V) ausreichen würde&lt;br /&gt;
-Zerstört man ein Relais ist die Extention nicht mehr vollständig brauchbar.&lt;br /&gt;
-Verschleißen die Relais, ist die Extention ebenfalls nicht mehr vollständig brauchbar&lt;br /&gt;
-Zum verdrahten wird relativ viel Platz benötigt, sitzen zwei Extentions übereinander in einem Verteiler, wird es schon mal eng&lt;br /&gt;
-Die Zweifachschraubklemmen sitzen sehr locker, stehen Adern mechanisch unter Spannung drohen die Klemmen rauszurutschen&lt;br /&gt;
-Das Gehäuse der Extention kann sich auch bei sanfter Krafteinwirkung relativ leich öffnen, die spannungsführende Platine hängt dann in der Luft und könnte berührt werden&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteile der DI-Extention:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-preislich leider viel zu teuer&lt;br /&gt;
-nicht beschriftete Klemmen sind bei einem professionellem Produkt ein NoGo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile der Lösung mit Eigener HW:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+Es kann auf einem Controller mehr als eine Extention abgebildet werden&lt;br /&gt;
+Mischung aus Ein- und Ausgängen ist Möglich&lt;br /&gt;
+Trennung im Verteiler zwischen Niederspannung und Kleinspannung besser möglich&lt;br /&gt;
+Externe Koppelrelais sind vergleichsweise günstig, geht eins kapputt kann dieses einzeln getauscht werden&lt;br /&gt;
+I/O&#039;s lassen sich direkt in eigene Hardware integrieren&lt;br /&gt;
+freie Controllerwahl möglich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setup des Versuchaufbaus===&lt;br /&gt;
&lt;br /&gt;
[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]&lt;br /&gt;
&lt;br /&gt;
Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur RS485-Extention wurden eine Relayextention und eine DI-Extention untersucht.&lt;br /&gt;
&lt;br /&gt;
===Technische Details===&lt;br /&gt;
&lt;br /&gt;
Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind. &lt;br /&gt;
&lt;br /&gt;
Laut [http://rn-wissen.de/wiki/index.php?title=CAN RN-Wissen] wird für 500m eine max. Datenraten von 125kbit/s angegeben.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.&lt;br /&gt;
&lt;br /&gt;
Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma [http://www.e-lab.de/diverse/components.html e-lab] verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)&lt;br /&gt;
&lt;br /&gt;
Zum Anschluss an den Loxone Link wurden &#039;&#039;&#039;Link+&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-H&#039;&#039;&#039; und &#039;&#039;&#039;Link-&#039;&#039;&#039; mit &#039;&#039;&#039;CAN-L&#039;&#039;&#039; verbunden.&lt;br /&gt;
&lt;br /&gt;
Als Software wurde das &amp;quot;can_spy_echo_example&amp;quot; aus der [http://www.atmel.com/dyn/resources/prod_documents/at90CANLIB_3_2.zip Atmel CAN-Lib] verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf &amp;quot;Spy&amp;quot; einegstellt.&lt;br /&gt;
&lt;br /&gt;
Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Zum weiteren Testen habe ich einen [http://www.fischl.de/usbtin/ USBtin] von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren&lt;br /&gt;
===Protokollanalyse===&lt;br /&gt;
====Allgemeines====&lt;br /&gt;
Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8.&lt;br /&gt;
Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.&lt;br /&gt;
&lt;br /&gt;
Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.&lt;br /&gt;
&lt;br /&gt;
Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme &amp;quot;herauszufiltern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint anhand der Seriennummern zu unterscheiden, um welche Art von Extention es sich handelt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SN!! Art der Extention&lt;br /&gt;
|-&lt;br /&gt;
| 0x7xxxxxxx|| RS485&lt;br /&gt;
|-&lt;br /&gt;
| 0x9xxxxxxx|| Modbus&lt;br /&gt;
|-&lt;br /&gt;
| 0xBxxxxxxx|| Relais&lt;br /&gt;
|-&lt;br /&gt;
| 0x14xxxxxx|| Digital Input (DI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zum finden von Extentions sendet der Miniserver an ID 0x00000000 &amp;lt;code&amp;gt;{ 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Relais Extention====&lt;br /&gt;
Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Relais - Byte Zuordnung&lt;br /&gt;
|-&lt;br /&gt;
! Relais&lt;br /&gt;
! Wertigkeit&lt;br /&gt;
! Byte&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|8&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt.&lt;br /&gt;
Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält.&lt;br /&gt;
&amp;lt;code&amp;gt;{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00}&amp;lt;/code&amp;gt; an die ID 0x1Bxxxxxx schaltet alle 14 Relais ein.&lt;br /&gt;
Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.&lt;br /&gt;
&lt;br /&gt;
Die Extention antwortet mit&amp;lt;code&amp;gt;{0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00}&amp;lt;/code&amp;gt; mit der ID 0x0Bxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). &amp;lt;strike&amp;gt;In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch senden von &amp;lt;code&amp;gt;{0x08,0x3b,0,0,0,0,0,0}&amp;lt;/code&amp;gt; an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.&lt;br /&gt;
&lt;br /&gt;
* Extention sendet Alive  -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
* Minierver sendet Alive -&amp;gt; Extention &amp;lt;code&amp;gt;{ 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 }&amp;lt;/code&amp;gt; mit ID der 0x1xxxxxxx&lt;br /&gt;
* Extention sendet Online -&amp;gt; Bus &amp;lt;code&amp;gt;{ 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 }&amp;lt;/code&amp;gt; mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;11&amp;quot;|Befehlstabelle&lt;br /&gt;
|-&lt;br /&gt;
! Befehl !! Sender!! Empfänger!! D1!! D2!! D3!! D4!! D5!! D6!! D7!! D8&lt;br /&gt;
|-&lt;br /&gt;
| Ident|| MS || 0x0xxxxxxx|| 0x08|| 0x3b|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive|| 0x0xxxxxxx || MS||  0x89|| 0x00|| 0x00|| 0x00|| 0x6e|| 0x95|| 0x6b|| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Alive Resp.|| MS|| 0x1xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Online|| 0x0xxxxxxx|| MS || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais set.|| MS|| 0x0xxxxxxx|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Relais stat.|| 0x0xxxxxxx|| MS|| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel || Beispiel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Digital Input (DI)====&lt;br /&gt;
Die DI-Extention bietet dem Anwender 20 Digitale Eingänge. Diese Eingänge können bspw. Schalter oder Taster sein, die im Gebäude verbaut wurden. Mittels der DI-Extention lassen sich Gebäude die mit Installationsrelais realisiert sind recht einfach smart machen. Die DI-Extention wird genauso wie die Relais Extention an eine Stromversorgung von 24V und den Loxone-Link (CAN-Bus) angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgender Protokollmitschnitt zeigt die Zuordnung der Eingänge zu den einzelnen Bytes.&lt;br /&gt;
&lt;br /&gt;
Loxone scheint bei der DI-Extention einen Art Adressumetzung zu verwenden, sodass die ID, die verwendet wird nicht gleich der ID der Extention ist. Wie diese Umsetzung auf beiden Seiten funktioniert ist noch unklar.&lt;br /&gt;
&lt;br /&gt;
B1 beinhaltet den sog NAT-Index. In meinem Fall hat die erste DI-Extention den NAT-Index 04 und die zweite  06. &lt;br /&gt;
&lt;br /&gt;
Die Adresse, an welche die Eingangsbytes geschickt werden, wird also&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
für NAT-ID 04:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0400&lt;br /&gt;
  = 1000 0480&lt;br /&gt;
oder für NAT-ID 05:&lt;br /&gt;
    1000 0080&lt;br /&gt;
 OR 0000 0500&lt;br /&gt;
  = 1000 0580&lt;br /&gt;
&lt;br /&gt;
berechnet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bespiel-Telegramme für je ein einzelnes Eingangsbit (I1-I20), NAT-ID: 6&lt;br /&gt;
Bei mehreren gesetzten Bits werden die Wertigkeiten in den Felden B5, B6 und B8 entsprechend addiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I1-8			      B1 B2 B3 B4 B5 B6 B7 B8&lt;br /&gt;
----         		      -----------------------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 01 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 02 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 04 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 08 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 10 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 20 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 40 00 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 80 00 00 00&lt;br /&gt;
&lt;br /&gt;
I9-16&lt;br /&gt;
-----&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 01 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 02 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 04 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 08 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 10 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 20 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 40 00 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 80 00 00&lt;br /&gt;
&lt;br /&gt;
I17-20&lt;br /&gt;
------&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 01 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 02 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 04 00&lt;br /&gt;
ID: 10006080;		 Msg: 06 00 00 00 00 00 08 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die DI-Extention scheint zyklich den Zustand der Eingänge an den Miniserver zu senden.&lt;br /&gt;
Ein entsprechendes Telegramm sieht bspw. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID: 10606008;		 Msg: 00 05 00 00 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97274</id>
		<title>8bit-Computer: bo8h</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=8bit-Computer:_bo8h&amp;diff=97274"/>
		<updated>2017-09-12T04:21:35Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von:&#039;&#039;&amp;amp;nbsp;&amp;amp;nbsp; Josef Gnadl ([http://www.mikrocontroller.net/articles/Benutzer:Bome bome])&lt;br /&gt;
&lt;br /&gt;
=Übersicht=&lt;br /&gt;
&lt;br /&gt;
Habe einen 8bit-Rechner entwickelt und als Prototyp-Gerät realisiert&lt;br /&gt;
auf folgenden FPGA-Boards:&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3A Starter Kit&#039;&#039;&#039; von Xilinx&lt;br /&gt;
* &#039;&#039;&#039;Spartan-3E Starter Board&#039;&#039;&#039; und&lt;br /&gt;
* &#039;&#039;&#039;Nexys2 Board&#039;&#039;&#039; von Digilent&lt;br /&gt;
* &#039;&#039;&#039;DE1 Board / Cyclone2 Starter Board&#039;&#039;&#039; von Terasic/Altera&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0 Board&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Altera DE0-nano Board&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Realisierung auf dem Spartan-3A Starter Kit funktioniert auch auf dem &#039;&#039;Spartan-3AN Starter Kit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU ist eine Eigenentwicklung. Merkmale des Gesamtsystems sind&lt;br /&gt;
der aus mehreren 64KByte-Seiten bestehende Adressraum, das Steckplatz-Konzept,&lt;br /&gt;
die an die Hardware angepasste Programmiersprache &#039;&#039;&#039;bola&#039;&#039;&#039; und taktgenau berechenbare&lt;br /&gt;
Programmlaufzeiten. Der Zeichensatz beinhaltet einen hexadezimalen Ziffernsatz,&lt;br /&gt;
welcher für die Ziffern A..F spezielle Zeichen verwendet.&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät besitzt Bildschirm und Tastatur, nutzt [[RS232]] zum Daten-Austausch mit PC und hat eine SD-Karte mit selbstgestricktem Dateisystem.&lt;br /&gt;
&#039;&#039;Neu 09.Sep.2017:&#039;&#039;&amp;amp;nbsp; Der [[VHDL]]-Code ist so geschrieben, dass leicht weitere Schnittstellen eingebaut werden können.&lt;br /&gt;
&lt;br /&gt;
* Informationen und Downloads gibt es auf [http://www.bo8h.de bo8h.de].&lt;br /&gt;
* Im &#039;&#039;&#039;Forum&#039;&#039;&#039; Codesammlung gibt es dazu den Beitrag [http://www.mikrocontroller.net/topic/297603 8bit-Computing mit FPGA].&lt;br /&gt;
* Im &#039;&#039;embedded-projects-Journal 14&#039;&#039;&amp;amp;nbsp; gibt es den Artikel &#039;&#039;Ein 8bit-Rechner auf dem Spartan-3A-Starterkit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die CPU steht unter der hier im Wiki geltenden Creative-Commons-Lizenz zur Verfügung: [[8bit-CPU: bo8]].&lt;br /&gt;
&lt;br /&gt;
Das Prototyp-Gerät hat 4 freie virtuelle Steckplätze mit je 64KByte, wobei je 32KByte&lt;br /&gt;
für Software vorgesehen sind. Damit haben Software-Entwickler die Möglichkeit,&lt;br /&gt;
Steckkarten-Software in Eigen-Regie anzubieten. Zur Software-Entwicklung&lt;br /&gt;
auf PC gibt es einen in C geschriebenen Cross-Assembler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die CPU=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Der Punkt in den Mnemonics steht für einen auf der Grundlinie liegenden Bindestrich.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Akku &#039;&#039;&#039;A&#039;&#039;&#039; und das Erweiterungsregister &#039;&#039;&#039;B&#039;&#039;&#039; sind 8-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Doppelregister AB wird abkürzend mit &#039;&#039;&#039;K&#039;&#039;&#039; bezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Vorzeichenbit A7 wird abkürzend mit &#039;&#039;&#039;U&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Programmzähler &#039;&#039;&#039;P&#039;&#039;&#039; und die Adressregister &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039; sind 16-bit.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Register &#039;&#039;&#039;Q&#039;&#039;&#039; erhält bei Sprüngen die Rückkehradresse P+1.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; ist Schleifen-Startadresse, &#039;&#039;&#039;S&#039;&#039;&#039; ist Schleifenzähler.&lt;br /&gt;
&lt;br /&gt;
Einziges Flag ist der Carry &#039;&#039;&#039;V&#039;&#039;&#039;. Bei bedingten Sprüngen kann ausserdem abgefragt werden, ob U/A/K Null sind.&lt;br /&gt;
&lt;br /&gt;
Alle Speicherzugriffe sind 8bit-Zugriffe.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; lädt nach A den Inhalt der Speicherzelle, auf welche X zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt; speichert A in der Speicherzelle, auf welche X zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt; inkrementiert X und tauscht A und B.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt; dekrementiert X und tauscht A und B.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich 2-byte-Speicherzugriffe aufbauen&amp;lt;br&amp;gt;&lt;br /&gt;
nach dem Muster &amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;IXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;GTMX&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;DXE&amp;lt;/u&amp;gt;/&amp;lt;u&amp;gt;STMX&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt hierfür die Assembler-Makros &amp;lt;u&amp;gt;GTMXI&amp;lt;/u&amp;gt; und &amp;lt;u&amp;gt;STMXD&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
ST.Y    überträgt die Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
GTMXI   lädt eine Adresse von Position X&lt;br /&gt;
AD.X    addiert X&lt;br /&gt;
ST.Y    überträgt die zu X relative Adresse nach Y&lt;br /&gt;
&lt;br /&gt;
J..     Sprung zu der Adresse, welche in K steht&lt;br /&gt;
&lt;br /&gt;
GTA 59  lädt den Wert 0059 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     Sprung nach 3559&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTA 3559&lt;br /&gt;
J&lt;br /&gt;
&lt;br /&gt;
GTR 59  lädt den Wert P+0059+3 nach K&lt;br /&gt;
AD. 35  addiert 35 zu A&lt;br /&gt;
J..     relativer Sprung nach P+3559+3&lt;br /&gt;
&lt;br /&gt;
Das lässt sich kürzer schreiben mit Assembler-Makro&lt;br /&gt;
/GTR 3559&lt;br /&gt;
J &lt;br /&gt;
&lt;br /&gt;
GT.Q  lädt Rückkehradresse nach K&lt;br /&gt;
J     Rücksprung aus Unterprogramm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ein Unterprogramm selber J.. ausführen will für andere Zwecke als für den Rücksprung,&lt;br /&gt;
muss es vorher die Rückkehradresse sichern. Dazu kann es die Rückkehradresse aus Q laden,&lt;br /&gt;
anfangs steht sie aber auch in K und das Laden kann entfallen.&lt;br /&gt;
&lt;br /&gt;
Ausser dem Sprungbefehl J.. gibt es die bedingten Sprünge mit 8bit-Sprungdistanz:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;O.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Vorwärtssprung falls cc) und &amp;lt;u&amp;gt;B.cc&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; (Rückwärtssprung falls cc).&lt;br /&gt;
&lt;br /&gt;
Für schnelle Schleifen gibt es die Repeat-Befehle &amp;lt;u&amp;gt;R.cc&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Repeat-Befehle gibt es kombiniert mit Schleifenzähler-Dekrementieren und Adresse-Inkrementieren/Dekrementieren.&lt;br /&gt;
Die Schleifenstartadresse R wird gesetzt am Schleifenanfang mittels &amp;lt;u&amp;gt;S.RP&amp;lt;/u&amp;gt; oder mittels &amp;lt;u&amp;gt;O.RP&amp;amp;nbsp;nn&amp;lt;/u&amp;gt;.&lt;br /&gt;
Bei letzterem wird gleichzeitig ein Vorwärtssprung ausgeführt. Damit sind Schleifen mit Hineinsprung (while-Schleifen) realisierbar.&lt;br /&gt;
&lt;br /&gt;
Bei J.. wird die Zieladresse auch nach R übertragen. Das garantiert, dass R stets eine Adresse im Nahbereich&lt;br /&gt;
des Programmzählers enthält. Eine Anwendung hiervon ergibt sich beim Sprung in eine Tabelle, welche aus&lt;br /&gt;
&amp;lt;u&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; -Befehlen (Vorwärtssprung always) besteht, wobei die &amp;lt;U&amp;gt;O.WY&amp;amp;nbsp;nn&amp;lt;/u&amp;gt; alle zur&lt;br /&gt;
selben Adresse springen. Die dortige Routine kann durch Auswertung von R die Nummer des O.WY-Befehls ermitteln.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adressierung mehrerer 64K-Seiten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zu jeder auf dem Adressbus ausgegebenen Adresse wird auf den Steuerleitungen angezeigt, von welchem der&lt;br /&gt;
Adressregister P,X,Y,Z sie kommt. Dadurch kann eine externe Logik jedem der Adressregister eine eigene&lt;br /&gt;
64K-Speicherseite zuordnen. Die CPU kann spezielle Steuersignale ausgeben, welche die externe Logik&lt;br /&gt;
zur Memory-Page-Umschaltung für eines der Adressregister veranlassen sollen.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;u&amp;gt;H..&amp;lt;/u&amp;gt; ist der einzige und universell einsetzbare IO-Befehl.&lt;br /&gt;
Es wird K auf dem Adressbus ausgegeben und der Datenbus nach A eingelesen.&lt;br /&gt;
&lt;br /&gt;
Wenn auf H.. ein J.. folgt, dann wirkt H.. stattdessen als Präfix und bewirkt,&lt;br /&gt;
dass J.. mit einer Memory-Page-Umschaltung kombiniert wird. So kann die CPU von einer&lt;br /&gt;
64K-Seite in eine andere springen, ohne dass es einen gemeinsamen Speicherbereich geben muss.&lt;br /&gt;
&lt;br /&gt;
Bei den Adressregistern X,Y,Z gibt es spezielle Befehle &amp;lt;u&amp;gt;SW.X&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Y&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;SW.Z&amp;lt;/u&amp;gt; für die Memory-Page-Umschaltung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Gesamt-Hardware=&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Memory-Pages mit je 64KByte:&lt;br /&gt;
&lt;br /&gt;
* Page 0:  Aktiver Steckplatz&lt;br /&gt;
* Page 1:  ROM (32K), Text-RAM (16K), Video-RAM (16K)&lt;br /&gt;
* Page 2:  Haupt-RAM&lt;br /&gt;
* Page 3:  Zusatz-RAM&lt;br /&gt;
&lt;br /&gt;
Der aktive Steckplatz in Page 0 wird durch ein 3bit-Register SLT ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Es gibt die 2bit-Register MP,MX,MY,MZ. Diese Register legen fest, in welche der vier Memory-Pages&lt;br /&gt;
das betreffende Adressregister P,X,Y,Z zeigt. Ausserdem gibt es die Schattenregister NP,NX,NY,NZ.&lt;br /&gt;
Das CPU-Signal zur Memory-Page-Umschaltung für ein bestimmtes Adressregister # bewirkt den&lt;br /&gt;
Austausch von M# und N#, wobei # hier für P,X,Y,Z steht.&lt;br /&gt;
Beim Sprung mit Memory-Page-Umschaltung &amp;amp;nbsp;H..&amp;amp;nbsp;&amp;amp;nbsp;J..&amp;amp;nbsp; werden also MP und NP getauscht.&lt;br /&gt;
Die Schattenregister NP,NX,NY,NZ können über IO-Befehle H.. mit einem Wert 0 bis 3 geladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Programmiersprache bola=&lt;br /&gt;
&lt;br /&gt;
Es gibt in dieser Sprache kein goto, kein break, kein continue,&lt;br /&gt;
und in jedem Programm oder Unterprogramm genau 1 return,&lt;br /&gt;
nämlich am Ende des Programms oder Unterprogramms.&lt;br /&gt;
&lt;br /&gt;
Die Strukturelemente sind folgende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
Bedingte Anweisung:  IF.c  ...  ENDF&lt;br /&gt;
Verzweigung:         IF.c  ...  ELSE  ...  ENDE&lt;br /&gt;
Case-Struktur:       CASE /nn  ...  NEXT /nn  ...  LAST&lt;br /&gt;
Do-while-Schleife:   LOOP  ...  RP.c&lt;br /&gt;
While-Schleife:      L.JP  ...  HERE  ...  RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c steht hier für die Sprungbedingung, nn steht für eine Zahl&lt;br /&gt;
fallend bis 00, NEXT /nn ist entsprechend mehrmals anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
RP.c steht für wiederhole falls c.&lt;br /&gt;
&lt;br /&gt;
Ebenso wie die Verzweigung zählt die Schleife mit Hineinsprung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
L.JP ... HERE ... RP.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als ein Block mit zwei Unterblöcken, die strenge Blockstruktur wird durch den Hineinsprung nicht durchbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Blockstruktur wird bei folgenden Operationen gebraucht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size:114%&amp;quot;&amp;gt;&lt;br /&gt;
ACQU  ...  UACQ&lt;br /&gt;
FASN  ...  UFAS&lt;br /&gt;
LN.1  ...  RELS    //    LN.2  ...  RELS&lt;br /&gt;
LX.1  ...  RELS    //    LX.2  ...  RELS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACQU  steht für Aquirieren von Residenten Variablen&amp;lt;br&amp;gt;&lt;br /&gt;
UACU  macht das Aquirieren rückgängig&lt;br /&gt;
&lt;br /&gt;
Residente Variable sind Variable, zB. vom Typ databox, welche&lt;br /&gt;
ausserhalb des Programms dauerhaft im RAM liegen. Sie werden&lt;br /&gt;
über ihre Nummer adressiert. ACQU bindet freie Zeiger, welche&lt;br /&gt;
im Programm vereinbart sind, an diese externen Variablen.&lt;br /&gt;
Dadurch sind diese Variablen unter Umgehung der Nummer wie&lt;br /&gt;
gewöhnliche im Programm vereinbarte Variable verfügbar.&lt;br /&gt;
&lt;br /&gt;
FASN  vergibt den Status &amp;quot;befestigt&amp;quot; an Variable vom Typ databox&amp;lt;br&amp;gt;&lt;br /&gt;
UFAS  macht die Vergabe rückgängig.&lt;br /&gt;
&lt;br /&gt;
Variable vom Typ databox, welche beim Start des Programms&lt;br /&gt;
automatisch installiert werden, sind von sich aus &amp;quot;befestigt&amp;quot;.&lt;br /&gt;
Das installieren kann aber auch durch Steckkarten-Kommandos&lt;br /&gt;
erfolgen, zB. wenn die Größe der databox erst zur Laufzeit des&lt;br /&gt;
Programms bekannt wird. Dann sind sie zunächst unbefestigt.&lt;br /&gt;
&lt;br /&gt;
LN.1  leiht den von einer databox in RAM1 belegten Speicherplatz an mehrere Variable aus, welche vorher als&lt;br /&gt;
nicht installiert vereinbart wurden und nach dem Ausleihen den Speicherplatz der databox überdecken.&lt;br /&gt;
&lt;br /&gt;
LX.1  leiht einen Teil des Speicherplatzes einer databox ab einem Startindex an mehrere Variable aus.&lt;br /&gt;
&lt;br /&gt;
Entsprechend LN.2 und LX.2 für RAM2. In RAM1 sind die mehreren&lt;br /&gt;
Variablen kurze Variable vom Typ data, oder selber wieder vom&lt;br /&gt;
Typ databox, in RAM2 sind sie stets wieder vom Typ databox.&lt;br /&gt;
&lt;br /&gt;
Das Ausleihen aus einer databox setzt voraus, dass die databox&lt;br /&gt;
befestigt ist, andernfalls wäre sie verschiebbar oder könnte&lt;br /&gt;
uninstalliert werden, so dass Schreibzugriffe auf die durch&lt;br /&gt;
das Ausleihen erzeugten Variablen Unheil anrichten könnten.&lt;br /&gt;
&lt;br /&gt;
RELS  macht das Ausleihen rückgängig.&lt;br /&gt;
&lt;br /&gt;
Bei den Operationen ACQU, FASN, LN/LX garantiert der Compiler,&lt;br /&gt;
dass das zugehörige UACQ, UFAS, RELS im selben Block liegt.&lt;br /&gt;
Die jeweilige Operation und das zugehörige Rückgängigmachen&lt;br /&gt;
bilden selber wieder einen Block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergänzung zu Sprungbedingungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann abgefragt werden, ob eine 1-oder 2-Byte-Variable&lt;br /&gt;
Null ist und ob sie gleich ff bzw. ffff ist.&lt;br /&gt;
&lt;br /&gt;
Die Kommandos  =TT.Z  und  =TT.M  können diese Bedingungen&lt;br /&gt;
speichern in einem speziellen Byte im RAM, dem TF-Merker.&lt;br /&gt;
Dazu schieben sie eine 1 oder 0 von oben auf den TF-Merker.&lt;br /&gt;
In gleicher Weise können Steckkarten-Kommandos nCOMMAND&lt;br /&gt;
beliebige Bedingungen ermitteln und speichern.&lt;br /&gt;
&lt;br /&gt;
Es gibt bedingte Sprünge, welche die obersten 3 Bit des&lt;br /&gt;
TF-Merker mittels einer Wahrheitstabelle abfragen. Dabei&lt;br /&gt;
können bis zu 3 Bits wieder vom TF-Merker entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mittels der Routinen =PP.r, =PZ.r, =PS.r ist es möglich,&lt;br /&gt;
solche Bedingungen in einer 1- oder 2-Byte-Variablen zu&lt;br /&gt;
speichern, zu verANDen und zu verORen. Damit lassen&lt;br /&gt;
sich beliebig komplexe Sprungbedingungen berechnen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterprogramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache gibt es keine functions mit&lt;br /&gt;
Rückgabewert, sondern nur einfache Unterprogramme, bei&lt;br /&gt;
welchen alle Parameter gleichberechtigt sind. Es werden&lt;br /&gt;
ausschließlich Zeiger übergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variablen vom Typ FIX:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ihre Werte sind Teil des Programmcodes und liegen dort am Ende.&lt;br /&gt;
Der gesamte Speicherbereich dieser Werte kann als &amp;quot;FIXBOX&amp;quot; vom&lt;br /&gt;
Programm abgetrennt werden und dann mittels eines speziellen&lt;br /&gt;
Werkzeugs bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=97272</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=97272"/>
		<updated>2017-09-12T04:21:01Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &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 einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. 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. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&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. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; 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 &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). 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 (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im 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. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; 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 Lötzinn-Kügelchen und Flussmittel.&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: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&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 oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&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! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&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;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. 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. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&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;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&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.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. 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. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. 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. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&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 darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&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 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;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&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 sondern 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 sind 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 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 das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, 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 °C 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 °C) ü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 ;-) (irreführend)&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 zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt 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;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, 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;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&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; (z. B. 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. 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 Glaskeramikfeld-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 (16 Watt). 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 bis 5 mm breit, ebenfalls etwa 0,2 mm 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 wird 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. Dies 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, besteht darin, 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ötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei 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 :-D. 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 dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 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 dies hier zuerst beschrieben.&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 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), 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  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das 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 SMDs 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 ICs 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.ä. erhältlich ist, 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 annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die 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 dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und 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; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&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). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&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 diese, 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öchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem 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 ICs 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 Benzins 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;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld 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 Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&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 auseinander bringen. 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ötzinn &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 Möglichkeit ist mit 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-Bauteil 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 zwei 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. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. 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;
Alles wird 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;
** [https://www.youtube.com/watch?v=5uiroWBkdFY 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=KOoOpHZmIiA 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;
**[http://www.bienert-dortmund.de/löten-1/ SMD Bauteile Löten mit einer Dampfphasenlötanlage]&lt;br /&gt;
&lt;br /&gt;
* Lernset für das SMD Löten&lt;br /&gt;
** [http://www.ramser-elektro.at/shop/bausaetze-und-platinen/platine-mit-smd-bauteilen-fuer-loetuebungen/ Billiges Lernset für das Erlernen des SMD Lötens]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://qrpbuilder.com/wp-content/uploads/2016/11/smd-device-041510.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;br /&gt;
**[http://www.bienert-dortmund.de/löten-1/ Dampfphasenlötanlage]&lt;br /&gt;
** [http://frgmnt.org/w/wp-content/uploads/2015/04/NeedleCodes-updated.png  Tabelle Nadelfarben] &lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97270</id>
		<title>ARM-elf-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=97270"/>
		<updated>2017-09-12T04:19:32Z</updated>

		<summary type="html">&lt;p&gt;Mrhat2010: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial behandelt die Programmierung von ARM Mikrocontrollern mithilfe des ARM-elf-GCC Compilers. Die meisten Codebeispiele wurden mit WinARM übersetzt. &lt;br /&gt;
Vorerst wird sich dieses Tutorial an die &#039;&#039;&#039;[[LPC2000|LPC-Reihe von NXP]]&#039;&#039;&#039; richten.&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
Komplette Boards mit ARM7-Kern kann man von folgenden Webseiten beziehen:&lt;br /&gt;
* [http://shop.mikrocontroller.net/ Mikrocontroller.net]&lt;br /&gt;
* [http://www.olimex.com/dev/index.html Olimex]&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists]&lt;br /&gt;
* [http://www.keil.com/dd/arm7chips.asp Keil] (404)&lt;br /&gt;
* [http://www.mct.de/product/sbc.html#arm MCT PAULundSCHERER]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7-Board herstellen möchte kann man die Schaltpläne der Olimex-Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* Windows: [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Linux/Mac OS X: [http://www.mikrocontroller.net/en/arm-gcc GCC-Komplettpaket]&lt;br /&gt;
* (Alternative: [http://www.gnuarm.com/ GNU ARM])&lt;br /&gt;
* [http://www.semiconductors.philips.com/files/markets/microcontrollers/philips_flash_utility.zip Philips Flashtool] Offizielles Programmiertool für Windows&lt;br /&gt;
&lt;br /&gt;
* Optional: [http://sourceforge.net/projects/lpc21isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux (in WinARM und Linux-/Mac-Paket bereits enthalten)&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit AVR-Mikrocontrollern mit WinAVR und ähnlichen Entwicklungsumgebungen programmiert hat, musste man außer seinem C-Code und dem daraus entstehenden HEX-File nicht viel beachten.&lt;br /&gt;
Bei der Programmierung von ARM-Mikrocontrollern muss man aber bedenken, dass es (noch? ;-) ) keine Standard-Linkerscripte und -Startupcodes in WinARM gibt.&lt;br /&gt;
WinAVR nimmt einem diese Arbeit mit Standarddateien ab, so dass man bei WinAVR meistens nicht in Berührung damit kommt. Im Netz kursieren viele dieser Linkerscripte und Startupcodes. Wir empfehlen die von uns getesteten Scripte zu verwenden, damit keine unschönen Phänomene auftreten (zum Beispiel fehlende Interrupts). &lt;br /&gt;
// Scripte befinden sich vorerst in den WinARM-Examples.&lt;br /&gt;
&lt;br /&gt;
== Bevor wir starten ==&lt;br /&gt;
Im &#039;&#039;&#039;[[AVR-GCC-Tutorial]]&#039;&#039;&#039; werden Grundlagen erklärt, die sicherlich nützlich sind (Makefiles, Programmablauf in einem Mikrocontroller, etc.). Wir möchten hiermit auf das AVR-GCC-Tutorial verweisen und gehen nicht nochmal auf diese Themen ein.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man sich vergewissern dass der Controller mit Hilfe des Bootloaders angesprochen werden kann. Hierzu verwendet man am besten das Flash-Tool von Philips um die DEVICE PART ID auszulesen. Falls dies fehlschlägt, sollte man die Verbindung zum Mikrocontroller überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== Länge von Variablentypen ===&lt;br /&gt;
Die Länge der jeweiligen Variablentypen unterscheidet sich durchaus von denen des AVRs.&lt;br /&gt;
Folgendes ist beim ARM-elf-GCC Compiler gültig:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;char&#039;&#039;&#039;&lt;br /&gt;
| 1 Byte&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;short&#039;&#039;&#039;&lt;br /&gt;
| 2 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;int&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;float&#039;&#039;&#039;&lt;br /&gt;
| 4 Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;double&#039;&#039;&#039;&lt;br /&gt;
| 8 Bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Das erste Programm ==&lt;br /&gt;
Die meisten Sourcecodes wurden für einen LPC2124 mit WinARM compiliert. Hierbei muss man beachten, dass in einigen Header-Dateien die Register (z.&amp;amp;nbsp;B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in die einzubindende Header-Datei ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Ausschnitt aus der Header-Datei lpc2114.h des GNUARM-Projekts (bei WinARM in &amp;lt;arch/philips/lpc2114.h&amp;gt;) (auch gültig für LPC2124):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*##############################################################################&lt;br /&gt;
## GPIO - General Purpose I/O&lt;br /&gt;
##############################################################################*/&lt;br /&gt;
&lt;br /&gt;
#define GPIO0_IOPIN     (*(REG32 (0xE0028000)))&lt;br /&gt;
#define GPIO0_IOSET     (*(REG32 (0xE0028004)))&lt;br /&gt;
#define GPIO0_IODIR     (*(REG32 (0xE0028008)))&lt;br /&gt;
#define GPIO0_IOCLR     (*(REG32 (0xE002800C)))&lt;br /&gt;
&lt;br /&gt;
#define GPIO1_IOPIN     (*(REG32 (0xE0028010)))&lt;br /&gt;
#define GPIO1_IOSET     (*(REG32 (0xE0028014)))&lt;br /&gt;
#define GPIO1_IODIR     (*(REG32 (0xE0028018)))&lt;br /&gt;
#define GPIO1_IOCLR     (*(REG32 (0xE002801C)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.&amp;amp;nbsp;B. einen LPC2106 und die von der Keil GmbH bereitgestellte Header-Datei für diesen Controller, weichen die Bezeichnungen von denen in der GNUARM-Definition zum Teil deutlich ab. In WinARM ist die Datei von Keil enhalten und entsprechend benannt (&amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* General Purpose Input/Output (GPIO) */&lt;br /&gt;
#define IOPIN          (*((volatile unsigned long *) 0xE0028000))&lt;br /&gt;
#define IOSET          (*((volatile unsigned long *) 0xE0028004))&lt;br /&gt;
#define IODIR          (*((volatile unsigned long *) 0xE0028008))&lt;br /&gt;
#define IOCLR          (*((volatile unsigned long *) 0xE002800C))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind, hilft ein Blick in die Header-Datei des Controllers weiter, oder man passt eine projektspezifische Kopie der Datei an.&lt;br /&gt;
&lt;br /&gt;
=== Nutzung der I/O Ports ===&lt;br /&gt;
Zum Behandeln von I/O-Ports sind die Register &amp;quot;IOPIN&amp;quot;, &amp;quot;IOSET&amp;quot;, &amp;quot;IOCLR&amp;quot; und &amp;quot;IODIR&amp;quot; nötig.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;IOPIN&#039;&#039;&#039;&lt;br /&gt;
| Liest die Zustände des angegebenen Ports ein&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOSET&#039;&#039;&#039;&lt;br /&gt;
| Setzt die angegebenen Pins auf 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IOCLR&#039;&#039;&#039;&lt;br /&gt;
| Setzt den Zustand des angegebenen Pins auf 0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IODIR&#039;&#039;&#039;&lt;br /&gt;
| Bestimmt welcher Pin ein Ausgang(1) bzw. ein Eingang(0) ist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In dem folgenden Code wird Pin 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ) {  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten will, &#039;&#039;setzt&#039;&#039; man das entsprechende Bit in IOCLR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  GPIO0_IODIR |= ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf Ausgang&lt;br /&gt;
  GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 ); // Pin 25 auf HIGH schalten&lt;br /&gt;
&lt;br /&gt;
  for( int i = 0; i &amp;lt; 300000; i++ ){ // Etwas warten&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  GPIO0_IOCLR = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
&lt;br /&gt;
  while( 1 ){  // Endlos-Schleife&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch wie geht man nun mit dem Setzen und Löschen einzelner Bits um?&lt;br /&gt;
In Variablen/Register benutzt man am besten logische Verknüpfungen, wie sie bereits im AVR-GCC-Tutorial beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn allerdings mit den I/O-Ports gearbeitet wird, sollten die IOSET- und IOCLR-Register benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
GPIO0_IOSET  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf HIGH schalten&lt;br /&gt;
GPIO0_IOCLR  = ( 1&amp;lt;&amp;lt;25 );  // Pin 25 auf LOW schalten&lt;br /&gt;
GPIO0_IOCLR |= ( 1&amp;lt;&amp;lt;25 );  // Falsch! IOCLR darf nur geschrieben werden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Technik der IOSET-/IOCLR-Register an Stelle klassischer Port-Register vermeidet das in [http://www.mikrocontroller.net/articles/AVR_PIC_51-Vergleich#Interrupt-feste_Programmierung_von_I.2FO-Ports Interrupt-sichere Programmierung von I/O-Ports] beschriebene Problem.&lt;br /&gt;
&lt;br /&gt;
== Systemeinstellungen (System Control Block)==&lt;br /&gt;
Dass ein ARM generell komplexer als ein handelsüblicher AVR oder PIC ist, sollte jedem geläufig sein. Hier kann man am Controller jede Menge (falsch) einstellen.&lt;br /&gt;
In diesem Abschnitt werden die verschiedenen Register und ihre Bedeutungen beim LPC2xxx erklärt:&lt;br /&gt;
&lt;br /&gt;
===Phase locked loop===&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;PLLCFG (SCB_PLLCFG)&#039;&#039;&#039;&lt;br /&gt;
| Das PLL Configuration Register hält den Multiplikator für die interne PLL-Schaltung. Diese ermöglicht es, die Taktrate des Prozessors zu erhöhen. Zum Beispiel: Ein angeschlossener Quarz mit 10 MHz x 4 (mit Hilfe der PLL) = 40 MHz Prozessortakt. Bei Bedarf kann auch ein Teiler eingestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLCON (SCB_PLLCON)&#039;&#039;&#039;&lt;br /&gt;
| Mit dem PLL Control Register kann die PLL aktiviert werden&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLSTAT (SCB_PLLSTAT) &#039;&#039;&#039;&lt;br /&gt;
| Im PLL Status Register werden Informationen bezüglich der PLL gespeichert, z.&amp;amp;nbsp;B. der aktuelle Multiplikator-Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PLLFEED (SCB_PLLFEED)&#039;&#039;&#039;&lt;br /&gt;
| Damit Änderungen an PLLCON und PLLCFG übernommen werden, muss erst in dieses Register eine &amp;quot;Feed-Sequenz&amp;quot; geschrieben werden. Die Feed-Sequenz wird im Codebeispiel weiter unten dargestellt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ein Codebeispiel zur Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC	14745000	// Die Frequenz der Taktquelle&lt;br /&gt;
#define PLL_M	4		// Der Multiplikator für den CPU-Takt&lt;br /&gt;
#define PLL_P	2		// Der Teiler für F_CCO (muss zwischen 156 MHz und 320 MHz liegen)&lt;br /&gt;
&lt;br /&gt;
#define CCLK	(PLL_M * FOSC) //Die CPU frequenz nochmal als Zahlenwert definiert&lt;br /&gt;
&lt;br /&gt;
// Das PLOCK-Bit im PLLSTAT-Register gibt an, ob die PLL auf die konfigurierte  Frequenz eingestellt ist.&lt;br /&gt;
#define PLOCK (1&amp;lt;&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
    InitPLL&lt;br /&gt;
*/&lt;br /&gt;
void InitPLL(void) &lt;br /&gt;
{&lt;br /&gt;
  SCB_PLLCFG = (PLL_M-1)|((PLL_P-1)&amp;lt;&amp;lt;5); // M=4 und P=2 (Multiplikatoren von 0 sind nicht erlaubt)&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Nochmal nach rechnen:&lt;br /&gt;
  CPU TAKT = PLL_M * FOSC = 4 * 14745000 Hz = 58980000 Hz&lt;br /&gt;
  CCO TAKT = 2 * PLL_P * PLL_M * FOSC = 2 * 2 * 4 * 14745000 Hz = 235920000 Hz&lt;br /&gt;
&lt;br /&gt;
  Mit diesen Werten ist alles innerhalb der Spezifikationen aus dem Datenblatt.  &lt;br /&gt;
&lt;br /&gt;
  Der CCO (Current Controlled Oscillator) ist ein Bestandteil der PLL.&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x01; // PLL aktivieren&lt;br /&gt;
&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed-Sequenz&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
  while ( !( SCB_PLLSTAT &amp;amp; PLOCK ) ); // Darauf warten, dass die Änderungen übernommen werden &lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt folgende Werte:&lt;br /&gt;
  1 - bei unter 20 Mhz&lt;br /&gt;
  2 - bei 20-40 Mhz &lt;br /&gt;
  3 - bei über 40 Mhz&lt;br /&gt;
  */&lt;br /&gt;
  MAM_MAMTIM = 3; &lt;br /&gt;
&lt;br /&gt;
  SCB_PLLCON = 0x03; // PLL aktivieren und mit dem internen Taktgeber verbinden&lt;br /&gt;
  SCB_PLLFEED = 0xAA;  //PLL Feed Sequence&lt;br /&gt;
  SCB_PLLFEED = 0x55;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum schreiben wir als Multiplikator (PLL_M-1) und (PLL_P-1) in SCB_PLLCFG? Der Multiplikator 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2, usw.&lt;br /&gt;
&lt;br /&gt;
Man muss also immer &amp;quot;1&amp;quot; von dem gewünschten PLL-Wert abziehen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur PLL befinden sich im Controller-Handbuch (beim LPC2124 ab Seite 60 und beim LPC2106 ab Seite 43).&lt;br /&gt;
&lt;br /&gt;
=== VPBDivider ===&lt;br /&gt;
Die gesamte Peripherie ( SPI, UART, etc. ) des ARMs hängt am sogenannten &amp;quot;VLSI Peripheral Bus&amp;quot;. Mithilfe des VPBDIV-Registers kann man die Taktfrequenz dieses Busses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gebrauchen kann man das, wenn man die gesamte Peripherie des Systems drosseln möchte. Der Peripherie-Takt kann ohne Probleme so schnell sein wie der Prozessor-Takt.&lt;br /&gt;
&lt;br /&gt;
=== Zwischenstand ===&lt;br /&gt;
Generell sollte man Dinge wie Multiplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.&amp;amp;nbsp;B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define FOSC 14745000 // Quarzfrequenz&lt;br /&gt;
#define PLL_M 4  // PLL Multiplikator&lt;br /&gt;
#define VPBDIV_VAL 1 // Teiler des Peripherie-Takts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Accelerator Module ===&lt;br /&gt;
Mit den MAM-Registern lässt sich der Speicherzugriff des LPC noch etwas optimieren.&lt;br /&gt;
Die nötigen Register:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;MAMCR&#039;&#039;&#039;&lt;br /&gt;
| Das Control-Register des MAMs beinhaltet den MAM-Modus. Hier kann eingestellt werden, ob die MAM-Funktionen gar nicht, teilweise oder vollständig aktiviert sind.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;MAMTIM &#039;&#039;&#039;&lt;br /&gt;
| Im Timing-Register wird bestimmt, wieviele Prozessortakte benutzt werden, um auf den Flashspeicher zuzugreifen. Was für welchen Controller geeignet ist, wird in der nächsten Tabelle erklärt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen an den MAM-Register könnten in eurem Code beispielsweise so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
MAM_MAMCR = 0; // MAM aus&lt;br /&gt;
MAM_MAMTIM = 3; // MAM fetch cycle to 3 cclk (&amp;gt;40MHz)&lt;br /&gt;
MAM_MAMCR = 2; // MAM vollständig aktiviert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die korrekte Einstellung von &#039;&#039;MAMTIM&#039;&#039; gibt es auf Seite 77 im LPC2124-Handbuch einen Hinweis, der die Einstellungen erklärt. Kurze Zusammenfassung:&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;System Clock bis 20MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=1;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock von 20MHz bis 40MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=2;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;System Clock ab 40 MHz&#039;&#039;&#039;&lt;br /&gt;
| MAMTIM=3;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
Um den UART zu aktivieren, sind in der Minimalkonfiguration folgende Register nötig (n steht für den jeweiligen UART):&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LCR&#039;&#039;&#039;&lt;br /&gt;
| Das Line Control Register bestimmt das Format, in dem Daten empfangen oder gesendet werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_DLL/UARTn_DLM&#039;&#039;&#039;&lt;br /&gt;
| In diesen Registern wird der Frequenzteiler hinterlegt, damit der Baudratengenerator den richtigen Ausgabetakt erzeugt. Der Teiler lässt sich durch die Formel &amp;lt;math&amp;gt;Teiler = PCLK / (Baudrate * 16)&amp;lt;/math&amp;gt; errechnen, wobei PCLK (der Peripherietakt) nicht unbedingt mit dem CPU-Takt identisch sein muss (Siehe [[ARM-elf-GCC-Tutorial#VPBDivider|VPBDIV]]).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_FCR&#039;&#039;&#039;&lt;br /&gt;
| Im FIFO Control Register kann man Einstellungen am FIFO des jeweiligen UARTs vornehmen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_LSR&#039;&#039;&#039;&lt;br /&gt;
| Im Line Status Register stehen Status- und Fehler-Informationen des jeweiligen UARTs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für den Datenverkehr sind folgende Register definiert: &lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;UARTn_RBR&#039;&#039;&#039;&lt;br /&gt;
| Das Recieve Buffer Register beinhaltet alle empfangenen Datenbytes.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UARTn_THR&#039;&#039;&#039;&lt;br /&gt;
| Im Transmitter Holding Register werden die Daten abgelegt, die über den UART versendet werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgende Funktion initialisiert den UART0 des LPC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void InitUART0(u32 baud) {&lt;br /&gt;
&lt;br /&gt;
  PINSEL0 &amp;amp;= ~((0x3&amp;lt;&amp;lt;2) | (0x3&amp;lt;&amp;lt;0)); // Pin-Funktion löschen (zur Sicherheit)&lt;br /&gt;
  //         rxd 0     txd 0&lt;br /&gt;
  PINSEL0 |= (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0);        // Pin-Funktion zuweisen&lt;br /&gt;
	&lt;br /&gt;
  // BAUD RATE EINSTELLEN&lt;br /&gt;
  // Divisor Latch Access Bit setzen (DLAB)&lt;br /&gt;
  // damit erhalten wir Zugriff auf den Baudraten-Teiler&lt;br /&gt;
  UART0_LCR |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
&lt;br /&gt;
  // Nun haben wir Zugriff auf DLL (untere 8 bit des Teilers)&lt;br /&gt;
  // und DLM (obere 8 bit des Teilers). Auffällig ist hier, &lt;br /&gt;
  // dass der 16-Bit-Wert auf zwei 32-Bit-Addressen aufgeteilt ist&lt;br /&gt;
&lt;br /&gt;
  // Teiler = PCLK / (baudrate * 16)&lt;br /&gt;
  // Im Beispiel haben wir CCLK und PCLK gleich gesetzt&lt;br /&gt;
  // Untere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLL = (CCLK / (baud*16)) &amp;amp; 0xFF;&lt;br /&gt;
  // Obere 8 Bit des Teilers&lt;br /&gt;
  UART0_DLM = ((CCLK / (baud*16)) &amp;amp; 0xFF00)&amp;gt;&amp;gt;8;&lt;br /&gt;
	&lt;br /&gt;
  // DLAB wieder löschen&lt;br /&gt;
  UART0_LCR &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	&lt;br /&gt;
  // 9 bit, 1 stop bit, keine parität&lt;br /&gt;
  UART0_LCR = (1&amp;lt;&amp;lt;1) | 1;&lt;br /&gt;
&lt;br /&gt;
  // UART0-FIFO aktivieren&lt;br /&gt;
  UART0_FCR = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem man die Funktion aufgerufen hat, kann man ganz einfach ein Byte senden, der Code dafür ist so ähnlich wie beim AVR:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hier fragen wir das &amp;quot;Transmitter Holding Register Empty&amp;quot;-Bit&lt;br /&gt;
// im &amp;quot;Line Status Register&amp;quot; ab und ermitteln, ob sich noch ein Byte im &lt;br /&gt;
// Sendepuffer befindet (der Sendepuffer ist ein FIFO-Stack)&lt;br /&gt;
while (!(UART0_LSR &amp;amp; (1&amp;lt;&amp;lt;5))) continue; // Warten, bis der Sendepuffer geleert ist&lt;br /&gt;
&lt;br /&gt;
// Neuen Wert in das &amp;quot;Transmitter Holding Register&amp;quot; schreiben&lt;br /&gt;
UART0_THR = &#039;a&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um ein Byte zu empfangen, muss erst einmal überprüft werden, ob sich ein ungelesenes Byte am Anfang des FIFO-Stacks befindet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  //Auf &amp;quot;Receiver Data Ready&amp;quot;-Bit (RDR) im &amp;quot;Line Status Register&amp;quot; (LSR) warten&lt;br /&gt;
  while((U0LSR &amp;amp; 1) == 0); &lt;br /&gt;
  &lt;br /&gt;
  //Byte vom Stack einlesen (&amp;quot;Receiver Buffer Register&amp;quot;, RBR)&lt;br /&gt;
  x  = U0RBR;  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Realtime Clock (RTC)  ==&lt;br /&gt;
Die RTC der LPC-Controller ist eines der am einfachsten zu nutzenden Peripherie-Bestandteile. Mit ein paar Registerzugriffen lässt sie sich aktivieren und einstellen.&lt;br /&gt;
&lt;br /&gt;
Um sie zu aktivieren, muss man zunächst einen Teiler für die Systemfrequenz ermitteln. CCLK ist der aktuelle CPU-Takt in Hertz.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Integerteil des Teilers berechnen&lt;br /&gt;
RTC_PREINT = (CCLK / 32768)-1;&lt;br /&gt;
// Fließkommateil des Teilers berechnen&lt;br /&gt;
RTC_PREFRAC = CCLK - ((RTC_PREINT+1) * 32768);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die RTC ganz einfach aktivieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RTC_CCR = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun läuft die RTC schon! Nur müssen wir natürlich noch eine andere Zeit und ein anderes Datum einstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//Stunde, Minute und Sekunde einstellen&lt;br /&gt;
RTC_HOUR = 11; &lt;br /&gt;
RTC_MIN = 55;&lt;br /&gt;
RTC_SEC = 0;&lt;br /&gt;
&lt;br /&gt;
//Tag (Day Of Month), Monat und Jahr einstellen&lt;br /&gt;
RTC_DOM = 12; &lt;br /&gt;
RTC_MONTH = 3;&lt;br /&gt;
RTC_YEAR = 2005;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die RTC hat noch weitere Register zum Auslesen weiterer Werte wie z.&amp;amp;nbsp;B. dem Tag des Jahres, dem Tag der Woche usw.&lt;br /&gt;
&lt;br /&gt;
Ausserdem bietet die RTC viele Interrupt-Funktionen, die z.&amp;amp;nbsp;B. dazu genutzt werden können, den Controller nach einer bestimmten Zeit aus dem Ruhezustand zu wecken. Weitere Informationen gibt es im LPC2106-Benutzerhandbuch ab Seite 157.&lt;br /&gt;
&lt;br /&gt;
== Interrupts ==&lt;br /&gt;
In diesem Kapitel wird das Interruptsystem der LPCs erklärt.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Komponenten sind:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vectored Interrupt Controller (VIC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Register und -Bits der jeweiligen Peripherie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im VIC werden die generellen Einstellungen vorgenommen, die alle Interrupts betreffen. Außerdem gibt es bei der meisten Peripherie auch ein Register, welches ein Interrupt Clear Bit beinhaltet; hierzu später mehr.&lt;br /&gt;
&lt;br /&gt;
=== Interruptarten ===&lt;br /&gt;
Grundsätzlich unterscheidet man hier zwischen IRQ und FIQ (Fast Interrupt Request). Diese unterscheiden sich darin, wie schnell in die ISR gesprungen wird.&lt;br /&gt;
//TODO: Die benötigte Zeit wiederfinden, Quelle leider nicht mehr auffindbar.&lt;br /&gt;
Ob ein Interrupt ein IRQ oder ein FIQ ist wird in dem Register &amp;quot;VICIntSelect&amp;quot; deklariert.&lt;br /&gt;
&lt;br /&gt;
=== Interruptcontroller ===&lt;br /&gt;
Grundsätzlich muss neben der Interruptart nur noch die Adresse und die dazugehörige Peripherie eingestellt werden.&lt;br /&gt;
In einem der VICVectAddr&#039;&#039;n&#039;&#039;-Register wird die Adresse der jeweiligen Interrupt-Serviceroutine angegeben.&lt;br /&gt;
Im passenden VICVectCntl&#039;&#039;n&#039;&#039;-Register gibt man die Peripherie an, die diesen Interrupt auslösen soll ( z.&amp;amp;nbsp;B. ist in VICVectCntl&#039;&#039;n&#039;&#039; ein UART-Interrupt ?).&lt;br /&gt;
&lt;br /&gt;
Um alle eingestellten Interrupts zu aktivieren, benutzt man das VICIntEnable-Register.&lt;br /&gt;
&lt;br /&gt;
Hier etwas Beispielcode:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define VIC_UART0 6&lt;br /&gt;
&lt;br /&gt;
VICIntEnClear = 0xFFFFFFFF;           // Alle Interrupts löschen&lt;br /&gt;
VICIntSelect = 0x00000000;            // Alle Interrupts als IRQ&lt;br /&gt;
&lt;br /&gt;
VICVectAddr0=(unsigned long)ISR; // ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.&lt;br /&gt;
VICVectCntl0=(1&amp;lt;&amp;lt;5) | VIC_UART0;&lt;br /&gt;
VICIntEnable=(1&amp;lt;&amp;lt;VIC_UART0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was bedeutet VIC_UART0?&lt;br /&gt;
Alle Interrupts können von einer anderen Quelle ihren &amp;quot;Auslöser&amp;quot; bekommen. Damit ein Interrupt weiss, welche Quelle er nutzen soll, gibt man ihm die Peripherie an.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;Block&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;VIC Channel # &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Watchdog&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DbgCommRx)&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| ARM Core (DgbCommTx)&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Timer0&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Timer1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| UART0&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| UART1&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| PWM0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| I2C&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| SPI0&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| SPI1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| RTC&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| EINT0&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| EINT1&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| EINT2&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| EINT3&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| A/D-Wandler&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 19&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen hilft ein Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
Die ISR wird wie folgt deklariert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void); // Prototyp&lt;br /&gt;
&lt;br /&gt;
void __attribute__ ((interrupt(&amp;quot;IRQ&amp;quot;))) isr(void){&lt;br /&gt;
  // A lot of Work&lt;br /&gt;
  VICVectAddr = 0;       // Acknowledge Interrupt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls die Interrupts nicht funktionieren, hilft ein Blick in die Startup-Datei. Es müssen einige Vorbereitungen getroffen werden, damit Interrupts aus C heraus funktionieren können. Einen passenden Startup-Code gibt es bei den WinARM-Beispielen mit IRQ-Beispielen.&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI lässt sich ähnlich simpel wie bei einem AVR initialisieren.&lt;br /&gt;
{| border=1&lt;br /&gt;
| &#039;&#039;&#039;SPCCR&#039;&#039;&#039;&lt;br /&gt;
| Das SPCCR bestimmt die Taktfrequenz der jeweiligen SPI-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPCR&#039;&#039;&#039;&lt;br /&gt;
| Im SPCR werden die nötigen Einstellungen wie z.&amp;amp;nbsp;B. Master-Modus vorgenommen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SPDR&#039;&#039;&#039;&lt;br /&gt;
| Das SPDR ist ein bidirektionales Register, welches entweder zum Senden oder Lesen eines Bytes benutzt werden kann.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Codebeispiel für die Initialisierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PCB_PINSEL0 |= (1&amp;lt;&amp;lt;8)|(1&amp;lt;&amp;lt;10)|(1&amp;lt;&amp;lt;12)|(1&amp;lt;&amp;lt;14); //Pin Select für SPI0&lt;br /&gt;
&lt;br /&gt;
//Init SPI0&lt;br /&gt;
SPI0_SPCCR = 16; // Jeden 16. Clock - 1 SPI-Takt&lt;br /&gt;
SPI0_SPCR = (1&amp;lt;&amp;lt;5); //Master-Modus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das SPCCR-Register hält die Taktfrequenz des jeweiligen SPI bereit.&lt;br /&gt;
Grundsätzlich gilt:&lt;br /&gt;
Jeden &#039;&#039;n&#039;&#039;. Takt vom Prozessortakt kommt ein SPI-Takt.&lt;br /&gt;
Beispiel: 60 MHz Systemclock / 16 = 3,75 MHz SPI-Takt.&lt;br /&gt;
Allerdings muss der Teiler größer oder gleich 8 sein.&lt;br /&gt;
&lt;br /&gt;
Das Senden eines Bytes per SPI sieht so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SPI0_SPDR = x; // Schreibe &#039;x&#039; ins Datenregister&lt;br /&gt;
while (!(SPI_SPSR &amp;amp; (1&amp;lt;&amp;lt;7))); // Warte, bis der Datentransfer beendet ist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In der &amp;quot;Codesammlung&amp;quot; befindet sich eine I2C-Master-Bibliothek für den Polling-Betrieb. Diese Bibliothek findet ihr unter http://www.mikrocontroller.net/forum/read-4-281865.html.&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Status-Codes findet ihr unter http://www.semiconductors.philips.com/acrobat_download/various/8XC552_562OVERVIEW_2.pdf&lt;br /&gt;
===Verwendung===&lt;br /&gt;
Im folgenden Codebeispiel wird die Verwendung der Bibliothek erklärt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/philips/lpc2114.h&amp;gt; // Replace this file with your own header file&lt;br /&gt;
#include &amp;quot;i2c.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define DEVICEADDR 112&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
  unsigned char i2c_messages[5],readbyte;&lt;br /&gt;
  &lt;br /&gt;
  i2c_init();&lt;br /&gt;
  &lt;br /&gt;
  i2c_messages[0]=55;&lt;br /&gt;
  i2c_messages[1]=44;&lt;br /&gt;
  i2c_messages[2]=99;&lt;br /&gt;
&lt;br /&gt;
  //Write 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR);&lt;br /&gt;
  i2c_write(i2c_messages,3);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 1 byte&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  readbyte=i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  //Read 3 bytes&lt;br /&gt;
  i2c_start(DEVICEADDR+1);&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_read();&lt;br /&gt;
  i2c_readlast();&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  while(1){&lt;br /&gt;
    asm volatile(&amp;quot;nop&amp;quot;);         &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.com/fileadmin/pdf/insiders-guides/lpc/lpc-arm-book_rev10-screen.pdf Das LPC2000-Buch]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Anwendungshinweise von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo-Gruppe &amp;quot;LPC2000&amp;quot;]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC2000 Wiki-Eintrag auf µC.net]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects WinARM und viele Beispielcodes]&lt;br /&gt;
* [http://en.mikrocontroller.net/ Forum für WinARM und ARM-GCC allgemein]&lt;br /&gt;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net-Forum, die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM-Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung? Welches JTAG-Interface?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG-Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256103.html Wo kauft ihr eure ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-256677.html &amp;quot;Codedichte&amp;quot; von ARMs?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-259305.html ARM-Board minimal / Generelle Diskussion]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
[[Kategorie:Compiler]]&lt;/div&gt;</summary>
		<author><name>Mrhat2010</name></author>
	</entry>
</feed>