<?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=Michelle</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=Michelle"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Michelle"/>
	<updated>2026-04-10T10:08:53Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=98622</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=98622"/>
		<updated>2018-03-21T09:52:03Z</updated>

		<summary type="html">&lt;p&gt;Michelle: /* Weitere Informationsquellen */&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;
* [http://www.customwiringloom.com/ custom wiring loom,custom cable]&lt;br /&gt;
* [http://www.ourpcb.com/ Leiterplattenbestückung Leiterplattenfertigung Prototyp]&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>Michelle</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=98621</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=98621"/>
		<updated>2018-03-21T09:50:37Z</updated>

		<summary type="html">&lt;p&gt;Michelle: /* Weitere Informationsquellen */&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;
* [http://http://www.customwiringloom.com/custom wiring loom,custom cable]&lt;br /&gt;
* [https://www.ourpcb.com/Leiterplattenbestückung Leiterplattenfertigung Prototyp]&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>Michelle</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=98620</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=98620"/>
		<updated>2018-03-21T09:45:56Z</updated>

		<summary type="html">&lt;p&gt;Michelle: /* Weitere Informationsquellen */&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;
* [http://http://www.customwiringloom.com/custom wiring loom,custom cable]&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>Michelle</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Platinenhersteller&amp;diff=97699</id>
		<title>Platinenhersteller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Platinenhersteller&amp;diff=97699"/>
		<updated>2017-11-13T02:58:11Z</updated>

		<summary type="html">&lt;p&gt;Michelle: Lieferantenliste erweitern&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Vor- und Nachteile von Platinenherstellern/-lieferanten werden relativ häufig im [http://www.mikrocontroller.net/forum/platinen Forum] diskutiert (und führen ab und zu zu Flamewars ☺). Damit man schnell einen Überblick über die verschiedenen Möglichkeiten erhält, soll hier eine Liste zusammengetragen werden.&lt;br /&gt;
&lt;br /&gt;
Jeder kann/soll seinen Beitrag leisten, d.h. wenn man einen Platinenlieferanten kennt, der noch nicht erwähnt ist, einfach hinzufügen. Falls man den Hersteller nicht so gut kennt, einfach mal den Namen und die URL hinzufügen, es gibt sicherlich andere, die den Hersteller so gut kennen, dass sie sich zutrauen, ein Urteil über die Leistung zu fällen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigentümer oder Mitarbeiter von Firmen dürfen diese gerne eintragen, falls sie in der Liste noch nicht vorhanden sind. Beim Eintrag oder Änderungen bitte in der Zusammenfassung unbedingt darauf hinweisen, dass Sie über Ihre eigene Firma schreiben.&#039;&#039;&#039; Und bitte der Versuchung widerstehen, die Einträge mit werbeähnlichen Texten oder Werbung zu ergänzen. Zufriedene Kunden mögen bitte darauf achten, ihre Zufriedenheit so zu formulieren, dass nicht der Eindruck entsteht, der Eintrag sei von einem Hersteller zur &amp;quot;Verschönerung&amp;quot; gemacht worden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diese Seite kann nur von angemeldeten Benutzern bearbeitet werden!&#039;&#039;&#039; Bei neuen Einträgen bitte die Sortierung beachten.&lt;br /&gt;
&lt;br /&gt;
Einige Hinweise, Hilfestellungen zur Platinenfertigung und Auftragsvergabe gibt es auch in der [http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.6 de.sci.electronics-FAQ].&lt;br /&gt;
&lt;br /&gt;
Verschiedene Threads deuten an, dass &amp;quot;normaler&amp;quot; grüner Stopplack meistens die besseren Ergebnisse erzielt (http://www.mikrocontroller.net/topic/329356, http://www.mikrocontroller.net/topic/321295). Das kann je nach Hersteller schwanken. &lt;br /&gt;
&lt;br /&gt;
=== Preise ===&lt;br /&gt;
Zur besseren Vergleichbarkeit bei jedem Hersteller dazu schreiben, was &#039;&#039;&#039;eine doppelseitige durchkontaktierte Eurokarte (160mm x 100mm) mit deutscher MwSt.&#039;&#039;&#039; ohne Versand kostet.&lt;br /&gt;
Dazu noch die Lieferzeit und ob Lötstopplack und Bestückungsdruck dabei ist.&lt;br /&gt;
&#039;&#039;Zusätzlich&#039;&#039; kann man noch die Preise für andere Formate, Stückzahlen etc. dazu schreiben.&lt;br /&gt;
&lt;br /&gt;
Wichtiger Hinweis: Nicht überall ist der letzte Arbeitstag auch der Versandtag.&lt;br /&gt;
&lt;br /&gt;
Tip: Wer eine kleinere Platine fertigen lassen möchte und nur 3 Exemplare braucht sollte sich Aisler, Oshpark oder Ragworm anschauen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Schnellübersicht von Anbietern mit Online-Calculator (Lötstopplack, kein Bestückungsdruck, inkl. MwSt &amp;amp; Porto)&lt;br /&gt;
|-&lt;br /&gt;
! Anbieter !! Lagenanzahl !! Breite / mm !! Höhe / mm !! Dicke / mm !! Arbeitstage !! Preis / Euro !! ermittelt am&lt;br /&gt;
|-&lt;br /&gt;
| [[#AISLER|AISLER]]¹) || 1 || 160 || 100 || 1.6 || 7 || 25.60 || 2017-10-23&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#AISLER|AISLER]]¹) || 2 || 160 || 100 || 1.6 || 7 || 25.60 || 2017-10-23&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 1 || 160 || 100 || 1.6 || 7 || 59.50 || 2016-07-05&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 7 || 59.50 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 6 || 84.49 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 5 || 95.20 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 4 || 113.05 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 3 || 133.88 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 2 || 160 || 100 || 1.6 || 2 || 148.75 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 4 || 160 || 100 || 1.6 || 7 || 116.79 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 4 || 160 || 100 || 1.6 || 6 || 163.51 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 4 || 160 || 100 || 1.6 || 5 || 186.85 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 4 || 160 || 100 || 1.6 || 4 || 221.90 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 4 || 160 || 100 || 1.6 || 3 || 262.78 || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk_GmbH|Ätzwerk]] || 6 || 160 || 100 || 1.6 || 10 || 175.74 || 2016-07-05&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 12 || 56.93 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 10 || 61.30 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 8 || 65.65 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 7 || 78.75 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 5 || 96.20 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 4 || 118.02 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 3 || 193.54 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 2 || 237.18 || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista_Leiterplatten|Basista]] || 2 || 160 || 100 || 1.6 || 1 || 280.82 || 2016-10-06&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Becker_und_Müller|Becker und Müller]] || 2 || 160 || 100 || 1.6 || 12 || 101.79 || 2015-07-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Becker_und_Müller|Becker und Müller]] || 2 || 160 || 100 || 1.6 || 10 || 108.02 || 2015-07-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Becker_und_Müller|Becker und Müller]] || 2 || 160 || 100 || 1.6 || 7 || 120.49 || 2015-07-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Becker_und_Müller|Becker und Müller]] || 2 || 160 || 100 || 1.6 || 5 || 132.95 || 2015-07-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Becker_und_Müller|Becker und Müller]] || 2 || 160 || 100 || 1.6 || 4 || 195.26 || 2015-07-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Eurocircuits_GmbH|Eurocircuits]] || 1 || 160 || 100 || 1.6 || 7 || 56.85 || 2016-10-21&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Eurocircuits_GmbH|Eurocircuits]] || 2 || 160 || 100 || 1.6 || 7 || 68.91 || 2016-10-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Eurocircuits_GmbH|Eurocircuits]] || 2 || 160 || 100 || 1.6 || 5 || 96.87 || 2016-10-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Eurocircuits_GmbH|Eurocircuits]] || 2 || 160 || 100 || 1.6 || 2 || 236.64 || 2016-10-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Eurocircuits_GmbH|Eurocircuits]] || 4 || 160 || 100 || 1.6 || 7 || 149.70 || 2016-10-21&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#LEITON|LeitOn]] || 2 || 160 || 100 || 1.6 || 12 || 48.99 || 2014-09-16&lt;br /&gt;
|-&lt;br /&gt;
| [[#LEITON|LeitOn]] || 2 || 160 || 100 || 1.6 || 8 || 61.24 || 2014-09-16&lt;br /&gt;
|-&lt;br /&gt;
| [[#LEITON|LeitOn]] || 2 || 160 || 100 || 1.6 || 5 || 91.86 || 2014-09-16&lt;br /&gt;
|-&lt;br /&gt;
| [[#LEITON|LeitOn]] || 2 || 160 || 100 || 1.6 || 3 || 192.93 || 2014-09-16&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	1	|| 100 || 100 || 1.6 ||	5	||	47.24	|| 2017-03-09&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]]¹) ||	2	|| 160 || 100 || 1.6 ||	8	||	35.25	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	2	|| 100 || 100 || 1.6 ||	8	||	42.60	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	2	|| 100 || 100 || 1.6 ||	5	||	47.24	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	2	|| 100 || 100 || 1.6 ||	2	||	141.73	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]]¹) ||	4	|| 100 || 75 || 1.6 ||	9	||	38.81	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	4	|| 100 || 75 || 1.6 ||	5	||	70.21	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	4	|| 100 || 75 || 1.6 ||	2	||	210.63	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]]¹) ||	6	|| 100 || 75 || 1.6 ||	6	||	71.10	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	6	|| 100 || 75 || 1.6 ||	6	||	116.62	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	6	|| 100 || 75 || 1.6 ||	2	||	221.58	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]]¹) ||	8	|| 100 || 75 || 1.6 ||	6	||	103.14	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	8	|| 100 || 75 || 1.6 ||	6	||	186.83	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	8	|| 100 || 75 || 1.6 ||	2	||	354.98	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]]¹) ||	10	|| 100 || 75 || 1.6 ||	7	||	209.20	|| 2017-03-09&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||	10	|| 100 || 75 || 1.6 ||	7	||	617.61	|| 2017-03-09&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 8 || 114.37 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 7 || 145.29 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 5 || 165.90 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 4 || 217.43 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 3 || 243.19 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 2 || 268.96 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 2 || 160 || 100 || 1.6 || 1 || 320.48 || 2014-09-21&lt;br /&gt;
|- style=&amp;quot;background:#FFEBAD&amp;quot;&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 8 || 89.19 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 7 || 89.19 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 6 || 120.87 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 5 || 131.44 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 4 || 178.25 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 3 || 215.21 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|WEdirekt]] || 2 || 160 || 100 || 1.6 || 2 || 270.67 || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
¹) Lieferung 3stückweise, man muss also drei Platinen zu diesem Preis kaufen&lt;br /&gt;
&lt;br /&gt;
== Liste der Hersteller ==&lt;br /&gt;
&lt;br /&gt;
=== Deutschland ===&lt;br /&gt;
==== Übersicht ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Übersicht von Anbietern aus Deutschland&lt;br /&gt;
|-&lt;br /&gt;
! Anbieter !! PLZ !! Ort !! privat !! gewerblich !! Online-Calculator !! produziert in Deutschland !! ermittelt am&lt;br /&gt;
|-&lt;br /&gt;
| [[#Accent PCB GmbH|Accent PCB GmbH]] || 40212 || Düsseldorf || ? || ja || nein || [http://www.accentpcb.com/about-us.html teilweise] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ätzwerk GmbH|Ätzwerk GmbH]] || 85622 || Feldkirchen b. München || ja || ja || ja || ? || 2016-07-05&lt;br /&gt;
|-&lt;br /&gt;
| [[#am2s|am2s]] || 88376 || Königseggwald || ja || ja || nein || [http://www.am2s.de/pcb.html teilweise] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#andus electronic|Andus Electronic]] || 10997 || Berlin || ? || ja || nein || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#ANTtronic|ANTtronic]] || 53844 || Troisdorf || ? || ja || nein || ? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Basista Leiterplatten|Basista Leiterplatten]] || 46236 || Bottrop || ja || ja || ja || ja || 2016-10-06&lt;br /&gt;
|-&lt;br /&gt;
| [[#Bauer-Elektronik|Bauer-Elektronik]] || 66557 || Illingen || ja? || ja || nein || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Britze|Britze]] || 12099? || Berlin || ? || ja || ja || [http://www.britze.de/unternehmen-produktion.html ja] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#B&amp;amp;B Gruppe|B&amp;amp;B Gruppe]] || 09648 || Mittweida || ? || ja || nein || [http://www.bb-gruppe.de/handel/ teilweise] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Becker und Müller|Becker und Müller]] || 77790 || Steinach i.K. || ja || ja || ja || ja || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Contag|Contag]] || 13581 || Berlin || ? || ja || nein || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Christian Enzmann Gmbh|Christian Enzmann Gmbh]] || 82538 || Geretsried || ? || ja || nein || teilweise || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Deutschlaender Electronic GmbH|Deutschlaender Electronic GmbH]] || 74924 || Neckarbischofsheim || ? || ja || ja || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Elischer Leiterplatten|Elischer Leiterplatten]] ||  72574 || Bad Urach || ? || ? || nein || ? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Entwicklung &amp;amp; CNC|Entwicklung &amp;amp; CNC]] || 72805 || Lichtenstein || ? || ja || nein || ja || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#EPN Electroprint GmbH|EPN Electroprint GmbH]] ||  07806 ||  Neustadt an der Orla || ja? || ja || ja || [http://www.epn.de/de/home/geschichte.html ja] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Eurocircuits GmbH|Eurocircuits GmbH]] || 57612 || Kettenhausen || ? || ja || ja || teilweise || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Fischer Leiterplatten GmbH|Fischer Leiterplatten GmbH]] || 58454 || Witten || nein || ja || ja || [http://www.fischer-leiterplatten.de/ueber-uns.htm ja] || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#GLS Leiterplatten-Service GmbH|GLS Leiterplatten-Service GmbH]] || 09221 || Neukirchen || ja? || ja || nein || ja || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#HAKA Elektronik-Leiterplatten GmbH|HAKA Elektronik-Leiterplatten GmbH]] || 66583 || Spiesen-Elversberg || ja? || ja || ja || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#IBR Leiterplatten GmbH &amp;amp; Co. KG|IBR Leiterplatten GmbH &amp;amp; Co. KG]] || 74906 || Bad Rappenau || nein || ja || ja || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#ILFA Feinstleitertechnik GmbH|ILFA Feinstleitertechnik GmbH]] || 30559 || Hannover || ? || ja || nein || teilweise || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#kessler systems GmbH|kessler systems GmbH]] || 88376 || Königseggwald || ? || ja || nein || teilweise || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#LEITON|LEITON]] || 12099 || Berlin || ja || ja || ja || teilweise || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Leiterplatten-Express-Service GmbH|Leiterplatten-Express-Service GmbH]] || 63329 || Egelsbach || ? || ja || nein || ja || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#Microcirtec|Microcirtec]] ||  47805 || Krefeld || nein || ja || ja || ja || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[#MITTELSTAEDT|MITTELSTAEDT Leiterplatten]] ||  121005 || Berlin || ja || ja || ja || ja || 2017-07-18&lt;br /&gt;
|-&lt;br /&gt;
| [[#MME-Leiterplatten|MME-Leiterplatten]] || 53604 || Bad Honnef || ? || ja || ja || ja? || 2014-09-21&lt;br /&gt;
|-&lt;br /&gt;
| [[#M &amp;amp; V Leiterplatten - Vertriebs GmbH|M &amp;amp; V Leiterplatten - Vertriebs GmbH]] || 56355 || Bettendorf || ? || ja || ja || ja || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#Multi_Printed_Circuit_Boards_Ltd.|Multi-CB]] ||  85649 || Brunnthal || nein || ja || ja || ? || 2015-02-16&lt;br /&gt;
|-&lt;br /&gt;
| [[#Onlineshop WEdirekt|Onlineshop WEdirekt]] || 74585 || Rot am See || ja || ja || ja || [http://www.wedirekt.de/index.php/web/live/de/wedirekt/ueberuns/die_produktion/die_produktion_1.php ja] || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Joker|PCB Joker GmbH]] || 12099 || Berlin || ? || ja || ja || ja || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#PCB Pool|PCB Pool]] || 65326 || Aarbergen || ja || ja || ja || teilweise || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#Precoplat|Precoplat]] || 47805 || Krefeld || ? || ja || ja || ja || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#Q-print/Q-PCB|Q-print/Q-PCB]] || 68542 || Heddesheim || ? || ja || ja || nein? || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#Richter Elektronik GmbH|Richter Elektronik GmbH]] || 57392 || Schmallenberg || ? || ja || nein || ja || 2017-05-10&lt;br /&gt;
|-&lt;br /&gt;
| [[#Rinde PCB GmbH|Rinde PCB GmbH]] || 42899 || Remscheid || ? || ja || ja || ja || 2015-01-23&lt;br /&gt;
|-&lt;br /&gt;
| [[#Ruwel|Ruwel]] || 47608 || Geldern || nein? || ja || nein || teilweise || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
| [[#Steimer Leiterplatten GmbH|Steimer Leiterplatten GmbH]] || 42327 || Wuppertal || ja || ja || ja || ja || 2014-09-20&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 2PrintBeta ====&lt;br /&gt;
Homepage: http://www.2printbeta.de/Dienstleistungen/PCB-Stencil-Service::337.html&lt;br /&gt;
* SMD-Schablonen aus Mylar gelasert, preiswert und schnell. Masken bis zu 0.5mm Pitch problemlos möglich. &lt;br /&gt;
* Super günstig, super flott!&lt;br /&gt;
* Keine Begrenzung der Padanzahl.&lt;br /&gt;
* Als Student erhalten Sie 25% Rabatt! (Nur gegen Nachweis des Studentenausweises!)&lt;br /&gt;
&lt;br /&gt;
==== Accent PCB GmbH ====&lt;br /&gt;
Homepage: http://www.accentpcb.com/duitsland-home.html&lt;br /&gt;
&lt;br /&gt;
Eigendarstellung (vgl. auch [http://www.mikrocontroller.net/topic/316646 Forenthread]):&lt;br /&gt;
* Leiterplatten &amp;quot;ab 75€ - €99€&amp;quot; &lt;br /&gt;
* erfahrene Techniker&lt;br /&gt;
* Beratung gratis&lt;br /&gt;
* Produktion in Asien und Europa&lt;br /&gt;
* auch flexible und &amp;quot;starr-flexible&amp;quot; Platinen&lt;br /&gt;
* Standort: Niederlande&lt;br /&gt;
&lt;br /&gt;
==== AISLER ====&lt;br /&gt;
Homepage: https://aisler.net&lt;br /&gt;
&lt;br /&gt;
Günstige Platinen made in Germany&amp;lt;br /&amp;gt;&lt;br /&gt;
Komplett-Dienstleister, Bauteile und Stencils können direkt mit bestellt werden.&lt;br /&gt;
&lt;br /&gt;
* Leiterplatten ohne Mindestgröße&lt;br /&gt;
* Keine Mindestbestellmenge, günstige Preise&lt;br /&gt;
* Produktion vollständig mit deutschem Fertiger in Industriequalität&lt;br /&gt;
* Standardmäßig ENIG-Finish, FR4 und TG150 Material&lt;br /&gt;
* Innenfräsungen bis 0,8mm möglich&lt;br /&gt;
* Langlöcher Durchkontaktiert und Nicht-Durchkontaktiert werden unterstützt&lt;br /&gt;
* 1- und 2-Layer Platinen (35µ Kupferstärke), 4-Layer auf Anfrage&lt;br /&gt;
* Platinen werden gefräst, nicht geritzt&lt;br /&gt;
* Weißer Bestückungsdruck Ober- und Unterseite inklusive&lt;br /&gt;
* Online Visualisierung aller Fertigungsdaten&lt;br /&gt;
* Anpassung der Fertigungsdaten ohne Lieferzeitverzögerung auch nach Bestellung noch möglich&lt;br /&gt;
* Abnahme immer in dreier-Stückzahl&lt;br /&gt;
* Einfache Bezahlung u.a. mit Paypal, Sofort Überweisung, Banktransfer, Kreditkarte, oder Bitcoin&lt;br /&gt;
* Versandkosten: unversichert inklusive,  ab 12 EUR via FedEx&lt;br /&gt;
* Elektropolierte Stencils ab 5 EUR&lt;br /&gt;
&lt;br /&gt;
==== Ätzwerk GmbH ====&lt;br /&gt;
Homepage: https://www.aetzwerk.de&lt;br /&gt;
&lt;br /&gt;
Eigendarstellung:&lt;br /&gt;
* Lötstopp doppelseitig, Bestückungsdruck einseitig, Stuktur&amp;gt;0,15mm, Bohrungen&amp;gt;0,3mm, E-Test, ab 7 AT Standard&lt;br /&gt;
** Prototypen 1 Lage oder 2 Lagen durchkontaktiert ab 39,05€ zzgl. MwSt // 46,47€ inkl. MwSt.&lt;br /&gt;
** Prototypen 4 Lagen ab 69,25€ zzgl. MwSt. // 85,41€ inkl. MwSt.&lt;br /&gt;
** Prototypen 6 Lagen ab 99,40€ zzgl. MwSt. // 118,29€ inkl. MwSt.&lt;br /&gt;
* Liefert auch an private Abnehmer&lt;br /&gt;
* SMD-Pastenschablonen ab 33,95€ zzgl. MwSt. // 40,40€ inkl. MwSt.&lt;br /&gt;
* Expressfertigung&lt;br /&gt;
* Abholung möglich&lt;br /&gt;
* Versandtag ist letzter AT&lt;br /&gt;
&lt;br /&gt;
Erfahrungen:&lt;br /&gt;
* verschicken unaufgeforderte Newsletter&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/246385 Diskussionsfaden &amp;quot;Ätzwerk GmbH&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==== am2s ====&lt;br /&gt;
Homepage: http://www.am2s.de&lt;br /&gt;
* Leiterplatten (Prototypen und Kleinserien, bis hin zur Großserie)&lt;br /&gt;
* Eildienst möglich&lt;br /&gt;
* Ein- und doppelseitige Leiterplatten, Multilayer. &lt;br /&gt;
* Layoutservice&lt;br /&gt;
* günstige Preise&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* Lieferzeit ab 3 AT&lt;br /&gt;
&lt;br /&gt;
==== andus electronic ====&lt;br /&gt;
Homepage: http://www.andus.de&lt;br /&gt;
* Prototypen Fertigung&lt;br /&gt;
* Top Qualität&lt;br /&gt;
* Top Service&lt;br /&gt;
* Vergleichsweise Teuer&lt;br /&gt;
&lt;br /&gt;
==== ANTtronic ====&lt;br /&gt;
Homepage: http://www.anttronic.de/pcb/ früher: http://www.gsel.de&lt;br /&gt;
* gute Preise, aber Lieferzeit beachten!&lt;br /&gt;
* 1 Europlatine einseitig kein Lötstoplack 17€ inkl. MwSt +7€ Versand&lt;br /&gt;
* 1 Europlatine doppelseitig &#039;&#039;nicht durchkontaktiert&#039;&#039; kein Lötstoplack 23€ inkl. MwSt +7€ Versand; 2Stück 37€&lt;br /&gt;
&lt;br /&gt;
==== Basista Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.basista.de&lt;br /&gt;
&lt;br /&gt;
Eigendarstellung:&lt;br /&gt;
* Aktuelles Angebot: Eine Lp 100x100mm, doppelseitig, grün, RoHS-konform, mit E-Test, 10AT &#039;&#039;&#039;29,75€&#039;&#039;&#039; inkl. MwSt. ohne Versand &lt;br /&gt;
* Eurokarte doppelseitig ab 56.93€ inkl. MwSt und Versand /  + Best.Druck Top 73.59€ inkl. MwSt. und Versand&lt;br /&gt;
* Onlinekalkulator für 1-6 Lagen Prototypen, Serien bis 8 Lagen&lt;br /&gt;
* Fertigung ab 1 Stück (min. 1dm²)&lt;br /&gt;
* Prototypen in den Farben grün, weiß, schwarz, rot, blau, grau, ohne Lack&lt;br /&gt;
* Eilservice ab 8 Std., 1-6 Lagen&lt;br /&gt;
* Letzter Arbeitstag = Versandtag &lt;br /&gt;
* Prototypen standardmäßig chemisch zinnbehandelt, weitere Oberflächen auf Anfrage&lt;br /&gt;
* Verkauf auch an privat&lt;br /&gt;
* Prototypen FR4 35µm Cu mit Materialdicke 0.35mm-2mm, weitere Stärken, Kupferdicken und Sondermaterialien auf Anfrage&lt;br /&gt;
* Eventuelle Überproduktion wird kostenfrei mitgeliefert &lt;br /&gt;
&lt;br /&gt;
Erfahrungen:&lt;br /&gt;
* Preise OK&lt;br /&gt;
* Früher geliefert ohne Aufpreis (7 statt 10 AT)&lt;br /&gt;
* Qualität OK&lt;br /&gt;
* Onlinekalkulator&lt;br /&gt;
* 100x160mm, zweiseitig, durchkontaktiert, mit Lötstop, 8AT, 82€&lt;br /&gt;
&lt;br /&gt;
==== Bauer-Elektronik ====&lt;br /&gt;
Homepage: http://www.bauer-leiterplatten.de&lt;br /&gt;
* Eurokarte doppelseitig für 61€ inkl. MwSt 8AT Lieferzeit / Stopplack +10% / Best.Druck +10%&lt;br /&gt;
* Prototypen aktivzinnbehandelt, dieses lässt sich laut Firmenangaben noch nach Jahren löten&lt;br /&gt;
* Eildienst 2h: Versand am selben Tag bei Einsendung bis 13:00 400€ für 2dm²&lt;br /&gt;
&lt;br /&gt;
==== Britze ====&lt;br /&gt;
Homepage: http://www.britze.de&lt;br /&gt;
* Leiterplatten in kleinen und mittlere Serien&lt;br /&gt;
* Musterleiterplatten / Prototypen&lt;br /&gt;
* 1- und 2-lagige Leiterplatten&lt;br /&gt;
* Multilayer bis 10 Lagen&lt;br /&gt;
* Aluminiumträgerleiterplatten&lt;br /&gt;
* &#039;&#039;Online-Kalkulator&#039;&#039; für Multinutzen und Leiterplatten&lt;br /&gt;
* Beratung/Layout/Entflechtung von Leiterplatten&lt;br /&gt;
* 100x160mm, zweiseitig, durchkontaktiert, mit Lötstop, 10AT, 73€&lt;br /&gt;
* scheint auch an privat zu liefern&lt;br /&gt;
&amp;quot;Seit dem 17.9.2012 werden alle Leiterplatten von Britze durch die Firma LeitOn GmbH vertrieben, mit der schon eine langjährige Zusammenarbeit besteht.&amp;quot; Bestellungen direkt bei britze.de offenbar nur noch für Bestandskunden möglich.&lt;br /&gt;
&lt;br /&gt;
==== B&amp;amp;B Sachsenelektronik GmbH ====&lt;br /&gt;
Homepage: http://www.bb-gruppe.de&lt;br /&gt;
* Klein- und Musterserien, Spezialist Sondertechniken&lt;br /&gt;
* Zusätzliche Partner für Großserien in Asien mit eigenen Mitarbeitern&lt;br /&gt;
* Ein- und Doppelseitige Leiterplatten&lt;br /&gt;
* Multilayer&lt;br /&gt;
* Schleifringe&lt;br /&gt;
* Starrflex&lt;br /&gt;
* Hochstromleiterplatte&lt;br /&gt;
* Dickkupfer&lt;br /&gt;
* Flexlam&lt;br /&gt;
* Dünnstleiterplatte&lt;br /&gt;
* IMS&lt;br /&gt;
* HDI Leiterplatte&lt;br /&gt;
* E-Test inklusive&lt;br /&gt;
* Datenformate: Ger­ber, Eagle, Excel­lon, Sieb &amp;amp; Meier&lt;br /&gt;
* Eildienst möglich&lt;br /&gt;
* Abrufeinteilung und Konsignationslager möglich&lt;br /&gt;
* Standort: 09648 Mittweida/Sachsen&lt;br /&gt;
&lt;br /&gt;
==== Becker und Müller ====&lt;br /&gt;
Homepage: https://www.becker-mueller.de&lt;br /&gt;
* Online Kalkulator (2Lagen, 4 Lagen, 6 Lagen)&lt;br /&gt;
* Sonderbauformen (Alu, etc.) möglich&lt;br /&gt;
* Qualität gut&lt;br /&gt;
* Hochfrequenzschaltungen&lt;br /&gt;
* Eildienst möglich&lt;br /&gt;
* Schablonenpreis: 59 € (netto) plus 8 € Porto&lt;br /&gt;
&lt;br /&gt;
==== Contag====&lt;br /&gt;
Homepage: http://www.contag.de&lt;br /&gt;
* schnell, ab 4 Stunden&lt;br /&gt;
* aber auch sehr teuer&lt;br /&gt;
* Qualität sehr gut&lt;br /&gt;
* jede Kalkulation erst nach Kontoeinrichtung bzw. Anmeldung&lt;br /&gt;
&lt;br /&gt;
==== Christian Enzmann Gmbh ====&lt;br /&gt;
Hompage: http://www.enzmann.de&lt;br /&gt;
&lt;br /&gt;
Prototypen&lt;br /&gt;
* Schnelle Reaktion auf individuelle Kundenwünsche&lt;br /&gt;
* Liefertermine werden eingehalten&lt;br /&gt;
Serienfertigung&lt;br /&gt;
* gefertigten Prototypen sollen später in Produktion von Großserien gehen&lt;br /&gt;
* Kunden können mit großen Stückzahlen versorgt werden&lt;br /&gt;
&lt;br /&gt;
==== Deutschlaender Electronic GmbH ====&lt;br /&gt;
Homepage: http://www.deutschlaender.net&lt;br /&gt;
* Leiterbahnbreite und -abstand ab 100 µm&lt;br /&gt;
* Bohrdurchmesser (Endmaß) ab 0,2 mm&lt;br /&gt;
* Sacklöcher, Halblöcher, Tiefenfräsung&lt;br /&gt;
* Materialstärke ab 0,5 mm bis 2,4mm&lt;br /&gt;
* Kupferauflagen: 35 µm, 70 µm, 105 µm,145 µm und 235 µm&lt;br /&gt;
* Hoch-Tg oder Aluminiummaterial&lt;br /&gt;
* Fotosensitiver Lötstoplack (grün,schwarz,rot und weiß)&lt;br /&gt;
* Bestückungsdruck (weiß,gelb,schwarz und rot)&lt;br /&gt;
* Carbondruck (Kontaktflächen)&lt;br /&gt;
* Abziehlack&lt;br /&gt;
* Viadruck&lt;br /&gt;
* Konturfräsen&lt;br /&gt;
* Schlitze fräsen - auch durchkontaktiert&lt;br /&gt;
* Kerb Ritzen für Kontur, Sollbruchstellen, Sprungritzen&lt;br /&gt;
* Kontur anfasen, z.B. für Steckerkamm&lt;br /&gt;
* Oberflächenveredelung:&lt;br /&gt;
** HAL bleifrei / PbSn&lt;br /&gt;
** Chemisch Nickel/Gold(Ni/Au)&lt;br /&gt;
** Chemisch Zinn (Sn)&lt;br /&gt;
** Galvanisch Nickel/Gold (Ni/Au, Hartgold)&lt;br /&gt;
* Datenformate: Ger­ber, Eagle, Target, Autocad, Excel­lon, Sieb &amp;amp; Meier&lt;br /&gt;
* Eildienst möglich (3AT/5AT/7AT)&lt;br /&gt;
&lt;br /&gt;
==== EPN Electroprint GmbH ====&lt;br /&gt;
Homepage: http://www.epn.de&lt;br /&gt;
* 8 Tage Lieferzeit, Eilservice 24h auch möglich&lt;br /&gt;
* Single-Layer, Multi-Layer (bis 22 Lagen als Spezialanfertigung!), Dickkupfer&lt;br /&gt;
* Verzinnung: Hot-Air-Leveling oder chemisch Zinn&lt;br /&gt;
* Lötstopplack verschiedene Farben nach Absprache möglich&lt;br /&gt;
* Stencil-Fertigung kostet zusätzlich 41,65 € (netto)&lt;br /&gt;
* Thüringer Staatspreis für Qualität&lt;br /&gt;
* Standort: Neustadt an der Orla/Thüringen&lt;br /&gt;
&lt;br /&gt;
==== Elischer Leiterplatten ====&lt;br /&gt;
mailto:aurel-elischer@t-online.de&lt;br /&gt;
* Firmensitz / Post-Adresse: Dipl.-Ing. Aurel Elischer, Leiterplatten, Am Forst 7, 72574 Bad Urach, Tel. 07125/4498, Ust.Id.-Nr.: DE 223 09 4959&lt;br /&gt;
* Layoutentwurf, LP Entwicklung, herstellen, bestücken, löten, prüfen&lt;br /&gt;
* 3 KW Lieferzeit (nach Vereinbarung auch kürzer)&lt;br /&gt;
* sehr gute Preise, Qual.1A&lt;br /&gt;
* einen Preis zu nennen, wäre Unfair. Es ist abhängig davon ob:&lt;br /&gt;
** 1 oder 2-seitig&lt;br /&gt;
** Leiterbahnenabstand und Lötflächenanstände größer als 0,3 mm&lt;br /&gt;
** Cu 30, 70, 110 µm&lt;br /&gt;
** Stärke der LP 1,0; 1,6; 2,0; ... mm&lt;br /&gt;
** mit (1- oder 2-seitig, grün, blau, weiß, schwarz,...)oder ohne Beschriftung&lt;br /&gt;
** mit oder ohne Stoplack&lt;br /&gt;
** gefräst oder nur geritzt&lt;br /&gt;
** einzeln oder X-Fach-Montage&lt;br /&gt;
* unbedingt Gerber 274X und Exellon für die Anfrage (Angebot kostenlos) beifügen; keine Angst: Gerber 274X und Exellon kann man aus jedem Programm generieren&lt;br /&gt;
&lt;br /&gt;
==== Elk Tronic ====&lt;br /&gt;
Homepage http://www.elk-tronic.de&lt;br /&gt;
* Entwicklung und Fertigung von Kleingeräten und Kleinserien&lt;br /&gt;
* Verkauf von IC-Adaptern und Bauteilen&lt;br /&gt;
&lt;br /&gt;
==== Eurocircuits GmbH ====&lt;br /&gt;
Hompage: http://www.eurocircuits.de&lt;br /&gt;
* ideal für kleine Stückzahlen ab 1 Stück&lt;br /&gt;
* Lieferzeit ab 2 AT&lt;br /&gt;
* gute Preise bei Prototypen aber auch bei mittleren Stückzahlen&lt;br /&gt;
* Online Datenvisualisierung und DRC Check&lt;br /&gt;
* SMD - Schablonen&lt;br /&gt;
* Preisberechnung eindeutig ohne versteckte Kosten&lt;br /&gt;
* Online-Preisberechnung (PCB oder Schablone) erst nach Anmeldung (und ggf. zusätzlicher Kontoeinrichtung)&lt;br /&gt;
* Europakarte &amp;quot;naked proto&amp;quot;, 2-lagig, 40.38€ (2016-07-17)&lt;br /&gt;
* Europakarte mit Lack und Druck, 2-lagig, 70,07€ (2016-07-17)&lt;br /&gt;
&lt;br /&gt;
==== Entwicklung &amp;amp; CNC (gewerblich) ====&lt;br /&gt;
Hompage: http://www.entwicklung-cnc.de&amp;lt;br&amp;gt;&lt;br /&gt;
mailto:julian.huesing85@googlemail.com&lt;br /&gt;
* Europlatine 100x160 1 bis 2 Seitig ca. 20-40€ (Berechnung Maschinenzeit)&lt;br /&gt;
* Auch große Platinen möglich.&lt;br /&gt;
* Isolationsbreiten abhängig vom Stichel: minimale Isolationsbreite ca. 0,15 mm&lt;br /&gt;
* Bohr und Fräsarbeiten, auch aufwändige Konturen realisierbar&lt;br /&gt;
* Lieferzeit 8AT, ansonsten Aufpreis bei schnellerer Lieferung&lt;br /&gt;
* CNC Fräsarbeiten in PCB, Alu, Holz, Kunststoff, GFK, etc. max. Verfahrwege: 1150x720mm (Fräsmaschine: BZT PFE1000)&lt;br /&gt;
* Fertigung erfolgt auf Rechnung mit ausgewiesener Mehrwertsteuer&lt;br /&gt;
* USt-IdNr.: DE293952582&lt;br /&gt;
&lt;br /&gt;
==== Fischer Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.fischer-leiterplatten.de&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, ohne Bestückungsdruck für 46,41€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, Best.-Druck top oder bottom für 58,31€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* 1 Europlatine inkl. Lack, E-Test, Best.-Druck doppelseitig für 117,81€ inkl. MwSt in 10 Tagen + Versand&lt;br /&gt;
* max. 4 lagig&lt;br /&gt;
* Bestückungsdruck doppelseitig&lt;br /&gt;
* Bohrungen no limit&lt;br /&gt;
* min Clearance 0,15mm (Standard)&lt;br /&gt;
* min Bohrdurchmesser 0,3mm (Standard)&lt;br /&gt;
* Gerber/Eagle/Protel/Target&lt;br /&gt;
* mehrere Leiterplatten können auf einer Europakarte, zum Preis einer Europakarte, zusammengefasst werden und werden automatisch vereinzelt.&lt;br /&gt;
* Überlieferung wird kostenlos beigelegt. (Sprich: in der Regel werden mehr Leiterplatten geliefert als bestellt.)&lt;br /&gt;
* Verkauf nur an Gewerbetreibende (aber es wird kein Gewerbenachweis verlangt ;) )&lt;br /&gt;
* Erfahrungen: [http://www.mikrocontroller.net/topic/209947#2078731]&lt;br /&gt;
&lt;br /&gt;
==== GLS Leiterplatten-Service GmbH ====&lt;br /&gt;
Homepage: &amp;lt;strike&amp;gt;http://www.leiterplattenprototypen.de&amp;lt;/strike&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
(URL defekt am 16.3.2015, Redirect zur DeNIC).&lt;br /&gt;
&lt;br /&gt;
* Top Qualität (mittleres Preisniveau)&lt;br /&gt;
* Top Service&lt;br /&gt;
* Prüfung der Layoutdaten in der CAM&lt;br /&gt;
* Standardlieferzeit: 10 Arbeitstage&lt;br /&gt;
* Eilservice bis 3 Arbeitstage (mit Aufpreis)&lt;br /&gt;
* Oberfläche Standard: HAL bleifrei; aber auch z.&amp;amp;nbsp;B. chem. Gold, chem. Zinn und HAL bleihaltig&lt;br /&gt;
* einseitige, nichtdurchkontaktierte Leiterplatten &lt;br /&gt;
* durchkontaktierte Leiterplatten&lt;br /&gt;
* Multilayer: bis 8-Lagen&lt;br /&gt;
* bietet zusätzlichen Service rund um die Leiterplatte: Erstellung von Leiterplattenlayouts und Digitalisierung/Scannen von alten Fertigungsfilmen, Papierausdrucken oder vorhandenen Musterleiterplatten&lt;br /&gt;
* SMD Schablonen&lt;br /&gt;
* Prototypenfertigung bei Chemnitz&lt;br /&gt;
&lt;br /&gt;
==== HAKA Elektronik-Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.haka-lp.de&lt;br /&gt;
* Zwillingsangebot: 2 identische Europakarten für 50€ (durchkontaktiert, Lötstop, kein Bestückungsdruck, nur Eagle- oder Target-Dateien), auch hierbei kostenlose Duplizierung kleinerer Layouts&lt;br /&gt;
* Zwillingsangebot: 2 identische Doppel-Eurokarten (200x160) für 90€, gleiche Bedingungen wie oben&lt;br /&gt;
* Prototypenangebot (min. Abstand 0,15 mm, min. Leiterbahnbreite 0,15 mm, kleinste Bohrung 0,3 mm, durchkontaktiert, Lötstop), 160x100mm in 2AT = 260EUR .. 8AT = 72 EUR .. 15AT = 63 EUR&lt;br /&gt;
* bei Platinen kleiner 1 qdm gibt es entsprechend mehr ohne Aufpreis&lt;br /&gt;
* Lieferzeit ab 3 Werktage; Achtung: Lieferzeit sind nur Circa-Werte und nicht verbindlich. Auch bei Aufpreis (AGB)!&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
&lt;br /&gt;
==== LED-Hobby ====&lt;br /&gt;
Homepage: http://www.led-hobby.de (ebay-Shop)&lt;br /&gt;
* keine Platinen&lt;br /&gt;
* SMD Bestückung, Reflowlöten, Lohnbestückung&lt;br /&gt;
* Laserschne​iden in Plexiglas, Acryl, Sperrholz&lt;br /&gt;
&lt;br /&gt;
==== IBR Leiterplatten GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.ringler.de&lt;br /&gt;
* sehr freundlicher und kompetenter Service&lt;br /&gt;
* reagiert sehr schnell&lt;br /&gt;
* Qualität TOP&lt;br /&gt;
* Preise TOP - günstige Einmalkosten/Setup&lt;br /&gt;
* kann auch Dinge wie Alu, Starrflex, fine pitch oder 0,1 er vias&lt;br /&gt;
* Lieferzeit ab 2 Tage&lt;br /&gt;
* 2 Lagen in 10 Tagen - 10 Lagen Multilayer ohne besondere Nachfrage binnen 18 Tagen geliefert&lt;br /&gt;
* liefert generell schneller als bestätigt / macht auch Rahmenaufträge&lt;br /&gt;
* Mehrmengen bei Prototypen werden kostenlos geliefert&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
&lt;br /&gt;
==== ILFA Feinstleitertechnik GmbH ====&lt;br /&gt;
Homepage: http://www.ilfa.de&lt;br /&gt;
&lt;br /&gt;
==== kessler systems GmbH ====&lt;br /&gt;
Homepage: http://www.kesslersystems.de&lt;br /&gt;
* Leiterplatten und Bestückung (Prototypen und Kleinserien, bis hin zur Großserie)&lt;br /&gt;
* Sehr schnell&lt;br /&gt;
* Ein- und doppelseitige Leiterplatten, Multilayer. &lt;br /&gt;
* Layoutservice&lt;br /&gt;
* SMD- und THT Bestückung&lt;br /&gt;
* Gerätebau&lt;br /&gt;
* günstige Preise&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* Lieferzeit an 3 AT&lt;br /&gt;
* Bauelementebeschaffung auch schon bei 1 Stück (super funktioniert)&lt;br /&gt;
&lt;br /&gt;
==== LEITON ====&lt;br /&gt;
Homepage: http://www.leiton.de &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.leiterplatten-online.de&lt;br /&gt;
* Flexible Leiterplatten online kalkulieren&lt;br /&gt;
* Alle Layouts werden in der CAM eingehend geprüft&lt;br /&gt;
* Schnellste Bearbeitung von Anfragen &lt;br /&gt;
* Diverse Spezialfertigungen (Aluminiumkern, HF, hoch-Tg etc.)&lt;br /&gt;
* Fließender Übergang vom Prototyp in die Serie möglich&lt;br /&gt;
* Niederlassungen in Hongkong &amp;amp; China für Großserien (LeitOn HK Ltd.)&lt;br /&gt;
* Relativ günstig&lt;br /&gt;
* bei mehreren kleinen Leiterplatten wird nach Gesamtfläche berechnet, nicht nach Mindestfläche x Mindestpreis x Stückzahl&lt;br /&gt;
* Gute Qualität&lt;br /&gt;
* Bis 8-lagig und ab 12 Std.&lt;br /&gt;
&lt;br /&gt;
==== Leiterplatten-Express-Service GmbH ====&lt;br /&gt;
Homepage: http://www.les-gmbh.com&lt;br /&gt;
&lt;br /&gt;
==== Microcirtec  ====&lt;br /&gt;
Homepage: http://www.microcirtec.de&lt;br /&gt;
* Direct - Online - Shop — zum Kalkulieren-Bestellen und Kaufen&lt;br /&gt;
* Mit Auftragsverfolgung per Online&lt;br /&gt;
* Vom Rapid Prototyping bis zur Rapid Mass-Production&lt;br /&gt;
* Qualität betrachten wir als selbstverständlich&lt;br /&gt;
* Allerdings ist die Anmelde-Prozedur ein Drama&lt;br /&gt;
* Preiswert&lt;br /&gt;
&lt;br /&gt;
==== MITTELSTAEDT Elektronik  ====&lt;br /&gt;
Homepage: http://www.me-berlin.de.de&lt;br /&gt;
* Ohne anzumelden Onlinekalkulieren, per eMail Bestellen und Kaufen&lt;br /&gt;
* Schnelle Lieferung in hoher Qualität&lt;br /&gt;
* Europakarte in 4 Tagen 44€&lt;br /&gt;
* SMD-Bestückung möglich&lt;br /&gt;
* Auch hohe Stückzahlen werden in Berlin gefertigt&lt;br /&gt;
&lt;br /&gt;
==== MME-Leiterplatten ====&lt;br /&gt;
Homepage: http://mme-pcb.de&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/73790 Thread &#039;MME-PCB, Erfahrungen&#039;](bereits 4 Jahre alt)&lt;br /&gt;
* Verkauft über seine Homepage (Onlinekalkulator)&lt;br /&gt;
* Europakarte: ES: 20,60 EUR, DSDK: 41,50 EUR&lt;br /&gt;
* Durchkontaktierung bei zweiseitigen Leiterplatten ist im Preis inbegriffen&lt;br /&gt;
* Trennen und Bohren inklusive&lt;br /&gt;
* Stopplack inklusive&lt;br /&gt;
* Bestückungsdruck (16€) kosten extra&lt;br /&gt;
* min. Abstand 0,20 mm,  min. Leiterbahnbreite 0,20 mm, kleinste Bohrung 0,4 mm&lt;br /&gt;
* Lieferzeit 8-12 Arbeitstage (bei mir waren es nur 5 Werktage)&lt;br /&gt;
* Überlieferung kostet nichts (häufig wird eine Leiterplatte mehr geliefert, bei mir waren es bei vier bestellten Platinen zwei mehr)&lt;br /&gt;
* Mit einer bestellten einseitigen Platine (DIL Bauteile) bin ich sehr zufrieden&lt;br /&gt;
* Die auf der Seite beworbene Lierferzeit wird meist eingehalten.&lt;br /&gt;
* Bis zu zehn unterschiedliche Karten können in einem Auftrag gepoolt werden -&amp;gt; preiswerter weil dm² kosten über alle gerechnet werden.&lt;br /&gt;
* Antwortet bei mir nicht auf emails, telefonisch kaum zu erreichen.&lt;br /&gt;
*Kommunikation hat sich erheblich verbesssert.&lt;br /&gt;
* Kommunikation wieder schleppend ( stand: August 2013 )&lt;br /&gt;
&lt;br /&gt;
==== M &amp;amp; V Leiterplatten - Vertriebs GmbH ====&lt;br /&gt;
Homepage: http://pcb-center.de früher: http://www.mvpcb.de/&lt;br /&gt;
* Bin sehr zufrieden, gute Preise, 10 - 14 Tage&lt;br /&gt;
* Top Qualität, nichts auszusetzen&lt;br /&gt;
* Qualität sehr gut, hohe Auflösung, auch SMD fine pitch möglich&lt;br /&gt;
* Eurokarte doppelseitig 2xStopplack FR4 bleifrei konturgefräst  63€ inkl. MwSt zzgl. Versand&lt;br /&gt;
* Eurokarte einseitig    1xStopplack FR4 bleifrei konturgefräst  44€ inkl. MwSt zzgl. Versand&lt;br /&gt;
&lt;br /&gt;
* Freundlicher Kontakt, Leiterplatten sehen gut aus, lieferten 6 Tage zu frueh!&lt;br /&gt;
* Bis zu fünf unterschiedliche Karten können in einem Auftrag gepoolt werden -&amp;gt; preiswerter weil dm² kosten über alle gerechnet werden.&lt;br /&gt;
&lt;br /&gt;
==== Multi Printed Circuit Boards Ltd. ====&lt;br /&gt;
Homepage: http://www.multi-cb.de&lt;br /&gt;
&lt;br /&gt;
Eigendarstellung:&lt;br /&gt;
* Online Kalkulator&lt;br /&gt;
* nur für Gewerbetreibende&lt;br /&gt;
* 1-48 Lagen Leiterplatten und SMD-Schablonen ab 48h&lt;br /&gt;
* Standard 2L &amp;amp; 4L: 5AT Produktionszeit, 6L &amp;amp; 8L: 6AT Produktionszeit&lt;br /&gt;
* Standard: 125µm Leiter, 0.2mm Bohren&lt;br /&gt;
* Inklusive: Kompletter Design-Rule-Check, Tooling, Lötstopp 2x grün, Posidruck 1x weiß&lt;br /&gt;
* Möglich: 75µm Leiter, Blind- &amp;amp; Buried Vias, 0.1mm Bohren, Dickkupfer, ...&lt;br /&gt;
* Diverse Spezialfertigungen wie Flex, Starrflex, Metallkern, HF, Hoch-Tg, etc.&lt;br /&gt;
* Impedanzkontrolle inkl. Testcoupon&lt;br /&gt;
* UL-Zertifizierung&lt;br /&gt;
&lt;br /&gt;
==== PCB Joker ====&lt;br /&gt;
Homepage: http://www.pcb-joker.com&lt;br /&gt;
* Poolkonzept extrem! &lt;br /&gt;
* 1- bis 4 Lagen Multilayer&lt;br /&gt;
* Allgemein schnell und geringe Terminzuschläge&lt;br /&gt;
* Leiterplatten werden bei verschiedenen deutschen Herstellern platziert&lt;br /&gt;
* Sehr günstig , sehr übersichtliche Onlinekalkulation&lt;br /&gt;
* Bezahlung per PayPal oder Vorkasse&lt;br /&gt;
* Farbe, Dicke, Kupferauflage und Oberfläche können nicht festgelegt werden, sondern sind &amp;quot;Joker&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== PCB Pool ====&lt;br /&gt;
Homepage: http://www.pcb-pool.de&lt;br /&gt;
Alternativname: BETA Layout&lt;br /&gt;
* Standort: Im Aartal 14, 65326 Aarbergen, [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=50.23705&amp;amp;lon=8.06361&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* ideal für einzelne Boards und Klein(st)serien&lt;br /&gt;
* Preise im üblichen Rahmen&lt;br /&gt;
* Günstigere Preise für 10er oder 20er Auflage&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* sehr kompetenter und freundlicher Service&lt;br /&gt;
* sehr gute Unterstützung bei Sonderwünschen&lt;br /&gt;
* Lieferzeit ab 2 AT&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
* Aktzeptieren von den gängigsten Layoutprogrammen die Boarddaten direkt. AUCH von KiCAD. Siehe http://www.pcb-pool.com/ppde/info_dataformat.html&lt;br /&gt;
* Bietet als Service das (Platz optimierte) Zusammensetzen verschiedener Platinen/Projekte. (Stichwort: Ausnutzen von konkaven Polygonen oder Platinen mit &amp;quot;Loch&amp;quot; durch andere Kleinstplatinen). Es können auch Projektdateien verschiedener Programme kombiniert werden (Dafür unbedingt manuelles Angebot per Mail einholen und als Kommentar anmerken. ACHTUNG: Der Online-Kalkulator erstellt hier pro Upload einen Auftrag! Daher für eine solche Kombination NICHT verwenden)&lt;br /&gt;
&lt;br /&gt;
==== Precoplat ====&lt;br /&gt;
Homepage: http://www.precoplat.de&lt;br /&gt;
&lt;br /&gt;
* Standort: [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.32818&amp;amp;lon=6.58062&amp;amp;layers=B000TT Oberdiessemer Str. 15, 47805 Krefeld]&lt;br /&gt;
* Prototypen, Großserien und alles dazwischen.&lt;br /&gt;
* Extrem flexibel im Angebot (Fläche/Lieferzeit, Blitz-Prototyping, Rapid-Mass-Produktion) &lt;br /&gt;
* Online Bestellung&lt;br /&gt;
* sehr gute Qualität&lt;br /&gt;
* bis 24 Lagen&lt;br /&gt;
* Mikro-Vias 100-200u&lt;br /&gt;
* Carbonlack&lt;br /&gt;
* Elektrischer Test (Flying probe + Nadelbett)&lt;br /&gt;
&lt;br /&gt;
==== Q-print/Q-PCB ====&lt;br /&gt;
Homepage: http://www.Q-PCB.de&lt;br /&gt;
* ideal für einzelne Boards und Klein(st)serien&lt;br /&gt;
* supergünstige Preise &lt;br /&gt;
* gute Qualität (u.U. Lötstop etwas unsauber)&lt;br /&gt;
* keine Zusatzpreise für 2x Lötstoplack o.ä.&lt;br /&gt;
* 150 µm kleinste Strukturbreite&lt;br /&gt;
* ohne Aufpreis bekommt man entweder HAL oder Ni/Au, gegen Aufpreis kann man aus einem von beiden wählen&lt;br /&gt;
* SMD-Schablonen&lt;br /&gt;
* Lieferzeit ab 4 AT&lt;br /&gt;
* Platine 50mm x 60mm, doppelseitig: ~45€ incl. Versand und ~5€ Nachnahme&lt;br /&gt;
* Platine 85mm x 58mm, doppelseitig: 33€ zzgl 6,80 Versand&lt;br /&gt;
* Platine 100mm x 160mm, doppelseitig: 49€ +7€ für Lötstopp +6,80€ Versand&lt;br /&gt;
&lt;br /&gt;
==== Richter Elektronik GmbH ====&lt;br /&gt;
Homepage: http://www.richter-leiterplatten.de&lt;br /&gt;
* Standort: Richter Elektronik GmbH, Hünegräben 6, D-57392 Schmallenberg&lt;br /&gt;
* Fertigungstechnologie: HAL, 70µ Endkupfer, chem. Oberflächen (z.B. chem Ni/Au +1AT), IMS-Leiterplatten&lt;br /&gt;
* Standard-Lieferzeit 1-6 Lagen: ab 6 AT&lt;br /&gt;
* Express-Lieferzeit 1-6 Lagen: ab 2 AT&lt;br /&gt;
&lt;br /&gt;
==== Rinde PCB GmbH ====&lt;br /&gt;
Homepage: http://www.rinde.de&lt;br /&gt;
* Mitglied der chinesischen Sunshine PCB Group&lt;br /&gt;
&lt;br /&gt;
==== Ruwel ====&lt;br /&gt;
Homepage: http://www.ruwel.com&lt;br /&gt;
* Standort: Am Holländer See 70, 47608 Geldern, [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.50451&amp;amp;lon=6.32046&amp;amp;layers=B000TT Link zur Openstreetmap Karte]&lt;br /&gt;
* Werke in Deutschland und China&lt;br /&gt;
* Überwiegend Großserien.&lt;br /&gt;
* Hochtemperatur, Dickkupfer, Kupferinlays, Semiflex, Sacklochbohren.&lt;br /&gt;
&lt;br /&gt;
==== SMTstencil (Großbritannien) ====&lt;br /&gt;
Homepage: http://smtstencil.co.uk&lt;br /&gt;
* SMD-Schablonen aus Polyester gelasert&lt;br /&gt;
* preiswert&lt;br /&gt;
* kleinste Strukturen 0,25 x 0,25 mm²&lt;br /&gt;
* kleinster Abstand 0,3 mm&lt;br /&gt;
&lt;br /&gt;
==== Steimer Leiterplatten GmbH ====&lt;br /&gt;
Homepage: http://www.steimer.de&lt;br /&gt;
&lt;br /&gt;
==== The PCB-Shop / Europrint Deutschland GmbH ====&lt;br /&gt;
Homepage: http://www.thepcbshop.com&lt;br /&gt;
* Punktabzug, da der Preisrechner nur mit Internet Explorer funktioniert&lt;br /&gt;
* gute Qualität&lt;br /&gt;
* guter Preis (inkl. gratis Überlieferungen - 30 kleine Platinen bestellt, 35 bekommen)&lt;br /&gt;
* wenig Statusinformationen (Link zur Statusseite kommt per Mail, dort ändert sich der Status und der Empfänger eigentlich täglich - ist aber trotzdem fristgerecht angekommen)&lt;br /&gt;
&lt;br /&gt;
==== Würth Elektronik GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.we-online.de&lt;br /&gt;
* gehört sicherlich nicht zu den preisgünstigsten&lt;br /&gt;
* kann Bauteile in der Leiterplatte fertigen (R, C, Potis u.a.)&lt;br /&gt;
* beherrscht Microvias in allen erdenklichen Varianten&lt;br /&gt;
* sehr kompetentes Ansprechpersonal&lt;br /&gt;
&lt;br /&gt;
==== Onlineshop WEdirekt ====&lt;br /&gt;
&amp;lt;!-- Benutzer:Bede hat diese Beitrag eingefügt und sonst nie etwas im Wiki geschrieben, daher höchstwahrscheinlich Spam. Daher positive Meinung entfernt --&amp;gt;&lt;br /&gt;
Homepage: http://www.wedirekt.de&lt;br /&gt;
* PCB&#039;s in Basistechnologie, 2-8 Lagen&lt;br /&gt;
* SMD Schablonen in allen Ausführungen&lt;br /&gt;
* Europlatine doppelseitig mit Lötstopplack 67€ inkl. MwSt&lt;br /&gt;
* Design- und Applikationsfachbücher rund um EMV&lt;br /&gt;
&amp;lt;!-- * online kalkulieren und bestellen&lt;br /&gt;
* günstig, super Qualität  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deutschland sehr günstige===&lt;br /&gt;
Diese Hersteller zeichnen sich durch einen sehr günstigen Preis von &#039;&#039;&#039;unter 30€ pro doppelseitiger Eurokarte&#039;&#039;&#039; aus und können (bis auf pcb-devboards) &#039;&#039;&#039;keine Durchkontaktierungen&#039;&#039;&#039; herstellen.&lt;br /&gt;
&lt;br /&gt;
==== EBC Utz Kohl ====&lt;br /&gt;
Homepage: [http://www.e-b-c-elektronik.de http://www.e-b-c-elektronik.de]&lt;br /&gt;
* recht einfach gehalten, daher wirklich günstig&lt;br /&gt;
* Ideal für den Bastler, denen es auf den Preis ankommt&lt;br /&gt;
* Geätzt einseitig 100 x 100mm 15,- EUR &lt;br /&gt;
* Geätzt einseitig Euroformat 160 x 100mm 24,- EUR &lt;br /&gt;
* Geätzt doppelseitig Euroformat 160 x 100mm 38,40 EUR&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt;0.3/0.3mm; Bohrdurchmesser = 0.8mm; Bohrrestring &amp;gt;? = D-d; Leiterplattengröße &amp;lt;160x100mm?; ein- und doppelseitig&lt;br /&gt;
* doppelseitige Platinen sind nicht durchkontaktiert !&lt;br /&gt;
* eigentlich ein Ladengeschäft, versendet jedoch auch&lt;br /&gt;
&lt;br /&gt;
==== Platinenbelichter ====&lt;br /&gt;
Homepage: http://www.platinenbelichter.de&lt;br /&gt;
* eine doppelseitige Europlatine kostet 14,90 EUR Grundpreis + Bohrungen (Preis je Bohrung 0,026cent)&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt;0.18/0.18mm; Bohrdurchmesser &amp;gt;0.4mm; Bohrrestring &amp;gt;0.25mm = D-d; Leiterplattengröße &amp;lt;300x200mm; ein- und doppelseitig&lt;br /&gt;
* Lötstopplack grün auf anfrage möglich&lt;br /&gt;
* Scannservice&lt;br /&gt;
* Layoutherstellung vom Schaltplan bis zur fertigen Platine&lt;br /&gt;
&lt;br /&gt;
==== Platinendesign ====&lt;br /&gt;
Homepage: http://www.platinendesign.de&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt; 0.25/0.25mm; Bohrdurchmesser &amp;gt;?; Bohrrestring &amp;gt; 0.3mm = D-d; Leiterplattengröße &amp;lt; 300×200mm; ein- und doppelseitig&lt;br /&gt;
* eine doppelseitige Europlatine kostet 14 EUR Grundpreis + Bohrung 2cent + Optionen&lt;br /&gt;
* keine Durchkontaktierungen möglich&lt;br /&gt;
* Lötstopplack grün&lt;br /&gt;
* Lieferzeit von bis zu 8 Arbeitstagen nach Geldeingang&lt;br /&gt;
* Zeitweise geschlossen, Neueröffnung am 31.3.2013&lt;br /&gt;
&lt;br /&gt;
==== Ertürk Electronic ====&lt;br /&gt;
Website: http://www.erturk.de&lt;br /&gt;
&lt;br /&gt;
[mailto:info@erturk.de info@erturk.de]&lt;br /&gt;
* Wir rechnen nach dm², Platinenbestellung nur per E-Mail oder telefon möglich. E-Mails werden sehr schnell beantwortet!&lt;br /&gt;
* Platine 1seitig FR4, 10,00€/dm²&lt;br /&gt;
* Platine 2seitig FR4, 14,00€/dm²&lt;br /&gt;
* Kupfer-Endstärke 35µm oder 70µm oder 105µm&lt;br /&gt;
* Chemische Verzinnung optional erhältlich&lt;br /&gt;
* Geometrie: Leiterbahnabstand/-breite &amp;gt; 0,16/0,16mm; Bohrdurchmesser &amp;gt; 0,4mm; Bohrrestring &amp;gt;0,3mm, Leiterplattengröße &amp;lt; 220×330mm; ein- und doppelseitig &lt;br /&gt;
* Sehr hohe Qualität&lt;br /&gt;
* Bohrung möglich (ab 20 dm² CNC gesteuert), 0,03 Euro pro Bohrung&lt;br /&gt;
* Lieferzeit meistens nach Geldeingang oder bis 3 Arbeitstage&lt;br /&gt;
* Ab 15 Platinen sind Durchkontaktierungen, Lötstoplack, Bohrungen und Positionsdruck möglich (Lieferzeit bis zu 2 Wochen). Anfrage und Auftragsannahme nur mit Gerberdaten oder Eagle Daten möglich.&lt;br /&gt;
* Für ein Prototyp-Angebot reicht eine Eagle, Sprintlayout- Target3001 oder PDF-Datei schon aus. PDF muss im Maßstab 1:1 und schwarz/weiß sein&lt;br /&gt;
* Bestückung möglich (THT / SMD oder gemischt) SMD-Bestückung mit Reflow Verfahren!&lt;br /&gt;
* SMD Schablonenherstellung&lt;br /&gt;
* Verpackung und Versand von 0,00 bis 5,90 Euro innerhalb Deutschland egal wieviel Sie bestellen&lt;br /&gt;
* Mindestauftragsannahme ab 15,00 Euro Inklusiver Verpackung/Versand.&lt;br /&gt;
* Stand: Juli 2014&lt;br /&gt;
&lt;br /&gt;
==== Cadgrafik Bauriedl (nur Filme) ====&lt;br /&gt;
Homepage: [http://cadgrafik-bauriedl.de/leiterplattenfilme.htm]&lt;br /&gt;
* Überträgt Layouts auf hochwertige Folie/Film zum Selberätzen&lt;br /&gt;
* 24h Service &lt;br /&gt;
* 1,25 € / 100 cm² Film, 5,00 € Mindestbestellwert (Stand Mai 2016)&lt;br /&gt;
* 2 € Porto, Rollenversand teurer (Stand Mai 2016), Mindestsumme = 7€&lt;br /&gt;
&lt;br /&gt;
==== pcb-devboards.de ====&lt;br /&gt;
Leiterplatten-Service für immer eingestellt!!!&lt;br /&gt;
&lt;br /&gt;
Erfahrungsbericht von [http://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Voga2073 Voga2073]: sehr gute Qualität auch bei feinen Strukturen. Der Lötstoplack ist auflaminiert, aber sehr gut positioniert. Leider ist kein Bestückungsdruck möglich. Besonders hervorzuheben ist die Erstellungsdauer: montags bis 12 bestellt, am folgenden Samstag war der Brief in meinem Briefkasten (dies jetzt schon nach drei Bestellungen wiederholt so gelaufen). Preislich ist dieser Anbieter recht attraktiv, ich bin hierhin gewechselt, seit Jakob seine Preisstrategie verschlechtert hat und ich werde wohl bei diesem Anbieter bleiben. Noch positiv zu erwähnen ist das Shopsystem, für jeden wesentlichen Schritt im Herstellungsprozess wird man benachrichtigt. Alles in allem ein sehr guter Anbieter.&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Einfacher, parametrisierbarer Preisvergleich für aktuell 21 weltweite Platinenhersteller (inkl. Abschätzung der Versandkosten): http://pcbshopper.com&lt;br /&gt;
&lt;br /&gt;
==== BILEX-LP (Bulgarien) ====&lt;br /&gt;
Homepage http://www.bilex-lp.com&lt;br /&gt;
* deutschsprechender Ansprechpartner&lt;br /&gt;
* liefern bleifreie Platinen(RoHs konform)&lt;br /&gt;
* 26€ für eine doppelseitige Eurokarte ohne Lack und Druck&lt;br /&gt;
* ca. 19 euro fuer eine 80x100mm 2-lagige Platine inkl. dukos &lt;br /&gt;
* Stencils ab &amp;lt;strike&amp;gt;15.00€&amp;lt;/strike&amp;gt; 41 € (netto), 25 € wenn mit Platine zusammen&lt;br /&gt;
* SMD- und THT Bestückung, Beschaffung der Bauteile&lt;br /&gt;
* Layoutservice &lt;br /&gt;
* Lieferzeit ab 3-4 AT &lt;br /&gt;
* insgesamt von 5 bis 7 AT Anlieferung bei Airmail (Porto ab 4,-Euro) &lt;br /&gt;
* FedEx wollte von Bulgarien aus ab 27,-Euro, 1-2AT), DHL ab 20,-Euro, besser DHL nehmen&lt;br /&gt;
* Löcher größer 6 mm wurden nicht gebohrt, sondern gefräst(gegen Anfrage)&lt;br /&gt;
* Berichtete Qualitätsmängel (in Einzelfällen): ausgefranste Platinenfräsung, Lötstoplack hebt ab(nur bei Sn-Pb beschichtung, nicht bei Ni-Au).&lt;br /&gt;
* Fräsungen müssen extra bestellt werden! Aber trotzdem günstig&lt;br /&gt;
&lt;br /&gt;
==== CUBE CZ s.r.o. (Tschechische Republik) ====&lt;br /&gt;
Homepage http://www.cube.cz&lt;br /&gt;
&lt;br /&gt;
* kein Termineinhaltung bei Eilservice - Lieferung hat sich durch wiederholte DRC Checks (dauern jeweils einen Tag) und Vorauskassa statt Zahlungsziel 20 Tage wie auf der Rechnung angegeben von 4AT auf 10AT verzögert&lt;br /&gt;
* Keine Design Rules auf der Homepage verfügbar&lt;br /&gt;
* UL Zertifikat aus 2001 für nur 6 Mil Traces&lt;br /&gt;
* für Deutsche Verhältnisse günstig&lt;br /&gt;
&lt;br /&gt;
==== LNAFIN (Finnland) ====&lt;br /&gt;
Homepage: http://electronics-pcb.com &amp;amp;nbsp;=&amp;gt;&amp;amp;nbsp; https://www.lnafin.com  &amp;lt;br&amp;gt; &lt;br /&gt;
Produkte: http://electronics-pcb.com/shop &amp;lt;br&amp;gt;&lt;br /&gt;
mailto:pcb@lnafin.com&lt;br /&gt;
* PCB Vertrieb mit Mikrowellenbereich und Multilagig HDI Kompetenz&lt;br /&gt;
* Leiterplatten fuer Industrie und auch als Kleinserien (kein MOQ)&lt;br /&gt;
* Elektronik und Layout Design Hilfe (bitte siehe Produkte)&lt;br /&gt;
* Auch ASIC design und PCBA (14 ASIC Erfahrung)&lt;br /&gt;
* Sicher Service auf Deutsch&lt;br /&gt;
&lt;br /&gt;
==== PIU-Printex (Österreich) ====&lt;br /&gt;
Homepage http://www.piu-printex.at&lt;br /&gt;
* Bei größeren Mengen (&amp;gt; 20 Stück, einseitig, viele Bohrungen) günstig&lt;br /&gt;
* Bearbeitung innerhalb 6 AT&lt;br /&gt;
* Telefonische Kontaktaufnahme bei Rückfragen&lt;br /&gt;
* Ich war sehr positiv überrascht.&lt;br /&gt;
&lt;br /&gt;
==== PRIONIK (Österreich) ====&lt;br /&gt;
Homepage: noch in Arbeit &amp;lt;br&amp;gt;&lt;br /&gt;
mailto:office@prionik.at&lt;br /&gt;
* Erstellung von hochwertigen Folien/Filmen zum selberätzen&lt;br /&gt;
* 1,25 € / 1dm² Film, 2,50 € Mindestbestellwert (Stand September 2013)&lt;br /&gt;
* 2 € Porto Österreich (Stand September 2013)&lt;br /&gt;
* 4 € Porto Deutschland (Stand September 2013) &lt;br /&gt;
* Leiterplattenfertigung auf Anfrage&lt;br /&gt;
&lt;br /&gt;
==== Ragworm (GB) ====&lt;br /&gt;
Homepage http://www.ragworm.eu&lt;br /&gt;
* &amp;quot;All-inclusive&amp;quot;-Angebot mit:&lt;br /&gt;
:*orangenem Lötstopplack&lt;br /&gt;
:*weißem Bestückungsdruck&lt;br /&gt;
:*(beides beidseitig)&lt;br /&gt;
:*2-lagig&lt;br /&gt;
:*internationalem Versand (bei mir 2 Tage, Luftpolsterumschlag)&lt;br /&gt;
:*Fräsen/Trennen&lt;br /&gt;
:*Check der Gerber-Daten (innerhalb von ein paar Stunden bei mir)&lt;br /&gt;
* 10 Stück 5x5: je Stück(!) 8,53 Pfund (~ 10,00€ 23.07.16)&lt;br /&gt;
* Kleine Platinen sehr günstig&lt;br /&gt;
* Bearbeitung innerhalb von 10 AT&lt;br /&gt;
* sehr schneller und netter Mail-Kontakt&lt;br /&gt;
* gratis Geschenk (bei mir eine 7*9cm große Experimentierplatine + 2 Sticker)&lt;br /&gt;
* es wird ein unauffälliger, kleiner, süßer Wurm (der Ragworm) auf den Lötstopp hinzugefügt&lt;br /&gt;
* Versandkosten (für Mini-Platine): GBP 3, werden jedoch anfangs nicht ausgewiesen, erst später bei Paypal nachgefordert&lt;br /&gt;
&lt;br /&gt;
==== The PCB Shop (Belgien) ====&lt;br /&gt;
Homepage http://www.thepcbshop.com&lt;br /&gt;
* Für einfache Sachen&lt;br /&gt;
* Preisrechner funktioniert nur mit IE&lt;br /&gt;
Sind weg, URL macht Redirect zu https://www.eurocircuits.com/&lt;br /&gt;
&lt;br /&gt;
==== Vi&amp;amp;Rus International (Bulgarien) ====&lt;br /&gt;
Homepage: http://www.vrint-pcb.com&lt;br /&gt;
* 160x100 für Euro 58,- incl. Express-Versand&lt;br /&gt;
* 3 (!) Arbeitstage&lt;br /&gt;
* RoHS, ENIG&lt;br /&gt;
* 2 Lagen, durchkontaktiert&lt;br /&gt;
* Lötstop beideitig&lt;br /&gt;
* Bestückungsdruck&lt;br /&gt;
* E-Test&lt;br /&gt;
* incl. Vereinzelungen (gefräst)&lt;br /&gt;
* incl. Versand (1 AT), also am 4. AT geliefert&lt;br /&gt;
* Erstklassige Qualität, auch bei Fine-Pitch; schneller, freundlicher Support.&lt;br /&gt;
&lt;br /&gt;
==== SET - Steiner Elektronik Technologie (Bulgarien) ====&lt;br /&gt;
Homepage: http://www.setpcb.bg und http://setgmbh.de&lt;br /&gt;
* Werk in Bulgarien&lt;br /&gt;
* Leiterplatten und Bestückung&lt;br /&gt;
* Standardlieferzeit: 8AT&lt;br /&gt;
* Gute Qualität, schneller unkomplizierter Support (deutsch und englisch)&lt;br /&gt;
&lt;br /&gt;
==== Multi Circuit Boards Ltd. (GB) ====&lt;br /&gt;
Homepage: http://www.multi-circuit-boards.eu&lt;br /&gt;
* Versand erfolgt aus Deutschland, Herstellung in GB&lt;br /&gt;
* nur für Gewerbetreibende&lt;br /&gt;
* Eurokarte doppelseitig mit Lötstopplack, Bestückungsdruck und E-Test in 6AT:  68,54€ inkl. MwSt&lt;br /&gt;
* Online Kalkulator&lt;br /&gt;
&amp;lt;!-- (wurde von &amp;quot;ordentlich&amp;quot; auf &amp;quot;hervorragend&amp;quot; vom einem sehr zufriedenen Kunden umgeändert oder vom Anbieter? Anbieter finden ihre Produkte hoffentlich alle hervorragend. &amp;quot;Sehr gute Qualität&amp;quot; nun ohnehin schon unten) * hervoragende Qualität bei gutem Preis  * interessant für Serien; neuer günstiger Service für Prototypen --&amp;gt;&lt;br /&gt;
* farbiger Lötstopplack und Bestückungsdruck möglich&lt;br /&gt;
* 48 Stunden Express&lt;br /&gt;
* Kompletter Design-Rule-Check der CAM-Daten&lt;br /&gt;
* Diverse Spezialfertigungen (Flex, Starrflex, Metallkern, HF, hoch-Tg, etc.)&lt;br /&gt;
* Sehr gute Qualität&lt;br /&gt;
* Liefertermine werden gerne etwas überschritten (auch bei Eilservice)&lt;br /&gt;
* Standard 125µm und 5 AT&lt;br /&gt;
&lt;br /&gt;
==== Euro PCB Ltd. (GB) - obsolet ====&lt;br /&gt;
Homepage http://www.europcb.com&lt;br /&gt;
* Günstige Leiterplatten&lt;br /&gt;
* Schnelle Lieferung&lt;br /&gt;
* Qualitativ OK&lt;br /&gt;
12.02.2012: Webseite ist leer;&lt;br /&gt;
2015: Webseite verweist auf http://www.multi-circuit-boards.eu&lt;br /&gt;
&lt;br /&gt;
==== Top-Tec-PCB (GB) - obsolet ====&lt;br /&gt;
&#039;&#039;&#039;Geschäftsbetrieb eingestellt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Homepage http://www.top-tec-pcb.com&lt;br /&gt;
* Günstig für Klein- bis Großserien&lt;br /&gt;
* Discount bei Nachbestellung&lt;br /&gt;
* sehr gute Technik (z.&amp;amp;nbsp;B. 100µm Bohren oder 75µm Leiterbahn)&lt;br /&gt;
* deutschsprechender Ansprechpartner&lt;br /&gt;
* liefern bleifreie Platinen (HAL, chem. Gold, Silber u. Zinn)&lt;br /&gt;
* 48h Eildienst&lt;br /&gt;
&lt;br /&gt;
==== OLIMEX Ltd. (Bulgarien) - obsolet ====&lt;br /&gt;
&#039;&#039;&#039;Zur Zeit keine PCB-Fertigung (07.01.2015, 3.2015)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Homepage http://www.olimex.com&lt;br /&gt;
&lt;br /&gt;
Habe mehrere Jahre bei Olimex meine Prototypen herstellen lassen. Stets saubere Arbeit erhalten. Bis ich denen mal falsche Gerber-Dateien zusandte. Als ich einige Stunden spaeter den Fehler bemerkt hatte, bat ich um Stornierung und Neuzusendung. Gegen ein zusaetzliches Entgelt wurde dies akzeptiert.&lt;br /&gt;
Die angesagten Zusatzkosten wurden zwar von mir nicht abgebucht, aber ich erhielt  1 Woche spaeter die anfaenglich falsch zugesandten PCB&#039;s.&lt;br /&gt;
Die Zusammenfassung des darauffolgenden Email-Verkehrs: Ein Schulterzucken seitens Olimex und die Bitte, eine neue, kostenpflichte Bestellung zu taetigen.&lt;br /&gt;
&lt;br /&gt;
=== USA ===&lt;br /&gt;
&lt;br /&gt;
==== OSH Park ====&lt;br /&gt;
Homepage: http://oshpark.com (USA)&lt;br /&gt;
* Vermittler und keine eigene Herstellung (&amp;quot;PCB pooling service&amp;quot;). Die Fertigung erfolgt in den USA.&lt;br /&gt;
* Ansicht der Platine nach Senden der Produktionsdaten und vor Bestellung.&lt;br /&gt;
* Nachfolger von BatchPCB.&lt;br /&gt;
* $5.00 pro Quadratzoll für drei Platinen inkl. Versand nach Deutschland. (2 Lagen, doppelseitiger Bestückungsdruck, Lila)&lt;br /&gt;
* An den Platinen sind noch Stege von der Fertigung, die sich allerdings gut entfernen lassen.&lt;br /&gt;
* Herstellung dauert meist ca. 1 Woche. &lt;br /&gt;
* Versand in der kostengünstigen Version nochmals ca. 2 Wochen. Schneller geht es mit Aufpreis.&lt;br /&gt;
* Auch Fertigung von 4 Layer und Kleinserien möglich.&lt;br /&gt;
* 2 Layer: Min. 0.15mm (6mil), Bohrung 0.33mm (13mil)&lt;br /&gt;
* 4 Layer: Min. 0.127mm (5mil), Bohrung 0.25mm (10mil)&lt;br /&gt;
* KiCad Dateien können direkt genutzt werden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erfahrungsbericht 2015-12&#039;&#039;&#039;&lt;br /&gt;
Hatte IS51 Platine als Eagle BRD Datei in Auftrag gegeben (100x80 2-Layer). Es werden immer 3 Stk. gefertigt.&lt;br /&gt;
Kosten ca. 60€ (aufgrund des aktuell fast 1:1 Kurses). Das ganze Bestellsystem auf der Webseite hat mit sehr gut gefallen. Vor der Bestellung bekommt man Ansichten der Platine (Top/Bottom/etc.) was grobe Fehler vermeiden sollte. Auch danach bekommt man per Mail Statuswechsel seiner Bestellung (in Arbeit; gefertigt; Versandstatus+Trackingnummer). Macht Alles einen wohldurchdachten und professionellen Eindruck!&lt;br /&gt;
Platinen kamen insgesamt nach ca. 2,5 Wochen (davon ca. 1 Woche Transport von USA nach DE+Zoll).&lt;br /&gt;
Die Platinen sehen sehr gut aus. Violetter Lötstoplack und vergoldete Pads. Qualität ist auch sehr gut.&lt;br /&gt;
Die Platinen hatten allerdings ein vom Layout verursachtes Problem. Es wurden SMD Widerstände verwendet, die&lt;br /&gt;
eine Ausfräsung im Milling-Layer hatten. Analyse wurde nach Ticketaufgabe durch OSHPark durchgeführt.&lt;br /&gt;
Dabei sehr nett, zügige Antworten und professionell. Obwohl der Fehler im Layout lag und nicht beim Fertiger,&lt;br /&gt;
wurde trotzdem eine Nachfertigung ohne Kosten auf Kulanzbasis durchgeführt!&lt;br /&gt;
&lt;br /&gt;
Also alles TOP! Nur mit der englischen Sprache sollte man gut zurecht kommen.&lt;br /&gt;
&lt;br /&gt;
==== PAD2PAD ====&lt;br /&gt;
Homepage http://www.pad2pad.com (USA)&lt;br /&gt;
* Bestücken die Platinen auch mit Digikey-Bauteilen.&lt;br /&gt;
&lt;br /&gt;
==== PCBPro ====&lt;br /&gt;
Homepage http://www.pcbpro.com (USA)&lt;br /&gt;
* Bei größeren Mengen (z.&amp;amp;nbsp;B. 100 Stück) sehr niedrige Preise&lt;br /&gt;
&lt;br /&gt;
==== San Francisco Circuits ====&lt;br /&gt;
Homepage https://www.sfcircuits.com (USA)&lt;br /&gt;
* Leiterplatten und Bestückung (Prototypen und Kleinserien, bis hin zur Großserie)&lt;br /&gt;
* Ohne Mindestgröße&lt;br /&gt;
* Flexible und &amp;quot;starr-flexible&amp;quot; Platinen&lt;br /&gt;
* [https://www.sfcircuits.com/pcb-production-capabilities/pcb-assembly PCB Assembly]&lt;br /&gt;
&lt;br /&gt;
=== China ===&lt;br /&gt;
&lt;br /&gt;
==== Fartai ====&lt;br /&gt;
Homepage http://www.fartai.de&amp;lt;br /&amp;gt;&lt;br /&gt;
* 2-20 Layer, Min. 0.15mm (6mil), Bohrer 0.2mm (8mil)&lt;br /&gt;
* Service in Deutschland&lt;br /&gt;
&lt;br /&gt;
==== CY industrial ====&lt;br /&gt;
Homepage http://www.cyindustrial.com/&amp;lt;br /&amp;gt;&lt;br /&gt;
Design rules http://www.cyindustrial.com/-ezp-26.html&lt;br /&gt;
&lt;br /&gt;
* 5 Stk. 10x10 cm, 2 Lagen: $45.00&lt;br /&gt;
* 1-24 Layer, Min. 0.075mm (3mil), Bohrer 0.1mm (4mil)&lt;br /&gt;
&lt;br /&gt;
==== dfrobot ====&lt;br /&gt;
Homepage http://www.dfrobot.com (China)&amp;lt;br /&amp;gt;&lt;br /&gt;
Design rules http://www.dfrobot.com/forum/viewtopic.php?f=13&amp;amp;t=1215#p6461&lt;br /&gt;
&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* 10Stk 5x5 cm 9.9USD =&amp;gt; 1USD/Stk&lt;br /&gt;
* 200Stk 5x5 cm 69.5USD =&amp;gt; 0.35USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 64.90USD =&amp;gt; 6.49USD/Stk&lt;br /&gt;
* 2-4 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== Dirtypcbs ====&lt;br /&gt;
Homepage http://dirtypcbs.com (China)&amp;lt;br /&amp;gt;&lt;br /&gt;
Design rules http://dirtypcbs.com/about.php&lt;br /&gt;
&lt;br /&gt;
* Mindestens 5Stk&lt;br /&gt;
* 2 Layer ca. 10Stk  5x5  cm $14&lt;br /&gt;
* 2 Layer ca. 10Stk 10x10 cm $25&lt;br /&gt;
* 4 Layer ca. 10Stk  5x5  cm $30 (nur grün)&lt;br /&gt;
* 4 Layer ca. 10Stk 10x10 cm $50 (nur grün)&lt;br /&gt;
* Versand: kostenlos 8 Wochen, DHL 30$ 9 Tage&lt;br /&gt;
* Thread: https://www.mikrocontroller.net/topic/362576#4071490&lt;br /&gt;
* 2-4 Layer, Min. 0.127mm (5mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== EasyEDA ====&lt;br /&gt;
Homepage https://easyeda.com/&lt;br /&gt;
* 1-6 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== Elecrow ====&lt;br /&gt;
Homepage http://www.elecrow.com/services-c-73.html (China)&lt;br /&gt;
&lt;br /&gt;
Design rules https://www.elecrow.com/News/How_to_export_gerber_file_for_PCB_fabrication_at_Elecrow/&lt;br /&gt;
&lt;br /&gt;
* Mindestens 5Stk&lt;br /&gt;
* Andere Farben ohne Aufpreis&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* 2 Layer 5Stk  5x5   cm $4.9&lt;br /&gt;
* 2 Layer 10Stk 10x10 cm $9.50&lt;br /&gt;
* Nutzen sind möglich: http://www.elecrow.com/blog/pcb-panelize/&lt;br /&gt;
* Thread mit Bildern: https://www.mikrocontroller.net/topic/319266&lt;br /&gt;
* 1-4 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== Gold Phoenix ====&lt;br /&gt;
Homepage http://www.goldphoenixpcb.biz (VR China)&lt;br /&gt;
* 2-4 Layer, Min. 0.127mm (5mil), Bohrer 0.2mm (8mil)&lt;br /&gt;
&lt;br /&gt;
==== ITead Studio PCB prototyping service ====&lt;br /&gt;
Homepage http://iteadstudio.com/store/index.php?main_page=index&amp;amp;cPath=19_20 (VR China)&lt;br /&gt;
* Sehr günstige Leiterplatten&lt;br /&gt;
* Relativ günstige Lieferung&lt;br /&gt;
* 10 Stück mit jeweils 5x5cm für 9,90€&lt;br /&gt;
* Qulität relativ gut&lt;br /&gt;
* 100% E-Test&lt;br /&gt;
* Teilweise Probleme mit Gerberdateien, die knapp am Limit (6 mil) sind&lt;br /&gt;
* Testvideo: [http://www.eevblog.com/2011/03/11/eevblog-155-itead-studio-pcb-prototype-goof/ EEVBlog #155]&lt;br /&gt;
* 1-2 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== MakePCB ====&lt;br /&gt;
Homepage http://www.makepcb.com (Shanghai, VR China)&lt;br /&gt;
* 1-10 Layer, Min 0.2mm (8mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
* Ich habe bei MakePCB Platinen geordert und als Zahlungsart Paypal angegeben. Die automatische Bestaetigung kam, es stand nochmal explizit drin dass ich Paypal als Zahlungsart gewaehlt habe und die Bemerkung, dass bei Zahlungsart Paypal in 2 Tagen eine Mail an die gleiche Adresse kaeme mit den Daten für Paypal. Naja, nach 4 Tagen war immernoch nichts da, ich habe denen eine Mail geschrieben und nochmal nach den &amp;quot;versprochenen&amp;quot; Paypaldaten gefragt. Drei Tage spaeter war immernoch nichts da, also habe ich die Bestellung abgebrochen. Am 8. Tag kam die Zahlungsforderung über Paypal, kein Wort der Erklaerung. Am 10. Tag kamen zwei identische Mails, die sagten man haette die PayPal-Zahlungsaufforderung schon geschickt. Irgendwas laeuft in dem Laden also schief.&lt;br /&gt;
* Weiterer Erfahrungsbericht zu MakePCB: Nach einiger Überlegung habe ich mich entschieden, es zu wagen, bei MakePCB Platinen zu bestellen. Meine Platine hatte halbes Euro-Format, aus Kostengründen habe ich gleich 5 Stück bestellt. Der gesamte Preis betrug ca. 45 €, Zahlung per PayPal funktionierte ohne Probleme. Auf der Internetseite von MakePCB wurde für die Produktion 14 Tage, für Shipment 10-14 Tage veranschlagt. Nach der Bestellung konnte ich den Status der Bestellung online in einer Tabelle einsehen. Nach etwas mehr als den veranschlagten 4 Wochen kamen heute die Platinen am. Die Verpackung wirkte nicht sehr professionell (gepolsterter Umschlag, auf den mit Filzstift meine Anschrift geschrieben war), nach dem Aufreissen des Umschlags hielt ich ein mehrfach mit gepolsterter Folie und Klebeband umklebtes Päckchen in der Hand. Erst als ich die Folie entfernt hatte kam eine professionell mit Luftpolsterfolie verschweisste Packung zum Vorschein. Die Platinen sehen, so weit ich bisher beurteilen kann, gut aus, lediglich der Bestückungsdruck ist ein wenig versetzt. Ein kurzer exemplarischer Test mit dem Multimeter sah auch in Ordnung aus. Alles in allem macht das Angebot, insbesondere zu dem Preis, einen echt guten Eindruck. Ich kann es nur empfehlen.&lt;br /&gt;
&lt;br /&gt;
==== PCBCart ====&lt;br /&gt;
Homepage http://www.pcbcart.com (China)&lt;br /&gt;
* auch kompliziertere Designs&lt;br /&gt;
* schnell und zuverlässig&lt;br /&gt;
* Eurokarte doppelseitig mit Lötstopp beidseitig und Bestückungsdruck kostet 60€ ohne MwSt +15€ Versand&lt;br /&gt;
* 2Stück 64€ ohne MwSt +15€ Versand&lt;br /&gt;
* 10Stück 90€ ohne MwSt +15€ Versand&lt;br /&gt;
* Eurokarte einseitig ohne Lötstopp und ohne Bestückungsdruck kosten 10Stück 71€ ohne MwSt +19€ Versand&lt;br /&gt;
* Preiskalkulation inzwischen auch ohne Anmeldung (18.12.2015)&lt;br /&gt;
* Update 30.5.2016:&lt;br /&gt;
** Minimum 5 Stück&lt;br /&gt;
** 5 Eurokarten doppelseitig mit Lötstopp beidseitig und Bestückungsdruck kosten $52.00 + Versand&lt;br /&gt;
** 10 Stück $76.00 + Versand&lt;br /&gt;
* 1-20 Layer, Min 0.06mm (2.36mil), Bohrer 0.2mm (8mil)&lt;br /&gt;
&lt;br /&gt;
==== PCBJoint ====&lt;br /&gt;
Homepage http://pcbjoint.com/&lt;br /&gt;
* 1-12 Layer, Min 0.075mm (3mil), Bohrer 0.1mm (4mil)&lt;br /&gt;
&lt;br /&gt;
==== PCBWay ====&lt;br /&gt;
Homepage [http://www.pcbway.com/setinvite.aspx?inviteid=4203 http://www.pcbway.com/]&lt;br /&gt;
* 1-10 Layer, Min. 0.1mm (4mil), Bohrer 0.2mm (8mil)&lt;br /&gt;
* 5 Stück Minimum&lt;br /&gt;
* 5 Eurokarten mit 2 Layern, Lötstopp usw., 6mil mit 0.3mm Löchern kosten 34 + 25 DHL = 59 us$&lt;br /&gt;
&lt;br /&gt;
==== WellPCB====&lt;br /&gt;
Homepage [https://www.wellpcb.com/user/login https://www.wellpcb.com/]&lt;br /&gt;
* 5 Stück Minimum&lt;br /&gt;
* Die Berechnung basiert auf folgendem Standard SPEC: Fertigungsstandard: IPC-Ⅱ, FR4-TG140,1-12 Schicht,Spurbreite / Raum: ≥4 / 4mils; Lochgröße ≥0,2mm, Plattendicke ≤1.6mm&lt;br /&gt;
&lt;br /&gt;
==== Seeed ====&lt;br /&gt;
Homepage http://www.seeedstudio.com (China)&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* 10Stk 5x5 cm 9.9USD =&amp;gt; 1USD/Stk&lt;br /&gt;
* 4 Lagig  5Stk 5x5 cm 39.90USD =&amp;gt; 8USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 49.90USD =&amp;gt; 5USD/Stk&lt;br /&gt;
* Blaue, weiße, rote, gelbe, schwarze platinen für 10USD Aufpreis&lt;br /&gt;
* Überproduktion wird mit geliefert, bei einer 2cmx1cm Platine wurden 24Stk anstatt 10Stk geliefert.&lt;br /&gt;
* Kostenloser Standardversand bei Bestellungen über 50USD&lt;br /&gt;
* 1-4 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
==== ShenZhen2u ====&lt;br /&gt;
Homepage http://www.shenzhen2u.com (China)&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Auch 6 lagige boards&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* Maximal 30x30cm&lt;br /&gt;
* 10Stk 5x5 cm 8.9 USD =&amp;gt; 0.9 USD/Stk&lt;br /&gt;
* 2 Lagig 500Stk 5x5 cm 139 USD =&amp;gt; 0.27 USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 33 USD =&amp;gt; 3.3 USD/Stk&lt;br /&gt;
* 1-6 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
* Dieser Eintrag wurde [http://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Shenzhen2u vom Hersteller] selbst erstellt.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: sehr günstige Preise, dafür hohe Versandkosten (&amp;quot;Swiss Post&amp;quot; 27 USD, keine kostenlose Versandoption)&lt;br /&gt;
&lt;br /&gt;
==== smart prototyping ====&lt;br /&gt;
Homepage: http://smart-prototyping.com (China)&lt;br /&gt;
* Mindestens 10Stk&lt;br /&gt;
* Größe in 5cm Preisrasterung&lt;br /&gt;
* Auch 6 lagige boards&lt;br /&gt;
* Maximal 40x40cm&lt;br /&gt;
* 10Stk 5x5 cm 8.9USD =&amp;gt; 0.9USD/Stk&lt;br /&gt;
* 500Stk 5x5 cm 132.92USD =&amp;gt; 0.27USD/Stk&lt;br /&gt;
* 4 Lagig 10Stk 5x5 cm 39.9USD =&amp;gt; 4USD/Stk&lt;br /&gt;
* 6 Lagig 10Stk 5x5 cm 239.9USD =&amp;gt; 24USD/Stk&lt;br /&gt;
* Lieferzeit ca. 10 Tage (Standardversand mit der Deutschen Post nach DE)&lt;br /&gt;
* Schnellere Bearbeitung bei Aufpreis möglich&lt;br /&gt;
* Eagle *.brd Dateien werden akzeptiert&lt;br /&gt;
* Design Rules für Eagle von der Homepage ladbar&lt;br /&gt;
* Problemloser und schneller Kontakt per Mail (englisch)&lt;br /&gt;
* 1-6 Layer, Min. 0.15mm (6mil), Bohrer 0.3mm (12mil)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== OurPCB ====&lt;br /&gt;
Homepage [https://www.ourpcb.com/user/login https://www.ourpcb.com/]&lt;br /&gt;
* Für 1-4 Schichten PCB-Prototypen kann der Kunde nach Erhalt bezahlen.&lt;br /&gt;
* Schichten: 1-32&lt;br /&gt;
* Fertiges Kupfer: 0.5-5oz&lt;br /&gt;
* Min. Line / Track Breite: 3mil.&lt;br /&gt;
* Min. Line / Track Raum: 3mil.&lt;br /&gt;
* Fertige Brett-Stärke: 0.2-5.0mm.&lt;br /&gt;
* Min. Fertiger Durchmesser der PTH-Bohrung: 0,2 mm.&lt;br /&gt;
&lt;br /&gt;
== Preisvergleichstabellen (Stand Februar 2010) ==&lt;br /&gt;
&lt;br /&gt;
Preise für 1, 2 Europlatinen (160x100), FR4 1.6mm, HAL bleifrei, 150µm Leiter, 0.3mm Bohren, doppelseitig, 8AT, kein Bestückungsdruck, inkl. MwSt, ohne Versand.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot; |Hersteller !!Preis (€) 1x !!Preis (€) 2x&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;3&amp;quot; |&#039;&#039;ohne Lötstopp, ohne E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Basista Leiterplatten&#039;&#039;&#039;|| 43,66 || 81,61&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT, immer mit LS.+E-T.)|| 46,41 || 73,07&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;HAKA Elektronik-Leiterplatten GmbH&#039;&#039;&#039;|| 64,54 || 106,13&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 54,98 || 104,51&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;MME-Leiterplatten&#039;&#039;&#039; (200µm Leiter)|| 41,44 || ?&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;PCB Pool&#039;&#039;&#039;|| 50,27 || 100,54&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Q-print/Q-PCB&#039;&#039;&#039;|| 55,62 || 95,89&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;3&amp;quot; |&#039;&#039;mit Lötstopp, mit E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Basista Leiterplatten&#039;&#039;&#039;|| 77,66 || 115,61&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT)|| 46,41 || 73,07&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 88,79 || 147,39&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Multi PCB Ltd. Leiterplatten&#039;&#039;&#039; (6AT)|| 78,06 || 156,13&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;M &amp;amp; V Leiterplatten - Vertriebs GmbH&#039;&#039;&#039;|| 62,83 || 125,66 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Onlineshop WEdirekt&#039;&#039;&#039;|| 128,75 || 172,38&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preise für 1, 2, 10 Europlatinen (160x100), FR4 1.6mm, HAL bleifrei, 150µm Leiter, 0.3mm Bohren, doppelseitig, 8AT, 1x Bestückungsdruck, 2x Lötstopp, E-Test, inkl. MwSt, ohne Versand.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Hersteller !! Preis (€) 1x !!Preis (€) 2x !!Preis (€) 10x !! Nachbest. (€) 10x&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; colspan=&amp;quot;5&amp;quot; |&#039;&#039;mit Lötstopp, mit Bestückungsdruck, mit E-Test&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Fischer Leiterplatten GmbH&#039;&#039;&#039; (10AT)|| 58,31 || 84,97 || 337,72 || 219,91 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;HAKA Elektronik-Leiterplatten GmbH&#039;&#039;&#039;|| 82,54 || 124,13 || 302,08 || 284,08 &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;LEITON&#039;&#039;&#039;|| 124,37 || 187,15 || 389,84 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Multi PCB Ltd. Leiterplatten&#039;&#039;&#039;|| 78,06 || 156,13 || 272,27 || 180,64&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;M &amp;amp; V Leiterplatten - Vertriebs GmbH&#039;&#039;&#039;|| 110,43 || 173,26 || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;PCB Pool&#039;&#039;&#039;|| 122,29 || 129,26 || 407,58 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Q-print/Q-PCB&#039;&#039;&#039;|| 96,80 || 166,90 || 834,48 || x &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left&amp;quot; |&#039;&#039;&#039;Onlineshop WEdirekt&#039;&#039;&#039;|| 145,18 || 190,64 || 379,49 || x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Kleinmengen ==&lt;br /&gt;
&lt;br /&gt;
Sollen nur wenige und/oder sehr kleine Platinen gefertigt werden,&lt;br /&gt;
verschieben sich sehr oft die Relationen.  Viele Fertiger haben auch&lt;br /&gt;
beim Pooling eine Mindestgröße, unter der der Preis nicht weiter&lt;br /&gt;
sinkt.  Die preiswerten Anbieter aus China wiederum bieten ihren&lt;br /&gt;
Service (unter anderem) dadurch recht preiswert an, dass sie in&lt;br /&gt;
starren Größen oder Größenrastern (bspw. Vielfache von 5 cm) und&lt;br /&gt;
Stückzahlen (5- oder 10-Stück-weise) arbeiten, außerdem kommt ein&lt;br /&gt;
vergleichsweise langer Versandweg hinzu.&lt;br /&gt;
&lt;br /&gt;
Für sehr wenige oder sehr kleine Platinen sind besonders die folgenden&lt;br /&gt;
Fertiger gut geeignet:&lt;br /&gt;
&lt;br /&gt;
* [[Platinenhersteller#AISLER|Aisler]] (Niederlande, Fertigung in Deutschland)&lt;br /&gt;
* [[Platinenhersteller#OSH_Park|Osh Park]] (USA)&lt;br /&gt;
* [[Platinenhersteller#Ragworm_.28GB.29|Ragworm]] (GB)&lt;br /&gt;
&lt;br /&gt;
Aisler und Osh Park fertigen dabei in Vielfachen von drei Stück, bei&lt;br /&gt;
Ragworm kann man auch komplette Einzelstücke fertigen lassen.  Alle&lt;br /&gt;
drei Anbieter skalieren auch mit kleinen Platinengrößen nach unten.&lt;br /&gt;
&lt;br /&gt;
== Lohnbestücker - Kleinserien ==&lt;br /&gt;
&lt;br /&gt;
=== Schweiz ===&lt;br /&gt;
&lt;br /&gt;
==== BLS-Electronics ====&lt;br /&gt;
Homepage: https://blselectronics.ch&lt;br /&gt;
&lt;br /&gt;
Mail: mailto:info@blselectronics.ch&lt;br /&gt;
* Prototypen und Kleinserien, grössere Stückzahlen auf Anfrage möglich&lt;br /&gt;
* BGA, QFN, TQPF, Fine Pitch, SMD bis 0402, THT&lt;br /&gt;
* &#039;&#039;&#039;Unkompliziert und Preisgünstig&#039;&#039;&#039;&lt;br /&gt;
* 3-5 Tage nach Eingang aller Bauteile wird versendet. &lt;br /&gt;
* Ingenieurverein und Fertigung in einem Haus: bei technischen Rückfragen stehen auch Entwickler zur Verfügung&lt;br /&gt;
* Materialbeschaffung möglich.&lt;br /&gt;
* Bestückung ab 1 Stück. &lt;br /&gt;
* Standort: Schweiz, Zug&lt;br /&gt;
&lt;br /&gt;
=== Deutschland ===&lt;br /&gt;
&lt;br /&gt;
==== PCB Pool ====&lt;br /&gt;
Homepage: http://www.pcb-pool.com/ppde/info_pcb_assembling.html&lt;br /&gt;
* Prototyp &amp;amp; Kleinserien, Größere Stückzahlen auf Anfrage&lt;br /&gt;
* SMD bis 0402, THT&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile &lt;br /&gt;
* Produktionsstandort: ??&lt;br /&gt;
&lt;br /&gt;
==== D-E-K Dischereit GmbH &amp;amp; Co. KG ====&lt;br /&gt;
Homepage: http://www.dischereit.de&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* SMD bis 0402, THT&lt;br /&gt;
* Bauteilbeschaffung&lt;br /&gt;
* Standort: Ascheberg, Coesfeld, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== kessler systems GmbH ====&lt;br /&gt;
Homepage: http://www.kesslersystems.de&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* BGAs&lt;br /&gt;
* macht auch Großserien&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile, Express möglich&lt;br /&gt;
* Standort: Königseggwald nähe Ravensburg, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== Kugel-Elektronik ====&lt;br /&gt;
Homepage: http://www.kugel-elektronik.de&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* SMD bis 0402, THT&lt;br /&gt;
* Bauteilbeschaffung&lt;br /&gt;
* Standort: Wickede (Ruhr), Deutschland&lt;br /&gt;
&lt;br /&gt;
==== enktro GmbH &amp;amp; Co. KG (ehemals =&amp;gt; PBS-Electronic) ====&lt;br /&gt;
Homepage: http://enktro.de (ehemals pbs-electronic.de, nur Umfirmierung)&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* BGA, QFN, TQPF, Fine Pitch, SMD bis 0402, THT&lt;br /&gt;
* Einzel IC Bestückung möglich&lt;br /&gt;
* Spezialist für LED Technik&lt;br /&gt;
* Standort: Arnsberg, Hochsauerland, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== riese electronic GmbH ====&lt;br /&gt;
Homepage: http://www.riese-electronic.de&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* BGAs inkl Röntgen&lt;br /&gt;
* macht auch Großserien&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile, Express möglich&lt;br /&gt;
* Standort: Horb am Neckar, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== Gardow Engineering ====&lt;br /&gt;
Homepage: http://www.gardow-engineering.de&lt;br /&gt;
* SMD ab 0201, THT, THR, Mischbestückung, BGA Bestückung &lt;br /&gt;
* ab 1 Stück bis zur Serie&lt;br /&gt;
* Frontplattenfertigung &lt;br /&gt;
* Materialbeschaffung, Lieferzeiten zwischen 1-6AT, niedrige Einmalkosten&lt;br /&gt;
* Onlinekalkulator zur schnellen Kostenermittlung &lt;br /&gt;
* http://www.gardow-engineering.de/leiterplattenbestückung/onlinekalkulation.html&lt;br /&gt;
* Standort: Nordheim bei Heilbronn, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== M.Richter GmbH&amp;amp;Co.&amp;amp;KG ====&lt;br /&gt;
Homepage: http://www.richter-pforzheim.de&lt;br /&gt;
* SMD ab0201, THT, THR, Mischbestückung&lt;br /&gt;
* ab 1 Stück bis zur mittleren Serie&lt;br /&gt;
* Wickeln von Sonderspulen und Kabelkonfektion &lt;br /&gt;
* Materialbeschaffung, Schnelldienste möglich&lt;br /&gt;
* Standort: Pforzheim, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== SYSTART GmbH ====&lt;br /&gt;
Homepage: http://www.systart.de&lt;br /&gt;
* Online-Kalkulator für Prototypen- und Kleinserienbestückung: http://www.systart.de/prototypen-kalkulator&lt;br /&gt;
* Größere Stückzahlen auf Anfrage&lt;br /&gt;
* 4 Tage ab Eingang aller Bauteile&lt;br /&gt;
* Günstige Einmalkosten&lt;br /&gt;
* SMD- und THT-Bestückung, beidseitig&lt;br /&gt;
* Gerätemontage&lt;br /&gt;
* Materialbeschaffung (falls gewünscht)&lt;br /&gt;
* Ingenieurbüro und Fertigung in einem Haus: bei technischen Rückfragen stehen auch Entwickler zur Verfügung&lt;br /&gt;
* Standort: Emmering bei München&lt;br /&gt;
&lt;br /&gt;
==== Traffitec ====&lt;br /&gt;
Homepage: http://www.traffitec.de&lt;br /&gt;
* Bestückt Prototypen, Kleinserien, Normalserien&lt;br /&gt;
* In THT, SMD und gemischt.&lt;br /&gt;
* und von allen Seiten&lt;br /&gt;
* Einpresstechnik&lt;br /&gt;
* Starrflex&lt;br /&gt;
* Komponentenbau&lt;br /&gt;
* Standort: [http://www.openstreetmap.de/karte.html?zoom=17&amp;amp;lat=51.6904&amp;amp;lon=6.14378&amp;amp;layers=B000TT Goch nähe Moers, Deutschland]&lt;br /&gt;
&lt;br /&gt;
==== VTS Elektronik GmbH ====&lt;br /&gt;
Homepage: http://www.vts-elektronik.de&lt;br /&gt;
* SMD bis 0402, BGA, THT auch gemischt und beidseitig&lt;br /&gt;
* Dampfphasenlöten&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* Komplette Materialbeschaffung&lt;br /&gt;
* Schnell und flexibel&lt;br /&gt;
* Standort: Fürstenau nähe Osnarbrück, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== JL-Elektronik ====&lt;br /&gt;
Homepage: http://www.jl-elektronik.de&amp;lt;br /&amp;gt;&lt;br /&gt;
mailto:info@jl-elektronik.de&lt;br /&gt;
* Prototyp, Kleinserien&lt;br /&gt;
* ab 1 Stück&lt;br /&gt;
* SMD bis 0402, THT, gemischt und beidseitig&lt;br /&gt;
* Keine Rüstkosten&lt;br /&gt;
* Express 24/48 Stunden möglich&lt;br /&gt;
* Baugruppen Rework&lt;br /&gt;
* Gerätemontage&lt;br /&gt;
* Standort: Rheinland Pfalz, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== Nover Elektronik GmbH ====&lt;br /&gt;
Homepage: https://www.nover-elektronik.de&lt;br /&gt;
* Ab 1 Stück bis zur Serie&lt;br /&gt;
* SMD-Bestückung bis 0201, BGA, THT-Bestückung auch gemischt und beidseitig&lt;br /&gt;
* 5-10AT ab Eingang aller Bauteile, Express möglich&lt;br /&gt;
* Komplette Materialbeschaffung möglich&lt;br /&gt;
* Günstige Einmalkosten&lt;br /&gt;
* Standorte: Seligenstadt und Dreieich, in der nähe von Frankfurt am Main, Deutschland&lt;br /&gt;
&lt;br /&gt;
==== HELL ELECTRONIC e.K. ====&lt;br /&gt;
Homepage: http://www.hell-electronic.de&lt;br /&gt;
* Prototypen, Kleinserien&lt;br /&gt;
* SMD bis 0402, THT, auch gemischt und beidseitig&lt;br /&gt;
* Günstige Einmalkosten&lt;br /&gt;
* Schnell und Flexibel&lt;br /&gt;
* Kabelkonfektion&lt;br /&gt;
* Gerätemontagen&lt;br /&gt;
* Standort: Geretsried, Deutschland&lt;br /&gt;
&lt;br /&gt;
=== International ===&lt;br /&gt;
&lt;br /&gt;
==== Kaufmann Automotive GmbH ====&lt;br /&gt;
Homepage: http://www.kaufmann-automotive.ch&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* BGA, QFN, TQFP, Fine Pitch, SMD bis 0402&lt;br /&gt;
* Prototyp, Kleinserien, Serie&lt;br /&gt;
* Komplette Materialbeschaffung&lt;br /&gt;
* Standort: Eichberg nähe Bregenz, Schweiz&lt;br /&gt;
&lt;br /&gt;
==== Profiants ====&lt;br /&gt;
Homepage: http://www.ProfiAnts.com&lt;br /&gt;
* SMD bis 0201, THT&lt;br /&gt;
* ab 1 Stück&lt;br /&gt;
* macht auch Großserien&lt;br /&gt;
* Komplette Materialbeschaffung&lt;br /&gt;
* 5 Tage ab Eingang aller Bauteile&lt;br /&gt;
* Standort: Bulgarien&lt;br /&gt;
&lt;br /&gt;
==== REDER Domotic GmbH ====&lt;br /&gt;
Homepage: http://reder.eu&lt;br /&gt;
* Prototypen, Kleinserie, Serie&lt;br /&gt;
* THT, SMD ab 0201 Baugröße&lt;br /&gt;
* Komplette Materialbeschaffung&lt;br /&gt;
* Prototypen über Nacht möglich&lt;br /&gt;
* riesen Vorteil: der Mann an der Maschine ist selbst Entwickler&lt;br /&gt;
* Standort: Berndorf, Österreich&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://www.cadsoft.de/services/board-houses/?language=de Übersicht von Cadsoft, sortiert nach PLZ]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/245590 Forum: Platinensammler - Leiterkarten für 30ct/cm²]&lt;br /&gt;
* [http://www.elektroniknet.de/anbieterkompass/produktuebersicht/?tx_wmvs_pi1%5Bid%5D=1130 Übersichtsseite von www.elektroniknet.de]&lt;br /&gt;
* [[Elektronikversender]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Platinen]]&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>Michelle</name></author>
	</entry>
</feed>